enhance: unify sorting of RepositoryNode tree, unconditional sort & save after rescan

This commit is contained in:
Göran W 2025-06-03 20:52:30 +02:00 committed by leo
parent 88c38b4139
commit b969ac161a
No known key found for this signature in database
2 changed files with 29 additions and 21 deletions

View file

@ -436,16 +436,26 @@ namespace SourceGit.ViewModels
{ {
var collection = to == null ? RepositoryNodes : to.SubNodes; var collection = to == null ? RepositoryNodes : to.SubNodes;
collection.Add(node); collection.Add(node);
collection.Sort((l, r) => SortNodes(collection);
if (save)
Save();
}
public void SortNodes(List<RepositoryNode> collection)
{
collection?.Sort((l, r) =>
{ {
if (l.IsRepository != r.IsRepository) if (l.IsRepository != r.IsRepository)
return l.IsRepository ? 1 : -1; return l.IsRepository ? 1 : -1;
return string.Compare(l.Name, r.Name, StringComparison.Ordinal); return string.Compare(l.Name, r.Name, StringComparison.Ordinal);
}); });
}
if (save) public void SortAllNodes()
Save(); {
SortNodesRecursive(RepositoryNodes);
} }
public RepositoryNode FindNode(string id) public RepositoryNode FindNode(string id)
@ -503,22 +513,14 @@ namespace SourceGit.ViewModels
public void SortByRenamedNode(RepositoryNode node) public void SortByRenamedNode(RepositoryNode node)
{ {
var container = FindNodeContainer(node, RepositoryNodes); var container = FindNodeContainer(node, RepositoryNodes);
container?.Sort((l, r) => SortNodes(container);
{
if (l.IsRepository != r.IsRepository)
return l.IsRepository ? 1 : -1;
return string.Compare(l.Name, r.Name, StringComparison.Ordinal);
});
Save(); Save();
} }
public void AutoRemoveInvalidNode() public bool AutoRemoveInvalidNode()
{ {
var changed = RemoveInvalidRepositoriesRecursive(RepositoryNodes); return RemoveInvalidRepositoriesRecursive(RepositoryNodes);
if (changed)
Save();
} }
public void Save() public void Save()
@ -588,6 +590,13 @@ namespace SourceGit.ViewModels
} }
} }
private void SortNodesRecursive(List<RepositoryNode> collection)
{
SortNodes(collection);
foreach (var node in collection)
SortNodesRecursive(node.SubNodes);
}
private RepositoryNode FindNodeRecursive(string id, List<RepositoryNode> collection) private RepositoryNode FindNodeRecursive(string id, List<RepositoryNode> collection)
{ {
foreach (var node in collection) foreach (var node in collection)

View file

@ -64,6 +64,11 @@ namespace SourceGit.ViewModels
} }
Preferences.Instance.AutoRemoveInvalidNode(); Preferences.Instance.AutoRemoveInvalidNode();
// Sort & Save unconditionally after a complete rescan.
Preferences.Instance.SortAllNodes();
Preferences.Instance.Save();
Welcome.Instance.Refresh(); Welcome.Instance.Refresh();
}); });
@ -151,13 +156,7 @@ namespace SourceGit.ViewModels
IsExpanded = true, IsExpanded = true,
}; };
collection.Add(added); collection.Add(added);
collection.Sort((l, r) => Preferences.Instance.SortNodes(collection);
{
if (l.IsRepository != r.IsRepository)
return l.IsRepository ? 1 : -1;
return string.Compare(l.Name, r.Name, StringComparison.Ordinal);
});
return added; return added;
} }