enhance: re-calculate the opened repositories in active workspace (#511)

This commit is contained in:
leo 2024-09-25 15:07:23 +08:00
parent 28c59ee0ab
commit acf71a30b8
No known key found for this signature in database
2 changed files with 36 additions and 10 deletions

View file

@ -32,8 +32,8 @@ namespace SourceGit.ViewModels
{ {
PopupHost.Active = value; PopupHost.Active = value;
if (!_ignoreIndexChange && value is { Data: Repository }) if (!_ignoreIndexChange && value is { Data: Repository repo})
ActiveWorkspace.ActiveIdx = Pages.IndexOf(value); ActiveWorkspace.ActiveIdx = ActiveWorkspace.Repositories.IndexOf(repo.FullPath);
} }
} }
} }
@ -131,10 +131,22 @@ namespace SourceGit.ViewModels
public void MoveTab(LauncherPage from, LauncherPage to) public void MoveTab(LauncherPage from, LauncherPage to)
{ {
_ignoreIndexChange = true;
var fromIdx = Pages.IndexOf(from); var fromIdx = Pages.IndexOf(from);
var toIdx = Pages.IndexOf(to); var toIdx = Pages.IndexOf(to);
Pages.Move(fromIdx, toIdx); Pages.Move(fromIdx, toIdx);
ActivePage = from; ActivePage = from;
ActiveWorkspace.Repositories.Clear();
foreach (var p in Pages)
{
if (p.Data is Repository r)
ActiveWorkspace.Repositories.Add(r.FullPath);
}
ActiveWorkspace.ActiveIdx = ActiveWorkspace.Repositories.IndexOf(from.Node.Id);
_ignoreIndexChange = false;
} }
public void GotoNextTab() public void GotoNextTab()
@ -164,7 +176,9 @@ namespace SourceGit.ViewModels
var last = Pages[0]; var last = Pages[0];
if (last.Data is Repository repo) if (last.Data is Repository repo)
{ {
ActiveWorkspace.Repositories.Remove(repo.FullPath); ActiveWorkspace.Repositories.Clear();
ActiveWorkspace.ActiveIdx = 0;
Models.AutoFetchManager.Instance.RemoveRepository(repo.FullPath); Models.AutoFetchManager.Instance.RemoveRepository(repo.FullPath);
repo.Close(); repo.Close();
@ -180,6 +194,7 @@ namespace SourceGit.ViewModels
App.Quit(0); App.Quit(0);
} }
_ignoreIndexChange = false;
return; return;
} }
@ -213,6 +228,8 @@ namespace SourceGit.ViewModels
if (Pages.Count == 1) if (Pages.Count == 1)
return; return;
_ignoreIndexChange = true;
var id = ActivePage.Node.Id; var id = ActivePage.Node.Id;
foreach (var one in Pages) foreach (var one in Pages)
{ {
@ -221,12 +238,17 @@ namespace SourceGit.ViewModels
} }
Pages = new AvaloniaList<LauncherPage> { ActivePage }; Pages = new AvaloniaList<LauncherPage> { ActivePage };
ActiveWorkspace.ActiveIdx = 0;
OnPropertyChanged(nameof(Pages)); OnPropertyChanged(nameof(Pages));
_ignoreIndexChange = false;
GC.Collect(); GC.Collect();
} }
public void CloseRightTabs() public void CloseRightTabs()
{ {
_ignoreIndexChange = true;
var endIdx = Pages.IndexOf(ActivePage); var endIdx = Pages.IndexOf(ActivePage);
for (var i = Pages.Count - 1; i > endIdx; i--) for (var i = Pages.Count - 1; i > endIdx; i--)
{ {
@ -234,6 +256,7 @@ namespace SourceGit.ViewModels
Pages.Remove(Pages[i]); Pages.Remove(Pages[i]);
} }
_ignoreIndexChange = false;
GC.Collect(); GC.Collect();
} }
@ -270,7 +293,6 @@ namespace SourceGit.ViewModels
}; };
repo.Open(); repo.Open();
ActiveWorkspace.AddRepository(repo.FullPath);
Models.AutoFetchManager.Instance.AddRepository(repo.FullPath, repo.GitDir); Models.AutoFetchManager.Instance.AddRepository(repo.FullPath, repo.GitDir);
if (page == null) if (page == null)
@ -294,6 +316,16 @@ namespace SourceGit.ViewModels
} }
ActivePage = page; ActivePage = page;
ActiveWorkspace.Repositories.Clear();
foreach (var p in Pages)
{
if (p.Data is Repository r)
ActiveWorkspace.Repositories.Add(r.FullPath);
}
if (!_ignoreIndexChange)
ActiveWorkspace.ActiveIdx = ActiveWorkspace.Repositories.IndexOf(node.Id);
} }
public void DispatchNotification(string pageId, string message, bool isError) public void DispatchNotification(string pageId, string message, bool isError)

View file

@ -51,12 +51,6 @@ namespace SourceGit.ViewModels
get => new SolidColorBrush(_color); get => new SolidColorBrush(_color);
} }
public void AddRepository(string repo)
{
if (!Repositories.Contains(repo))
Repositories.Add(repo);
}
private string _name = string.Empty; private string _name = string.Empty;
private uint _color = 4278221015; private uint _color = 4278221015;
private bool _isActive = false; private bool _isActive = false;