ServerNotifyIcon.cs 13 KB

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