mirror of
https://github.com/chylex/TweetDuck.git
synced 2024-11-14 17:42:47 +01:00
211 lines
8.0 KiB
C#
211 lines
8.0 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Runtime.Serialization;
|
|
using System.Runtime.Serialization.Formatters.Binary;
|
|
using TweetDuck.Core;
|
|
using TweetDuck.Core.Controls;
|
|
using TweetDuck.Core.Notification;
|
|
using TweetDuck.Data;
|
|
|
|
namespace TweetDuck.Configuration{
|
|
[Serializable]
|
|
sealed class UserConfigLegacy{ // TODO remove eventually
|
|
private static readonly IFormatter Formatter = new BinaryFormatter{ Binder = new LegacyBinder() };
|
|
|
|
private class LegacyBinder : SerializationBinder{
|
|
public override Type BindToType(string assemblyName, string typeName){
|
|
return Type.GetType(string.Format("{0}, {1}", typeName.Replace("TweetDck", "TweetDuck").Replace(".UserConfig", ".UserConfigLegacy").Replace("Core.Utils.WindowState", "Data.WindowState"), assemblyName.Replace("TweetDck", "TweetDuck")));
|
|
}
|
|
}
|
|
|
|
private const int CurrentFileVersion = 11;
|
|
|
|
// START OF CONFIGURATION
|
|
|
|
public WindowState BrowserWindow { get; set; }
|
|
public WindowState PluginsWindow { get; set; }
|
|
|
|
public bool DisplayNotificationColumn { get; set; }
|
|
public bool DisplayNotificationTimer { get; set; }
|
|
public bool NotificationTimerCountDown { get; set; }
|
|
public bool NotificationSkipOnLinkClick { get; set; }
|
|
public bool NotificationNonIntrusiveMode { get; set; }
|
|
|
|
public int NotificationIdlePauseSeconds { get; set; }
|
|
public int NotificationDurationValue { get; set; }
|
|
public int NotificationScrollSpeed { get; set; }
|
|
|
|
public TweetNotification.Position NotificationPosition { get; set; }
|
|
public Point CustomNotificationPosition { get; set; }
|
|
public int NotificationEdgeDistance { get; set; }
|
|
public int NotificationDisplay { get; set; }
|
|
|
|
public TweetNotification.Size NotificationSize { get; set; }
|
|
public Size CustomNotificationSize { get; set; }
|
|
|
|
public bool EnableSpellCheck { get; set; }
|
|
public bool ExpandLinksOnHover { get; set; }
|
|
public bool SwitchAccountSelectors { get; set; }
|
|
public bool EnableTrayHighlight { get; set; }
|
|
|
|
public bool EnableUpdateCheck { get; set; }
|
|
public string DismissedUpdate { get; set; }
|
|
|
|
public string CustomCefArgs { get; set; }
|
|
public string CustomBrowserCSS { get; set; }
|
|
public string CustomNotificationCSS { get; set; }
|
|
|
|
public string NotificationSoundPath{
|
|
get => string.IsNullOrEmpty(notificationSoundPath) ? string.Empty : notificationSoundPath;
|
|
set => notificationSoundPath = value;
|
|
}
|
|
|
|
public bool MuteNotifications{
|
|
get => muteNotifications;
|
|
set => muteNotifications = value;
|
|
}
|
|
|
|
public int ZoomLevel{
|
|
get => zoomLevel;
|
|
set => zoomLevel = value;
|
|
}
|
|
|
|
public TrayIcon.Behavior TrayBehavior{
|
|
get => trayBehavior;
|
|
set => trayBehavior = value;
|
|
}
|
|
|
|
// END OF CONFIGURATION
|
|
|
|
[NonSerialized]
|
|
private string file;
|
|
|
|
private int fileVersion;
|
|
private bool muteNotifications;
|
|
private int zoomLevel;
|
|
private string notificationSoundPath;
|
|
private TrayIcon.Behavior trayBehavior;
|
|
|
|
private UserConfigLegacy(string file){
|
|
this.file = file;
|
|
|
|
BrowserWindow = new WindowState();
|
|
ZoomLevel = 100;
|
|
DisplayNotificationTimer = true;
|
|
NotificationNonIntrusiveMode = true;
|
|
NotificationPosition = TweetNotification.Position.TopRight;
|
|
CustomNotificationPosition = ControlExtensions.InvisibleLocation;
|
|
NotificationSize = TweetNotification.Size.Auto;
|
|
NotificationEdgeDistance = 8;
|
|
NotificationDurationValue = 25;
|
|
NotificationScrollSpeed = 100;
|
|
EnableUpdateCheck = true;
|
|
ExpandLinksOnHover = true;
|
|
SwitchAccountSelectors = true;
|
|
EnableTrayHighlight = true;
|
|
PluginsWindow = new WindowState();
|
|
}
|
|
|
|
private void UpgradeFile(){
|
|
if (fileVersion == CurrentFileVersion){
|
|
return;
|
|
}
|
|
|
|
// if outdated, cycle through all versions
|
|
if (fileVersion <= 5){
|
|
DisplayNotificationTimer = true;
|
|
EnableUpdateCheck = true;
|
|
ExpandLinksOnHover = true;
|
|
BrowserWindow = new WindowState();
|
|
PluginsWindow = new WindowState();
|
|
EnableTrayHighlight = true;
|
|
NotificationDurationValue = 25;
|
|
fileVersion = 6;
|
|
}
|
|
|
|
if (fileVersion == 6){
|
|
NotificationNonIntrusiveMode = true;
|
|
++fileVersion;
|
|
}
|
|
|
|
if (fileVersion == 7){
|
|
ZoomLevel = 100;
|
|
++fileVersion;
|
|
}
|
|
|
|
if (fileVersion == 8){
|
|
SwitchAccountSelectors = true;
|
|
++fileVersion;
|
|
}
|
|
|
|
if (fileVersion == 9){
|
|
NotificationScrollSpeed = 100;
|
|
++fileVersion;
|
|
}
|
|
|
|
if (fileVersion == 10){
|
|
NotificationSize = TweetNotification.Size.Auto;
|
|
++fileVersion;
|
|
}
|
|
|
|
// update the version
|
|
fileVersion = CurrentFileVersion;
|
|
}
|
|
|
|
public UserConfig ConvertLegacy(){
|
|
return new UserConfig(file){
|
|
BrowserWindow = BrowserWindow,
|
|
PluginsWindow = PluginsWindow,
|
|
DisplayNotificationColumn = DisplayNotificationColumn,
|
|
DisplayNotificationTimer = DisplayNotificationTimer,
|
|
NotificationTimerCountDown = NotificationTimerCountDown,
|
|
NotificationSkipOnLinkClick = NotificationSkipOnLinkClick,
|
|
NotificationNonIntrusiveMode = NotificationNonIntrusiveMode,
|
|
NotificationIdlePauseSeconds = NotificationIdlePauseSeconds,
|
|
NotificationDurationValue = NotificationDurationValue,
|
|
NotificationScrollSpeed = NotificationScrollSpeed,
|
|
NotificationPosition = NotificationPosition,
|
|
CustomNotificationPosition = CustomNotificationPosition,
|
|
NotificationEdgeDistance = NotificationEdgeDistance,
|
|
NotificationDisplay = NotificationDisplay,
|
|
NotificationSize = NotificationSize,
|
|
CustomNotificationSize = CustomNotificationSize,
|
|
EnableSpellCheck = EnableSpellCheck,
|
|
ExpandLinksOnHover = ExpandLinksOnHover,
|
|
SwitchAccountSelectors = SwitchAccountSelectors,
|
|
EnableTrayHighlight = EnableTrayHighlight,
|
|
EnableUpdateCheck = EnableUpdateCheck,
|
|
DismissedUpdate = DismissedUpdate,
|
|
CustomCefArgs = CustomCefArgs,
|
|
CustomBrowserCSS = CustomBrowserCSS,
|
|
CustomNotificationCSS = CustomNotificationCSS,
|
|
NotificationSoundPath = NotificationSoundPath,
|
|
MuteNotifications = MuteNotifications,
|
|
ZoomLevel = ZoomLevel,
|
|
TrayBehavior = TrayBehavior
|
|
};
|
|
}
|
|
|
|
public static UserConfig Load(string file){
|
|
UserConfigLegacy config = null;
|
|
|
|
try{
|
|
using(Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read)){
|
|
if ((config = Formatter.Deserialize(stream) as UserConfigLegacy) != null){
|
|
config.file = file;
|
|
}
|
|
}
|
|
|
|
config?.UpgradeFile();
|
|
}catch(FileNotFoundException){
|
|
}catch(DirectoryNotFoundException){
|
|
}catch(Exception e){
|
|
Program.Reporter.HandleException("Configuration Error", "Could not open the configuration file.", true, e);
|
|
}
|
|
|
|
return (config ?? new UserConfigLegacy(file)).ConvertLegacy();
|
|
}
|
|
}
|
|
}
|