fixes around saving music brainz id's to xml

This commit is contained in:
Luke Pulverenti 2013-08-25 13:18:56 -04:00
parent 70844a3b34
commit 8d5c0cbe04
10 changed files with 63 additions and 48 deletions

View File

@ -273,13 +273,6 @@ namespace MediaBrowser.Api
song.Artist = request.Artists[0]; song.Artist = request.Artists[0];
} }
var musicAlbum = item as MusicAlbum;
if (musicAlbum != null)
{
musicAlbum.MusicBrainzReleaseGroupId = request.GetProviderId("MusicBrainzReleaseGroupId");
}
var musicVideo = item as MusicVideo; var musicVideo = item as MusicVideo;
if (musicVideo != null) if (musicVideo != null)

View File

@ -90,6 +90,11 @@ namespace MediaBrowser.Controller.Dto
} }
} }
if (fields.Contains(ItemFields.DisplayPreferencesId))
{
dto.DisplayPreferencesId = item.DisplayPreferencesId.ToString("N");
}
if (user != null) if (user != null)
{ {
AttachUserSpecificInfo(dto, item, user, fields); AttachUserSpecificInfo(dto, item, user, fields);
@ -272,11 +277,6 @@ namespace MediaBrowser.Controller.Dto
/// <param name="fields">The fields.</param> /// <param name="fields">The fields.</param>
private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields) 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) if (item.IsFolder)
{ {
var hasItemCounts = fields.Contains(ItemFields.ItemCounts); var hasItemCounts = fields.Contains(ItemFields.ItemCounts);

View File

@ -91,11 +91,5 @@ namespace MediaBrowser.Controller.Entities.Audio
{ {
return RecursiveChildren.OfType<Audio>().Any(i => i.HasArtist(artist)); 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; }
} }
} }

View File

@ -1,4 +1,5 @@
using MediaBrowser.Controller.Configuration; using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Localization;
@ -83,6 +84,21 @@ namespace MediaBrowser.Controller.Entities
/// <value>The id.</value> /// <value>The id.</value>
public Guid Id { get; set; } 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> /// <summary>
/// Gets or sets the path. /// Gets or sets the path.
/// </summary> /// </summary>

View File

@ -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; } public virtual List<LinkedChild> LinkedChildren { get; set; }
protected virtual bool SupportsShortcutChildren protected virtual bool SupportsShortcutChildren

View File

@ -4,6 +4,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using MoreLinq;
namespace MediaBrowser.Controller.IO namespace MediaBrowser.Controller.IO
{ {
@ -38,7 +39,10 @@ namespace MediaBrowser.Controller.IO
if (!resolveShortcuts && flattenFolderDepth == 0) 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); var dict = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase);

View File

@ -548,13 +548,23 @@ namespace MediaBrowser.Controller.Providers
break; break;
case "MusicbrainzId": 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": case "RottenTomatoesId":
var rtId = reader.ReadElementContentAsString(); var rtId = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(rtId)) if (!string.IsNullOrWhiteSpace(rtId))

View File

@ -34,6 +34,7 @@ namespace MediaBrowser.Model.Entities
/// <summary> /// <summary>
/// Tmdb Collection Id /// Tmdb Collection Id
/// </summary> /// </summary>
TmdbCollection TmdbCollection,
MusicBrainzReleaseGroup
} }
} }

View File

@ -182,10 +182,13 @@ namespace MediaBrowser.Providers.Music
var releaseEntryId = item.GetProviderId(MetadataProviders.Musicbrainz); 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 // 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(); 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 // 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"); 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; 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 // 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"); 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; var path = node != null ? node.Value : null;

View File

@ -65,6 +65,7 @@ namespace MediaBrowser.Providers.Savers
"IMDbId", "IMDbId",
"TMDbId", "TMDbId",
"TVcomId", "TVcomId",
"TvDbId",
"RottenTomatoesId", "RottenTomatoesId",
"MusicbrainzId", "MusicbrainzId",
"TMDbCollectionId", "TMDbCollectionId",
@ -81,7 +82,8 @@ namespace MediaBrowser.Providers.Savers
"BirthDate", "BirthDate",
"DeathDate", "DeathDate",
"LockedFields", "LockedFields",
"Chapters" "Chapters",
"MusicBrainzReleaseGroupId"
}); });
var position = xml.ToString().LastIndexOf("</", StringComparison.OrdinalIgnoreCase); var position = xml.ToString().LastIndexOf("</", StringComparison.OrdinalIgnoreCase);
@ -332,6 +334,13 @@ namespace MediaBrowser.Providers.Savers
builder.Append("<MusicbrainzId>" + SecurityElement.Escape(mbz) + "</MusicbrainzId>"); 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); var gamesdb = item.GetProviderId(MetadataProviders.Gamesdb);
if (!string.IsNullOrEmpty(gamesdb)) if (!string.IsNullOrEmpty(gamesdb))