Skip to content

Commit f356a7b

Browse files
committed
refactor: re-design command palette API
Signed-off-by: leo <longshuang@msn.cn>
1 parent c677dd9 commit f356a7b

15 files changed

+97
-278
lines changed

src/ViewModels/BlameCommandPalette.cs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@ public string SelectedFile
3535
set => SetProperty(ref _selectedFile, value);
3636
}
3737

38-
public BlameCommandPalette(Launcher launcher, string repo)
38+
public BlameCommandPalette(string repo)
3939
{
40-
_launcher = launcher;
4140
_repo = repo;
4241
_isLoading = true;
4342

@@ -61,27 +60,19 @@ public BlameCommandPalette(Launcher launcher, string repo)
6160
});
6261
}
6362

64-
public override void Cleanup()
65-
{
66-
_launcher = null;
67-
_repo = null;
68-
_head = null;
69-
_repoFiles.Clear();
70-
_filter = null;
71-
_visibleFiles.Clear();
72-
_selectedFile = null;
73-
}
74-
7563
public void ClearFilter()
7664
{
7765
Filter = string.Empty;
7866
}
7967

8068
public void Launch()
8169
{
70+
_repoFiles.Clear();
71+
_visibleFiles.Clear();
72+
Close();
73+
8274
if (!string.IsNullOrEmpty(_selectedFile))
8375
App.ShowWindow(new Blame(_repo, _selectedFile, _head));
84-
_launcher.CancelCommandPalette();
8576
}
8677

8778
private void UpdateVisible()
@@ -117,7 +108,6 @@ private void UpdateVisible()
117108
}
118109
}
119110

120-
private Launcher _launcher = null;
121111
private string _repo = null;
122112
private bool _isLoading = false;
123113
private Models.Commit _head = null;

src/ViewModels/CheckoutCommandPalette.cs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,36 +28,24 @@ public string Filter
2828
}
2929
}
3030

31-
public CheckoutCommandPalette(Launcher launcher, Repository repo)
31+
public CheckoutCommandPalette(Repository repo)
3232
{
33-
_launcher = launcher;
3433
_repo = repo;
3534
UpdateBranches();
3635
}
3736

38-
public override void Cleanup()
39-
{
40-
_launcher = null;
41-
_repo = null;
42-
_branches.Clear();
43-
_selectedBranch = null;
44-
_filter = null;
45-
}
46-
4737
public void ClearFilter()
4838
{
4939
Filter = string.Empty;
5040
}
5141

5242
public async Task ExecAsync()
5343
{
54-
_launcher.CommandPalette = null;
44+
_branches.Clear();
45+
Close();
5546

5647
if (_selectedBranch != null)
5748
await _repo.CheckoutBranchAsync(_selectedBranch);
58-
59-
Dispose();
60-
GC.Collect();
6149
}
6250

6351
private void UpdateBranches()
@@ -94,7 +82,6 @@ private void UpdateBranches()
9482
SelectedBranch = autoSelected;
9583
}
9684

97-
private Launcher _launcher;
9885
private Repository _repo;
9986
private List<Models.Branch> _branches = [];
10087
private Models.Branch _selectedBranch = null;

src/ViewModels/CompareCommandPalette.cs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,34 +32,25 @@ public string Filter
3232
}
3333
}
3434

35-
public CompareCommandPalette(Launcher launcher, Repository repo, object basedOn)
35+
public CompareCommandPalette(Repository repo, object basedOn)
3636
{
37-
_launcher = launcher;
3837
_repo = repo;
3938
_basedOn = basedOn ?? repo.CurrentBranch;
4039
UpdateRefs();
4140
}
4241

43-
public override void Cleanup()
44-
{
45-
_launcher = null;
46-
_repo = null;
47-
_basedOn = null;
48-
_compareTo = null;
49-
_refs.Clear();
50-
_filter = null;
51-
}
52-
5342
public void ClearFilter()
5443
{
5544
Filter = string.Empty;
5645
}
5746

5847
public void Launch()
5948
{
49+
_refs.Clear();
50+
Close();
51+
6052
if (_compareTo != null)
6153
App.ShowWindow(new Compare(_repo, _basedOn, _compareTo));
62-
_launcher?.CancelCommandPalette();
6354
}
6455

