diff --git a/Configuration/SystemConfig.cs b/Configuration/SystemConfig.cs index 5a01fc51..ca8850fc 100644 --- a/Configuration/SystemConfig.cs +++ b/Configuration/SystemConfig.cs @@ -47,19 +47,8 @@ public static SystemConfig Load(string file){ try{ Serializer.Read(file, config); - return config; }catch(FileNotFoundException){ }catch(DirectoryNotFoundException){ - }catch(FormatException){ - try{ - using(Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read)){ - config.HardwareAcceleration = stream.ReadByte() > 0; - } - - config.Save(); - }catch(Exception e){ - Program.Reporter.HandleException("Configuration Error", "Could not update the system configuration file.", true, e); - } }catch(Exception e){ Program.Reporter.HandleException("Configuration Error", "Could not open the system configuration file. If you continue, you will lose system specific configuration such as Hardware Acceleration.", true, e); } diff --git a/Configuration/UserConfig.cs b/Configuration/UserConfig.cs index 44c47744..e9a003a5 100644 --- a/Configuration/UserConfig.cs +++ b/Configuration/UserConfig.cs @@ -137,7 +137,7 @@ public TrayIcon.Behavior TrayBehavior{ private readonly string file; - public UserConfig(string file){ // TODO make private after removing UserConfigLegacy + private UserConfig(string file){ this.file = file; } @@ -170,17 +170,18 @@ public static UserConfig Load(string file){ }catch(FileNotFoundException){ }catch(DirectoryNotFoundException){ break; - }catch(FormatException){ - UserConfig config = UserConfigLegacy.Load(file); - config.Save(); - return config; }catch(Exception e){ if (attempt == 0){ firstException = e; Program.Reporter.Log(e.ToString()); } + else if (firstException is FormatException){ + Program.Reporter.HandleException("Configuration Error", "The configuration file is outdated or corrupted. If you continue, your program options will be reset.", true, e); + return new UserConfig(file); + } else if (firstException != null){ Program.Reporter.HandleException("Configuration Error", "Could not open the backup configuration file. If you continue, your program options will be reset.", true, e); + return new UserConfig(file); } } } diff --git a/Configuration/UserConfigLegacy.cs b/Configuration/UserConfigLegacy.cs deleted file mode 100644 index ec8218db..00000000 --- a/Configuration/UserConfigLegacy.cs +++ /dev/null @@ -1,210 +0,0 @@ -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(); - } - } -} diff --git a/Data/WindowState.cs b/Data/WindowState.cs index 9ec75951..d0b7d24c 100644 --- a/Data/WindowState.cs +++ b/Data/WindowState.cs @@ -1,12 +1,10 @@ -using System; -using System.Drawing; +using System.Drawing; using System.Windows.Forms; using TweetDuck.Core.Controls; using TweetDuck.Core.Utils; using TweetDuck.Data.Serialization; namespace TweetDuck.Data{ - [Serializable] // TODO remove attribute with UserConfigLegacy sealed class WindowState{ private Rectangle rect; private bool isMaximized; diff --git a/TweetDuck.csproj b/TweetDuck.csproj index 1f707782..18618ebe 100644 --- a/TweetDuck.csproj +++ b/TweetDuck.csproj @@ -73,7 +73,6 @@ <Compile Include="Configuration\LockManager.cs" /> <Compile Include="Configuration\SystemConfig.cs" /> <Compile Include="Configuration\UserConfig.cs" /> - <Compile Include="Configuration\UserConfigLegacy.cs" /> <Compile Include="Core\Bridge\PropertyBridge.cs" /> <Compile Include="Core\Controls\ControlExtensions.cs" /> <Compile Include="Core\Controls\FlatButton.cs">