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
}
}