mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-16 14:03:03 +03:00
continue reworking provider project
This commit is contained in:
@@ -863,8 +863,8 @@ namespace MediaBrowser.Providers.Manager
|
||||
private readonly ConcurrentQueue<Tuple<Guid, MetadataRefreshOptions>> _refreshQueue =
|
||||
new ConcurrentQueue<Tuple<Guid, MetadataRefreshOptions>>();
|
||||
|
||||
private readonly object _refreshTimerLock = new object();
|
||||
private Timer _refreshTimer;
|
||||
private readonly object _refreshQueueLock = new object();
|
||||
private bool _isProcessingRefreshQueue;
|
||||
|
||||
public void QueueRefresh(Guid id, MetadataRefreshOptions options)
|
||||
{
|
||||
@@ -874,38 +874,18 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
|
||||
_refreshQueue.Enqueue(new Tuple<Guid, MetadataRefreshOptions>(id, options));
|
||||
StartRefreshTimer();
|
||||
}
|
||||
|
||||
private void StartRefreshTimer()
|
||||
{
|
||||
if (_disposed)
|
||||
lock (_refreshQueueLock)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lock (_refreshTimerLock)
|
||||
{
|
||||
if (_refreshTimer == null)
|
||||
if (!_isProcessingRefreshQueue)
|
||||
{
|
||||
_refreshTimer = new Timer(RefreshTimerCallback, null, 100, Timeout.Infinite);
|
||||
_isProcessingRefreshQueue = true;
|
||||
Task.Run(() => StartProcessingRefreshQueue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void StopRefreshTimer()
|
||||
{
|
||||
lock (_refreshTimerLock)
|
||||
{
|
||||
if (_refreshTimer != null)
|
||||
{
|
||||
_refreshTimer.Dispose();
|
||||
_refreshTimer = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async void RefreshTimerCallback(object state)
|
||||
private async Task StartProcessingRefreshQueue()
|
||||
{
|
||||
Tuple<Guid, MetadataRefreshOptions> refreshItem;
|
||||
var libraryManager = _libraryManagerFactory();
|
||||
@@ -939,7 +919,10 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
}
|
||||
|
||||
StopRefreshTimer();
|
||||
lock (_refreshQueueLock)
|
||||
{
|
||||
_isProcessingRefreshQueue = false;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task RefreshItem(BaseItem item, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||
@@ -1018,7 +1001,6 @@ namespace MediaBrowser.Providers.Manager
|
||||
public void Dispose()
|
||||
{
|
||||
_disposed = true;
|
||||
StopRefreshTimer();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user