|
|
|
@ -23,10 +23,12 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
public class LibraryChangedNotifier : IServerEntryPoint
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The library manager.
|
|
|
|
|
/// The library update duration.
|
|
|
|
|
/// </summary>
|
|
|
|
|
private readonly ILibraryManager _libraryManager;
|
|
|
|
|
private const int LibraryUpdateDuration = 30000;
|
|
|
|
|
|
|
|
|
|
private readonly ILibraryManager _libraryManager;
|
|
|
|
|
private readonly IProviderManager _providerManager;
|
|
|
|
|
private readonly ISessionManager _sessionManager;
|
|
|
|
|
private readonly IUserManager _userManager;
|
|
|
|
|
private readonly ILogger<LibraryChangedNotifier> _logger;
|
|
|
|
@ -38,23 +40,10 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
|
|
|
|
|
private readonly List<Folder> _foldersAddedTo = new List<Folder>();
|
|
|
|
|
private readonly List<Folder> _foldersRemovedFrom = new List<Folder>();
|
|
|
|
|
|
|
|
|
|
private readonly List<BaseItem> _itemsAdded = new List<BaseItem>();
|
|
|
|
|
private readonly List<BaseItem> _itemsRemoved = new List<BaseItem>();
|
|
|
|
|
private readonly List<BaseItem> _itemsUpdated = new List<BaseItem>();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets or sets the library update timer.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The library update timer.</value>
|
|
|
|
|
private Timer LibraryUpdateTimer { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The library update duration.
|
|
|
|
|
/// </summary>
|
|
|
|
|
private const int LibraryUpdateDuration = 30000;
|
|
|
|
|
|
|
|
|
|
private readonly IProviderManager _providerManager;
|
|
|
|
|
private readonly Dictionary<Guid, DateTime> _lastProgressMessageTimes = new Dictionary<Guid, DateTime>();
|
|
|
|
|
|
|
|
|
|
public LibraryChangedNotifier(
|
|
|
|
|
ILibraryManager libraryManager,
|
|
|
|
@ -70,22 +59,26 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
_providerManager = providerManager;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets or sets the library update timer.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The library update timer.</value>
|
|
|
|
|
private Timer LibraryUpdateTimer { get; set; }
|
|
|
|
|
|
|
|
|
|
public Task RunAsync()
|
|
|
|
|
{
|
|
|
|
|
_libraryManager.ItemAdded += libraryManager_ItemAdded;
|
|
|
|
|
_libraryManager.ItemUpdated += libraryManager_ItemUpdated;
|
|
|
|
|
_libraryManager.ItemRemoved += libraryManager_ItemRemoved;
|
|
|
|
|
_libraryManager.ItemAdded += OnLibraryItemAdded;
|
|
|
|
|
_libraryManager.ItemUpdated += OnLibraryItemUpdated;
|
|
|
|
|
_libraryManager.ItemRemoved += OnLibraryItemRemoved;
|
|
|
|
|
|
|
|
|
|
_providerManager.RefreshCompleted += _providerManager_RefreshCompleted;
|
|
|
|
|
_providerManager.RefreshStarted += _providerManager_RefreshStarted;
|
|
|
|
|
_providerManager.RefreshProgress += _providerManager_RefreshProgress;
|
|
|
|
|
_providerManager.RefreshCompleted += OnProviderRefreshCompleted;
|
|
|
|
|
_providerManager.RefreshStarted += OnProviderRefreshStarted;
|
|
|
|
|
_providerManager.RefreshProgress += OnProviderRefreshProgress;
|
|
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Dictionary<Guid, DateTime> _lastProgressMessageTimes = new Dictionary<Guid, DateTime>();
|
|
|
|
|
|
|
|
|
|
private void _providerManager_RefreshProgress(object sender, GenericEventArgs<Tuple<BaseItem, double>> e)
|
|
|
|
|
private void OnProviderRefreshProgress(object sender, GenericEventArgs<Tuple<BaseItem, double>> e)
|
|
|
|
|
{
|
|
|
|
|
var item = e.Argument.Item1;
|
|
|
|
|
|
|
|
|
@ -122,9 +115,11 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
|
|
|
|
|
foreach (var collectionFolder in collectionFolders)
|
|
|
|
|
{
|
|
|
|
|
var collectionFolderDict = new Dictionary<string, string>();
|
|
|
|
|
collectionFolderDict["ItemId"] = collectionFolder.Id.ToString("N", CultureInfo.InvariantCulture);
|
|
|
|
|
collectionFolderDict["Progress"] = (collectionFolder.GetRefreshProgress() ?? 0).ToString(CultureInfo.InvariantCulture);
|
|
|
|
|
var collectionFolderDict = new Dictionary<string, string>
|
|
|
|
|
{
|
|
|
|
|
["ItemId"] = collectionFolder.Id.ToString("N", CultureInfo.InvariantCulture),
|
|
|
|
|
["Progress"] = (collectionFolder.GetRefreshProgress() ?? 0).ToString(CultureInfo.InvariantCulture)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
@ -136,21 +131,19 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void _providerManager_RefreshStarted(object sender, GenericEventArgs<BaseItem> e)
|
|
|
|
|
private void OnProviderRefreshStarted(object sender, GenericEventArgs<BaseItem> e)
|
|
|
|
|
{
|
|
|
|
|
_providerManager_RefreshProgress(sender, new GenericEventArgs<Tuple<BaseItem, double>>(new Tuple<BaseItem, double>(e.Argument, 0)));
|
|
|
|
|
OnProviderRefreshProgress(sender, new GenericEventArgs<Tuple<BaseItem, double>>(new Tuple<BaseItem, double>(e.Argument, 0)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void _providerManager_RefreshCompleted(object sender, GenericEventArgs<BaseItem> e)
|
|
|
|
|
private void OnProviderRefreshCompleted(object sender, GenericEventArgs<BaseItem> e)
|
|
|
|
|
{
|
|
|
|
|
_providerManager_RefreshProgress(sender, new GenericEventArgs<Tuple<BaseItem, double>>(new Tuple<BaseItem, double>(e.Argument, 100)));
|
|
|
|
|
OnProviderRefreshProgress(sender, new GenericEventArgs<Tuple<BaseItem, double>>(new Tuple<BaseItem, double>(e.Argument, 100)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static bool EnableRefreshMessage(BaseItem item)
|
|
|
|
|
{
|
|
|
|
|
var folder = item as Folder;
|
|
|
|
|
|
|
|
|
|
if (folder == null)
|
|
|
|
|
if (!(item is Folder folder))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
@ -183,7 +176,7 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender">The source of the event.</param>
|
|
|
|
|
/// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param>
|
|
|
|
|
void libraryManager_ItemAdded(object sender, ItemChangeEventArgs e)
|
|
|
|
|
private void OnLibraryItemAdded(object sender, ItemChangeEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!FilterItem(e.Item))
|
|
|
|
|
{
|
|
|
|
@ -205,8 +198,7 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
LibraryUpdateTimer.Change(LibraryUpdateDuration, Timeout.Infinite);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var parent = e.Item.GetParent() as Folder;
|
|
|
|
|
if (parent != null)
|
|
|
|
|
if (e.Item.GetParent() is Folder parent)
|
|
|
|
|
{
|
|
|
|
|
_foldersAddedTo.Add(parent);
|
|
|
|
|
}
|
|
|
|
@ -220,7 +212,7 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender">The source of the event.</param>
|
|
|
|
|
/// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param>
|
|
|
|
|
void libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e)
|
|
|
|
|
private void OnLibraryItemUpdated(object sender, ItemChangeEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!FilterItem(e.Item))
|
|
|
|
|
{
|
|
|
|
@ -231,8 +223,7 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
{
|
|
|
|
|
if (LibraryUpdateTimer == null)
|
|
|
|
|
{
|
|
|
|
|
LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration,
|
|
|
|
|
Timeout.Infinite);
|
|
|
|
|
LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -248,7 +239,7 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender">The source of the event.</param>
|
|
|
|
|
/// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param>
|
|
|
|
|
void libraryManager_ItemRemoved(object sender, ItemChangeEventArgs e)
|
|
|
|
|
private void OnLibraryItemRemoved(object sender, ItemChangeEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!FilterItem(e.Item))
|
|
|
|
|
{
|
|
|
|
@ -259,16 +250,14 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
{
|
|
|
|
|
if (LibraryUpdateTimer == null)
|
|
|
|
|
{
|
|
|
|
|
LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration,
|
|
|
|
|
Timeout.Infinite);
|
|
|
|
|
LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LibraryUpdateTimer.Change(LibraryUpdateDuration, Timeout.Infinite);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var parent = e.Parent as Folder;
|
|
|
|
|
if (parent != null)
|
|
|
|
|
if (e.Parent is Folder parent)
|
|
|
|
|
{
|
|
|
|
|
_foldersRemovedFrom.Add(parent);
|
|
|
|
|
}
|
|
|
|
@ -486,13 +475,13 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
LibraryUpdateTimer = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_libraryManager.ItemAdded -= libraryManager_ItemAdded;
|
|
|
|
|
_libraryManager.ItemUpdated -= libraryManager_ItemUpdated;
|
|
|
|
|
_libraryManager.ItemRemoved -= libraryManager_ItemRemoved;
|
|
|
|
|
_libraryManager.ItemAdded -= OnLibraryItemAdded;
|
|
|
|
|
_libraryManager.ItemUpdated -= OnLibraryItemUpdated;
|
|
|
|
|
_libraryManager.ItemRemoved -= OnLibraryItemRemoved;
|
|
|
|
|
|
|
|
|
|
_providerManager.RefreshCompleted -= _providerManager_RefreshCompleted;
|
|
|
|
|
_providerManager.RefreshStarted -= _providerManager_RefreshStarted;
|
|
|
|
|
_providerManager.RefreshProgress -= _providerManager_RefreshProgress;
|
|
|
|
|
_providerManager.RefreshCompleted -= OnProviderRefreshCompleted;
|
|
|
|
|
_providerManager.RefreshStarted -= OnProviderRefreshStarted;
|
|
|
|
|
_providerManager.RefreshProgress -= OnProviderRefreshProgress;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|