Skip to content

Commit cf3e921

Browse files
attempt to adopt the new settings manager
1 parent c649033 commit cf3e921

File tree

8 files changed

+117
-170
lines changed

8 files changed

+117
-170
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"profiles": {
3+
"EverythingExtension (Package)": {
4+
"commandName": "MsixPackage",
5+
"commandLineArgs": "-RegisterProcessAsComServer"
6+
},
7+
"EverythingExtension (Unpackaged)": {
8+
"commandName": "Project"
9+
}
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
// Copyright (c) Microsoft Corporation
2+
// The Microsoft Corporation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using System;
6+
using System.Collections.Generic;
7+
using System.IO;
8+
using Community.PowerToys.Run.Plugin.EdgeFavorite.Core.Models;
9+
using Microsoft.CmdPal.Extensions.Helpers;
10+
11+
namespace CmdPal.Ext.EdgeFavorites;
12+
13+
internal sealed class SettingsManager : JsonSettingsManager
14+
{
15+
private const string _namespace = "edgeFavorites";
16+
17+
#nullable enable
18+
private static SettingsManager? _instance;
19+
#nullable disable
20+
21+
private static string Namespaced(string propertyName) => $"{_namespace}.{propertyName}";
22+
23+
private readonly ToggleSetting _searchTree = new(
24+
Namespaced(nameof(SearchTree)),
25+
"Search as tree",
26+
"Navigate the folder tree when searching (requires Command Palette restart).",
27+
false);
28+
29+
public bool SearchTree => _searchTree.Value;
30+
31+
private readonly TextSetting _excludedProfiles = new(
32+
Namespaced(nameof(ExcludedProfiles)),
33+
"Excluded profiles",
34+
"Prevents favorites from the specified profiles to be loaded. Add one profile per line.",
35+
string.Empty);
36+
37+
public IReadOnlyCollection<string> ExcludedProfiles => _excludedProfiles.Value?.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries) ?? [];
38+
39+
private readonly ChoiceSetSetting _channel = new(
40+
Namespaced(nameof(Channel)),
41+
"Channel",
42+
"Select the channel to use.",
43+
[
44+
new("Stable", "Stable"),
45+
new("Beta", "Beta"),
46+
new("Dev", "Dev"),
47+
new("Canary", "Canary"),
48+
]);
49+
50+
public Channel Channel => Enum.TryParse(_channel.ToString(), out Channel channel) ? channel : Channel.Stable;
51+
52+
public SettingsManager()
53+
{
54+
FilePath = SettingsJsonPath();
55+
56+
Settings.Add(_searchTree);
57+
Settings.Add(_excludedProfiles);
58+
Settings.Add(_channel);
59+
60+
// Load settings from file upon initialization
61+
LoadSettings();
62+
}
63+
64+
internal static string SettingsJsonPath()
65+
{
66+
// Get the path to our exe
67+
var path = System.Reflection.Assembly.GetExecutingAssembly().Location;
68+
69+
// Get the directory of the exe
70+
var directory = Path.GetDirectoryName(path) ?? string.Empty;
71+
72+
// now, the state is just next to the exe
73+
return Path.Combine(directory, "settings.json");
74+
}
75+
76+
internal static SettingsManager Instance
77+
{
78+
get
79+
{
80+
_instance ??= new SettingsManager();
81+
return _instance;
82+
}
83+
}
84+
}

src/modules/cmdpal/exts/CmdPal.Ext.EdgeFavorites/EdgeFavoritesCommandsProvider.cs

