ServerEventNotifier.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using MediaBrowser.Common.Plugins;
  5. using MediaBrowser.Common.Updates;
  6. using MediaBrowser.Controller.Plugins;
  7. using MediaBrowser.Controller.Session;
  8. using MediaBrowser.Model.Updates;
  9. namespace Emby.Server.Implementations.EntryPoints
  10. {
  11. /// <summary>
  12. /// Class WebSocketEvents.
  13. /// </summary>
  14. public class ServerEventNotifier : IServerEntryPoint
  15. {
  16. /// <summary>
  17. /// The installation manager.
  18. /// </summary>
  19. private readonly IInstallationManager _installationManager;
  20. private readonly ISessionManager _sessionManager;
  21. /// <summary>
  22. /// Initializes a new instance of the <see cref="ServerEventNotifier"/> class.
  23. /// </summary>
  24. /// <param name="installationManager">The installation manager.</param>
  25. /// <param name="sessionManager">The session manager.</param>
  26. public ServerEventNotifier(
  27. IInstallationManager installationManager,
  28. ISessionManager sessionManager)
  29. {
  30. _installationManager = installationManager;
  31. _sessionManager = sessionManager;
  32. }
  33. /// <inheritdoc />
  34. public Task RunAsync()
  35. {
  36. _installationManager.PluginUninstalled += OnPluginUninstalled;
  37. _installationManager.PackageInstallationCancelled += OnPackageInstallationCancelled;
  38. _installationManager.PackageInstallationCompleted += OnPackageInstallationCompleted;
  39. _installationManager.PackageInstallationFailed += OnPackageInstallationFailed;
  40. return Task.CompletedTask;
  41. }
  42. private async void OnPackageInstallationCancelled(object sender, InstallationInfo e)
  43. {
  44. await SendMessageToAdminSessions("PackageInstallationCancelled", e).ConfigureAwait(false);
  45. }
  46. private async void OnPackageInstallationCompleted(object sender, InstallationInfo e)
  47. {
  48. await SendMessageToAdminSessions("PackageInstallationCompleted", e).ConfigureAwait(false);
  49. }
  50. private async void OnPackageInstallationFailed(object sender, InstallationFailedEventArgs e)
  51. {
  52. await SendMessageToAdminSessions("PackageInstallationFailed", e.InstallationInfo).ConfigureAwait(false);
  53. }
  54. /// <summary>
  55. /// Installations the manager_ plugin uninstalled.
  56. /// </summary>
  57. /// <param name="sender">The sender.</param>
  58. /// <param name="e">The e.</param>
  59. private async void OnPluginUninstalled(object sender, IPlugin e)
  60. {
  61. await SendMessageToAdminSessions("PluginUninstalled", e).ConfigureAwait(false);
  62. }
  63. private async Task SendMessageToAdminSessions<T>(string name, T data)
  64. {
  65. try
  66. {
  67. await _sessionManager.SendMessageToAdminSessions(name, data, CancellationToken.None).ConfigureAwait(false);
  68. }
  69. catch (Exception)
  70. {
  71. }
  72. }
  73. /// <inheritdoc />
  74. public void Dispose()
  75. {
  76. Dispose(true);
  77. GC.SuppressFinalize(this);
  78. }
  79. /// <summary>
  80. /// Releases unmanaged and - optionally - managed resources.
  81. /// </summary>
  82. /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
  83. protected virtual void Dispose(bool dispose)
  84. {
  85. if (dispose)
  86. {
  87. _installationManager.PluginUninstalled -= OnPluginUninstalled;
  88. _installationManager.PackageInstallationCancelled -= OnPackageInstallationCancelled;
  89. _installationManager.PackageInstallationCompleted -= OnPackageInstallationCompleted;
  90. _installationManager.PackageInstallationFailed -= OnPackageInstallationFailed;
  91. }
  92. }
  93. }
  94. }