|
|
|
@ -146,98 +146,41 @@ namespace Emby.Server.Implementations.EntryPoints
|
|
|
|
|
=> item is Folder { IsRoot: false, IsTopParent: true }
|
|
|
|
|
and not (AggregateFolder or UserRootFolder or UserView or Channel);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Handles the ItemAdded event of the libraryManager control.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender">The source of the event.</param>
|
|
|
|
|
/// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param>
|
|
|
|
|
private void OnLibraryItemAdded(object sender, ItemChangeEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!FilterItem(e.Item))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lock (_libraryChangedSyncLock)
|
|
|
|
|
{
|
|
|
|
|
if (LibraryUpdateTimer is null)
|
|
|
|
|
{
|
|
|
|
|
LibraryUpdateTimer = new Timer(
|
|
|
|
|
LibraryUpdateTimerCallback,
|
|
|
|
|
null,
|
|
|
|
|
TimeSpan.FromSeconds(_configurationManager.Configuration.LibraryUpdateDuration),
|
|
|
|
|
Timeout.InfiniteTimeSpan);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LibraryUpdateTimer.Change(TimeSpan.FromSeconds(_configurationManager.Configuration.LibraryUpdateDuration), Timeout.InfiniteTimeSpan);
|
|
|
|
|
}
|
|
|
|
|
=> OnLibraryChange(e.Item, e.Parent, _itemsAdded, _foldersAddedTo);
|
|
|
|
|
|
|
|
|
|
if (e.Item.GetParent() is Folder parent)
|
|
|
|
|
{
|
|
|
|
|
_foldersAddedTo.Add(parent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_itemsAdded.Add(e.Item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Handles the ItemUpdated event of the libraryManager control.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender">The source of the event.</param>
|
|
|
|
|
/// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param>
|
|
|
|
|
private void OnLibraryItemUpdated(object sender, ItemChangeEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!FilterItem(e.Item))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
=> OnLibraryChange(e.Item, e.Parent, _itemsUpdated, null);
|
|
|
|
|
|
|
|
|
|
lock (_libraryChangedSyncLock)
|
|
|
|
|
{
|
|
|
|
|
if (LibraryUpdateTimer is null)
|
|
|
|
|
{
|
|
|
|
|
LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, TimeSpan.FromSeconds(_configurationManager.Configuration.LibraryUpdateDuration), Timeout.InfiniteTimeSpan);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LibraryUpdateTimer.Change(TimeSpan.FromSeconds(_configurationManager.Configuration.LibraryUpdateDuration), Timeout.InfiniteTimeSpan);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_itemsUpdated.Add(e.Item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Handles the ItemRemoved event of the libraryManager control.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender">The source of the event.</param>
|
|
|
|
|
/// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param>
|
|
|
|
|
private void OnLibraryItemRemoved(object sender, ItemChangeEventArgs e)
|
|
|
|
|
=> OnLibraryChange(e.Item, e.Parent, _itemsRemoved, _foldersRemovedFrom);
|
|
|
|
|
|
|
|
|
|
private void OnLibraryChange(BaseItem item, BaseItem parent, List<BaseItem> itemsList, List<Folder> foldersList)
|
|
|
|
|
{
|
|
|
|
|
if (!FilterItem(e.Item))
|
|
|
|
|
if (!FilterItem(item))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lock (_libraryChangedSyncLock)
|
|
|
|
|
{
|
|
|
|
|
var updateDuration = TimeSpan.FromSeconds(_configurationManager.Configuration.LibraryUpdateDuration);
|
|
|
|
|
|
|
|
|
|
if (LibraryUpdateTimer is null)
|
|
|
|
|
{
|
|
|
|
|
LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, TimeSpan.FromSeconds(_configurationManager.Configuration.LibraryUpdateDuration), Timeout.InfiniteTimeSpan);
|
|
|
|
|
LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, updateDuration, Timeout.InfiniteTimeSpan);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LibraryUpdateTimer.Change(TimeSpan.FromSeconds(_configurationManager.Configuration.LibraryUpdateDuration), Timeout.InfiniteTimeSpan);
|
|
|
|
|
LibraryUpdateTimer.Change(updateDuration, Timeout.InfiniteTimeSpan);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (e.Parent is Folder parent)
|
|
|
|
|
if (foldersList is not null && parent is Folder folder)
|
|
|
|
|
{
|
|
|
|
|
_foldersRemovedFrom.Add(parent);
|
|
|
|
|
foldersList.Add(folder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_itemsRemoved.Add(e.Item);
|
|
|
|
|
itemsList.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|