+10-18
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// The Microsoft Corporation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5-
using System;
65
using CmdPal.Ext.EdgeFavorites.Pages;
76
using CmdPal.Ext.EdgeFavorites.Services;
87
using Community.PowerToys.Run.Plugin.EdgeFavorite.Core;
@@ -15,41 +14,34 @@ namespace CmdPal.Ext.EdgeFavorites;
1514
public partial class EdgeFavoritesActionsProvider : CommandProvider
1615
{
1716
private readonly ILogger _logger;
18-
private readonly SettingsRepository _settingsRepository;
1917
private readonly EdgeManager _edgeManager;
2018
private readonly ProfileManager _profileManager;
2119
private readonly FavoriteQuery _favoriteQuery;
20+
private readonly SettingsManager _settingsManager;
2221

2322
private readonly ICommandItem[] _commands;
2423

2524
public EdgeFavoritesActionsProvider()
2625
{
2726
_logger = new Logger();
28-
_settingsRepository = new SettingsRepository();
2927
_edgeManager = new EdgeManager(_logger);
3028
_profileManager = new ProfileManager(_logger, _edgeManager);
3129
_favoriteQuery = new FavoriteQuery(_profileManager);
30+
_settingsManager = new SettingsManager();
3231

33-
_settingsRepository.Initialize();
34-
_settingsRepository.OnSave += OnSave;
35-
36-
_edgeManager.Initialize(_settingsRepository.Channel);
37-
_profileManager.ReloadProfiles(_settingsRepository.ExcludedProfiles);
32+
// TODO handle save event
33+
// _edgeManager.Initialize(_settingsManager.Channel);
34+
// _profileManager.ReloadProfiles(_settingsManager.ExcludedProfiles);
35+
_edgeManager.Initialize(_settingsManager.Channel);
36+
_profileManager.ReloadProfiles(_settingsManager.ExcludedProfiles);
3837

3938
_commands =
4039
[
41-
_settingsRepository.SearchTree
42-
? new CommandItem(new TreePage(_edgeManager, _favoriteQuery, _profileManager, _settingsRepository))
43-
: new CommandItem(new SearchPage(_edgeManager, _favoriteQuery, _profileManager, _settingsRepository))
40+
_settingsManager.SearchTree
41+
? new CommandItem(new TreePage(_edgeManager, _favoriteQuery, _profileManager, _settingsManager))
42+
: new CommandItem(new SearchPage(_edgeManager, _favoriteQuery, _profileManager, _settingsManager))
4443
];
4544
}
4645

4746
public override ICommandItem[] TopLevelCommands() => _commands;
48-
49-
private void OnSave(object sender, EventArgs e)
50-
{
51-
// TODO cache
52-
_edgeManager.Initialize(_settingsRepository.Channel);
53-
_profileManager.ReloadProfiles(_settingsRepository.ExcludedProfiles);
54-
}
5547
}

src/modules/cmdpal/exts/CmdPal.Ext.EdgeFavorites/FavoriteListItem.cs

+4-12
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System;
66
using System.Globalization;
77
using System.Linq;
8-
using CmdPal.Ext.EdgeFavorites.Pages;
98
using CmdPal.Ext.EdgeFavorites.Services;
109
using Community.PowerToys.Run.Plugin.EdgeFavorite.Core.Models;
1110
using Community.PowerToys.Run.Plugin.EdgeFavorite.Core.Services;
@@ -21,7 +20,7 @@ private FavoriteListItem(ICommand command)
2120
{
2221
}
2322

24-
public static FavoriteListItem Create(EdgeManager edgeManager, SettingsRepository settingsRepository, FavoriteItem favorite, bool showProfileName, bool searchTree)
23+
public static FavoriteListItem Create(EdgeManager edgeManager, SettingsManager settingsManager, FavoriteItem favorite, bool showProfileName, bool searchTree)
2524
{
2625
if (favorite.Type == FavoriteType.Folder)
2726
{
@@ -34,7 +33,7 @@ public static FavoriteListItem Create(EdgeManager edgeManager, SettingsRepositor
3433
Icon = new("\uE8B7"),
3534
TextToSuggest = $"{favorite.Path}/",
3635
Tags = [new Tag() { Text = ResourceLoaderInstance.ResourceLoader.GetString("Folder_Tag") }],
37-
MoreCommands = GetFolderMoreCommands(edgeManager, favorite, settingsRepository),
36+
MoreCommands = GetFolderMoreCommands(edgeManager, favorite, settingsManager),
3837
};
3938
}
4039
else if (favorite.Type == FavoriteType.Url)
@@ -53,7 +52,6 @@ public static FavoriteListItem Create(EdgeManager edgeManager, SettingsRepositor
5352
new CommandContextItem(new CopyTextCommand(favorite.Url) { Name = ResourceLoaderInstance.ResourceLoader.GetString("Command_CopyUrl") }),
5453
new CommandContextItem(new OpenEdgeCommand(edgeManager, favorite, false, true) { Name = ResourceLoaderInstance.ResourceLoader.GetString("Command_OpenWindow"), Icon = new("\uE8A7") }),
5554
new CommandContextItem(new OpenEdgeCommand(edgeManager, favorite, true, false) { Name = ResourceLoaderInstance.ResourceLoader.GetString("Command_OpenPrivate"), Icon = new("\uE727") }),
56-
GetSettingsCommand(settingsRepository),
5755
],
5856
};
5957
}
@@ -65,7 +63,7 @@ public static FavoriteListItem Create(EdgeManager edgeManager, SettingsRepositor
6563
}
6664
}
6765

