Skip to content

Commit

Permalink
Allow configuration of TimeSpanParser to change how the default value…
Browse files Browse the repository at this point in the history
…s are converted to time #3
  • Loading branch information
CoreyHayward committed Jul 28, 2024
1 parent c2864ab commit d2a6dac
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<UseWindowsForms>true</UseWindowsForms>
<RootNamespace>Community.PowerToys.Run.Plugin.Timers</RootNamespace>
<AssemblyName>Community.PowerToys.Run.Plugin.Timers</AssemblyName>
<Version>0.2.0</Version>
<Version>0.3.0</Version>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<Platforms>x64;ARM64</Platforms>
Expand Down
43 changes: 40 additions & 3 deletions Community.PowerToys.Run.Plugin.Timer/Main.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,46 @@
// Copyright (c) Corey Hayward. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using Microsoft.PowerToys.Settings.UI.Library;
using Wox.Plugin;

namespace Community.PowerToys.Run.Plugin.Timers;

public class Main : IPlugin, IContextMenu
public class Main : IPlugin, IContextMenu, ISettingProvider
{
private List<TimerPlus> _timers = [];
private TimerResultService? _timerService;
private PluginInitContext? _context;
private Settings _settings = new();

public string Name => "Timer";

public string Description => "Timers.";
public string Description => "Set and manage timers.";

public static string PluginID => "0cd68088246649a38205c7641df39db0";

public IEnumerable<PluginAdditionalOption> AdditionalOptions => new List<PluginAdditionalOption>()
{
new PluginAdditionalOption()
{
Key = nameof(Settings.TimeSpanParserUncolonedDefault),
DisplayLabel = "Uncoloned Time Configuration",
DisplayDescription = "Sets how the first number of the timer should be treated, when not using colons.",
ComboBoxValue = (int)_settings.TimeSpanParserUncolonedDefault,
PluginOptionType = PluginAdditionalOption.AdditionalOptionType.Combobox,
ComboBoxItems = Settings.TimeSpanParserConfigurationOptions
},
new PluginAdditionalOption()
{
Key = nameof(Settings.TimeSpanParserColonedDefault),
DisplayLabel = "Coloned Time Configuration",
DisplayDescription = "Sets how the first number of the timer should be treated, when using colons (i.e. 4:30).",
ComboBoxValue = (int)_settings.TimeSpanParserColonedDefault,
PluginOptionType = PluginAdditionalOption.AdditionalOptionType.Combobox,
ComboBoxItems = Settings.TimeSpanParserConfigurationOptions
},
};

public void Init(PluginInitContext context)
{
ArgumentNullException.ThrowIfNull(context);
Expand All @@ -26,8 +50,21 @@ public void Init(PluginInitContext context)
}

public List<Result> Query(Query query)
=> _timerService!.GetQueryResult(query);
=> _timerService!.GetQueryResult(query, _settings);

public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
=> _timerService!.GetContextMenuResults(selectedResult);

public System.Windows.Controls.Control CreateSettingPanel()
=> throw new NotImplementedException();

public void UpdateSettings(PowerLauncherPluginSettings settings)
{
if (settings?.AdditionalOptions is null)
{
return;
}

_settings.UpdateSettings(settings.AdditionalOptions);
}
}
35 changes: 35 additions & 0 deletions Community.PowerToys.Run.Plugin.Timer/Settings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using Microsoft.PowerToys.Settings.UI.Library;
using TimeSpanParserUtil;

namespace Community.PowerToys.Run.Plugin.Timers;

public class Settings
{
public static List<KeyValuePair<string, string>> TimeSpanParserConfigurationOptions
= new List<KeyValuePair<string, string>>()
{
new("None", ((int)Units.None).ToString()),
new("Milliseconds", ((int)Units.Milliseconds).ToString()),
new("Seconds", ((int)Units.Seconds).ToString()),
new("Minutes", ((int)Units.Minutes).ToString()),
new("Hours", ((int)Units.Hours).ToString()),
new("Days", ((int)Units.Days).ToString()),
new("Weeks", ((int)Units.Weeks).ToString()),
new("Months", ((int)Units.Months).ToString()),
};

public TimeSpanParserOptions TimeSpanParserOptions => new()
{
UncolonedDefault = TimeSpanParserUncolonedDefault,
ColonedDefault = TimeSpanParserColonedDefault,
};

public Units TimeSpanParserColonedDefault { get; private set; } = Units.Hours;
public Units TimeSpanParserUncolonedDefault { get; private set; } = Units.Minutes;

public void UpdateSettings(IEnumerable<PluginAdditionalOption> settings)
{
TimeSpanParserUncolonedDefault = (Units)settings.Single(x => x.Key == nameof(Settings.TimeSpanParserUncolonedDefault)).ComboBoxValue;
TimeSpanParserColonedDefault = (Units)settings.Single(x => x.Key == nameof(Settings.TimeSpanParserColonedDefault)).ComboBoxValue;
}
}
14 changes: 6 additions & 8 deletions Community.PowerToys.Run.Plugin.Timer/TimerResultService.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@

using Humanizer;
using Humanizer;
using ManagedCommon;
using System.Timers;
using System.Windows.Input;
using System.Xml.Linq;
using TimeSpanParserUtil;
using Wox.Plugin;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;

namespace Community.PowerToys.Run.Plugin.Timers;
public class TimerResultService
Expand Down Expand Up @@ -35,14 +32,14 @@ private void UpdateTheme(Theme theme)
}
}

public List<Result> GetQueryResult(Query query)
public List<Result> GetQueryResult(Query query, Settings settings)
{
if (string.IsNullOrWhiteSpace(query.Search))
{
return GetRunningTimersResults(query.Search);
}

return GetCreateTimerResult(query.Search);
return GetCreateTimerResult(query.Search, settings);
}

private List<Result> GetRunningTimersResults(string search)
Expand Down Expand Up @@ -70,10 +67,11 @@ private List<Result> GetRunningTimersResults(string search)
return timerResults;
}

public List<Result> GetCreateTimerResult(string query)
public List<Result> GetCreateTimerResult(string query, Settings settings)
{
query = query.Trim();
if (!TimeSpanParser.TryParse(query, out var timeSpan) || timeSpan <= TimeSpan.Zero)

if (!TimeSpanParser.TryParse(query, settings.TimeSpanParserOptions, out var timeSpan) || timeSpan <= TimeSpan.Zero)
{
var parsingErrorResult = new Result()
{
Expand Down
2 changes: 1 addition & 1 deletion Community.PowerToys.Run.Plugin.Timer/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"IsGlobal": false,
"Name": "Timer",
"Author": "Corey Hayward",
"Version": "0.2.0",
"Version": "0.3.0",
"Language": "csharp",
"Website": "https://github.com/CoreyHayward/PowerToys-Run-Timer",
"IcoPathDark": "Images\\Timer.dark.png",
Expand Down

0 comments on commit d2a6dac

Please sign in to comment.