diff --git a/src/ViewModels/Preferences.cs b/src/ViewModels/Preferences.cs index 31bc7bdb..ccb30a0d 100644 --- a/src/ViewModels/Preferences.cs +++ b/src/ViewModels/Preferences.cs @@ -436,16 +436,26 @@ namespace SourceGit.ViewModels { var collection = to == null ? RepositoryNodes : to.SubNodes; collection.Add(node); - collection.Sort((l, r) => + SortNodes(collection); + + if (save) + Save(); + } + + public void SortNodes(List collection) + { + collection?.Sort((l, r) => { if (l.IsRepository != r.IsRepository) return l.IsRepository ? 1 : -1; return string.Compare(l.Name, r.Name, StringComparison.Ordinal); }); + } - if (save) - Save(); + public void SortAllNodes() + { + SortNodesRecursive(RepositoryNodes); } public RepositoryNode FindNode(string id) @@ -503,22 +513,14 @@ namespace SourceGit.ViewModels public void SortByRenamedNode(RepositoryNode node) { var container = FindNodeContainer(node, RepositoryNodes); - container?.Sort((l, r) => - { - if (l.IsRepository != r.IsRepository) - return l.IsRepository ? 1 : -1; - - return string.Compare(l.Name, r.Name, StringComparison.Ordinal); - }); + SortNodes(container); Save(); } - public void AutoRemoveInvalidNode() + public bool AutoRemoveInvalidNode() { - var changed = RemoveInvalidRepositoriesRecursive(RepositoryNodes); - if (changed) - Save(); + return RemoveInvalidRepositoriesRecursive(RepositoryNodes); } public void Save() @@ -588,6 +590,13 @@ namespace SourceGit.ViewModels } } + private void SortNodesRecursive(List collection) + { + SortNodes(collection); + foreach (var node in collection) + SortNodesRecursive(node.SubNodes); + } + private RepositoryNode FindNodeRecursive(string id, List collection) { foreach (var node in collection) diff --git a/src/ViewModels/ScanRepositories.cs b/src/ViewModels/ScanRepositories.cs index 833a1402..2618519b 100644 --- a/src/ViewModels/ScanRepositories.cs +++ b/src/ViewModels/ScanRepositories.cs @@ -64,6 +64,11 @@ namespace SourceGit.ViewModels } Preferences.Instance.AutoRemoveInvalidNode(); + + // Sort & Save unconditionally after a complete rescan. + Preferences.Instance.SortAllNodes(); + Preferences.Instance.Save(); + Welcome.Instance.Refresh(); }); @@ -151,13 +156,7 @@ namespace SourceGit.ViewModels IsExpanded = true, }; collection.Add(added); - collection.Sort((l, r) => - { - if (l.IsRepository != r.IsRepository) - return l.IsRepository ? 1 : -1; - - return string.Compare(l.Name, r.Name, StringComparison.Ordinal); - }); + Preferences.Instance.SortNodes(collection); return added; }