68-
private static IContextItem[] GetFolderMoreCommands(EdgeManager edgeManager, FavoriteItem favorite, SettingsRepository settingsRepository)
66+
private static IContextItem[] GetFolderMoreCommands(EdgeManager edgeManager, FavoriteItem favorite, SettingsManager settingsManager)
6967
{
7068
var childFav = favorite.Children.Where(c => c.Type == FavoriteType.Url).ToArray();
7169
var childFavCount = childFav.Length;
@@ -77,17 +75,11 @@ private static IContextItem[] GetFolderMoreCommands(EdgeManager edgeManager, Fav
7775
new CommandContextItem(new OpenEdgeCommand(edgeManager, childFav, false, false) { Name = string.Format(CultureInfo.CurrentCulture, ResourceLoaderInstance.ResourceLoader.GetString("Command_OpenAll"), childFavCount), Icon = new("\uE737") }),
7876
new CommandContextItem(new OpenEdgeCommand(edgeManager, childFav, false, true) { Name = string.Format(CultureInfo.CurrentCulture, ResourceLoaderInstance.ResourceLoader.GetString("Command_OpenAllWindow"), childFavCount), Icon = new("\uE8A7") }),
7977
new CommandContextItem(new OpenEdgeCommand(edgeManager, childFav, true, false) { Name = string.Format(CultureInfo.CurrentCulture, ResourceLoaderInstance.ResourceLoader.GetString("Command_OpenAllPrivate"), childFavCount), Icon = new("\uE727") }),
80-
GetSettingsCommand(settingsRepository),
8178
];
8279
}
8380
else
8481
{
85-
return [GetSettingsCommand(settingsRepository)];
82+
return [];
8683
}
8784
}
88-
89-
private static CommandContextItem GetSettingsCommand(SettingsRepository settingsRepository)
90-
{
91-
return new CommandContextItem(new SettingsPage(settingsRepository));
92-
}
9385
}

src/modules/cmdpal/exts/CmdPal.Ext.EdgeFavorites/Pages/SearchPage.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ internal sealed partial class SearchPage : ListPage
1616
private readonly EdgeManager _edgeManager;
1717
private readonly FavoriteQuery _favoriteQuery;
1818
private readonly ProfileManager _profileManager;
19-
private readonly SettingsRepository _settingsRepository;
19+
private readonly SettingsManager _settingsManager;
2020

21-
public SearchPage(EdgeManager edgeManager, FavoriteQuery favoriteQuery, ProfileManager profileManager, SettingsRepository settingsRepository)
21+
public SearchPage(EdgeManager edgeManager, FavoriteQuery favoriteQuery, ProfileManager profileManager, SettingsManager settingsManager)
2222
{
2323
_edgeManager = edgeManager;
2424
_favoriteQuery = favoriteQuery;
2525
_profileManager = profileManager;
26-
_settingsRepository = settingsRepository;
26+
_settingsManager = settingsManager;
2727

2828
Name = ResourceLoaderInstance.ResourceLoader.GetString("Edge_Favorites");
2929
Icon = new("\uE728");
@@ -51,7 +51,7 @@ private IEnumerable<FavoriteListItem> Search()
5151

5252
if (emptyQuery || score.Score > 0)
5353
{
54-
yield return FavoriteListItem.Create(_edgeManager, _settingsRepository, favorite, _profileManager.FavoriteProviders.Count > 1, _settingsRepository.SearchTree);
54+
yield return FavoriteListItem.Create(_edgeManager, _settingsManager, favorite, _profileManager.FavoriteProviders.Count > 1, _settingsManager.SearchTree);
5555
}
5656
}
5757
}

src/modules/cmdpal/exts/CmdPal.Ext.EdgeFavorites/Pages/SettingsPage.cs

-64
This file was deleted.

src/modules/cmdpal/exts/CmdPal.Ext.EdgeFavorites/Pages/TreePage.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ internal sealed partial class TreePage : DynamicListPage
1515
private readonly EdgeManager _edgeManager;
1616
private readonly FavoriteQuery _favoriteQuery;
1717
private readonly ProfileManager _profileManager;
18-
private readonly SettingsRepository _settingsRepository;
18+
private readonly SettingsManager _settingsManager;
1919

20-
public TreePage(EdgeManager edgeManager, FavoriteQuery favoriteQuery, ProfileManager profileManager, SettingsRepository settingsRepository)
20+
public TreePage(EdgeManager edgeManager, FavoriteQuery favoriteQuery, ProfileManager profileManager, SettingsManager settingsManager)
2121
{
2222
_edgeManager = edgeManager;
2323
_favoriteQuery = favoriteQuery;
2424
_profileManager = profileManager;
25-
_settingsRepository = settingsRepository;
25+
_settingsManager = settingsManager;
2626

2727
Name = ResourceLoaderInstance.ResourceLoader.GetString("Edge_Favorites");
2828
Icon = new("\uE728");
@@ -39,7 +39,7 @@ public override IListItem[] GetItems()
3939
.OrderBy(f => f.Type)
4040
.ThenBy(f => f.Name)
4141
.Where(f => !f.IsEmptySpecialFolder)
42-
.Select(f => FavoriteListItem.Create(_edgeManager, _settingsRepository, f, _profileManager.FavoriteProviders.Count > 1, _settingsRepository.SearchTree))
42+
.Select(f => FavoriteListItem.Create(_edgeManager, _settingsManager, f, _profileManager.FavoriteProviders.Count > 1, _settingsManager.SearchTree))
4343
.ToArray();
4444
}
4545
else

0 commit comments

Comments
 (0)