using Autofac; using FluentTerminal.SystemTray.Services; using GlobalHotKey; using System; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Threading; namespace FluentTerminal.SystemTray { public static class Program { private const string MutexName = "FluentTerminalMutex"; [STAThread] public static void Main() { if (!Mutex.TryOpenExisting(MutexName, out Mutex mutex)) { mutex = new Mutex(false, MutexName); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterType().SingleInstance(); containerBuilder.RegisterType().SingleInstance(); containerBuilder.RegisterType().SingleInstance(); containerBuilder.RegisterType().SingleInstance(); containerBuilder.RegisterType().SingleInstance(); containerBuilder.RegisterType().SingleInstance(); containerBuilder.RegisterType().SingleInstance(); containerBuilder.RegisterInstance(Dispatcher.CurrentDispatcher).SingleInstance(); var container = containerBuilder.Build(); var appCommunicationService = container.Resolve(); appCommunicationService.StartAppServiceConnection(); Task.Run(() => CheckForNewVersion(container.Resolve(), container.Resolve())); Application.Run(container.Resolve()); mutex.Close(); } else { var eventWaitHandle = EventWaitHandle.OpenExisting(AppCommunicationService.EventWaitHandleName, System.Security.AccessControl.EventWaitHandleRights.Modify); eventWaitHandle.Set(); } } private static void CheckForNewVersion(UpdateService updateService, NotificationService notificationService) { var newVersion = updateService.IsNewerVersionAvailable(); if (newVersion) { notificationService.ShowNotification("Update available", "Click to open the releases page.", "https://github.com/felixse/FluentTerminal/releases"); } } } }