namespace VideoBrowser.Controls.CefSharpBrowser.Helpers { using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; using System.IO; using System.Reflection; using System.Windows; using VideoBrowser.Common; using VideoBrowser.Controls.CefSharpBrowser.Models; using VideoBrowser.Controls.CefSharpBrowser.ViewModels; /// /// Defines the . /// internal static class BrowserSettingsHelper { #region Constructors /// /// Initializes static members of the class. /// static BrowserSettingsHelper() { var appName = Assembly.GetExecutingAssembly().GetName().Name; var userAppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); UserJsonSettingsPath = Path.Combine(userAppDataPath, $@"{appName}\BrowserSettings.json"); } #endregion Constructors #region Properties /// /// Gets the UserJsonSettingsPath. /// public static string UserJsonSettingsPath { get; } #endregion Properties #region Methods /// /// The Load. /// /// The . internal static BrowserSettings Load() { Logger.Info($"Loading Browser setting {UserJsonSettingsPath}"); if (!File.Exists(UserJsonSettingsPath)) { return null; } try { using (StreamReader file = File.OpenText(UserJsonSettingsPath)) { JsonSerializer serializer = new JsonSerializer(); var browserSettings = (BrowserSettings)serializer.Deserialize(file, typeof(BrowserSettings)); return browserSettings; } } catch (Exception e) { Logger.Error($"Error Loading Browser Setting: {e.Message}"); } return null; } /// /// The Save. /// /// The settings. /// The browserModel. internal static void Save(BrowserSettings settings, WebBrowserTabControlViewModel browserModel) { settings.BookmarkModels.Clear(); settings.DownloadItems.Clear(); settings.TabSettingModels.Clear(); foreach (var tabItem in browserModel.TabItems) { if (tabItem.Content is FrameworkElement element && element.DataContext is VideoBrowserViewModel videoModel) { var tabModel = new TabSettingsModel { Title = videoModel.Header, Url = videoModel.Url }; settings.TabSettingModels.Add(tabModel); } } foreach (var downloadItem in browserModel.GlobalBrowserData.DownloadItemModels) { if (downloadItem.Status == "Completed") { settings.DownloadItems.Add(new DownloadItemModel(downloadItem)); } } settings.SelectedTabSettingIndex = browserModel.SelectedTabIndex; var settingsFolder = Path.GetDirectoryName(UserJsonSettingsPath); if (!Directory.Exists(settingsFolder)) { Directory.CreateDirectory(settingsFolder); } var serializer = new JsonSerializer(); serializer.Converters.Add(new JavaScriptDateTimeConverter()); serializer.NullValueHandling = NullValueHandling.Ignore; using (var sw = new StreamWriter(UserJsonSettingsPath)) using (var writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, settings); } Logger.Info($"Browser setting is saved in {UserJsonSettingsPath}"); } #endregion Methods } }