diff options
| author | Luke <luke.pulverenti@gmail.com> | 2016-03-19 16:23:33 -0400 |
|---|---|---|
| committer | Luke <luke.pulverenti@gmail.com> | 2016-03-19 16:23:33 -0400 |
| commit | 3ab212d070384c0a0000e255307aa58d15cbd0ae (patch) | |
| tree | 6ca899cd7be8685771b56b0074c5b3022faa789a /MediaBrowser.Server.Implementations/Channels | |
| parent | fd0d50ad978801164728f7f6bd067430aa090c5f (diff) | |
| parent | db1bf5b1b55c8012e9ca3393fd59b9469ee5aeaf (diff) | |
Merge pull request #1563 from MediaBrowser/dev
Dev
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Channels/ChannelManager.cs | 132 |
2 files changed, 107 insertions, 31 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs b/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs index dac3a80f2..3239b20b2 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs @@ -20,11 +20,11 @@ namespace MediaBrowser.Server.Implementations.Channels public Task<IEnumerable<MediaSourceInfo>> GetMediaSources(IHasMediaSources item, CancellationToken cancellationToken) { - var channelItem = item as IChannelMediaItem; + var baseItem = (BaseItem) item; - if (channelItem != null) + if (baseItem.SourceType == SourceType.Channel) { - return _channelManager.GetDynamicMediaSources(channelItem, cancellationToken); + return _channelManager.GetDynamicMediaSources(baseItem, cancellationToken); } return Task.FromResult<IEnumerable<MediaSourceInfo>>(new List<MediaSourceInfo>()); diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs index c7865b6aa..e957b9889 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs @@ -26,6 +26,9 @@ using System.Net; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Entities.TV; namespace MediaBrowser.Server.Implementations.Channels { @@ -248,9 +251,19 @@ namespace MediaBrowser.Server.Implementations.Channels return item; } - public async Task<IEnumerable<MediaSourceInfo>> GetStaticMediaSources(IChannelMediaItem item, bool includeCachedVersions, CancellationToken cancellationToken) + public async Task<IEnumerable<MediaSourceInfo>> GetStaticMediaSources(BaseItem item, bool includeCachedVersions, CancellationToken cancellationToken) { - IEnumerable<ChannelMediaInfo> results = item.ChannelMediaSources; + IEnumerable<ChannelMediaInfo> results = new List<ChannelMediaInfo>(); + var video = item as Video; + if (video != null) + { + results = video.ChannelMediaSources; + } + var audio = item as Audio; + if (audio != null) + { + results = audio.ChannelMediaSources ?? new List<ChannelMediaInfo>(); + } var sources = SortMediaInfoResults(results) .Select(i => GetMediaSource(item, i)) @@ -265,7 +278,7 @@ namespace MediaBrowser.Server.Implementations.Channels return sources; } - public async Task<IEnumerable<MediaSourceInfo>> GetDynamicMediaSources(IChannelMediaItem item, CancellationToken cancellationToken) + public async Task<IEnumerable<MediaSourceInfo>> GetDynamicMediaSources(BaseItem item, CancellationToken cancellationToken) { var channel = GetChannel(item.ChannelId); var channelPlugin = GetChannelProvider(channel); @@ -319,7 +332,7 @@ namespace MediaBrowser.Server.Implementations.Channels return list; } - private IEnumerable<MediaSourceInfo> GetCachedChannelItemMediaSources(IChannelMediaItem item) + private IEnumerable<MediaSourceInfo> GetCachedChannelItemMediaSources(BaseItem item) { var filenamePrefix = item.Id.ToString("N"); var parentPath = Path.Combine(ChannelDownloadPath, item.ChannelId); @@ -368,7 +381,7 @@ namespace MediaBrowser.Server.Implementations.Channels return new List<MediaSourceInfo>(); } - private MediaSourceInfo GetMediaSource(IChannelMediaItem item, ChannelMediaInfo info) + private MediaSourceInfo GetMediaSource(BaseItem item, ChannelMediaInfo info) { var source = info.ToMediaSource(); @@ -411,6 +424,7 @@ namespace MediaBrowser.Server.Implementations.Channels var parentFolderId = parentFolder.Id; var id = GetInternalChannelId(channelInfo.Name); + var idString = id.ToString("N"); var path = Channel.GetInternalMetadataPath(_config.ApplicationPaths.InternalMetadataPath, id); @@ -418,7 +432,6 @@ namespace MediaBrowser.Server.Implementations.Channels var forceUpdate = false; var item = _libraryManager.GetItemById(id) as Channel; - var channelId = channelInfo.Name.GetMD5().ToString("N"); if (item == null) { @@ -439,11 +452,11 @@ namespace MediaBrowser.Server.Implementations.Channels } item.Path = path; - if (!string.Equals(item.ChannelId, channelId, StringComparison.OrdinalIgnoreCase)) + if (!string.Equals(item.ChannelId, idString, StringComparison.OrdinalIgnoreCase)) { forceUpdate = true; } - item.ChannelId = channelId; + item.ChannelId = idString; if (item.ParentId != parentFolderId) { @@ -492,7 +505,7 @@ namespace MediaBrowser.Server.Implementations.Channels public Channel GetChannel(string id) { - return _libraryManager.GetItemById(new Guid(id)) as Channel; + return _libraryManager.GetItemById(id) as Channel; } public IEnumerable<ChannelFeatures> GetAllChannelFeatures() @@ -510,6 +523,11 @@ namespace MediaBrowser.Server.Implementations.Channels public ChannelFeatures GetChannelFeatures(string id) { + if (string.IsNullOrWhiteSpace(id)) + { + throw new ArgumentNullException("id"); + } + var channel = GetChannel(id); var channelProvider = GetChannelProvider(channel); @@ -1079,7 +1097,7 @@ namespace MediaBrowser.Server.Implementations.Channels if (!string.IsNullOrWhiteSpace(folderId)) { - var categoryItem = (IChannelItem)_libraryManager.GetItemById(new Guid(folderId)); + var categoryItem = _libraryManager.GetItemById(new Guid(folderId)); query.FolderId = categoryItem.ExternalId; } @@ -1195,7 +1213,7 @@ namespace MediaBrowser.Server.Implementations.Channels } private T GetItemById<T>(string idString, string channelName, string channnelDataVersion, out bool isNew) - where T : BaseItem, IChannelItem, new() + where T : BaseItem, new() { var id = GetIdToHash(idString, channelName).GetMBId(typeof(T)); @@ -1233,15 +1251,48 @@ namespace MediaBrowser.Server.Implementations.Channels if (info.Type == ChannelItemType.Folder) { - item = GetItemById<ChannelFolderItem>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + if (info.FolderType == ChannelFolderType.MusicAlbum) + { + item = GetItemById<MusicAlbum>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + } + else if (info.FolderType == ChannelFolderType.PhotoAlbum) + { + item = GetItemById<PhotoAlbum>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + } + else + { + item = GetItemById<Folder>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + } } else if (info.MediaType == ChannelMediaType.Audio) { - item = GetItemById<ChannelAudioItem>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + if (info.ContentType == ChannelMediaContentType.Podcast) + { + item = GetItemById<AudioPodcast>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + } + else + { + item = GetItemById<Audio>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + } } else { - item = GetItemById<ChannelVideoItem>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + if (info.ContentType == ChannelMediaContentType.Episode) + { + item = GetItemById<Episode>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + } + else if (info.ContentType == ChannelMediaContentType.Movie) + { + item = GetItemById<Movie>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + } + else if (info.ContentType == ChannelMediaContentType.Trailer || info.ExtraType == ExtraType.Trailer) + { + item = GetItemById<Trailer>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + } + else + { + item = GetItemById<Video>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew); + } } item.RunTimeTicks = info.RunTimeTicks; @@ -1263,9 +1314,17 @@ namespace MediaBrowser.Server.Implementations.Channels item.Tags = info.Tags; } - var channelItem = (IChannelItem)item; + var trailer = item as Trailer; + if (trailer != null) + { + if (!info.TrailerTypes.SequenceEqual(trailer.TrailerTypes)) + { + forceUpdate = true; + } + trailer.TrailerTypes = info.TrailerTypes; + } - channelItem.ChannelId = internalChannelId.ToString("N"); + item.ChannelId = internalChannelId.ToString("N"); if (item.ParentId != internalChannelId) { @@ -1273,22 +1332,29 @@ namespace MediaBrowser.Server.Implementations.Channels } item.ParentId = internalChannelId; - if (!string.Equals(channelItem.ExternalId, info.Id, StringComparison.OrdinalIgnoreCase)) + if (!string.Equals(item.ExternalId, info.Id, StringComparison.OrdinalIgnoreCase)) { forceUpdate = true; } - channelItem.ExternalId = info.Id; + item.ExternalId = info.Id; - var channelMediaItem = item as IChannelMediaItem; - - if (channelMediaItem != null) + var channelAudioItem = item as Audio; + if (channelAudioItem != null) { - channelMediaItem.ContentType = info.ContentType; - channelMediaItem.ExtraType = info.ExtraType; - channelMediaItem.ChannelMediaSources = info.MediaSources; + channelAudioItem.ExtraType = info.ExtraType; + channelAudioItem.ChannelMediaSources = info.MediaSources; var mediaSource = info.MediaSources.FirstOrDefault(); + item.Path = mediaSource == null ? null : mediaSource.Path; + } + + var channelVideoItem = item as Video; + if (channelVideoItem != null) + { + channelVideoItem.ExtraType = info.ExtraType; + channelVideoItem.ChannelMediaSources = info.MediaSources; + var mediaSource = info.MediaSources.FirstOrDefault(); item.Path = mediaSource == null ? null : mediaSource.Path; } @@ -1297,6 +1363,12 @@ namespace MediaBrowser.Server.Implementations.Channels item.SetImagePath(ImageType.Primary, info.ImageUrl); } + if (item.SourceType != SourceType.Channel) + { + item.SourceType = SourceType.Channel; + forceUpdate = true; + } + if (isNew) { await _libraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false); @@ -1334,7 +1406,12 @@ namespace MediaBrowser.Server.Implementations.Channels internal IChannel GetChannelProvider(Channel channel) { - var result = GetAllChannels().FirstOrDefault(i => string.Equals(i.Name.GetMD5().ToString("N"), channel.ChannelId, StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, channel.Name, StringComparison.OrdinalIgnoreCase)); + if (channel == null) + { + throw new ArgumentNullException("channel"); + } + + var result = GetAllChannels().FirstOrDefault(i => string.Equals(GetInternalChannelId(i.Name).ToString("N"), channel.ChannelId, StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, channel.Name, StringComparison.OrdinalIgnoreCase)); if (result == null) { @@ -1441,7 +1518,7 @@ namespace MediaBrowser.Server.Implementations.Channels return await _libraryManager.GetNamedView(name, "channels", "zz_" + name, cancellationToken).ConfigureAwait(false); } - public async Task DownloadChannelItem(IChannelMediaItem item, string destination, + public async Task DownloadChannelItem(BaseItem item, string destination, IProgress<double> progress, CancellationToken cancellationToken) { var sources = await GetDynamicMediaSources(item, cancellationToken) @@ -1457,7 +1534,7 @@ namespace MediaBrowser.Server.Implementations.Channels } private async Task TryDownloadChannelItem(MediaSourceInfo source, - IChannelMediaItem item, + BaseItem item, string destination, IProgress<double> progress, CancellationToken cancellationToken) @@ -1469,7 +1546,6 @@ namespace MediaBrowser.Server.Implementations.Channels Progress = new Progress<double>() }; - var host = new Uri(source.Path).Host.ToLower(); var channel = GetChannel(item.ChannelId); var channelProvider = GetChannelProvider(channel); var features = channelProvider.GetChannelFeatures(); |
