diff options
| -rw-r--r-- | MediaBrowser.Api/ItemUpdateService.cs | 7 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Dto/DtoBuilder.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 18 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 15 | ||||
| -rw-r--r-- | MediaBrowser.Controller/IO/FileData.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Providers/BaseItemXmlParser.cs | 20 | ||||
| -rw-r--r-- | MediaBrowser.Model/Entities/MetadataProviders.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Music/FanArtAlbumProvider.cs | 15 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Savers/XmlSaverHelpers.cs | 11 |
10 files changed, 63 insertions, 48 deletions
diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs index 54b2c0ea7..09e175e30 100644 --- a/MediaBrowser.Api/ItemUpdateService.cs +++ b/MediaBrowser.Api/ItemUpdateService.cs @@ -273,13 +273,6 @@ namespace MediaBrowser.Api song.Artist = request.Artists[0]; } - var musicAlbum = item as MusicAlbum; - - if (musicAlbum != null) - { - musicAlbum.MusicBrainzReleaseGroupId = request.GetProviderId("MusicBrainzReleaseGroupId"); - } - var musicVideo = item as MusicVideo; if (musicVideo != null) diff --git a/MediaBrowser.Controller/Dto/DtoBuilder.cs b/MediaBrowser.Controller/Dto/DtoBuilder.cs index 85d2a2003..b2b858b6d 100644 --- a/MediaBrowser.Controller/Dto/DtoBuilder.cs +++ b/MediaBrowser.Controller/Dto/DtoBuilder.cs @@ -90,6 +90,11 @@ namespace MediaBrowser.Controller.Dto } } + if (fields.Contains(ItemFields.DisplayPreferencesId)) + { + dto.DisplayPreferencesId = item.DisplayPreferencesId.ToString("N"); + } + if (user != null) { AttachUserSpecificInfo(dto, item, user, fields); @@ -272,11 +277,6 @@ namespace MediaBrowser.Controller.Dto /// <param name="fields">The fields.</param> private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields) { - if (item.IsFolder && fields.Contains(ItemFields.DisplayPreferencesId)) - { - dto.DisplayPreferencesId = ((Folder) item).DisplayPreferencesId.ToString("N"); - } - if (item.IsFolder) { var hasItemCounts = fields.Contains(ItemFields.ItemCounts); diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs index 1526cf46a..1668b91d4 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs @@ -91,11 +91,5 @@ namespace MediaBrowser.Controller.Entities.Audio { return RecursiveChildren.OfType<Audio>().Any(i => i.HasArtist(artist)); } - - /// <summary> - /// Gets or sets the music brainz release group id. - /// </summary> - /// <value>The music brainz release group id.</value> - public string MusicBrainzReleaseGroupId { get; set; } } } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index cc2e82b1f..544000391 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Configuration; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; @@ -84,6 +85,21 @@ namespace MediaBrowser.Controller.Entities public Guid Id { get; set; } /// <summary> + /// Return the id that should be used to key display prefs for this item. + /// Default is based on the type for everything except actual generic folders. + /// </summary> + /// <value>The display prefs id.</value> + [IgnoreDataMember] + public virtual Guid DisplayPreferencesId + { + get + { + var thisType = GetType(); + return thisType == typeof(Folder) ? Id : thisType.FullName.GetMD5(); + } + } + + /// <summary> /// Gets or sets the path. /// </summary> /// <value>The path.</value> diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 9ee618f78..91f4504c2 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -67,21 +67,6 @@ namespace MediaBrowser.Controller.Entities } } - /// <summary> - /// Return the id that should be used to key display prefs for this item. - /// Default is based on the type for everything except actual generic folders. - /// </summary> - /// <value>The display prefs id.</value> - [IgnoreDataMember] - public virtual Guid DisplayPreferencesId - { - get - { - var thisType = GetType(); - return thisType == typeof(Folder) ? Id : thisType.FullName.GetMD5(); - } - } - public virtual List<LinkedChild> LinkedChildren { get; set; } protected virtual bool SupportsShortcutChildren diff --git a/MediaBrowser.Controller/IO/FileData.cs b/MediaBrowser.Controller/IO/FileData.cs index c1ca5336b..dc2b49c75 100644 --- a/MediaBrowser.Controller/IO/FileData.cs +++ b/MediaBrowser.Controller/IO/FileData.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using MoreLinq; namespace MediaBrowser.Controller.IO { @@ -38,7 +39,10 @@ namespace MediaBrowser.Controller.IO if (!resolveShortcuts && flattenFolderDepth == 0) { - return entries.ToDictionary(i => i.FullName, StringComparer.OrdinalIgnoreCase); + // Seeing dupes on some users file system for some reason + return entries + .DistinctBy(i => i.FullName, StringComparer.OrdinalIgnoreCase) + .ToDictionary(i => i.FullName, StringComparer.OrdinalIgnoreCase); } var dict = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase); diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs index 2761c51e0..5f5dcb4f2 100644 --- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs +++ b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs @@ -548,13 +548,23 @@ namespace MediaBrowser.Controller.Providers break; case "MusicbrainzId": - var mbz = reader.ReadElementContentAsString(); - if (!string.IsNullOrWhiteSpace(mbz)) { - item.SetProviderId(MetadataProviders.Musicbrainz, mbz); + var mbz = reader.ReadElementContentAsString(); + if (!string.IsNullOrWhiteSpace(mbz)) + { + item.SetProviderId(MetadataProviders.Musicbrainz, mbz); + } + break; + } + case "MusicBrainzReleaseGroupId": + { + var mbz = reader.ReadElementContentAsString(); + if (!string.IsNullOrWhiteSpace(mbz)) + { + item.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, mbz); + } + break; } - break; - case "RottenTomatoesId": var rtId = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(rtId)) diff --git a/MediaBrowser.Model/Entities/MetadataProviders.cs b/MediaBrowser.Model/Entities/MetadataProviders.cs index b089b668c..db784a35f 100644 --- a/MediaBrowser.Model/Entities/MetadataProviders.cs +++ b/MediaBrowser.Model/Entities/MetadataProviders.cs @@ -34,6 +34,7 @@ namespace MediaBrowser.Model.Entities /// <summary> /// Tmdb Collection Id /// </summary> - TmdbCollection + TmdbCollection, + MusicBrainzReleaseGroup } } diff --git a/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs b/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs index b02128a37..fa7daaf25 100644 --- a/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs @@ -182,10 +182,13 @@ namespace MediaBrowser.Providers.Music var releaseEntryId = item.GetProviderId(MetadataProviders.Musicbrainz); + var musicBrainzReleaseGroupId = album.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); // Fanart uses the release group id so we'll have to get that now using the release entry id - if (string.IsNullOrEmpty(album.MusicBrainzReleaseGroupId)) + if (string.IsNullOrEmpty(musicBrainzReleaseGroupId)) { - album.MusicBrainzReleaseGroupId = await GetReleaseGroupId(releaseEntryId, cancellationToken).ConfigureAwait(false); + musicBrainzReleaseGroupId = await GetReleaseGroupId(releaseEntryId, cancellationToken).ConfigureAwait(false); + + album.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, musicBrainzReleaseGroupId); } var doc = new XmlDocument(); @@ -199,9 +202,9 @@ namespace MediaBrowser.Providers.Music // Try try with the release entry Id, if that doesn't produce anything try the release group id var node = doc.SelectSingleNode("//fanart/music/albums/album[@id=\"" + releaseEntryId + "\"]/cdart/@url"); - if (node == null && !string.IsNullOrEmpty(album.MusicBrainzReleaseGroupId)) + if (node == null && !string.IsNullOrEmpty(musicBrainzReleaseGroupId)) { - node = doc.SelectSingleNode("//fanart/music/albums/album[@id=\"" + album.MusicBrainzReleaseGroupId + "\"]/cdart/@url"); + node = doc.SelectSingleNode("//fanart/music/albums/album[@id=\"" + musicBrainzReleaseGroupId + "\"]/cdart/@url"); } var path = node != null ? node.Value : null; @@ -218,9 +221,9 @@ namespace MediaBrowser.Providers.Music // Try try with the release entry Id, if that doesn't produce anything try the release group id var node = doc.SelectSingleNode("//fanart/music/albums/album[@id=\"" + releaseEntryId + "\"]/albumcover/@url"); - if (node == null && !string.IsNullOrEmpty(album.MusicBrainzReleaseGroupId)) + if (node == null && !string.IsNullOrEmpty(musicBrainzReleaseGroupId)) { - node = doc.SelectSingleNode("//fanart/music/albums/album[@id=\"" + album.MusicBrainzReleaseGroupId + "\"]/albumcover/@url"); + node = doc.SelectSingleNode("//fanart/music/albums/album[@id=\"" + musicBrainzReleaseGroupId + "\"]/albumcover/@url"); } var path = node != null ? node.Value : null; diff --git a/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs b/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs index 5c9e90312..edeea611a 100644 --- a/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs +++ b/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs @@ -65,6 +65,7 @@ namespace MediaBrowser.Providers.Savers "IMDbId", "TMDbId", "TVcomId", + "TvDbId", "RottenTomatoesId", "MusicbrainzId", "TMDbCollectionId", @@ -81,7 +82,8 @@ namespace MediaBrowser.Providers.Savers "BirthDate", "DeathDate", "LockedFields", - "Chapters" + "Chapters", + "MusicBrainzReleaseGroupId" }); var position = xml.ToString().LastIndexOf("</", StringComparison.OrdinalIgnoreCase); @@ -332,6 +334,13 @@ namespace MediaBrowser.Providers.Savers builder.Append("<MusicbrainzId>" + SecurityElement.Escape(mbz) + "</MusicbrainzId>"); } + mbz = item.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); + + if (!string.IsNullOrEmpty(mbz)) + { + builder.Append("<MusicBrainzReleaseGroupId>" + SecurityElement.Escape(mbz) + "</MusicBrainzReleaseGroupId>"); + } + var gamesdb = item.GetProviderId(MetadataProviders.Gamesdb); if (!string.IsNullOrEmpty(gamesdb)) |
