ActivityLogEntryPoint.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System;
  2. using System.Globalization;
  3. using System.Threading.Tasks;
  4. using Jellyfin.Data.Entities;
  5. using MediaBrowser.Common.Updates;
  6. using MediaBrowser.Controller.Plugins;
  7. using MediaBrowser.Controller.Session;
  8. using MediaBrowser.Model.Activity;
  9. using MediaBrowser.Model.Globalization;
  10. using MediaBrowser.Model.Notifications;
  11. namespace Emby.Server.Implementations.Activity
  12. {
  13. /// <summary>
  14. /// Entry point for the activity logger.
  15. /// </summary>
  16. public sealed class ActivityLogEntryPoint : IServerEntryPoint
  17. {
  18. private readonly IInstallationManager _installationManager;
  19. private readonly ISessionManager _sessionManager;
  20. private readonly IActivityManager _activityManager;
  21. private readonly ILocalizationManager _localization;
  22. /// <summary>
  23. /// Initializes a new instance of the <see cref="ActivityLogEntryPoint"/> class.
  24. /// </summary>
  25. /// <param name="sessionManager">The session manager.</param>
  26. /// <param name="activityManager">The activity manager.</param>
  27. /// <param name="localization">The localization manager.</param>
  28. /// <param name="installationManager">The installation manager.</param>
  29. public ActivityLogEntryPoint(
  30. ISessionManager sessionManager,
  31. IActivityManager activityManager,
  32. ILocalizationManager localization,
  33. IInstallationManager installationManager)
  34. {
  35. _sessionManager = sessionManager;
  36. _activityManager = activityManager;
  37. _localization = localization;
  38. _installationManager = installationManager;
  39. }
  40. /// <inheritdoc />
  41. public Task RunAsync()
  42. {
  43. _installationManager.PackageInstallationFailed += OnPackageInstallationFailed;
  44. _sessionManager.SessionStarted += OnSessionStarted;
  45. _sessionManager.SessionEnded += OnSessionEnded;
  46. return Task.CompletedTask;
  47. }
  48. private async void OnSessionEnded(object sender, SessionEventArgs e)
  49. {
  50. var session = e.SessionInfo;
  51. if (string.IsNullOrEmpty(session.UserName))
  52. {
  53. return;
  54. }
  55. await CreateLogEntry(new ActivityLog(
  56. string.Format(
  57. CultureInfo.InvariantCulture,
  58. _localization.GetLocalizedString("UserOfflineFromDevice"),
  59. session.UserName,
  60. session.DeviceName),
  61. "SessionEnded",
  62. session.UserId)
  63. {
  64. ShortOverview = string.Format(
  65. CultureInfo.InvariantCulture,
  66. _localization.GetLocalizedString("LabelIpAddressValue"),
  67. session.RemoteEndPoint),
  68. }).ConfigureAwait(false);
  69. }
  70. private async void OnSessionStarted(object sender, SessionEventArgs e)
  71. {
  72. var session = e.SessionInfo;
  73. if (string.IsNullOrEmpty(session.UserName))
  74. {
  75. return;
  76. }
  77. await CreateLogEntry(new ActivityLog(
  78. string.Format(
  79. CultureInfo.InvariantCulture,
  80. _localization.GetLocalizedString("UserOnlineFromDevice"),
  81. session.UserName,
  82. session.DeviceName),
  83. "SessionStarted",
  84. session.UserId)
  85. {
  86. ShortOverview = string.Format(
  87. CultureInfo.InvariantCulture,
  88. _localization.GetLocalizedString("LabelIpAddressValue"),
  89. session.RemoteEndPoint)
  90. }).ConfigureAwait(false);
  91. }
  92. private async void OnPackageInstallationFailed(object sender, InstallationFailedEventArgs e)
  93. {
  94. var installationInfo = e.InstallationInfo;
  95. await CreateLogEntry(new ActivityLog(
  96. string.Format(
  97. CultureInfo.InvariantCulture,
  98. _localization.GetLocalizedString("NameInstallFailed"),
  99. installationInfo.Name),
  100. NotificationType.InstallationFailed.ToString(),
  101. Guid.Empty)
  102. {
  103. ShortOverview = string.Format(
  104. CultureInfo.InvariantCulture,
  105. _localization.GetLocalizedString("VersionNumber"),
  106. installationInfo.Version),
  107. Overview = e.Exception.Message
  108. }).ConfigureAwait(false);
  109. }
  110. private async Task CreateLogEntry(ActivityLog entry)
  111. => await _activityManager.CreateAsync(entry).ConfigureAwait(false);
  112. /// <inheritdoc />
  113. public void Dispose()
  114. {
  115. _installationManager.PackageInstallationFailed -= OnPackageInstallationFailed;
  116. _sessionManager.SessionStarted -= OnSessionStarted;
  117. _sessionManager.SessionEnded -= OnSessionEnded;
  118. }
  119. }
  120. }