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;
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)
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<RepositoryNode> collection)
{
SortNodes(collection);
foreach (var node in collection)
SortNodesRecursive(node.SubNodes);
}
private RepositoryNode FindNodeRecursive(string id, List<RepositoryNode> collection)
{
foreach (var node in collection)

View file

@ -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;
}