|
|
|
@ -8,7 +8,6 @@ using Jellyfin.Data.Entities;
|
|
|
|
|
using MediaBrowser.Common.Plugins;
|
|
|
|
|
using MediaBrowser.Common.Updates;
|
|
|
|
|
using MediaBrowser.Controller.Authentication;
|
|
|
|
|
using MediaBrowser.Controller.Devices;
|
|
|
|
|
using MediaBrowser.Controller.Library;
|
|
|
|
|
using MediaBrowser.Controller.Plugins;
|
|
|
|
|
using MediaBrowser.Controller.Session;
|
|
|
|
@ -30,7 +29,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
/// </summary>
|
|
|
|
|
public sealed class ActivityLogEntryPoint : IServerEntryPoint
|
|
|
|
|
{
|
|
|
|
|
private readonly ILogger _logger;
|
|
|
|
|
private readonly ILogger<ActivityLogEntryPoint> _logger;
|
|
|
|
|
private readonly IInstallationManager _installationManager;
|
|
|
|
|
private readonly ISessionManager _sessionManager;
|
|
|
|
|
private readonly ITaskManager _taskManager;
|
|
|
|
@ -38,14 +37,12 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
private readonly ILocalizationManager _localization;
|
|
|
|
|
private readonly ISubtitleManager _subManager;
|
|
|
|
|
private readonly IUserManager _userManager;
|
|
|
|
|
private readonly IDeviceManager _deviceManager;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Initializes a new instance of the <see cref="ActivityLogEntryPoint"/> class.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="logger">The logger.</param>
|
|
|
|
|
/// <param name="sessionManager">The session manager.</param>
|
|
|
|
|
/// <param name="deviceManager">The device manager.</param>
|
|
|
|
|
/// <param name="taskManager">The task manager.</param>
|
|
|
|
|
/// <param name="activityManager">The activity manager.</param>
|
|
|
|
|
/// <param name="localization">The localization manager.</param>
|
|
|
|
@ -55,7 +52,6 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
public ActivityLogEntryPoint(
|
|
|
|
|
ILogger<ActivityLogEntryPoint> logger,
|
|
|
|
|
ISessionManager sessionManager,
|
|
|
|
|
IDeviceManager deviceManager,
|
|
|
|
|
ITaskManager taskManager,
|
|
|
|
|
IActivityManager activityManager,
|
|
|
|
|
ILocalizationManager localization,
|
|
|
|
@ -65,7 +61,6 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
{
|
|
|
|
|
_logger = logger;
|
|
|
|
|
_sessionManager = sessionManager;
|
|
|
|
|
_deviceManager = deviceManager;
|
|
|
|
|
_taskManager = taskManager;
|
|
|
|
|
_activityManager = activityManager;
|
|
|
|
|
_localization = localization;
|
|
|
|
@ -99,36 +94,18 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_userManager.UserPolicyUpdated += OnUserPolicyUpdated;
|
|
|
|
|
_userManager.UserLockedOut += OnUserLockedOut;
|
|
|
|
|
|
|
|
|
|
_deviceManager.CameraImageUploaded += OnCameraImageUploaded;
|
|
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void OnCameraImageUploaded(object sender, GenericEventArgs<CameraImageUploadInfo> e)
|
|
|
|
|
{
|
|
|
|
|
await CreateLogEntry(new ActivityLog(
|
|
|
|
|
string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
|
_localization.GetLocalizedString("CameraImageUploadedFrom"),
|
|
|
|
|
e.Argument.Device.Name),
|
|
|
|
|
NotificationType.CameraImageUploaded.ToString(),
|
|
|
|
|
Guid.Empty,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace))
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void OnUserLockedOut(object sender, GenericEventArgs<MediaBrowser.Controller.Entities.User> e)
|
|
|
|
|
{
|
|
|
|
|
await CreateLogEntry(new ActivityLog(
|
|
|
|
|
string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
|
_localization.GetLocalizedString("UserLockedOutWithName"),
|
|
|
|
|
e.Argument.Name),
|
|
|
|
|
NotificationType.UserLockedOut.ToString(),
|
|
|
|
|
e.Argument.Id,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace))
|
|
|
|
|
string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
|
_localization.GetLocalizedString("UserLockedOutWithName"),
|
|
|
|
|
e.Argument.Name),
|
|
|
|
|
NotificationType.UserLockedOut.ToString(),
|
|
|
|
|
e.Argument.Id))
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -139,11 +116,9 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
|
_localization.GetLocalizedString("SubtitleDownloadFailureFromForItem"),
|
|
|
|
|
e.Provider,
|
|
|
|
|
Emby.Notifications.NotificationEntryPoint.GetItemName(e.Item)),
|
|
|
|
|
Notifications.NotificationEntryPoint.GetItemName(e.Item)),
|
|
|
|
|
"SubtitleDownloadFailure",
|
|
|
|
|
Guid.Empty,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace)
|
|
|
|
|
Guid.Empty)
|
|
|
|
|
{
|
|
|
|
|
ItemId = e.Item.Id.ToString("N", CultureInfo.InvariantCulture),
|
|
|
|
|
ShortOverview = e.Exception.Message
|
|
|
|
@ -181,9 +156,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
GetItemName(item),
|
|
|
|
|
e.DeviceName),
|
|
|
|
|
GetPlaybackStoppedNotificationType(item.MediaType),
|
|
|
|
|
user.Id,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace))
|
|
|
|
|
user.Id))
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -218,9 +191,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
GetItemName(item),
|
|
|
|
|
e.DeviceName),
|
|
|
|
|
GetPlaybackNotificationType(item.MediaType),
|
|
|
|
|
user.Id,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace))
|
|
|
|
|
user.Id))
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -287,9 +258,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
session.UserName,
|
|
|
|
|
session.DeviceName),
|
|
|
|
|
"SessionEnded",
|
|
|
|
|
session.UserId,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace)
|
|
|
|
|
session.UserId)
|
|
|
|
|
{
|
|
|
|
|
ShortOverview = string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
@ -308,9 +277,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("AuthenticationSucceededWithUserName"),
|
|
|
|
|
user.Name),
|
|
|
|
|
"AuthenticationSucceeded",
|
|
|
|
|
user.Id,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace)
|
|
|
|
|
user.Id)
|
|
|
|
|
{
|
|
|
|
|
ShortOverview = string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
@ -327,10 +294,9 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("FailedLoginAttemptWithUserName"),
|
|
|
|
|
e.Argument.Username),
|
|
|
|
|
"AuthenticationFailed",
|
|
|
|
|
Guid.Empty,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Error)
|
|
|
|
|
Guid.Empty)
|
|
|
|
|
{
|
|
|
|
|
LogSeverity = LogLevel.Error,
|
|
|
|
|
ShortOverview = string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
|
_localization.GetLocalizedString("LabelIpAddressValue"),
|
|
|
|
@ -346,9 +312,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("UserPolicyUpdatedWithName"),
|
|
|
|
|
e.Argument.Name),
|
|
|
|
|
"UserPolicyUpdated",
|
|
|
|
|
e.Argument.Id,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace))
|
|
|
|
|
e.Argument.Id))
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -360,9 +324,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("UserDeletedWithName"),
|
|
|
|
|
e.Argument.Name),
|
|
|
|
|
"UserDeleted",
|
|
|
|
|
Guid.Empty,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace))
|
|
|
|
|
Guid.Empty))
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -374,9 +336,8 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("UserPasswordChangedWithName"),
|
|
|
|
|
e.Argument.Name),
|
|
|
|
|
"UserPasswordChanged",
|
|
|
|
|
e.Argument.Id,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace)).ConfigureAwait(false);
|
|
|
|
|
e.Argument.Id))
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void OnUserCreated(object sender, GenericEventArgs<MediaBrowser.Controller.Entities.User> e)
|
|
|
|
@ -387,9 +348,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("UserCreatedWithName"),
|
|
|
|
|
e.Argument.Name),
|
|
|
|
|
"UserCreated",
|
|
|
|
|
e.Argument.Id,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace))
|
|
|
|
|
e.Argument.Id))
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -409,9 +368,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
session.UserName,
|
|
|
|
|
session.DeviceName),
|
|
|
|
|
"SessionStarted",
|
|
|
|
|
session.UserId,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace)
|
|
|
|
|
session.UserId)
|
|
|
|
|
{
|
|
|
|
|
ShortOverview = string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
@ -428,9 +385,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("PluginUpdatedWithName"),
|
|
|
|
|
e.Argument.Item1.Name),
|
|
|
|
|
NotificationType.PluginUpdateInstalled.ToString(),
|
|
|
|
|
Guid.Empty,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace)
|
|
|
|
|
Guid.Empty)
|
|
|
|
|
{
|
|
|
|
|
ShortOverview = string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
@ -448,9 +403,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("PluginUninstalledWithName"),
|
|
|
|
|
e.Argument.Name),
|
|
|
|
|
NotificationType.PluginUninstalled.ToString(),
|
|
|
|
|
Guid.Empty,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace))
|
|
|
|
|
Guid.Empty))
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -462,9 +415,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("PluginInstalledWithName"),
|
|
|
|
|
e.Argument.name),
|
|
|
|
|
NotificationType.PluginInstalled.ToString(),
|
|
|
|
|
Guid.Empty,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace)
|
|
|
|
|
Guid.Empty)
|
|
|
|
|
{
|
|
|
|
|
ShortOverview = string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
@ -483,9 +434,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_localization.GetLocalizedString("NameInstallFailed"),
|
|
|
|
|
installationInfo.Name),
|
|
|
|
|
NotificationType.InstallationFailed.ToString(),
|
|
|
|
|
Guid.Empty,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Trace)
|
|
|
|
|
Guid.Empty)
|
|
|
|
|
{
|
|
|
|
|
ShortOverview = string.Format(
|
|
|
|
|
CultureInfo.InvariantCulture,
|
|
|
|
@ -529,10 +478,9 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
await CreateLogEntry(new ActivityLog(
|
|
|
|
|
string.Format(CultureInfo.InvariantCulture, _localization.GetLocalizedString("ScheduledTaskFailedWithName"), task.Name),
|
|
|
|
|
NotificationType.TaskFailed.ToString(),
|
|
|
|
|
Guid.Empty,
|
|
|
|
|
DateTime.UtcNow,
|
|
|
|
|
LogLevel.Error)
|
|
|
|
|
Guid.Empty)
|
|
|
|
|
{
|
|
|
|
|
LogSeverity = LogLevel.Error,
|
|
|
|
|
Overview = string.Join(Environment.NewLine, vals),
|
|
|
|
|
ShortOverview = runningTime
|
|
|
|
|
}).ConfigureAwait(false);
|
|
|
|
@ -567,8 +515,6 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
_userManager.UserDeleted -= OnUserDeleted;
|
|
|
|
|
_userManager.UserPolicyUpdated -= OnUserPolicyUpdated;
|
|
|
|
|
_userManager.UserLockedOut -= OnUserLockedOut;
|
|
|
|
|
|
|
|
|
|
_deviceManager.CameraImageUploaded -= OnCameraImageUploaded;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -588,7 +534,7 @@ namespace Emby.Server.Implementations.Activity
|
|
|
|
|
{
|
|
|
|
|
int years = days / DaysInYear;
|
|
|
|
|
values.Add(CreateValueString(years, "year"));
|
|
|
|
|
days = days % DaysInYear;
|
|
|
|
|
days %= DaysInYear;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Number of months
|
|
|
|
|