-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathWorkspaceLauncherForVSCodeCommandsProvider.cs
More file actions
109 lines (101 loc) · 3.65 KB
/
Copy pathWorkspaceLauncherForVSCodeCommandsProvider.cs
File metadata and controls
109 lines (101 loc) · 3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Modifications copyright (c) 2025 tanchekwei
// Licensed under the MIT License. See the LICENSE file in the project root for details.
using System;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
using Windows.ApplicationModel;
using WorkspaceLauncherForVSCode.Classes;
using WorkspaceLauncherForVSCode.Commands;
using WorkspaceLauncherForVSCode.Interfaces;
using WorkspaceLauncherForVSCode.Listeners;
using WorkspaceLauncherForVSCode.Pages;
namespace WorkspaceLauncherForVSCode;
public partial class WorkspaceLauncherForVSCodeCommandsProvider : CommandProvider
{
private readonly SettingsManager _settingsManager;
private readonly IVisualStudioCodeService _vscodeService;
private readonly SettingsListener _settingsListener;
private readonly VisualStudioCodePage _page;
private readonly IFallbackCommandItem[] _fallbacks;
public WorkspaceLauncherForVSCodeCommandsProvider(
SettingsManager settingsManager,
IVisualStudioCodeService visualStudioCodeService,
SettingsListener settingsListener,
VisualStudioCodePage page,
WorkspaceStorage workspaceStorage,
RefreshWorkspacesCommand refreshWorkspacesCommand,
IPinService pinService)
{
try
{
Id = Package.Current.Id.Name;
#if DEBUG
using var logger = new TimeLogger();
#endif
_settingsManager = settingsManager;
_vscodeService = visualStudioCodeService;
DisplayName = Constant.VisualStudioCodeDisplayName;
Icon = Classes.Icon.VisualStudioAndVisualStudioCode;
Settings = _settingsManager.Settings;
_settingsListener = settingsListener;
_settingsListener.InstanceSettingsChanged += OnInstanceSettingsChanged;
_page = page;
var refreshCommandContextItem = new CommandContextItem(refreshWorkspacesCommand);
_fallbacks = new IFallbackCommandItem[_settingsManager.FallbackCount + Constant.FallbackIndex.StartOfDynamicFallback];
_fallbacks[Constant.FallbackIndex.OpenInVisualStudioCode] = new FallbackOpenRecentVisualStudioCodeItem(_page);
for (int i = Constant.FallbackIndex.StartOfDynamicFallback, fallbackResultIndex = 0; i < _fallbacks.Length; i++, fallbackResultIndex++)
{
_fallbacks[i] = new FallbackWorkspaceItem(
_page,
fallbackResultIndex); // index start with 0
}
}
catch (Exception ex)
{
ErrorLogger.LogError(ex);
_settingsManager = null!;
_vscodeService = null!;
_settingsListener = null!;
_page = null!;
_fallbacks = null!;
throw;
}
}
private void OnInstanceSettingsChanged(object? sender, EventArgs e)
{
try
{
#if DEBUG
using var logger = new TimeLogger();
#endif
_page.StartRefresh();
}
catch (Exception ex)
{
ErrorLogger.LogError(ex);
}
}
public override ICommandItem[] TopLevelCommands()
{
try
{
return [
new CommandItem(_page) {
MoreCommands = [
new CommandContextItem(Settings!.SettingsPage),
],
},
];
}
catch (Exception ex)
{
ErrorLogger.LogError(ex);
return [];
}
}
public override IFallbackCommandItem[] FallbackCommands() => _fallbacks;
public override ICommandItem? GetCommandItem(string id)
{
return _page.GetCommandItem(id);
}
}