ServerNotifyIcon.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. using System;
  2. using System.Diagnostics;
  3. using System.Windows.Forms;
  4. using MediaBrowser.Controller;
  5. using MediaBrowser.Controller.Configuration;
  6. using MediaBrowser.Controller.Library;
  7. using MediaBrowser.Controller.Localization;
  8. using MediaBrowser.Controller.Persistence;
  9. using MediaBrowser.Model.Logging;
  10. using MediaBrowser.Model.Serialization;
  11. using MediaBrowser.ServerApplication.Logging;
  12. using MediaBrowser.ServerApplication.Native;
  13. namespace MediaBrowser.ServerApplication
  14. {
  15. public class ServerNotifyIcon : IDisposable
  16. {
  17. bool IsDisposing = false;
  18. private System.Windows.Forms.NotifyIcon notifyIcon1;
  19. private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
  20. private System.Windows.Forms.ToolStripMenuItem cmdExit;
  21. private System.Windows.Forms.ToolStripMenuItem cmdBrowse;
  22. private System.Windows.Forms.ToolStripMenuItem cmdConfigure;
  23. private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
  24. private System.Windows.Forms.ToolStripMenuItem cmdLibraryExplorer;
  25. private System.Windows.Forms.ToolStripMenuItem cmdRestart;
  26. private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
  27. private System.Windows.Forms.ToolStripMenuItem cmdLogWindow;
  28. private System.Windows.Forms.ToolStripMenuItem cmdCommunity;
  29. private System.Windows.Forms.ToolStripMenuItem cmdApiDocs;
  30. private System.Windows.Forms.ToolStripMenuItem cmdStandardDocs;
  31. private System.Windows.Forms.ToolStripMenuItem cmdSwagger;
  32. private System.Windows.Forms.ToolStripMenuItem cmdGtihub;
  33. private readonly ILogger _logger;
  34. private readonly IServerApplicationHost _appHost;
  35. private readonly ILogManager _logManager;
  36. private readonly IServerConfigurationManager _configurationManager;
  37. private readonly IUserManager _userManager;
  38. private readonly ILibraryManager _libraryManager;
  39. private readonly IJsonSerializer _jsonSerializer;
  40. private readonly IDisplayPreferencesRepository _displayPreferencesManager;
  41. private readonly IItemRepository _itemRepository;
  42. private readonly ILocalizationManager _localization;
  43. private LogForm _logForm;
  44. public bool Visible
  45. {
  46. get
  47. {
  48. return notifyIcon1.Visible;
  49. }
  50. set
  51. {
  52. Action act = () => notifyIcon1.Visible = false;
  53. contextMenuStrip1.Invoke(act);
  54. }
  55. }
  56. public ServerNotifyIcon(ILogManager logManager,
  57. IServerApplicationHost appHost,
  58. IServerConfigurationManager configurationManager,
  59. IUserManager userManager, ILibraryManager libraryManager,
  60. IJsonSerializer jsonSerializer,
  61. IDisplayPreferencesRepository displayPreferencesManager,
  62. IItemRepository itemRepo, ILocalizationManager localization)
  63. {
  64. _logger = logManager.GetLogger("MainWindow");
  65. _itemRepository = itemRepo;
  66. _localization = localization;
  67. _appHost = appHost;
  68. _logManager = logManager;
  69. _configurationManager = configurationManager;
  70. _userManager = userManager;
  71. _libraryManager = libraryManager;
  72. _jsonSerializer = jsonSerializer;
  73. _displayPreferencesManager = displayPreferencesManager;
  74. var components = new System.ComponentModel.Container();
  75. var resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
  76. contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(components);
  77. notifyIcon1 = new System.Windows.Forms.NotifyIcon(components);
  78. cmdExit = new System.Windows.Forms.ToolStripMenuItem();
  79. cmdCommunity = new System.Windows.Forms.ToolStripMenuItem();
  80. cmdLogWindow = new System.Windows.Forms.ToolStripMenuItem();
  81. toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
  82. cmdRestart = new System.Windows.Forms.ToolStripMenuItem();
  83. cmdLibraryExplorer = new System.Windows.Forms.ToolStripMenuItem();
  84. toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
  85. cmdConfigure = new System.Windows.Forms.ToolStripMenuItem();
  86. cmdBrowse = new System.Windows.Forms.ToolStripMenuItem();
  87. cmdApiDocs = new System.Windows.Forms.ToolStripMenuItem();
  88. cmdStandardDocs = new System.Windows.Forms.ToolStripMenuItem();
  89. cmdSwagger = new System.Windows.Forms.ToolStripMenuItem();
  90. cmdGtihub = new System.Windows.Forms.ToolStripMenuItem();
  91. //
  92. // notifyIcon1
  93. //
  94. notifyIcon1.ContextMenuStrip = contextMenuStrip1;
  95. notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
  96. notifyIcon1.Text = "Media Browser";
  97. notifyIcon1.Visible = true;
  98. //
  99. // contextMenuStrip1
  100. //
  101. contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
  102. cmdBrowse,
  103. cmdConfigure,
  104. toolStripSeparator2,
  105. cmdLibraryExplorer,
  106. cmdRestart,
  107. toolStripSeparator1,
  108. cmdApiDocs,
  109. cmdLogWindow,
  110. cmdCommunity,
  111. cmdExit});
  112. contextMenuStrip1.Name = "contextMenuStrip1";
  113. contextMenuStrip1.ShowCheckMargin = true;
  114. contextMenuStrip1.ShowImageMargin = false;
  115. contextMenuStrip1.Size = new System.Drawing.Size(209, 214);
  116. //
  117. // cmdExit
  118. //
  119. cmdExit.Name = "cmdExit";
  120. cmdExit.Size = new System.Drawing.Size(208, 22);
  121. //
  122. // cmdCommunity
  123. //
  124. cmdCommunity.Name = "cmdCommunity";
  125. cmdCommunity.Size = new System.Drawing.Size(208, 22);
  126. //
  127. // cmdLogWindow
  128. //
  129. cmdLogWindow.CheckOnClick = true;
  130. cmdLogWindow.Name = "cmdLogWindow";
  131. cmdLogWindow.Size = new System.Drawing.Size(208, 22);
  132. //
  133. // toolStripSeparator1
  134. //
  135. toolStripSeparator1.Name = "toolStripSeparator1";
  136. toolStripSeparator1.Size = new System.Drawing.Size(205, 6);
  137. //
  138. // cmdRestart
  139. //
  140. cmdRestart.Name = "cmdRestart";
  141. cmdRestart.Size = new System.Drawing.Size(208, 22);
  142. //
  143. // cmdLibraryExplorer
  144. //
  145. cmdLibraryExplorer.Name = "cmdLibraryExplorer";
  146. cmdLibraryExplorer.Size = new System.Drawing.Size(208, 22);
  147. //
  148. // toolStripSeparator2
  149. //
  150. toolStripSeparator2.Name = "toolStripSeparator2";
  151. toolStripSeparator2.Size = new System.Drawing.Size(205, 6);
  152. //
  153. // cmdConfigure
  154. //
  155. cmdConfigure.Name = "cmdConfigure";
  156. cmdConfigure.Size = new System.Drawing.Size(208, 22);
  157. //
  158. // cmdBrowse
  159. //
  160. cmdBrowse.Name = "cmdBrowse";
  161. cmdBrowse.Size = new System.Drawing.Size(208, 22);
  162. //
  163. // cmdApiDocs
  164. //
  165. cmdApiDocs.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
  166. cmdStandardDocs,
  167. cmdSwagger,
  168. cmdGtihub});
  169. cmdApiDocs.Name = "cmdApiDocs";
  170. cmdApiDocs.Size = new System.Drawing.Size(208, 22);
  171. //
  172. // cmdStandardDocs
  173. //
  174. cmdStandardDocs.Name = "cmdStandardDocs";
  175. cmdStandardDocs.Size = new System.Drawing.Size(136, 22);
  176. //
  177. // cmdSwagger
  178. //
  179. cmdSwagger.Name = "cmdSwagger";
  180. cmdSwagger.Size = new System.Drawing.Size(136, 22);
  181. //
  182. // cmdGtihub
  183. //
  184. cmdGtihub.Name = "cmdGtihub";
  185. cmdGtihub.Size = new System.Drawing.Size(136, 22);
  186. cmdExit.Click += cmdExit_Click;
  187. cmdRestart.Click += cmdRestart_Click;
  188. cmdLogWindow.Click += cmdLogWindow_Click;
  189. cmdConfigure.Click += cmdConfigure_Click;
  190. cmdCommunity.Click += cmdCommunity_Click;
  191. cmdBrowse.Click += cmdBrowse_Click;
  192. cmdLibraryExplorer.Click += cmdLibraryExplorer_Click;
  193. cmdSwagger.Click += cmdSwagger_Click;
  194. cmdStandardDocs.Click += cmdStandardDocs_Click;
  195. cmdGtihub.Click += cmdGtihub_Click;
  196. LoadLogWindow(null, EventArgs.Empty);
  197. _logManager.LoggerLoaded += LoadLogWindow;
  198. _configurationManager.ConfigurationUpdated += Instance_ConfigurationUpdated;
  199. LocalizeText();
  200. if (_appHost.IsFirstRun)
  201. {
  202. Action action = () => notifyIcon1.ShowBalloonTip(5000, "Media Browser", "Welcome to Media Browser Server!", ToolTipIcon.Info);
  203. contextMenuStrip1.Invoke(action);
  204. }
  205. }
  206. private void LocalizeText()
  207. {
  208. _uiCulture = _configurationManager.Configuration.UICulture;
  209. cmdExit.Text = _localization.GetLocalizedString("LabelExit");
  210. cmdCommunity.Text = _localization.GetLocalizedString("LabelVisitCommunity");
  211. cmdGtihub.Text = _localization.GetLocalizedString("LabelGithubWiki");
  212. cmdSwagger.Text = _localization.GetLocalizedString("LabelSwagger");
  213. cmdStandardDocs.Text = _localization.GetLocalizedString("LabelStandard");
  214. cmdApiDocs.Text = _localization.GetLocalizedString("LabelViewApiDocumentation");
  215. cmdBrowse.Text = _localization.GetLocalizedString("LabelBrowseLibrary");
  216. cmdConfigure.Text = _localization.GetLocalizedString("LabelConfigureMediaBrowser");
  217. cmdLibraryExplorer.Text = _localization.GetLocalizedString("LabelOpenLibraryViewer");
  218. cmdRestart.Text = _localization.GetLocalizedString("LabelRestartServer");
  219. cmdLogWindow.Text = _localization.GetLocalizedString("LabelShowLogWindow");
  220. }
  221. private string _uiCulture;
  222. /// <summary>
  223. /// Handles the ConfigurationUpdated event of the Instance control.
  224. /// </summary>
  225. /// <param name="sender">The source of the event.</param>
  226. /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
  227. void Instance_ConfigurationUpdated(object sender, EventArgs e)
  228. {
  229. if (!string.Equals(_configurationManager.Configuration.UICulture, _uiCulture,
  230. StringComparison.OrdinalIgnoreCase))
  231. {
  232. LocalizeText();
  233. }
  234. Action action = () =>
  235. {
  236. var isLogWindowOpen = _logForm != null;
  237. if ((!isLogWindowOpen && _configurationManager.Configuration.ShowLogWindow) ||
  238. (isLogWindowOpen && !_configurationManager.Configuration.ShowLogWindow))
  239. {
  240. _logManager.ReloadLogger(_configurationManager.Configuration.EnableDebugLevelLogging
  241. ? LogSeverity.Debug
  242. : LogSeverity.Info);
  243. }
  244. };
  245. contextMenuStrip1.Invoke(action);
  246. }
  247. /// <summary>
  248. /// Loads the log window.
  249. /// </summary>
  250. /// <param name="sender">The sender.</param>
  251. /// <param name="args">The <see cref="EventArgs" /> instance containing the event data.</param>
  252. void LoadLogWindow(object sender, EventArgs args)
  253. {
  254. CloseLogWindow();
  255. Action action = () =>
  256. {
  257. // Add our log window if specified
  258. if (_configurationManager.Configuration.ShowLogWindow)
  259. {
  260. _logForm = new LogForm(_logManager);
  261. Trace.Listeners.Add(new WindowTraceListener(_logForm));
  262. }
  263. else
  264. {
  265. Trace.Listeners.Remove("MBLogWindow");
  266. }
  267. // Set menu option indicator
  268. cmdLogWindow.Checked = _configurationManager.Configuration.ShowLogWindow;
  269. };
  270. contextMenuStrip1.Invoke(action);
  271. }
  272. /// <summary>
  273. /// Closes the log window.
  274. /// </summary>
  275. void CloseLogWindow()
  276. {
  277. if (_logForm != null)
  278. {
  279. _logForm.ShutDown();
  280. }
  281. }
  282. void cmdBrowse_Click(object sender, EventArgs e)
  283. {
  284. BrowserLauncher.OpenWebClient(_userManager, _configurationManager, _appHost, _logger);
  285. }
  286. void cmdCommunity_Click(object sender, EventArgs e)
  287. {
  288. BrowserLauncher.OpenCommunity(_logger);
  289. }
  290. void cmdConfigure_Click(object sender, EventArgs e)
  291. {
  292. BrowserLauncher.OpenDashboard(_userManager, _configurationManager, _appHost, _logger);
  293. }
  294. void cmdLogWindow_Click(object sender, EventArgs e)
  295. {
  296. _configurationManager.Configuration.ShowLogWindow = !_configurationManager.Configuration.ShowLogWindow;
  297. _configurationManager.SaveConfiguration();
  298. LoadLogWindow(sender, e);
  299. }
  300. void cmdLibraryExplorer_Click(object sender, EventArgs e)
  301. {
  302. new LibraryViewer(_jsonSerializer, _userManager, _libraryManager, _itemRepository).Show();
  303. }
  304. void cmdRestart_Click(object sender, EventArgs e)
  305. {
  306. _appHost.Restart();
  307. }
  308. void cmdExit_Click(object sender, EventArgs e)
  309. {
  310. _appHost.Shutdown();
  311. }
  312. void cmdGtihub_Click(object sender, EventArgs e)
  313. {
  314. BrowserLauncher.OpenGithub(_logger);
  315. }
  316. void cmdStandardDocs_Click(object sender, EventArgs e)
  317. {
  318. BrowserLauncher.OpenStandardApiDocumentation(_configurationManager, _appHost, _logger);
  319. }
  320. void cmdSwagger_Click(object sender, EventArgs e)
  321. {
  322. BrowserLauncher.OpenSwagger(_configurationManager, _appHost, _logger);
  323. }
  324. ~ServerNotifyIcon()
  325. {
  326. Dispose();
  327. }
  328. public void Dispose()
  329. {
  330. if (!IsDisposing)
  331. {
  332. IsDisposing = true;
  333. }
  334. }
  335. }
  336. }