Skip to content

Commit 9cadd04

Browse files
committed
Use dependency injection
1 parent 53526e5 commit 9cadd04

16 files changed

+221
-85
lines changed

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<ItemGroup>
66
<PackageVersion Include="Microsoft.CommandPalette.Extensions" Version="0.2.0" />
77
<PackageVersion Include="Microsoft.Data.Sqlite" Version="9.0.7" />
8+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.7" />
89
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.2428" />
910
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.6.250205002" />
1011
<PackageVersion Include="System.Text.Json" Version="9.0.7" />

WorkspaceLauncherForVSCode/Classes/Constant.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ public static class Constant
1111
public const string AppName = "WorkspaceLauncherForVSCode";
1212
#endif
1313
public const string VscodeRemoteScheme = "vscode-remote://";
14+
public static readonly string AssemblyVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? string.Empty;
1415
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace WorkspaceLauncherForVSCode.Classes;
5+
public class CountTracker
6+
{
7+
private readonly Dictionary<CountType, int> _counts = new();
8+
9+
public event EventHandler<CountType>? CountChanged;
10+
11+
public int this[CountType type] => _counts.TryGetValue(type, out var count) ? count : 0;
12+
13+
public void Update(CountType type, int value)
14+
{
15+
if (!_counts.TryGetValue(type, out var oldValue) || oldValue != value)
16+
{
17+
_counts[type] = value;
18+
CountChanged?.Invoke(this, type);
19+
}
20+
}
21+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace WorkspaceLauncherForVSCode.Classes;
2+
public enum CountType
3+
{
4+
Total,
5+
VisualStudio,
6+
VisualStudioCode
7+
}

WorkspaceLauncherForVSCode/Classes/Icon.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ public static class Icon
1818
public static readonly IconInfo Help = new IconInfo("\uE897");
1919
public static readonly IconInfo Info = new IconInfo("\uE946");
2020
public static readonly IconInfo Setting = new IconInfo("\uE713");
21+
public static readonly IconInfo Bug = new IconInfo("\uEBE8");
2122
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Collections.Generic;
2+
using System.Text.Json.Serialization;
3+
4+
namespace WorkspaceLauncherForVSCode.Classes
5+
{
6+
[JsonSerializable(typeof(List<VisualStudioCodeWorkspace>))]
7+
internal sealed partial class VisualStudioCodeWorkspaceSerializerContext : JsonSerializerContext
8+
{
9+
}
10+
}

WorkspaceLauncherForVSCode/Commands/OpenInExplorerCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public override CommandResult Invoke()
3030
{
3131
return CommandResult.Dismiss();
3232
}
33-
if (workspace?.WorkspaceType == Enums.WorkspaceType.Solution)
33+
if (workspace?.WorkspaceType == Enums.WorkspaceType.Solution || workspace?.WorkspaceType == WorkspaceType.Workspace)
3434
{
3535
pathToOpen = Path.GetDirectoryName(pathToOpen) ?? string.Empty;
3636
}
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// Modifications copyright (c) 2025 tanchekwei
22
// Licensed under the MIT License. See the LICENSE file in the project root for details.
3+
using System;
34
using Microsoft.CommandPalette.Extensions.Toolkit;
45

56
namespace WorkspaceLauncherForVSCode.Commands;
@@ -9,19 +10,19 @@ public sealed partial class RefreshWorkspacesCommand : InvokableCommand
910
public override string Name => "Refresh";
1011
private readonly IVisualStudioCodeService _visualStudioCodeService;
1112
private readonly SettingsManager _settingsManager;
12-
private readonly VisualStudioCodePage _visualStudioCodePage;
13+
public event EventHandler? TriggerRefresh;
1314

14-
public RefreshWorkspacesCommand(IVisualStudioCodeService visualStudioCodeService, SettingsManager settingsManager, VisualStudioCodePage visualStudioCodePage)
15+
public RefreshWorkspacesCommand(IVisualStudioCodeService visualStudioCodeService, SettingsManager settingsManager)
1516
{
1617
Icon = new IconInfo("\xE72C"); // Refresh icon
1718
_visualStudioCodeService = visualStudioCodeService;
1819
_settingsManager = settingsManager;
19-
_visualStudioCodePage = visualStudioCodePage;
2020
}
2121

2222
public override CommandResult Invoke()
2323
{
24-
_visualStudioCodePage.StartRefresh();
24+
//_visualStudioCodePage.StartRefresh();
25+
TriggerRefresh?.Invoke(this, EventArgs.Empty);
2526
return CommandResult.KeepOpen();
2627
}
2728
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Copyright (c) 2025 tanchekwei
2+
// Licensed under the MIT License. See the LICENSE file in the project root for details.
3+
4+
using System.Text.Json;
5+
using Microsoft.CommandPalette.Extensions;
6+
using Microsoft.CommandPalette.Extensions.Toolkit;
7+
using WorkspaceLauncherForVSCode.Classes;
8+
9+
namespace WorkspaceLauncherForVSCode.Pages;
10+
11+
public sealed partial class DetailPage : ContentPage
12+
{
13+
private static readonly JsonSerializerOptions _jsonOptions = new()
14+
{
15+
WriteIndented = true
16+
};
17+
18+
private static readonly VisualStudioCodeWorkspaceSerializerContext _serializerContext =
19+
new(_jsonOptions);
20+
21+
private const string TitleText = "Detail";
22+
private const string NameText = "Detail";
23+
private const string IdText = "Detail";
24+
private const string MarkdownPrefix = "```json\n";
25+
private const string MarkdownSuffix = "\n```";
26+
27+
readonly VisualStudioCodeWorkspace Workspace;
28+
29+
public DetailPage(VisualStudioCodeWorkspace workspace)
30+
{
31+
Title = TitleText;
32+
Name = NameText;
33+
Id = IdText;
34+
Icon = Classes.Icon.Bug;
35+
Workspace = workspace;
36+
}
37+
38+
public override IContent[] GetContent()
39+
{
40+
var json = JsonSerializer.Serialize(Workspace, _serializerContext.VisualStudioCodeWorkspace);
41+
var markdown = $"{MarkdownPrefix}{json}{MarkdownSuffix}";
42+
return [new MarkdownContent(markdown)];
43+
}
44+
}

WorkspaceLauncherForVSCode/Pages/HelpPage.cs

Lines changed: 12 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -12,71 +12,30 @@ namespace WorkspaceLauncherForVSCode.Pages
1212
{
1313
public sealed partial class HelpPage : ListPage
1414
{
15-
private static readonly ListItem _openSettingsItem = new ListItem(new OpenInExplorerCommand(Utilities.BaseSettingsPath(Constant.AppName), null, "Open extension settings / logs folder"));
16-
private static readonly ListItem _viewSourceItem = new ListItem(new OpenUrlCommand("https://github.com/tanchekwei/WorkspaceLauncherForVSCode", "View source code", Classes.Icon.GitHub));
17-
private static readonly ListItem _reportBugItem = new ListItem(new OpenUrlCommand("https://github.com/tanchekwei/WorkspaceLauncherForVSCode/issues/new", "Report issue", Classes.Icon.GitHub));
1815
private readonly ListItem _settingsItem;
19-
private int _total;
20-
private int _totalVisualStudio;
21-
private int _totalVisualStudioCode;
22-
public HelpPage(SettingsManager settingsManager)
16+
private readonly CountTracker _countTracker;
17+
public HelpPage(SettingsManager settingsManager, CountTracker countTracker)
2318
{
2419
Name = "Help";
2520
Icon = Classes.Icon.Help;
2621
Id = "HelpPage";
2722
_settingsItem = new ListItem(settingsManager.Settings.SettingsPage) { Title = "Setting", Icon = Classes.Icon.Setting };
23+
_countTracker = countTracker;
2824
}
2925

3026
public override IListItem[] GetItems()
3127
{
28+
StaticHelpItems.CountItems[0].Title = _countTracker[CountType.VisualStudio].ToString();
29+
StaticHelpItems.CountItems[1].Title = _countTracker[CountType.VisualStudioCode].ToString();
30+
StaticHelpItems.CountItems[2].Title = _countTracker[CountType.Total].ToString();
3231
return [
33-
_reportBugItem,
34-
_viewSourceItem,
35-
new ListItem()
36-
{
37-
Title = $"{_totalVisualStudio}",
38-
Subtitle = "Visual Studio Count",
39-
Icon = Classes.Icon.VisualStudio,
40-
},
41-
new ListItem()
42-
{
43-
Title = $"{_totalVisualStudioCode}",
44-
Subtitle = "Visual Studio Code Count",
45-
Icon = Classes.Icon.VisualStudioCode,
46-
},
47-
new ListItem()
48-
{
49-
Title = $"{_total}",
50-
Subtitle = "Visual Studio / Code Count",
51-
Icon = Classes.Icon.VisualStudioAndVisualStudioCode,
52-
},
53-
new ListItem()
54-
{
55-
Title = Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? string.Empty,
56-
Subtitle = "Extension Version",
57-
Icon = Classes.Icon.Extension,
58-
},
59-
_settingsItem,
60-
_openSettingsItem,
32+
StaticHelpItems.ReportBug,
33+
StaticHelpItems.ViewSource,
34+
..StaticHelpItems.CountItems,
35+
StaticHelpItems.ExtensionVersion,
36+
StaticHelpItems.SettingsItem,
37+
StaticHelpItems.OpenSettings,
6138
];
6239
}
63-
64-
public void UpdateTotal(int count)
65-
{
66-
_total = count;
67-
RaiseItemsChanged();
68-
}
69-
70-
public void UpdateTotalVisualStudio(int count)
71-
{
72-
_totalVisualStudio = count;
73-
RaiseItemsChanged();
74-
}
75-
76-
public void UpdateTotalVisualStudioCode(int count)
77-
{
78-
_totalVisualStudioCode = count;
79-
RaiseItemsChanged();
80-
}
8140
}
8241
}

0 commit comments

Comments
 (0)