ServerNotifyIcon.cs 13 KB

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