Explorar el Código

Added Debug commands for backing up and loading preferences

CPKreuz hace 1 año
padre
commit
f0bf93411c

+ 13 - 1
src/PixiEditor/Data/Localization/Languages/en.json

@@ -277,10 +277,20 @@
   "CANCEL": "Cancel",
   "UNNAMED": "Unnamed",
   "OPEN_COMMAND_DEBUG_WINDOW": "Open command debug window",
+  
   "DELETE": "Delete",
   "USER_PREFS": "User preferences (Roaming)",
   "SHORTCUT_FILE": "Shortcut file (Roaming)",
   "EDITOR_DATA": "Editor data (Local)",
+  
+  "BACKUP_USER_PREFS": "Backup User preferences (Roaming)",
+  "BACKUP_SHORTCUT_FILE": "Backup Shortcut file (Roaming)",
+  "BACKUP_EDITOR_DATA": "Backup Editor data (Local)",
+
+  "LOAD_USER_PREFS_BACKUP": "Load User preferences backup (Roaming)",
+  "LOAD_SHORTCUT_FILE_BACKUP": "Load Shortcut file backup (Roaming)",
+  "LOAD_EDITOR_DATA_BACKUP": "Load Editor data backup (Local)",
+
   "MOVE_VIEWPORT_TOOLTIP": "Moves viewport. ({0})",
   "MOVE_VIEWPORT_ACTION_DISPLAY": "Click and move to pan the viewport",
   "MOVE_TOOL_TOOLTIP": "Moves selected pixels ({0}). Hold Ctrl to move all layers.",
@@ -622,5 +632,7 @@
   "LOGOFF": "Sign out with unsaved data. Are you sure?",
   "SHUTDOWN": "Shut down with unsaved data. Are you sure?",
   "LOGOFF_TITLE": "Sign out?",
-  "SHUTDOWN_TITLE": "Shut down?"
+  "SHUTDOWN_TITLE": "Shut down?",
+  
+  "BACK_UP": "Backup"
 }

+ 65 - 2
src/PixiEditor/ViewModels/SubViewModels/Main/DebugViewModel.cs

@@ -25,6 +25,8 @@ internal class DebugViewModel : SubViewModel<ViewModelMain>
     public static bool IsDebugBuild { get; set; }
 
     public bool IsDebugModeEnabled { get; set; }
+    
+    public bool ModifiedEditorData { get; set; }
 
     private bool useDebug;
     public bool UseDebug
@@ -239,10 +241,15 @@ internal class DebugViewModel : SubViewModel<ViewModelMain>
     }
 
     [Command.Debug("PixiEditor.Debug.DeleteUserPreferences", @"%appdata%\PixiEditor\user_preferences.json", "DELETE_USR_PREFS", "DELETE_USR_PREFS")]
-    [Command.Debug("PixiEditor.Debug.DeleteShortcutFile", @"%appdata%\PixiEditor\shortcuts.json", "DELETE_SHORTCUT_FILE", "DELETE_SHORTCUT_FILE")]
     [Command.Debug("PixiEditor.Debug.DeleteEditorData", @"%localappdata%\PixiEditor\editor_data.json", "DELETE_EDITOR_DATA", "DELETE_EDITOR_DATA")]
-    public static void DeleteFile(string path)
+    [Command.Debug("PixiEditor.Debug.DeleteShortcutFile", @"%appdata%\PixiEditor\shortcuts.json", "DELETE_SHORTCUT_FILE", "DELETE_SHORTCUT_FILE")]
+    public void DeleteFile(string path)
     {
+        if (path.EndsWith("editor_data.json"))
+        {
+            ModifiedEditorData = true;
+        }
+        
         string file = Environment.ExpandEnvironmentVariables(path);
         if (!File.Exists(file))
         {
@@ -253,12 +260,68 @@ internal class DebugViewModel : SubViewModel<ViewModelMain>
         OptionsDialog<string> dialog = new("ARE_YOU_SURE", new LocalizedString("ARE_YOU_SURE_PATH_FULL_PATH", path, file))
         {
             { "Yes", x => File.Delete(file) },
+            { "Backup first", _ =>
+                {
+                    BackupFile(path);
+                    File.Delete(file);
+                }
+            },
             "Cancel"
         };
 
         dialog.ShowDialog();
     }
 
+    [Command.Debug("PixiEditor.Debug.BackupUserPreferences", @"%appdata%\PixiEditor\user_preferences.json", "BACKUP_USR_PREFS", "BACKUP_USR_PREFS")]
+    [Command.Debug("PixiEditor.Debug.BackupEditorData", @"%localappdata%\PixiEditor\editor_data.json", "BACKUP_EDITOR_DATA", "BACKUP_EDITOR_DATA")]
+    [Command.Debug("PixiEditor.Debug.BackupShortcutFile", @"%appdata%\PixiEditor\shortcuts.json", "BACKUP_SHORTCUT_FILE", "BACKUP_SHORTCUT_FILE")]
+    public static void BackupFile(string path)
+    {
+        string file = Environment.ExpandEnvironmentVariables(path);
+        string backup = $"{file}.bak";
+        
+        if (!File.Exists(file))
+        {
+            NoticeDialog.Show(new LocalizedString("File {0} does not exist\n(Full Path: {1})", path, file), "FILE_NOT_FOUND");
+            return;
+        }
+        
+        File.Copy(file, backup, true);
+    }
+
+    [Command.Debug("PixiEditor.Debug.LoadUserPreferencesBackup", @"%appdata%\PixiEditor\user_preferences.json", "LOAD_USR_PREFS_BACKUP", "LOAD_USR_PREFS_BACKUP")]
+    [Command.Debug("PixiEditor.Debug.LoadEditorDataBackup", @"%localappdata%\PixiEditor\editor_data.json", "LOAD_EDITOR_DATA_BACKUP", "LOAD_EDITOR_DATA_BACKUP")]
+    [Command.Debug("PixiEditor.Debug.LoadShortcutFileBackup", @"%appdata%\PixiEditor\shortcuts.json", "LOAD_SHORTCUT_FILE_BACKUP", "LOAD_SHORTCUT_FILE_BACKUP")]
+    public void LoadBackupFile(string path)
+    {
+        if (path.EndsWith("editor_data.json"))
+        {
+            ModifiedEditorData = true;
+        }
+        
+        string file = Environment.ExpandEnvironmentVariables(path);
+        string backup = $"{file}.bak";
+        
+        if (!File.Exists(backup))
+        {
+            NoticeDialog.Show(new LocalizedString("File {0} does not exist\n(Full Path: {1})", path, file), "FILE_NOT_FOUND");
+            return;
+        }
+
+        if (File.Exists(file))
+        {
+            OptionsDialog<string> dialog = new("ARE_YOU_SURE", $"Are you sure you want to overwrite {path}\n(Full Path: {file})")
+            {
+                { "Yes", x => File.Delete(file) },
+                "Cancel"
+            };
+
+            dialog.ShowDialog();
+        }
+        
+        File.Copy(backup, file, true);
+    }
+
     [Conditional("DEBUG")]
     private static void SetDebug() => IsDebugBuild = true;
 

+ 1 - 1
src/PixiEditor/ViewModels/ViewModelMain.cs

@@ -251,7 +251,7 @@ internal class ViewModelMain : ViewModelBase
 
     public void AutosaveAllForNextSession()
     {
-        if (!AutosaveDocumentViewModel.SaveStateEnabled)
+        if (!AutosaveDocumentViewModel.SaveStateEnabled || DebugSubViewModel.ModifiedEditorData)
         {
             return;
         }

+ 26 - 3
src/PixiEditor/Views/MainWindow.xaml

@@ -421,22 +421,45 @@
                         <MenuItem
                             ui1:Translator.Key="FREEZE"
                             cmds:Menu.Command="PixiEditor.Debug.Freeze" />
+                        <Separator />
                         <MenuItem
                             ui1:Translator.Key="DELETE">
                             <MenuItem
                                 ui1:Translator.Key="USER_PREFS"
                                 cmds:Menu.Command="PixiEditor.Debug.DeleteUserPreferences" />
-                            <MenuItem
-                                ui1:Translator.Key="SHORTCUT_FILE"
-                                cmds:Menu.Command="PixiEditor.Debug.DeleteShortcutFile" />
                             <MenuItem
                                 ui1:Translator.Key="EDITOR_DATA"
                                 cmds:Menu.Command="PixiEditor.Debug.DeleteEditorData" />
+                            <MenuItem
+                                ui1:Translator.Key="SHORTCUT_FILE"
+                                cmds:Menu.Command="PixiEditor.Debug.DeleteShortcutFile" />
                             <Separator/>
                             <MenuItem
                                 ui1:Translator.Key="CLEAR_RECENT_DOCUMENTS"
                                 cmds:Menu.Command="PixiEditor.Debug.ClearRecentDocument"/>
                         </MenuItem>
+                        <MenuItem
+                            ui1:Translator.Key="BACK_UP">
+                            <MenuItem
+                                ui1:Translator.Key="USER_PREFS"
+                                cmds:Menu.Command="PixiEditor.Debug.BackupUserPreferences" />
+                            <MenuItem
+                                ui1:Translator.Key="EDITOR_DATA"
+                                cmds:Menu.Command="PixiEditor.Debug.BackupEditorData" />
+                            <MenuItem
+                                ui1:Translator.Key="SHORTCUT_FILE"
+                                cmds:Menu.Command="PixiEditor.Debug.BackupShortcutFile" />
+                            <Separator/>
+                            <MenuItem
+                                ui1:Translator.Key="LOAD_USER_PREFS_BACKUP"
+                                cmds:Menu.Command="PixiEditor.Debug.LoadUserPreferencesBackup" />
+                            <MenuItem
+                                ui1:Translator.Key="LOAD_EDITOR_DATA_BACKUP"
+                                cmds:Menu.Command="PixiEditor.Debug.LoadEditorDataBackup" />
+                            <MenuItem
+                                ui1:Translator.Key="LOAD_SHORTCUT_FILE_BACKUP"
+                                cmds:Menu.Command="PixiEditor.Debug.LoadShortcutFileBackup" />
+                        </MenuItem>
                     </MenuItem>
                 </cmds:Menu>
                 <Border Width="200" Height="25"