6556
private void UpdateRefs()
@@ -114,7 +105,6 @@ private void UpdateRefs()
114105
CompareTo = autoSelected;
115106
}
116107

117-
private Launcher _launcher;
118108
private Repository _repo;
119109
private object _basedOn = null;
120110
private object _compareTo = null;

src/ViewModels/ExecuteCustomActionCommandPalette.cs

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@ public string Filter
4141
}
4242
}
4343

44-
public ExecuteCustomActionCommandPalette(Launcher launcher, Repository repo)
44+
public ExecuteCustomActionCommandPalette(Repository repo)
4545
{
46-
_launcher = launcher;
4746
_repo = repo;
4847

4948
var actions = repo.GetCustomActions(Models.CustomActionScope.Repository);
@@ -65,30 +64,19 @@ public ExecuteCustomActionCommandPalette(Launcher launcher, Repository repo)
6564
}
6665
}
6766

68-
public override void Cleanup()
69-
{
70-
_launcher = null;
71-
_repo = null;
72-
_actions.Clear();
73-
_visibleActions.Clear();
74-
_selected = null;
75-
_filter = null;
76-
}
77-
7867
public void ClearFilter()
7968
{
8069
Filter = string.Empty;
8170
}
8271

8372
public async Task ExecAsync()
8473
{
85-
_launcher.CommandPalette = null;
74+
_actions.Clear();
75+
_visibleActions.Clear();
76+
Close();
8677

8778
if (_selected != null)
8879
await _repo.ExecCustomActionAsync(_selected.Action, null);
89-
90-
Dispose();
91-
GC.Collect();
9280
}
9381

9482
private void UpdateVisibleActions()
@@ -117,7 +105,6 @@ private void UpdateVisibleActions()
117105
Selected = autoSelected;
118106
}
119107

120-
private Launcher _launcher;
121108
private Repository _repo;
122109
private List<ExecuteCustomActionCommandPaletteCmd> _actions = [];
123110
private List<ExecuteCustomActionCommandPaletteCmd> _visibleActions = [];

src/ViewModels/FileHistoryCommandPalette.cs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@ public string SelectedFile
3535
set => SetProperty(ref _selectedFile, value);
3636
}
3737

38-
public FileHistoryCommandPalette(Launcher launcher, string repo)
38+
public FileHistoryCommandPalette(string repo)
3939
{
40-
_launcher = launcher;
4140
_repo = repo;
4241
_isLoading = true;
4342

@@ -56,26 +55,19 @@ public FileHistoryCommandPalette(Launcher launcher, string repo)
5655
});
5756
}
5857

59-
public override void Cleanup()
60-
{
61-
_launcher = null;
62-
_repo = null;
63-
_repoFiles.Clear();
64-
_filter = null;
65-
_visibleFiles.Clear();
66-
_selectedFile = null;
67-
}
68-
6958
public void ClearFilter()
7059
{
7160
Filter = string.Empty;
7261
}
7362

7463
public void Launch()
7564
{
65+
_repoFiles.Clear();
66+
_visibleFiles.Clear();
67+
Close();
68+
7669
if (!string.IsNullOrEmpty(_selectedFile))
7770
App.ShowWindow(new FileHistories(_repo, _selectedFile));
78-
_launcher.CancelCommandPalette();
7971
}
8072

8173
private void UpdateVisible()
@@ -111,7 +103,6 @@ private void UpdateVisible()
111103
}
112104
}
113105

114-
private Launcher _launcher = null;
115106
private string _repo = null;
116107
private bool _isLoading = false;
117108
private List<string> _repoFiles = null;

src/ViewModels/ICommandPalette.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
1-
using System;
2-
using CommunityToolkit.Mvvm.ComponentModel;
1+
using CommunityToolkit.Mvvm.ComponentModel;
32

