Initial first version.

This commit is contained in:
Ebbe Baß
2026-08-13 10:04:59 +02:00
parent df725b43c4
commit 940e80b630
22 changed files with 890 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
using System.Windows;
using System.Windows.Input;
using EbbesMemeClipboard.Services;
using EbbesMemeClipboard.ViewModels;
using EbbesMemeClipboard.Views;
using H.NotifyIcon;
using Microsoft.Extensions.DependencyInjection;
namespace EbbesMemeClipboard;
public partial class App : Application
{
private static readonly ModifierKeys DefaultHotkeyModifiers = ModifierKeys.Control | ModifierKeys.Alt;
private const Key DefaultHotkeyKey = Key.M;
private IServiceProvider _services = null!;
private IGlobalHotkeyService _hotkeyService = null!;
private PickerWindow _pickerWindow = null!;
private PickerViewModel _pickerViewModel = null!;
private TaskbarIcon? _trayIcon;
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
ShutdownMode = ShutdownMode.OnExplicitShutdown;
var services = new ServiceCollection();
services.AddSingleton<ILocalMemeLibraryService, LocalMemeLibraryService>();
services.AddSingleton<IClipboardService, ClipboardService>();
services.AddSingleton<IGlobalHotkeyService, GlobalHotkeyService>();
services.AddSingleton<PickerViewModel>();
services.AddSingleton<PickerWindow>();
_services = services.BuildServiceProvider();
_pickerViewModel = _services.GetRequiredService<PickerViewModel>();
_pickerWindow = _services.GetRequiredService<PickerWindow>();
_trayIcon = (TaskbarIcon)Resources["TrayIcon"];
_trayIcon.TrayLeftMouseUp += (_, _) => _pickerWindow.ToggleVisibility();
_hotkeyService = _services.GetRequiredService<IGlobalHotkeyService>();
if (_hotkeyService.Register(DefaultHotkeyModifiers, DefaultHotkeyKey))
{
_hotkeyService.HotkeyPressed += (_, _) => Dispatcher.Invoke(() => _pickerWindow.ToggleVisibility());
}
else
{
MessageBox.Show(
"Couldn't register the global hotkey (Ctrl+Alt+M) - it may already be in use by another application. " +
"You can still open the picker from the tray icon.",
"Ebbe's Meme Clipboard",
MessageBoxButton.OK,
MessageBoxImage.Warning);
}
}
private void TrayOpenPicker_Click(object sender, RoutedEventArgs e) => _pickerWindow.ShowNearCursor();
private async void TrayAddMemes_Click(object sender, RoutedEventArgs e)
{
_pickerWindow.ShowNearCursor();
await _pickerViewModel.ImportFilesCommand.ExecuteAsync(null);
}
private void TrayExit_Click(object sender, RoutedEventArgs e) => Shutdown();
protected override void OnExit(ExitEventArgs e)
{
_hotkeyService?.Dispose();
_trayIcon?.Dispose();
base.OnExit(e);
}
}