aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelManager.cs34
1 files changed, 12 insertions, 22 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
index eccce75d4..1bb8c21bf 100644
--- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
+++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
@@ -42,6 +42,7 @@ namespace MediaBrowser.Server.Implementations.Channels
private readonly IFileSystem _fileSystem;
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
+ private readonly IProviderManager _providerManager;
private readonly ILocalizationManager _localization;
private readonly ConcurrentDictionary<Guid, bool> _refreshedItems = new ConcurrentDictionary<Guid, bool>();
@@ -51,7 +52,7 @@ namespace MediaBrowser.Server.Implementations.Channels
private Timer _refreshTimer;
private Timer _clearDownloadCountsTimer;
- public ChannelManager(IUserManager userManager, IDtoService dtoService, ILibraryManager libraryManager, ILogger logger, IServerConfigurationManager config, IFileSystem fileSystem, IUserDataManager userDataManager, IJsonSerializer jsonSerializer, ILocalizationManager localization, IHttpClient httpClient)
+ public ChannelManager(IUserManager userManager, IDtoService dtoService, ILibraryManager libraryManager, ILogger logger, IServerConfigurationManager config, IFileSystem fileSystem, IUserDataManager userDataManager, IJsonSerializer jsonSerializer, ILocalizationManager localization, IHttpClient httpClient, IProviderManager providerManager)
{
_userManager = userManager;
_dtoService = dtoService;
@@ -63,6 +64,7 @@ namespace MediaBrowser.Server.Implementations.Channels
_jsonSerializer = jsonSerializer;
_localization = localization;
_httpClient = httpClient;
+ _providerManager = providerManager;
_refreshTimer = new Timer(s => _refreshedItems.Clear(), null, TimeSpan.FromHours(3), TimeSpan.FromHours(3));
_clearDownloadCountsTimer = new Timer(s => _downloadCounts.Clear(), null, TimeSpan.FromHours(24), TimeSpan.FromHours(24));
@@ -649,7 +651,7 @@ namespace MediaBrowser.Server.Implementations.Channels
var internalItems = await Task.WhenAll(itemTasks).ConfigureAwait(false);
internalItems = ApplyFilters(internalItems, query.Filters, user).ToArray();
- await RefreshIfNeeded(internalItems, new Progress<double>(), cancellationToken).ConfigureAwait(false);
+ RefreshIfNeeded(internalItems);
if (query.StartIndex.HasValue)
{
@@ -814,7 +816,7 @@ namespace MediaBrowser.Server.Implementations.Channels
var internalResult = await GetAllMediaInternal(query, cancellationToken).ConfigureAwait(false);
- await RefreshIfNeeded(internalResult.Items, new Progress<double>(), cancellationToken).ConfigureAwait(false);
+ RefreshIfNeeded(internalResult.Items);
var dtoOptions = new DtoOptions();
@@ -954,7 +956,7 @@ namespace MediaBrowser.Server.Implementations.Channels
}
}
- return await GetReturnItems(internalItems, providerTotalRecordCount, user, query, progress, cancellationToken).ConfigureAwait(false);
+ return await GetReturnItems(internalItems, providerTotalRecordCount, user, query).ConfigureAwait(false);
}
public async Task<QueryResult<BaseItemDto>> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken)
@@ -1123,9 +1125,7 @@ namespace MediaBrowser.Server.Implementations.Channels
private async Task<QueryResult<BaseItem>> GetReturnItems(IEnumerable<BaseItem> items,
int? totalCountFromProvider,
User user,
- ChannelItemQuery query,
- IProgress<double> progress,
- CancellationToken cancellationToken)
+ ChannelItemQuery query)
{
items = ApplyFilters(items, query.Filters, user);
@@ -1148,7 +1148,7 @@ namespace MediaBrowser.Server.Implementations.Channels
}
var returnItemArray = all.ToArray();
- await RefreshIfNeeded(returnItemArray, progress, cancellationToken).ConfigureAwait(false);
+ RefreshIfNeeded(returnItemArray);
return new QueryResult<BaseItem>
{
@@ -1272,32 +1272,22 @@ namespace MediaBrowser.Server.Implementations.Channels
return item;
}
- private async Task RefreshIfNeeded(BaseItem[] programs, IProgress<double> progress, CancellationToken cancellationToken)
+ private void RefreshIfNeeded(BaseItem[] programs)
{
- var numComplete = 0;
- var numItems = programs.Length;
-
foreach (var program in programs)
{
- await RefreshIfNeeded(program, cancellationToken).ConfigureAwait(false);
-
- numComplete++;
- double percent = numComplete;
- percent /= numItems;
- progress.Report(percent * 100);
+ RefreshIfNeeded(program);
}
}
- private readonly Task _cachedTask = Task.FromResult(true);
- private Task RefreshIfNeeded(BaseItem program, CancellationToken cancellationToken)
+ private void RefreshIfNeeded(BaseItem program)
{
if (!_refreshedItems.ContainsKey(program.Id))
{
_refreshedItems.TryAdd(program.Id, true);
- return program.RefreshMetadata(cancellationToken);
+ _providerManager.QueueRefresh(program.Id, new MetadataRefreshOptions(_fileSystem));
}
- return _cachedTask;
}
internal IChannel GetChannelProvider(Channel channel)