Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
hlaueriksson committed Aug 4, 2024
1 parent e0384f7 commit 379f7f9
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<Import Project="../../Analyzers.props" />

<ItemGroup>
<PackageReference Include="Community.PowerToys.Run.Plugin.Dependencies" Version="0.82.1" />
<PackageReference Include="Community.PowerToys.Run.Plugin.Update" Version="0.1.0" />
</ItemGroup>

<ItemGroup>
Expand Down
31 changes: 31 additions & 0 deletions src/GEmojiSharp.PowerToysRun/GEmojiSharpSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using Community.PowerToys.Run.Plugin.Update;
using Microsoft.PowerToys.Settings.UI.Library;

namespace GEmojiSharp.PowerToysRun
{
/// <summary>
/// Plugin settings.
/// </summary>
public class GEmojiSharpSettings
{
/// <summary>
/// Initializes a new instance of the <see cref="GEmojiSharpSettings"/> class.
/// </summary>
public GEmojiSharpSettings()
{
Update = new PluginUpdateSettings
{
ResultScore = 100,
};
}

/// <summary>
/// Plugin update settings.
/// </summary>
public PluginUpdateSettings Update { get; set; }

internal IEnumerable<PluginAdditionalOption> GetAdditionalOptions() => Update.GetAdditionalOptions();

internal void SetAdditionalOptions(IEnumerable<PluginAdditionalOption> additionalOptions) => Update.SetAdditionalOptions(additionalOptions);
}
}
102 changes: 95 additions & 7 deletions src/GEmojiSharp.PowerToysRun/Main.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,34 @@
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Community.PowerToys.Run.Plugin.Update;
using ManagedCommon;
using Microsoft.PowerToys.Settings.UI.Library;
using Wox.Infrastructure.Storage;
using Wox.Plugin;
using Wox.Plugin.Logger;

namespace GEmojiSharp.PowerToysRun
{
/// <summary>
/// Main class of this plugin that implement all used interfaces.
/// </summary>
public class Main : IPlugin, IContextMenu, IDisposable
public class Main : IPlugin, IContextMenu, ISettingProvider, ISavable, IDisposable
{
/// <summary>
/// Initializes a new instance of the <see cref="Main"/> class.
/// </summary>
public Main()
{
Storage = new PluginJsonStorage<GEmojiSharpSettings>();
Settings = Storage.Load();
Updater = new PluginUpdateHandler(Settings.Update);
Updater.UpdateInstalling += OnUpdateInstalling;
Updater.UpdateInstalled += OnUpdateInstalled;
Updater.UpdateSkipped += OnUpdateSkipped;
}

/// <summary>
/// ID of the plugin.
/// </summary>
Expand All @@ -26,6 +44,17 @@ public class Main : IPlugin, IContextMenu, IDisposable
/// </summary>
public string Description => "GitHub Emoji PowerToys Run plugin";

/// <summary>
/// Additional options for the plugin.
/// </summary>
public IEnumerable<PluginAdditionalOption> AdditionalOptions => Settings.GetAdditionalOptions();

private PluginJsonStorage<GEmojiSharpSettings> Storage { get; }

private GEmojiSharpSettings Settings { get; }

private PluginUpdateHandler Updater { get; }

private PluginInitContext? Context { get; set; }

private string? IconPath { get; set; }
Expand All @@ -39,27 +68,34 @@ public class Main : IPlugin, IContextMenu, IDisposable
/// <returns>A filtered list, can be empty when nothing was found.</returns>
public List<Result> Query(Query query)
{
var results = new List<Result>();

if (Updater.IsUpdateAvailable())
{
results.AddRange(Updater.GetResults());
}

if (query?.Search is null)
{
return new List<Result>(0);
return results;
}

var value = query.Search;

if (string.IsNullOrEmpty(value))
{
return Emoji.All.Select(GetResult).ToList();
results.AddRange(Emoji.All.Select(GetResult));
return results;
}

var emojis = (GEmoji[])Emoji.Find(value);

if (emojis.Length != 0)
{
return emojis.Select(GetResult).ToList();
results.AddRange(emojis.Select(GetResult));
return results;
}

var results = new List<Result>();

if (HasAlias(value))
{
var result = Emoji.Emojify(value);
Expand Down Expand Up @@ -127,6 +163,8 @@ public void Init(PluginInitContext context)
Context = context ?? throw new ArgumentNullException(nameof(context));
Context.API.ThemeChanged += OnThemeChanged;
UpdateIconPath(Context.API.GetCurrentTheme());

Updater.Init(Context);
}

/// <summary>
Expand All @@ -136,6 +174,12 @@ public void Init(PluginInitContext context)
/// <returns>A list context menu entries.</returns>
public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
{
var results = Updater.GetContextMenuResults(selectedResult);
if (results.Count != 0)
{
return results;
}

if (selectedResult?.ContextData is GEmoji emoji)
{
var raw = new ContextMenuResult
Expand Down Expand Up @@ -216,9 +260,33 @@ public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
];
}

return new List<ContextMenuResult>(0);
return [];
}

/// <summary>
/// Creates setting panel.
/// </summary>
/// <returns>The control.</returns>
/// <exception cref="NotImplementedException">method is not implemented.</exception>
public Control CreateSettingPanel() => throw new NotImplementedException();

/// <summary>
/// Updates settings.
/// </summary>
/// <param name="settings">The plugin settings.</param>
public void UpdateSettings(PowerLauncherPluginSettings settings)
{
ArgumentNullException.ThrowIfNull(settings);

Settings.SetAdditionalOptions(settings.AdditionalOptions);
Save();
}

/// <summary>
/// Saves settings.
/// </summary>
public void Save() => Storage.Save();

/// <inheritdoc/>
public void Dispose()
{
Expand All @@ -242,6 +310,8 @@ protected virtual void Dispose(bool disposing)
Context.API.ThemeChanged -= OnThemeChanged;
}

Updater.Dispose();

Disposed = true;
}

Expand All @@ -254,6 +324,24 @@ private static bool CopyToClipboard(string value)
private void UpdateIconPath(Theme theme) => IconPath = theme == Theme.Light || theme == Theme.HighContrastWhite ? "Images/gemojisharp.light.png" : "Images/gemojisharp.dark.png";

private void OnThemeChanged(Theme currentTheme, Theme newTheme) => UpdateIconPath(newTheme);

private void OnUpdateInstalling(object? sender, PluginUpdateEventArgs e)
{
Log.Info("UpdateInstalling: " + e.Version, GetType());
}

private void OnUpdateInstalled(object? sender, PluginUpdateEventArgs e)
{
Log.Info("UpdateInstalled: " + e.Version, GetType());
Context!.API.ShowNotification($"{Name} {e.Version}", "Update installed");
}

private void OnUpdateSkipped(object? sender, PluginUpdateEventArgs e)
{
Log.Info("UpdateSkipped: " + e.Version, GetType());
Save();
Context?.API.ChangeQuery(Context.CurrentPluginMetadata.ActionKeyword, true);
}
}

internal record EmojifiedString(string Value);
Expand Down

0 comments on commit 379f7f9

Please sign in to comment.