Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Diagnostics;
- using System.Linq;
- using System.Reflection;
- using Infrastructure.Constants.Settings;
- using Infrastructure.Enums;
- using Infrastructure.Helpers;
- using Prism.Mvvm;
- namespace Infrastructure.Models
- {
- [Serializable]
- public class GeneralSettings : BindableBase
- {
- /// <summary>
- /// Default Konstruktor - der die Default-Werte beinhaltet.
- /// </summary>
- public GeneralSettings()
- {
- //Default Werte Setzen
- StartUpLink = "";
- MySteamCommunityLink = "https://steamcommunity.com/profiles/76561198345631230";
- AutoLoadItems = true;
- MaxItemsToLoad = HiddenSettings.MAX_ITEMS_TO_LOAD;
- AutoLoadPrices = false;
- SkinbaronApikey = "";
- TradeLink = "";
- CountryCode = CountryCode.En;
- CountryName = CultureTools.GetCountryNameFrom(CountryCode);
- }
- /// <summary>
- /// Custom toString()-Methode über Reflection
- /// </summary>
- /// <returns>Gibt die zusammengesetzten Werte der privaten Felder bestehenden aus den Primitives, Strings oder Enums als String zurück</returns>
- public override string ToString()
- {
- var fields = GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
- var result = "ToString: " + fields.Where(field => field.FieldType == typeof(bool) || field.FieldType == typeof(string) || field.FieldType.IsPrimitive || field.FieldType.IsEnum).Aggregate("", (current, field) => current + field.Name + ": " + field.GetValue(this) + ", " + Environment.NewLine);
- if (result.Length > 0 && result[result.Length - 1] == ',')
- result = result.Substring(0, result.Length - 1);
- return result;
- }
- #region Setting-Properties
- #region StartUp
- private string _startUpLink;
- /// <summary>
- /// Der Link des Steam Profils das beim StartUp und betätigen des Show Inventory Buttons angezeigt wird.
- /// </summary>
- public string StartUpLink
- {
- get => _startUpLink;
- set => SetProperty(ref _startUpLink, value);
- }
- private bool _autoLoadItems;
- /// <summary>
- /// Ob die Items automatisch nach Programmstart geladen werden sollen.
- /// </summary>
- public bool AutoLoadItems
- {
- get => _autoLoadItems;
- set => SetProperty(ref _autoLoadItems, value);
- }
- #endregion
- #region InventoryView
- private int _maxItemsToLoad;
- public int MaxItemsToLoad
- {
- get => _maxItemsToLoad;
- set
- {
- SetProperty(ref _maxItemsToLoad, value);
- Debug.WriteLine("Maxitems Set To:" + _maxItemsToLoad);
- }
- }
- private bool _autoLoadPrices;
- public bool AutoLoadPrices
- {
- get => _autoLoadPrices;
- set => SetProperty(ref _autoLoadPrices, value);
- }
- private bool _warnOnManyPriceRequests;
- public bool WarnOnManyPriceRequests
- {
- get => _warnOnManyPriceRequests;
- set => SetProperty(ref _warnOnManyPriceRequests, value);
- }
- #endregion
- #region Security
- private bool _encryptApiKey;
- public bool EncryptApiKey
- {
- get => _encryptApiKey;
- set => SetProperty(ref _encryptApiKey, value);
- }
- #endregion
- #region Trading
- private bool _warnIfTradingLacksProfileData;
- public bool WarnIfTradingLacksProfileData
- {
- get => _warnIfTradingLacksProfileData;
- set => SetProperty(ref _warnIfTradingLacksProfileData, value);
- }
- private bool _preventTooManyItemsSaleRequest;
- public bool PreventTooManyItemsSaleRequest
- {
- get => _preventTooManyItemsSaleRequest;
- set => SetProperty(ref _preventTooManyItemsSaleRequest, value);
- }
- private bool _warnTooManyItemsSaleRequest;
- public bool WarnTooManyItemsSaleRequest
- {
- get => _warnTooManyItemsSaleRequest;
- set => SetProperty(ref _warnTooManyItemsSaleRequest, value);
- }
- #endregion
- #region Language
- private CountryCode _countryCode;
- public CountryCode CountryCode
- {
- get => _countryCode;
- set => SetProperty(ref _countryCode, value);
- }
- private string _countryName;
- public string CountryName
- {
- get => _countryName;
- set => SetProperty(ref _countryName, value);
- }
- #endregion
- #region Profile
- private string _mySteamCommunityLink;
- public string MySteamCommunityLink
- {
- get => _mySteamCommunityLink;
- set => SetProperty(ref _mySteamCommunityLink, value);
- }
- private string _skinbaronApikey;
- public string SkinbaronApikey
- {
- get => _skinbaronApikey;
- set => SetProperty(ref _skinbaronApikey, value);
- }
- private string _tradeLink;
- public string TradeLink
- {
- get => _tradeLink;
- set => SetProperty(ref _tradeLink, value);
- }
- #endregion
- #endregion
- #region Save-Load-I/O-Methods
- /// <summary>
- /// Pfad zur Settings-Datei.
- /// </summary>
- public string Path => System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
- HiddenSettings.SAVEDATA_FOLDER_NAME + System.IO.Path.DirectorySeparatorChar + HiddenSettings.SETTINGS_FILENAME + "." +
- HiddenSettings.SETTINGS_FILENAME_EXTENSION);
- /// <summary>
- /// Gibt das deserialized Settingsobjekt vom FileSystem zurück - falls vorhanden.
- /// </summary>
- /// <returns></returns>
- private GeneralSettings TryGetSettingsFromFileSys()
- {
- try
- {
- if (FileSystemTools.SettingsFileExists())
- return FileSystemTools.TryReadFromXmlFile<GeneralSettings>(Path);
- }
- catch (Exception e)
- {
- Debug.WriteLine($"Laden der Settings-Datei fehlgeschlagen von {Path}");
- Debug.WriteLine(e.StackTrace);
- return null;
- }
- return null;
- }
- /// <summary>
- /// Lädt die Settings, so dass die PropertyChanges nach aussen propagiert werden (für das XAML sichtbar)
- /// </summary>
- public void LoadSettings()
- {
- var settings = TryGetSettingsFromFileSys();
- Debug.WriteLine("load var set" + settings);
- if (settings == null) return;
- if (SettingsAccessor.GetInstance.Settings == null)
- SettingsAccessor.GetInstance.Settings = new GeneralSettings();
- SettingsAccessor.GetInstance.Settings.LoadSettingsObject(settings);
- }
- /// <summary>
- /// Lädt die Settings aus einer GeneralSettings Objekt-Instanz in die jetzige Instanz.
- /// </summary>
- /// <param name="settings"></param>
- private void LoadSettingsObject(GeneralSettings settings)
- {
- if (settings != null)
- {
- StartUpLink = settings.StartUpLink;
- MySteamCommunityLink = settings.StartUpLink;
- AutoLoadItems = settings.AutoLoadItems;
- MaxItemsToLoad = settings.MaxItemsToLoad;
- AutoLoadPrices = settings.AutoLoadPrices;
- SkinbaronApikey = settings.SkinbaronApikey;
- TradeLink = settings.TradeLink;
- CountryCode = settings.CountryCode;
- CountryName = settings.CountryName;
- }
- else
- {
- Debug.WriteLine("Settings-Objekt ist NULL!");
- throw new ArgumentNullException(nameof(settings));
- }
- }
- /// <summary>
- /// Speichert die Settings auf dem FileSystem, falls diese initiiert sind
- /// </summary>
- public void SaveSettings()
- {
- if (SettingsAccessor.GetInstance.Settings != null)
- FileSystemTools.TryWriteToXmlFile(Path, SettingsAccessor.GetInstance.Settings);
- Debug.WriteLine("Saved:" + SettingsAccessor.GetInstance.Settings);
- }
- /// <summary>
- /// Gibt zurück ob sich die Settings verändert haben im Vergleich zum SettingsFile
- /// </summary>
- /// <returns>True/False falls verändert oder nicht (und ein SettingsFile existiert) ansonsten null</returns>
- public bool? HasChanged()
- {
- var settings = TryGetSettingsFromFileSys();
- if (settings != null)
- return string.CompareOrdinal(SettingsAccessor.GetInstance.Settings.ToString(), settings.ToString()) == -1;
- return null;
- }
- #endregion
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement