|
|
|
@ -1,7 +1,5 @@
|
|
|
|
|
#nullable disable
|
|
|
|
|
|
|
|
|
|
#pragma warning disable CS1591
|
|
|
|
|
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Concurrent;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
@ -25,6 +23,9 @@ using Microsoft.Extensions.Logging;
|
|
|
|
|
|
|
|
|
|
namespace Emby.Server.Implementations.EntryPoints;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// A <see cref="IServerEntryPoint"/> that notifies users when libraries are updated.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public sealed class LibraryChangedNotifier : IServerEntryPoint
|
|
|
|
|
{
|
|
|
|
|
private readonly ILibraryManager _libraryManager;
|
|
|
|
@ -42,6 +43,15 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
|
|
|
|
|
private readonly List<BaseItem> _itemsUpdated = new();
|
|
|
|
|
private readonly ConcurrentDictionary<Guid, DateTime> _lastProgressMessageTimes = new();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Initializes a new instance of the <see cref="LibraryChangedNotifier"/> class.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="libraryManager">The <see cref="ILibraryManager"/>.</param>
|
|
|
|
|
/// <param name="configurationManager">The <see cref="IServerConfigurationManager"/>.</param>
|
|
|
|
|
/// <param name="sessionManager">The <see cref="ISessionManager"/>.</param>
|
|
|
|
|
/// <param name="userManager">The <see cref="IUserManager"/>.</param>
|
|
|
|
|
/// <param name="logger">The <see cref="ILogger"/>.</param>
|
|
|
|
|
/// <param name="providerManager">The <see cref="IProviderManager"/>.</param>
|
|
|
|
|
public LibraryChangedNotifier(
|
|
|
|
|
ILibraryManager libraryManager,
|
|
|
|
|
IServerConfigurationManager configurationManager,
|
|
|
|
@ -58,12 +68,9 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
|
|
|
|
|
_providerManager = providerManager;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets or sets the library update timer.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The library update timer.</value>
|
|
|
|
|
private Timer LibraryUpdateTimer { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
public Task RunAsync()
|
|
|
|
|
{
|
|
|
|
|
_libraryManager.ItemAdded += OnLibraryItemAdded;
|
|
|
|
@ -184,10 +191,6 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Libraries the update timer callback.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="state">The state.</param>
|
|
|
|
|
private async void LibraryUpdateTimerCallback(object state)
|
|
|
|
|
{
|
|
|
|
|
List<Folder> foldersAddedTo;
|
|
|
|
@ -230,15 +233,6 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
|
|
|
|
|
await SendChangeNotifications(itemsAdded, itemsUpdated, itemsRemoved, foldersAddedTo, foldersRemovedFrom, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Sends the change notifications.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="itemsAdded">The items added.</param>
|
|
|
|
|
/// <param name="itemsUpdated">The items updated.</param>
|
|
|
|
|
/// <param name="itemsRemoved">The items removed.</param>
|
|
|
|
|
/// <param name="foldersAddedTo">The folders added to.</param>
|
|
|
|
|
/// <param name="foldersRemovedFrom">The folders removed from.</param>
|
|
|
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
|
|
|
private async Task SendChangeNotifications(
|
|
|
|
|
List<BaseItem> itemsAdded,
|
|
|
|
|
List<BaseItem> itemsUpdated,
|
|
|
|
@ -288,16 +282,6 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the library update info.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="itemsAdded">The items added.</param>
|
|
|
|
|
/// <param name="itemsUpdated">The items updated.</param>
|
|
|
|
|
/// <param name="itemsRemoved">The items removed.</param>
|
|
|
|
|
/// <param name="foldersAddedTo">The folders added to.</param>
|
|
|
|
|
/// <param name="foldersRemovedFrom">The folders removed from.</param>
|
|
|
|
|
/// <param name="userId">The user id.</param>
|
|
|
|
|
/// <returns>LibraryUpdateInfo.</returns>
|
|
|
|
|
private LibraryUpdateInfo GetLibraryUpdateInfo(
|
|
|
|
|
List<BaseItem> itemsAdded,
|
|
|
|
|
List<BaseItem> itemsUpdated,
|
|
|
|
@ -379,14 +363,6 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
|
|
|
|
|
return list.Distinct(StringComparer.Ordinal);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Translates the physical item to user library.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <typeparam name="T">The type of item.</typeparam>
|
|
|
|
|
/// <param name="item">The item.</param>
|
|
|
|
|
/// <param name="user">The user.</param>
|
|
|
|
|
/// <param name="includeIfNotFound">if set to <c>true</c> [include if not found].</param>
|
|
|
|
|
/// <returns>IEnumerable{``0}.</returns>
|
|
|
|
|
private IEnumerable<T> TranslatePhysicalItemToUserLibrary<T>(T item, User user, bool includeIfNotFound = false)
|
|
|
|
|
where T : BaseItem
|
|
|
|
|
{
|
|
|
|
|