Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.16 KB | None | 0 0
  1. using System;
  2. using System.Diagnostics;
  3. using System.Linq;
  4. using System.Reflection;
  5. using Infrastructure.Constants.Settings;
  6. using Infrastructure.Enums;
  7. using Infrastructure.Helpers;
  8. using Prism.Mvvm;
  9.  
  10. namespace Infrastructure.Models
  11. {
  12.     [Serializable]
  13.     public class GeneralSettings : BindableBase
  14.     {
  15.         /// <summary>
  16.         /// Default Konstruktor - der die Default-Werte beinhaltet.
  17.         /// </summary>
  18.         public GeneralSettings()
  19.         {
  20.             //Default Werte Setzen
  21.             StartUpLink = "";
  22.             MySteamCommunityLink = "https://steamcommunity.com/profiles/76561198345631230";
  23.             AutoLoadItems = true;
  24.             MaxItemsToLoad = HiddenSettings.MAX_ITEMS_TO_LOAD;
  25.             AutoLoadPrices = false;
  26.             SkinbaronApikey = "";
  27.             TradeLink = "";
  28.             CountryCode = CountryCode.En;
  29.             CountryName = CultureTools.GetCountryNameFrom(CountryCode);
  30.         }
  31.  
  32.         /// <summary>
  33.         /// Custom toString()-Methode über Reflection
  34.         /// </summary>
  35.         /// <returns>Gibt die zusammengesetzten Werte der privaten Felder bestehenden aus den Primitives, Strings oder Enums als String zurück</returns>
  36.         public override string ToString()
  37.         {
  38.             var fields = GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
  39.             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);
  40.  
  41.             if (result.Length > 0 && result[result.Length - 1] == ',')
  42.                 result = result.Substring(0, result.Length - 1);
  43.             return result;
  44.         }
  45.  
  46.  
  47.  
  48.         #region Setting-Properties
  49.  
  50.         #region StartUp
  51.         private string _startUpLink;
  52.         /// <summary>
  53.         /// Der Link des Steam Profils das beim StartUp und betätigen des Show Inventory Buttons angezeigt wird.
  54.         /// </summary>
  55.         public string StartUpLink
  56.         {
  57.             get => _startUpLink;
  58.             set => SetProperty(ref _startUpLink, value);
  59.         }
  60.  
  61.  
  62.         private bool _autoLoadItems;
  63.         /// <summary>
  64.         /// Ob die Items automatisch nach Programmstart geladen werden sollen.
  65.         /// </summary>
  66.         public bool AutoLoadItems
  67.         {
  68.             get => _autoLoadItems;
  69.             set => SetProperty(ref _autoLoadItems, value);
  70.         }
  71.  
  72.  
  73.         #endregion
  74.         #region InventoryView
  75.         private int _maxItemsToLoad;
  76.         public int MaxItemsToLoad
  77.         {
  78.             get => _maxItemsToLoad;
  79.             set
  80.             {
  81.                 SetProperty(ref _maxItemsToLoad, value);
  82.                 Debug.WriteLine("Maxitems Set To:" + _maxItemsToLoad);
  83.             }
  84.         }
  85.  
  86.         private bool _autoLoadPrices;
  87.         public bool AutoLoadPrices
  88.         {
  89.             get => _autoLoadPrices;
  90.             set => SetProperty(ref _autoLoadPrices, value);
  91.         }
  92.  
  93.         private bool _warnOnManyPriceRequests;
  94.         public bool WarnOnManyPriceRequests
  95.         {
  96.             get => _warnOnManyPriceRequests;
  97.             set => SetProperty(ref _warnOnManyPriceRequests, value);
  98.         }
  99.  
  100.         #endregion
  101.  
  102.  
  103.  
  104.         #region Security
  105.  
  106.         private bool _encryptApiKey;
  107.         public bool EncryptApiKey
  108.         {
  109.             get => _encryptApiKey;
  110.             set => SetProperty(ref _encryptApiKey, value);
  111.         }
  112.  
  113.  
  114.  
  115.         #endregion
  116.  
  117.         #region Trading
  118.  
  119.         private bool _warnIfTradingLacksProfileData;
  120.         public bool WarnIfTradingLacksProfileData
  121.         {
  122.             get => _warnIfTradingLacksProfileData;
  123.             set => SetProperty(ref _warnIfTradingLacksProfileData, value);
  124.         }
  125.  
  126.         private bool _preventTooManyItemsSaleRequest;
  127.         public bool PreventTooManyItemsSaleRequest
  128.         {
  129.             get => _preventTooManyItemsSaleRequest;
  130.             set => SetProperty(ref _preventTooManyItemsSaleRequest, value);
  131.         }
  132.  
  133.         private bool _warnTooManyItemsSaleRequest;
  134.         public bool WarnTooManyItemsSaleRequest
  135.         {
  136.             get => _warnTooManyItemsSaleRequest;
  137.             set => SetProperty(ref _warnTooManyItemsSaleRequest, value);
  138.         }
  139.  
  140.         #endregion
  141.  
  142.         #region Language
  143.         private CountryCode _countryCode;
  144.         public CountryCode CountryCode
  145.         {
  146.             get => _countryCode;
  147.             set => SetProperty(ref _countryCode, value);
  148.         }
  149.  
  150.         private string _countryName;
  151.         public string CountryName
  152.         {
  153.             get => _countryName;
  154.             set => SetProperty(ref _countryName, value);
  155.         }
  156.  
  157.  
  158.         #endregion
  159.  
  160.         #region Profile
  161.         private string _mySteamCommunityLink;
  162.         public string MySteamCommunityLink
  163.         {
  164.             get => _mySteamCommunityLink;
  165.             set => SetProperty(ref _mySteamCommunityLink, value);
  166.         }
  167.  
  168.         private string _skinbaronApikey;
  169.         public string SkinbaronApikey
  170.         {
  171.             get => _skinbaronApikey;
  172.             set => SetProperty(ref _skinbaronApikey, value);
  173.         }
  174.  
  175.         private string _tradeLink;
  176.         public string TradeLink
  177.         {
  178.             get => _tradeLink;
  179.             set => SetProperty(ref _tradeLink, value);
  180.         }
  181.         #endregion
  182.  
  183.         #endregion
  184.  
  185.         #region Save-Load-I/O-Methods
  186.         /// <summary>
  187.         /// Pfad zur Settings-Datei.
  188.         /// </summary>
  189.         public string Path => System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
  190.             HiddenSettings.SAVEDATA_FOLDER_NAME + System.IO.Path.DirectorySeparatorChar + HiddenSettings.SETTINGS_FILENAME + "." +
  191.             HiddenSettings.SETTINGS_FILENAME_EXTENSION);
  192.  
  193.         /// <summary>
  194.         /// Gibt das deserialized Settingsobjekt vom FileSystem zurück - falls vorhanden.
  195.         /// </summary>
  196.         /// <returns></returns>
  197.         private GeneralSettings TryGetSettingsFromFileSys()
  198.         {
  199.             try
  200.             {
  201.                 if (FileSystemTools.SettingsFileExists())
  202.                 return FileSystemTools.TryReadFromXmlFile<GeneralSettings>(Path);
  203.             }
  204.             catch (Exception e)
  205.             {
  206.                 Debug.WriteLine($"Laden der Settings-Datei fehlgeschlagen von {Path}");
  207.                 Debug.WriteLine(e.StackTrace);
  208.                 return null;
  209.             }
  210.             return null;
  211.         }
  212.  
  213.         /// <summary>
  214.         /// Lädt die Settings, so dass die PropertyChanges nach aussen propagiert werden (für das XAML sichtbar)
  215.         /// </summary>
  216.         public void LoadSettings()
  217.         {
  218.             var settings = TryGetSettingsFromFileSys();
  219.             Debug.WriteLine("load var set" + settings);
  220.             if (settings == null) return;
  221.             if (SettingsAccessor.GetInstance.Settings == null)
  222.                 SettingsAccessor.GetInstance.Settings = new GeneralSettings();
  223.             SettingsAccessor.GetInstance.Settings.LoadSettingsObject(settings);
  224.         }
  225.  
  226.         /// <summary>
  227.         /// Lädt die Settings aus einer GeneralSettings Objekt-Instanz in die jetzige Instanz.
  228.         /// </summary>
  229.         /// <param name="settings"></param>
  230.         private void LoadSettingsObject(GeneralSettings settings)
  231.         {
  232.             if (settings != null)
  233.             {
  234.                 StartUpLink = settings.StartUpLink;
  235.                 MySteamCommunityLink = settings.StartUpLink;
  236.                 AutoLoadItems = settings.AutoLoadItems;
  237.                 MaxItemsToLoad = settings.MaxItemsToLoad;
  238.                 AutoLoadPrices = settings.AutoLoadPrices;
  239.                 SkinbaronApikey = settings.SkinbaronApikey;
  240.                 TradeLink = settings.TradeLink;
  241.                 CountryCode = settings.CountryCode;
  242.                 CountryName = settings.CountryName;
  243.             }
  244.             else
  245.             {
  246.                 Debug.WriteLine("Settings-Objekt ist NULL!");
  247.                 throw new ArgumentNullException(nameof(settings));
  248.             }
  249.         }
  250.  
  251.         /// <summary>
  252.         /// Speichert die Settings auf dem FileSystem, falls diese initiiert sind
  253.         /// </summary>
  254.         public void SaveSettings()
  255.         {
  256.             if (SettingsAccessor.GetInstance.Settings != null)
  257.                 FileSystemTools.TryWriteToXmlFile(Path, SettingsAccessor.GetInstance.Settings);
  258.             Debug.WriteLine("Saved:" + SettingsAccessor.GetInstance.Settings);
  259.         }
  260.  
  261.         /// <summary>
  262.         /// Gibt zurück ob sich die Settings verändert haben im Vergleich zum SettingsFile
  263.         /// </summary>
  264.         /// <returns>True/False falls verändert oder nicht (und ein SettingsFile existiert) ansonsten null</returns>
  265.         public bool? HasChanged()
  266.         {
  267.             var settings = TryGetSettingsFromFileSys();
  268.             if (settings != null)
  269.                 return string.CompareOrdinal(SettingsAccessor.GetInstance.Settings.ToString(), settings.ToString()) == -1;
  270.             return null;
  271.         }
  272.  
  273.         #endregion
  274.     }
  275. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement