Browse Source

Fix recent files being added beyond the limit from settings

Equbuxu 2 years ago
parent
commit
dae3207989

+ 3 - 0
src/PixiEditor/Models/UserPreferences/PreferencesConstants.cs

@@ -4,4 +4,7 @@ internal static class PreferencesConstants
 {
     public const string FavouritePalettes = "FavouritePalettes";
     public const string RecentlyOpened = "RecentlyOpened";
+
+    public const string MaxOpenedRecently = "MaxOpenedRecently";
+    public const int MaxOpenedRecentlyDefault = 8;
 }

+ 20 - 7
src/PixiEditor/ViewModels/SubViewModels/Main/FileViewModel.cs

@@ -1,4 +1,5 @@
 using System.IO;
+using System.Reflection.Metadata;
 using System.Windows.Input;
 using System.Windows.Shapes;
 using ChunkyImageLib;
@@ -49,7 +50,21 @@ internal class FileViewModel : SubViewModel<ViewModelMain>
             HasRecent = true;
         }
 
-        IPreferences.Current.AddCallback("MaxOpenedRecently", UpdateMaxRecentlyOpened);
+        IPreferences.Current.AddCallback(PreferencesConstants.MaxOpenedRecently, UpdateMaxRecentlyOpened);
+    }
+
+    public void AddRecentlyOpened(string path)
+    {
+        if (RecentlyOpened.Contains(path))
+            return;
+        
+        RecentlyOpened.Insert(0, path);
+        int maxCount = IPreferences.Current.GetPreference<int>(PreferencesConstants.MaxOpenedRecently, PreferencesConstants.MaxOpenedRecentlyDefault);
+        while (RecentlyOpened.Count > maxCount)
+        {
+            RecentlyOpened.RemoveAt(RecentlyOpened.Count - 1);
+        }
+        IPreferences.Current.UpdateLocalPreference(PreferencesConstants.RecentlyOpened, RecentlyOpened.Select(x => x.FilePath));
     }
 
     public void RemoveRecentlyOpened(object parameter)
@@ -165,9 +180,7 @@ internal class FileViewModel : SubViewModel<ViewModelMain>
     {
         DocumentViewModel document = Importer.ImportDocument(path);
         AddDocumentViewModelToTheSystem(document);
-
-        RecentlyOpened.Insert(0, document.FullFilePath);
-        IPreferences.Current.UpdateLocalPreference(PreferencesConstants.RecentlyOpened, RecentlyOpened.Select(x => x.FilePath));
+        AddRecentlyOpened(document.FullFilePath);
     }
 
     /// <summary>
@@ -201,6 +214,7 @@ internal class FileViewModel : SubViewModel<ViewModelMain>
                     .WithSize(dialog.FileWidth, dialog.FileHeight)
                     .WithSurface(Importer.ImportImage(dialog.FilePath, new VecI(dialog.FileWidth, dialog.FileHeight)))));
             doc.FullFilePath = path;
+            AddRecentlyOpened(path);
         }
     }
 
@@ -251,8 +265,7 @@ internal class FileViewModel : SubViewModel<ViewModelMain>
             success = Exporter.SaveAsEditableFileWithDialog(document, out path);
             if (success)
             {
-                RecentlyOpened.Insert(0, path);
-                IPreferences.Current.UpdateLocalPreference(PreferencesConstants.RecentlyOpened, RecentlyOpened.Select(x => x.FilePath));
+                AddRecentlyOpened(path);
             }
         }
         else
@@ -311,7 +324,7 @@ internal class FileViewModel : SubViewModel<ViewModelMain>
     private List<RecentlyOpenedDocument> GetRecentlyOpenedDocuments()
     {
         IEnumerable<string> paths = IPreferences.Current.GetLocalPreference(nameof(RecentlyOpened), new JArray()).ToObject<string[]>()
-            .Take(IPreferences.Current.GetPreference("MaxOpenedRecently", 8));
+            .Take(IPreferences.Current.GetPreference(PreferencesConstants.MaxOpenedRecently, 8));
 
         List<RecentlyOpenedDocument> documents = new List<RecentlyOpenedDocument>();
 

+ 2 - 1
src/PixiEditor/ViewModels/SubViewModels/UserPreferences/Settings/FileSettings.cs

@@ -1,4 +1,5 @@
 using PixiEditor.Models;
+using PixiEditor.Models.UserPreferences;
 
 namespace PixiEditor.ViewModels.SubViewModels.UserPreferences.Settings;
 
@@ -38,7 +39,7 @@ internal class FileSettings : SettingsGroup
         }
     }
 
-    private int maxOpenedRecently = GetPreference(nameof(MaxOpenedRecently), 8);
+    private int maxOpenedRecently = GetPreference(PreferencesConstants.MaxOpenedRecently, PreferencesConstants.MaxOpenedRecentlyDefault);
 
     public int MaxOpenedRecently
     {