/// <summary> /// Creates a tray application instance. /// </summary> /// <param name="title">Tray application title.</param> /// <param name="syncService"> /// Synchronization service instance. The tray application will enable/disable this application and show its status. /// </param> public WindowsTrayInterface(string title, IVirtualDrive virtualDrive) { Title = title; notifyIcon = new NotifyIcon(); notifyIcon.Visible = true; notifyIcon.Icon = new System.Drawing.Icon("Images\\Drive.ico"); notifyIcon.Text = title; ContextMenuStrip contextMenu = new ContextMenuStrip(); contextMenu.Items.Add(Localization.Resources.StopSync, null, (s, e) => { StartStopSync(virtualDrive); }); #if !DEBUG // Hide console on app start. Visible = false; ConsoleManager.SetConsoleWindowVisibility(false); contextMenu.Items.Add(Localization.Resources.ShowLog, null, (s, e) => { #else contextMenu.Items.Add(Localization.Resources.HideLog, null, (s, e) => { #endif Visible = !Visible; ConsoleManager.SetConsoleWindowVisibility(Visible); contextMenu.Items[1].Text = (Visible)? Localization.Resources.HideLog : Localization.Resources.ShowLog; }); contextMenu.Items.Add($"{Localization.Resources.Exit} {title}", null, (s, e) => { Application.Exit(); }); notifyIcon.ContextMenuStrip = contextMenu; }
/// <summary> /// Create new tray icon. /// </summary>s /// <param name="productName">Product name.</param> /// <param name="virtualDrive">VirtualDriveBase, need to get syncService and fileSystemMonitor.</param> /// <param name="exitEvent">ManualResetEvent, used to stop application.</param> /// <returns></returns> public static Thread CreateTrayInterface(string productName, IVirtualDrive virtualDrive, ConsoleManager.ConsoleExitEvent exitEvent) { // Start tray application. Thread thread = new Thread(() => { WindowsTrayInterface windowsTrayInterface = new WindowsTrayInterface($"{productName}", virtualDrive); Application.Run(); exitEvent.Set(); }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.IsBackground = true; return(thread); }
/// <summary> /// This method handles StartStop Sycn button in tray menu. /// </summary> private async void StartStopSync(IVirtualDrive virtualDrive) { if (!sycnStopped) { await virtualDrive.SetEnabledAsync(false); sycnStopped = true; StatusToSyncStopped(); } else { await virtualDrive.SetEnabledAsync(true); sycnStopped = false; StatusToIdle(); } }
/// <summary> /// Creates instance of this class. /// </summary> /// <param name="remoteStorageRootPath">Remote storage path. Folder that contains source files to monitor changes.</param> /// <param name="virtualDrive">Virtual drive to send notifications about changes in the remote storage.</param> /// <param name="log">Logger.</param> internal RemoteStorageMonitor(string remoteStorageRootPath, IVirtualDrive virtualDrive, ILog log) : base("Remote Storage Monitor", log) { this.remoteStorageRootPath = remoteStorageRootPath; this.virtualDrive = virtualDrive; }