43
namespace SourceGit.ViewModels
54
{
6-
public class ICommandPalette : ObservableObject, IDisposable
5+
public class ICommandPalette : ObservableObject
76
{
8-
public void Dispose()
7+
public void Open()
98
{
10-
Cleanup();
9+
var host = App.GetLauncher();
10+
if (host != null)
11+
host.CommandPalette = this;
1112
}
1213

13-
public virtual void Cleanup()
14+
public void Close()
1415
{
16+
var host = App.GetLauncher();
17+
if (host != null)
18+
host.CommandPalette = null;
1519
}
1620
}
1721
}

src/ViewModels/Launcher.cs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -347,23 +347,6 @@ public void OpenRepositoryInTab(RepositoryNode node, LauncherPage page)
347347
ActivePage = page;
348348
}
349349

350-
public void OpenCommandPalette(ICommandPalette commandPalette)
351-
{
352-
var old = _commandPalette;
353-
CommandPalette = commandPalette;
354-
old?.Dispose();
355-
}
356-
357-
public void CancelCommandPalette()
358-
{
359-
if (_commandPalette != null)
360-
{
361-
_commandPalette?.Dispose();
362-
CommandPalette = null;
363-
GC.Collect();
364-
}
365-
}
366-
367350
public void DispatchNotification(string pageId, string message, bool isError)
368351
{
369352
if (!Dispatcher.UIThread.CheckAccess())
@@ -453,7 +436,7 @@ private void PostActivePageChanged()
453436
builder.Append(" - ").Append(_activeWorkspace.Name);
454437

455438
Title = builder.ToString();
456-
CancelCommandPalette();
439+
CommandPalette = null;
457440
}
458441

459442
private Workspace _activeWorkspace;

src/ViewModels/LauncherPagesCommandPalette.cs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,30 +60,22 @@ public LauncherPagesCommandPalette(Launcher launcher)
6060
UpdateVisible();
6161
}
6262

63-
public override void Cleanup()
64-
{
65-
_launcher = null;
66-
_opened.Clear();
67-
_visiblePages.Clear();
68-
_visibleRepos.Clear();
69-
_searchFilter = null;
70-
_selectedPage = null;
71-
_selectedRepo = null;
72-
}
73-
7463
public void ClearFilter()
7564
{
7665
SearchFilter = string.Empty;
7766
}
7867

7968
public void OpenOrSwitchTo()
8069
{
70+
_opened.Clear();
71+
_visiblePages.Clear();
72+
_visibleRepos.Clear();
73+
Close();
74+
8175
if (_selectedPage != null)
8276
_launcher.ActivePage = _selectedPage;
8377
else if (_selectedRepo != null)
8478
_launcher.OpenRepositoryInTab(_selectedRepo, null);
85-
86-
_launcher?.CancelCommandPalette();
8779
}
8880

8981
private void UpdateVisible()

src/ViewModels/MergeCommandPalette.cs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,33 +27,24 @@ public Models.Branch SelectedBranch
2727
set => SetProperty(ref _selectedBranch, value);
2828
}
2929

30-
public MergeCommandPalette(Launcher launcher, Repository repo)
30+
public MergeCommandPalette(Repository repo)
3131
{
32-
_launcher = launcher;
3332
_repo = repo;
3433
UpdateBranches();
3534
}
3635

37-
public override void Cleanup()
38-
{
39-
_launcher = null;
40-
_repo = null;
41-
_branches.Clear();
42-
_filter = null;
43-
_selectedBranch = null;
44-
}
45-
4636
public void ClearFilter()
4737
{
4838
Filter = string.Empty;
4939
}
5040

5141
public void Launch()
5242
{
43+
_branches.Clear();
44+
Close();
45+
5346
if (_repo.CanCreatePopup() && _selectedBranch != null)
5447
_repo.ShowPopup(new Merge(_repo, _selectedBranch, _repo.CurrentBranch.Name, false));
55-
56-
_launcher?.CancelCommandPalette();
5748
}
5849

5950
private void UpdateBranches()
@@ -90,7 +81,6 @@ private void UpdateBranches()
9081
SelectedBranch = autoSelected;
9182
}
9283

93-
private Launcher _launcher = null;
9484
private Repository _repo = null;
9585
private List<Models.Branch> _branches = new List<Models.Branch>();
9686
private string _filter = string.Empty;

0 commit comments

Comments
 (0)