ServerNotifyIcon.cs 13 KB

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