using System; using System.Collections.Generic; using System.Globalization; using System.Threading.Tasks; using Windows.Storage; using Windows.UI.Xaml; namespace FoxTube.Services { public static class Storage { public static event EventHandler SettingsChanged; public static StorageFolder Folder => ApplicationData.Current.RoamingFolder; public static ApplicationDataContainer Registry { get; } = ApplicationData.Current.RoamingSettings; private static readonly Dictionary _defaultSettings = new Dictionary { { Settings.Theme, ElementTheme.Default }, { Settings.UILanguage, GetDefaultLanguage() }, { Settings.RelevanceLanguage, GetDefaultLanguage() }, { Settings.PromptFeedback, true }, { Settings.PromptReview, true }, { Settings.AllowAnalytics, true } }; public enum Settings { /// /// ElementTheme /// Theme, /// /// string /// UILanguage, /// /// string /// RelevanceLanguage, /// /// string /// DefaultDownloadsFolder, /// /// bool /// PromptFeedback, /// /// bool /// PromptReview, /// /// bool /// AllowAnalytics, /// /// string /// Region } public enum Metrics { /// /// TimeSpan /// Uptime } public static void SetValue(Settings key, object value) { Registry.Values[$"{key.GetType().Name}.{key}"] = value; SettingsChanged?.Invoke(value, key); } public static void SetValue(Metrics key, object value) => Registry.Values[$"{key.GetType().Name}.{key}"] = value; public static T GetValue(Settings key) => (T)(Registry.Values[$"{key.GetType().Name}.{key}"] ?? (_defaultSettings.ContainsKey(key) ? _defaultSettings[key] : null)); public static T GetValue(Metrics key) => (T)Registry.Values[$"{key.GetType().Name}.{key}"]; private static string GetDefaultLanguage() { if (CultureInfo.InstalledUICulture.TwoLetterISOLanguageName.Belongs("ua", "ru", "by", "kz", "kg", "md", "lv", "ee")) //Languages for Russian-speaking countries return "ru-RU"; else return "en-US"; } public static async Task ResetStorage() { Registry.Values.Clear(); foreach (IStorageItem i in await Folder.GetItemsAsync()) await i.DeleteAsync(); } } }