2
0

ServerNotifyIcon.cs 14 KB

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