aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Channels
diff options
context:
space:
mode:
authorT. Adams <t.adams88@gmail.com>2015-04-03 11:04:25 -0700
committerT. Adams <t.adams88@gmail.com>2015-04-03 11:04:25 -0700
commitabf12569ba2aa31ea3a00e4faf3adad2f740cbd9 (patch)
tree47c57c6361825491d38e3def6b716926ddd9aa59 /MediaBrowser.Server.Implementations/Channels
parent46c92107490263f8e6abefbd2259780013fa195d (diff)
parentef505c8e9e2b8f348aeaa89be6bc446014b72996 (diff)
Merging in latest dev
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels')
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs51
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs43
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs1
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelManager.cs47
4 files changed, 96 insertions, 46 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs b/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs
index e0b616605..651489347 100644
--- a/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs
+++ b/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs
@@ -169,29 +169,32 @@ namespace MediaBrowser.Server.Implementations.Channels
foreach (var item in result.Items)
{
- var channelItem = (IChannelItem)item;
+ var channelItem = item as IChannelMediaItem;
- var channelFeatures = _manager.GetChannelFeatures(channelItem.ChannelId);
-
- if (channelFeatures.SupportsContentDownloading)
+ if (channelItem != null)
{
- if (options.DownloadingChannels.Contains(channelItem.ChannelId))
+ var channelFeatures = _manager.GetChannelFeatures(channelItem.ChannelId);
+
+ if (channelFeatures.SupportsContentDownloading)
{
- try
+ if (options.DownloadingChannels.Contains(channelItem.ChannelId))
{
- await DownloadChannelItem(item, options, cancellationToken, path);
- }
- catch (OperationCanceledException)
- {
- break;
- }
- catch (ChannelDownloadException)
- {
- // Logged at lower levels
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error downloading channel content for {0}", ex, item.Name);
+ try
+ {
+ await DownloadChannelItem(channelItem, options, cancellationToken, path);
+ }
+ catch (OperationCanceledException)
+ {
+ break;
+ }
+ catch (ChannelDownloadException)
+ {
+ // Logged at lower levels
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error downloading channel content for {0}", ex, item.Name);
+ }
}
}
}
@@ -210,13 +213,13 @@ namespace MediaBrowser.Server.Implementations.Channels
return channelOptions.DownloadSizeLimit;
}
- private async Task DownloadChannelItem(BaseItem item,
+ private async Task DownloadChannelItem(IChannelMediaItem item,
ChannelOptions channelOptions,
CancellationToken cancellationToken,
string path)
{
var itemId = item.Id.ToString("N");
- var sources = await _manager.GetChannelItemMediaSources(itemId, false, cancellationToken)
+ var sources = await _manager.GetStaticMediaSources(item, true, cancellationToken)
.ConfigureAwait(false);
var cachedVersions = sources.Where(i => i.Protocol == MediaProtocol.File).ToList();
@@ -237,11 +240,9 @@ namespace MediaBrowser.Server.Implementations.Channels
}
}
- var channelItem = (IChannelMediaItem)item;
-
- var destination = Path.Combine(path, channelItem.ChannelId, itemId);
+ var destination = Path.Combine(path, item.ChannelId, itemId);
- await _manager.DownloadChannelItem(channelItem, destination, new Progress<double>(), cancellationToken)
+ await _manager.DownloadChannelItem(item, destination, new Progress<double>(), cancellationToken)
.ConfigureAwait(false);
await RefreshMediaSourceItem(destination, cancellationToken).ConfigureAwait(false);
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs b/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs
new file mode 100644
index 000000000..dac3a80f2
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs
@@ -0,0 +1,43 @@
+using MediaBrowser.Controller.Channels;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.Channels
+{
+ public class ChannelDynamicMediaSourceProvider : IMediaSourceProvider
+ {
+ private readonly ChannelManager _channelManager;
+
+ public ChannelDynamicMediaSourceProvider(IChannelManager channelManager)
+ {
+ _channelManager = (ChannelManager)channelManager;
+ }
+
+ public Task<IEnumerable<MediaSourceInfo>> GetMediaSources(IHasMediaSources item, CancellationToken cancellationToken)
+ {
+ var channelItem = item as IChannelMediaItem;
+
+ if (channelItem != null)
+ {
+ return _channelManager.GetDynamicMediaSources(channelItem, cancellationToken);
+ }
+
+ return Task.FromResult<IEnumerable<MediaSourceInfo>>(new List<MediaSourceInfo>());
+ }
+
+ public Task<MediaSourceInfo> OpenMediaSource(string openToken, CancellationToken cancellationToken)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task CloseMediaSource(string liveStreamId, CancellationToken cancellationToken)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs b/MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs
index 5c033e6bd..f13c71c6d 100644
--- a/MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs
+++ b/MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs
@@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
-using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
index f0f30229e..e22bf2e7f 100644
--- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
+++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
@@ -241,10 +241,25 @@ namespace MediaBrowser.Server.Implementations.Channels
return item;
}
- public async Task<IEnumerable<MediaSourceInfo>> GetChannelItemMediaSources(string id, bool includeDynamicSources, CancellationToken cancellationToken)
+ public async Task<IEnumerable<MediaSourceInfo>> GetStaticMediaSources(IChannelMediaItem item, bool includeCachedVersions, CancellationToken cancellationToken)
{
- var item = (IChannelMediaItem)_libraryManager.GetItemById(id);
+ IEnumerable<ChannelMediaInfo> results = item.ChannelMediaSources;
+ var sources = SortMediaInfoResults(results)
+ .Select(i => GetMediaSource(item, i))
+ .ToList();
+
+ if (includeCachedVersions)
+ {
+ var cachedVersions = GetCachedChannelItemMediaSources(item);
+ sources.InsertRange(0, cachedVersions);
+ }
+
+ return sources.Where(IsValidMediaSource);
+ }
+
+ public async Task<IEnumerable<MediaSourceInfo>> GetDynamicMediaSources(IChannelMediaItem item, CancellationToken cancellationToken)
+ {
var channel = GetChannel(item.ChannelId);
var channelPlugin = GetChannelProvider(channel);
@@ -252,24 +267,25 @@ namespace MediaBrowser.Server.Implementations.Channels
IEnumerable<ChannelMediaInfo> results;
- if (requiresCallback != null && includeDynamicSources)
+ if (requiresCallback != null)
{
results = await GetChannelItemMediaSourcesInternal(requiresCallback, item.ExternalId, cancellationToken)
- .ConfigureAwait(false);
+ .ConfigureAwait(false);
}
else
{
- results = item.ChannelMediaSources;
+ results = new List<ChannelMediaInfo>();
}
- var sources = SortMediaInfoResults(results).Select(i => GetMediaSource(item, i))
+ var list = SortMediaInfoResults(results)
+ .Select(i => GetMediaSource(item, i))
+ .Where(IsValidMediaSource)
.ToList();
var cachedVersions = GetCachedChannelItemMediaSources(item);
+ list.InsertRange(0, cachedVersions);
- sources.InsertRange(0, cachedVersions);
-
- return sources.Where(IsValidMediaSource);
+ return list;
}
private readonly ConcurrentDictionary<string, Tuple<DateTime, List<ChannelMediaInfo>>> _channelItemMediaInfo =
@@ -297,14 +313,7 @@ namespace MediaBrowser.Server.Implementations.Channels
return list;
}
- public IEnumerable<MediaSourceInfo> GetCachedChannelItemMediaSources(string id)
- {
- var item = (IChannelMediaItem)_libraryManager.GetItemById(id);
-
- return GetCachedChannelItemMediaSources(item);
- }
-
- public IEnumerable<MediaSourceInfo> GetCachedChannelItemMediaSources(IChannelMediaItem item)
+ private IEnumerable<MediaSourceInfo> GetCachedChannelItemMediaSources(IChannelMediaItem item)
{
var filenamePrefix = item.Id.ToString("N");
var parentPath = Path.Combine(ChannelDownloadPath, item.ChannelId);
@@ -339,7 +348,6 @@ namespace MediaBrowser.Server.Implementations.Channels
if (source != null)
{
- source.Type = MediaSourceType.Cache;
return new[] { source };
}
}
@@ -1408,8 +1416,7 @@ namespace MediaBrowser.Server.Implementations.Channels
public async Task DownloadChannelItem(IChannelMediaItem item, string destination,
IProgress<double> progress, CancellationToken cancellationToken)
{
- var itemId = item.Id.ToString("N");
- var sources = await GetChannelItemMediaSources(itemId, true, cancellationToken)
+ var sources = await GetDynamicMediaSources(item, cancellationToken)
.ConfigureAwait(false);
var list = sources.Where(i => i.Protocol == MediaProtocol.Http).ToList();