From c1ad234b7993e294a8342242bc0ce4a649ca5479 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 16 Jul 2013 12:03:28 -0400 Subject: [PATCH] Added album soundtrack links --- .../Configuration/ConfigurationHelper.cs | 2 +- MediaBrowser.Controller/Dto/DtoBuilder.cs | 242 ++++++++++++++---- MediaBrowser.Model/Dto/BaseItemDto.cs | 6 + .../Entities/MetadataProviders.cs | 1 + MediaBrowser.Model/Querying/ItemFields.cs | 5 + MediaBrowser.ServerApplication/App.xaml.cs | 4 +- 6 files changed, 211 insertions(+), 49 deletions(-) diff --git a/MediaBrowser.Common/Configuration/ConfigurationHelper.cs b/MediaBrowser.Common/Configuration/ConfigurationHelper.cs index fc74a6a4d..1f86c5c02 100644 --- a/MediaBrowser.Common/Configuration/ConfigurationHelper.cs +++ b/MediaBrowser.Common/Configuration/ConfigurationHelper.cs @@ -31,7 +31,7 @@ namespace MediaBrowser.Common.Configuration configuration = xmlSerializer.DeserializeFromBytes(type, buffer); } - catch (FileNotFoundException) + catch (Exception) { configuration = Activator.CreateInstance(type); } diff --git a/MediaBrowser.Controller/Dto/DtoBuilder.cs b/MediaBrowser.Controller/Dto/DtoBuilder.cs index 85484d161..7086b2c4f 100644 --- a/MediaBrowser.Controller/Dto/DtoBuilder.cs +++ b/MediaBrowser.Controller/Dto/DtoBuilder.cs @@ -95,6 +95,37 @@ namespace MediaBrowser.Controller.Dto AttachBasicFields(dto, item, fields); + if (fields.Contains(ItemFields.SoundtrackIds)) + { + var series = item as Series; + + if (series != null) + { + AttachSoundtrackIds(dto, series, user); + } + + var movie = item as Movie; + + if (movie != null) + { + AttachSoundtrackIds(dto, movie, user); + } + + var album = item as MusicAlbum; + + if (album != null) + { + AttachSoundtrackIds(dto, album, user); + } + + var game = item as Game; + + if (game != null) + { + AttachSoundtrackIds(dto, game, user); + } + } + // Make sure all the tasks we kicked off have completed. if (tasks.Count > 0) { @@ -104,6 +135,132 @@ namespace MediaBrowser.Controller.Dto return dto; } + private void AttachSoundtrackIds(BaseItemDto dto, Movie item, User user) + { + var tmdb = item.GetProviderId(MetadataProviders.Tmdb); + + if (string.IsNullOrEmpty(tmdb)) + { + return; + } + + var recursiveChildren = user == null + ? _libraryManager.RootFolder.RecursiveChildren + : user.RootFolder.GetRecursiveChildren(user); + + dto.SoundtrackIds = recursiveChildren + .Where(i => + { + if (!string.IsNullOrEmpty(tmdb) && + string.Equals(tmdb, i.GetProviderId(MetadataProviders.Tmdb), StringComparison.OrdinalIgnoreCase) && + i is MusicAlbum) + { + return true; + } + return false; + }) + .Select(GetClientItemId) + .ToArray(); + } + + private void AttachSoundtrackIds(BaseItemDto dto, Series item, User user) + { + var tvdb = item.GetProviderId(MetadataProviders.Tvdb); + + if (string.IsNullOrEmpty(tvdb)) + { + return; + } + + var recursiveChildren = user == null + ? _libraryManager.RootFolder.RecursiveChildren + : user.RootFolder.GetRecursiveChildren(user); + + dto.SoundtrackIds = recursiveChildren + .Where(i => + { + if (!string.IsNullOrEmpty(tvdb) && + string.Equals(tvdb, i.GetProviderId(MetadataProviders.Tvdb), StringComparison.OrdinalIgnoreCase) && + i is MusicAlbum) + { + return true; + } + return false; + }) + .Select(GetClientItemId) + .ToArray(); + } + + private void AttachSoundtrackIds(BaseItemDto dto, Game item, User user) + { + var gamesdb = item.GetProviderId(MetadataProviders.Gamesdb); + + if (string.IsNullOrEmpty(gamesdb)) + { + return; + } + + var recursiveChildren = user == null + ? _libraryManager.RootFolder.RecursiveChildren + : user.RootFolder.GetRecursiveChildren(user); + + dto.SoundtrackIds = recursiveChildren + .Where(i => + { + if (!string.IsNullOrEmpty(gamesdb) && + string.Equals(gamesdb, i.GetProviderId(MetadataProviders.Gamesdb), StringComparison.OrdinalIgnoreCase) && + i is MusicAlbum) + { + return true; + } + return false; + }) + .Select(GetClientItemId) + .ToArray(); + } + + private void AttachSoundtrackIds(BaseItemDto dto, MusicAlbum item, User user) + { + var tmdb = item.GetProviderId(MetadataProviders.Tmdb); + var tvdb = item.GetProviderId(MetadataProviders.Tvdb); + var gamesdb = item.GetProviderId(MetadataProviders.Gamesdb); + + if (string.IsNullOrEmpty(tmdb) && string.IsNullOrEmpty(tvdb) && string.IsNullOrEmpty(gamesdb)) + { + return; + } + + var recursiveChildren = user == null + ? _libraryManager.RootFolder.RecursiveChildren + : user.RootFolder.GetRecursiveChildren(user); + + dto.SoundtrackIds = recursiveChildren + .Where(i => + { + if (!string.IsNullOrEmpty(tmdb) && + string.Equals(tmdb, i.GetProviderId(MetadataProviders.Tmdb), StringComparison.OrdinalIgnoreCase) && + i is Movie) + { + return true; + } + if (!string.IsNullOrEmpty(tvdb) && + string.Equals(tvdb, i.GetProviderId(MetadataProviders.Tvdb), StringComparison.OrdinalIgnoreCase) && + i is Series) + { + return true; + } + if (!string.IsNullOrEmpty(gamesdb) && + string.Equals(gamesdb, i.GetProviderId(MetadataProviders.Gamesdb), StringComparison.OrdinalIgnoreCase) && + i is Game) + { + return true; + } + return false; + }) + .Select(GetClientItemId) + .ToArray(); + } + /// /// Attaches the user specific info. /// @@ -235,10 +392,7 @@ namespace MediaBrowser.Controller.Dto dto.OriginalRunTimeTicks = item.OriginalRunTimeTicks; } - if (fields.Contains(ItemFields.DisplayMediaType)) - { - dto.DisplayMediaType = item.DisplayMediaType; - } + dto.DisplayMediaType = item.DisplayMediaType; if (fields.Contains(ItemFields.MetadataSettings)) { @@ -436,30 +590,27 @@ namespace MediaBrowser.Controller.Dto } // Add audio info - if (fields.Contains(ItemFields.AudioInfo)) + var audio = item as Audio; + if (audio != null) { - var audio = item as Audio; - if (audio != null) - { - dto.Album = audio.Album; - dto.AlbumArtist = audio.AlbumArtist; - dto.Artists = new[] { audio.Artist }; - } + dto.Album = audio.Album; + dto.AlbumArtist = audio.AlbumArtist; + dto.Artists = new[] { audio.Artist }; + } - var album = item as MusicAlbum; + var album = item as MusicAlbum; - if (album != null) - { - var songs = album.RecursiveChildren.OfType