diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-28 12:25:14 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-28 12:25:14 -0400 |
| commit | f09902c6a7b279e08eb74adcb654276ad50fb442 (patch) | |
| tree | a77e46ed591e80b80a0827d0967abfe45bf72695 /MediaBrowser.Controller | |
| parent | 08e4f959a215911e98c5f90c36e407e7fd2b4ed6 (diff) | |
added api methods for video backdrops
Diffstat (limited to 'MediaBrowser.Controller')
5 files changed, 91 insertions, 12 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index eca0ea462..8da67cb69 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -39,6 +39,7 @@ namespace MediaBrowser.Controller.Entities /// </summary> public const string TrailerFolderName = "trailers"; public const string ThemeSongsFolderName = "theme-music"; + public const string VideoBackdropsFolderName = "backdrops"; /// <summary> /// Gets or sets the name. @@ -702,6 +703,28 @@ namespace MediaBrowser.Controller.Entities } } + private List<Video> _videoBackdrops; + private bool _videoBackdropsInitialized; + private object _videoBackdropsSyncLock = new object(); + [IgnoreDataMember] + public List<Video> VideoBackdrops + { + get + { + LazyInitializer.EnsureInitialized(ref _videoBackdrops, ref _videoBackdropsInitialized, ref _videoBackdropsSyncLock, LoadVideoBackdrops); + return _videoBackdrops; + } + private set + { + _videoBackdrops = value; + + if (value == null) + { + _videoBackdropsInitialized = false; + } + } + } + /// <summary> /// Loads local trailers from the file system /// </summary> @@ -819,6 +842,64 @@ namespace MediaBrowser.Controller.Entities } /// <summary> + /// Loads the video backdrops. + /// </summary> + /// <returns>List{Video}.</returns> + private List<Video> LoadVideoBackdrops() + { + ItemResolveArgs resolveArgs; + + try + { + resolveArgs = ResolveArgs; + } + catch (IOException ex) + { + Logger.ErrorException("Error getting ResolveArgs for {0}", ex, Path); + return new List<Video>(); + } + + if (!resolveArgs.IsDirectory) + { + return new List<Video>(); + } + + var folder = resolveArgs.GetFileSystemEntryByName(VideoBackdropsFolderName); + + // Path doesn't exist. No biggie + if (folder == null) + { + return new List<Video>(); + } + + IEnumerable<FileSystemInfo> files; + + try + { + files = new DirectoryInfo(folder.FullName).EnumerateFiles(); + } + catch (IOException ex) + { + Logger.ErrorException("Error loading video backdrops for {0}", ex, Name); + return new List<Video>(); + } + + return LibraryManager.ResolvePaths<Video>(files, null).Select(item => + { + // Try to retrieve it from the db. If we don't find it, use the resolved version + var dbItem = LibraryManager.RetrieveItem(item.Id) as Video; + + if (dbItem != null) + { + dbItem.ResolveArgs = item.ResolveArgs; + item = dbItem; + } + + return item; + }).ToList(); + } + + /// <summary> /// Overrides the base implementation to refresh metadata for local trailers /// </summary> /// <param name="cancellationToken">The cancellation token.</param> @@ -837,6 +918,7 @@ namespace MediaBrowser.Controller.Entities // Lazy load these again LocalTrailers = null; ThemeSongs = null; + VideoBackdrops = null; // Refresh for the item var itemRefreshTask = ProviderManager.ExecuteMetadataProviders(this, cancellationToken, forceRefresh, allowSlowProviders); @@ -847,12 +929,15 @@ namespace MediaBrowser.Controller.Entities var trailerTasks = LocalTrailers.Select(i => i.RefreshMetadata(cancellationToken, forceSave, forceRefresh, allowSlowProviders)); var themeSongTasks = ThemeSongs.Select(i => i.RefreshMetadata(cancellationToken, forceSave, forceRefresh, allowSlowProviders)); + + var videoBackdropTasks = VideoBackdrops.Select(i => i.RefreshMetadata(cancellationToken, forceSave, forceRefresh, allowSlowProviders)); cancellationToken.ThrowIfCancellationRequested(); // Await the trailer tasks await Task.WhenAll(trailerTasks).ConfigureAwait(false); await Task.WhenAll(themeSongTasks).ConfigureAwait(false); + await Task.WhenAll(videoBackdropTasks).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); diff --git a/MediaBrowser.Controller/Providers/Music/FanArtArtistProvider.cs b/MediaBrowser.Controller/Providers/Music/FanArtArtistProvider.cs index ec99a78a7..1d4d811b6 100644 --- a/MediaBrowser.Controller/Providers/Music/FanArtArtistProvider.cs +++ b/MediaBrowser.Controller/Providers/Music/FanArtArtistProvider.cs @@ -51,7 +51,7 @@ namespace MediaBrowser.Controller.Providers.Music /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> public override bool Supports(BaseItem item) { - return item is MusicArtist; + return false; } protected virtual bool SaveLocalMeta diff --git a/MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs b/MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs index df490f5b6..a3fad6e8a 100644 --- a/MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs +++ b/MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs @@ -55,13 +55,6 @@ namespace MediaBrowser.Controller.Providers.Music private async Task<LastfmGetAlbumResult> GetAlbumResult(BaseItem item, CancellationToken cancellationToken) { - var result = await GetAlbumResult(item.Parent.Name, item.Name, cancellationToken); - - if (result != null && result.album != null) - { - return result; - } - var folder = (Folder)item; // Get each song, distinct by the combination of AlbumArtist and Album @@ -69,7 +62,7 @@ namespace MediaBrowser.Controller.Providers.Music foreach (var song in songs.Where(song => !string.IsNullOrEmpty(song.Album) && !string.IsNullOrEmpty(song.AlbumArtist))) { - result = await GetAlbumResult(song.AlbumArtist, song.Album, cancellationToken).ConfigureAwait(false); + var result = await GetAlbumResult(song.AlbumArtist, song.Album, cancellationToken).ConfigureAwait(false); if (result != null && result.album != null) { @@ -77,7 +70,8 @@ namespace MediaBrowser.Controller.Providers.Music } } - return null; + // Try the folder name + return await GetAlbumResult(item.Parent.Name, item.Name, cancellationToken); } private async Task<LastfmGetAlbumResult> GetAlbumResult(string artist, string album, CancellationToken cancellationToken) diff --git a/MediaBrowser.Controller/Providers/Music/LastfmArtistProvider.cs b/MediaBrowser.Controller/Providers/Music/LastfmArtistProvider.cs index c846fcd97..8fabf2368 100644 --- a/MediaBrowser.Controller/Providers/Music/LastfmArtistProvider.cs +++ b/MediaBrowser.Controller/Providers/Music/LastfmArtistProvider.cs @@ -90,7 +90,7 @@ namespace MediaBrowser.Controller.Providers.Music public override bool Supports(BaseItem item) { - return item is MusicArtist; + return false; } } } diff --git a/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs b/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs index fe64c66b3..e3df46ed2 100644 --- a/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs +++ b/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs @@ -62,7 +62,7 @@ namespace MediaBrowser.Controller.Providers.Music public override bool Supports(BaseItem item) { - return item is MusicArtist; + return false; } public override bool RequiresInternet |
