consolidate Artist & MusicArtist

This commit is contained in:
Luke Pulverenti
2013-11-21 15:48:26 -05:00
parent ee1a746031
commit 17bacee089
35 changed files with 248 additions and 502 deletions

View File

@@ -1,86 +0,0 @@
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Runtime.Serialization;
namespace MediaBrowser.Controller.Entities.Audio
{
/// <summary>
/// Class Artist
/// </summary>
public class Artist : BaseItem, IItemByName, IHasMusicGenres
{
public Artist()
{
UserItemCounts = new Dictionary<Guid, ItemByNameCounts>();
}
public string LastFmImageUrl { get; set; }
public string LastFmImageSize { get; set; }
/// <summary>
/// Gets the user data key.
/// </summary>
/// <returns>System.String.</returns>
public override string GetUserDataKey()
{
return GetUserDataKey(this);
}
[IgnoreDataMember]
public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
/// <summary>
/// Finds the music artist.
/// </summary>
/// <param name="artist">The artist.</param>
/// <param name="libraryManager">The library manager.</param>
/// <returns>MusicArtist.</returns>
public static MusicArtist FindMusicArtist(Artist artist, ILibraryManager libraryManager)
{
return FindMusicArtist(artist, libraryManager.RootFolder.RecursiveChildren.OfType<MusicArtist>());
}
/// <summary>
/// Finds the music artist.
/// </summary>
/// <param name="artist">The artist.</param>
/// <param name="allMusicArtists">All music artists.</param>
/// <returns>MusicArtist.</returns>
public static MusicArtist FindMusicArtist(Artist artist, IEnumerable<MusicArtist> allMusicArtists)
{
var musicBrainzId = artist.GetProviderId(MetadataProviders.Musicbrainz);
return allMusicArtists.FirstOrDefault(i =>
{
if (!string.IsNullOrWhiteSpace(musicBrainzId) && string.Equals(musicBrainzId, i.GetProviderId(MetadataProviders.Musicbrainz), StringComparison.OrdinalIgnoreCase))
{
return true;
}
return string.Compare(i.Name, artist.Name, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols) == 0;
});
}
/// <summary>
/// Gets the user data key.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>System.String.</returns>
public static string GetUserDataKey(BaseItem item)
{
var id = item.GetProviderId(MetadataProviders.Musicbrainz);
if (!string.IsNullOrEmpty(id))
{
return "Artist-Musicbrainz-" + id;
}
return "Artist-" + item.Name;
}
}
}

View File

@@ -1,11 +1,52 @@

using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace MediaBrowser.Controller.Entities.Audio
{
/// <summary>
/// Class MusicArtist
/// </summary>
public class MusicArtist : Folder
public class MusicArtist : Folder, IItemByName, IHasMusicGenres, IHasDualAccess
{
[IgnoreDataMember]
public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
public bool IsAccessedByName { get; set; }
public override bool IsFolder
{
get
{
return !IsAccessedByName;
}
}
protected override IEnumerable<BaseItem> ActualChildren
{
get
{
if (IsAccessedByName)
{
throw new InvalidOperationException("Artists accessed by name do not have children.");
}
return base.ActualChildren;
}
}
public override string GetClientTypeName()
{
if (IsAccessedByName)
{
//return "Artist";
}
return base.GetClientTypeName();
}
/// <summary>
/// Gets or sets the last fm image URL.
/// </summary>
@@ -13,13 +54,35 @@ namespace MediaBrowser.Controller.Entities.Audio
public string LastFmImageUrl { get; set; }
public string LastFmImageSize { get; set; }
public MusicArtist()
{
UserItemCounts = new Dictionary<Guid, ItemByNameCounts>();
}
/// <summary>
/// Gets the user data key.
/// </summary>
/// <returns>System.String.</returns>
public override string GetUserDataKey()
{
return Artist.GetUserDataKey(this);
return GetUserDataKey(this);
}
/// <summary>
/// Gets the user data key.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>System.String.</returns>
public static string GetUserDataKey(BaseItem item)
{
var id = item.GetProviderId(MetadataProviders.Musicbrainz);
if (!string.IsNullOrEmpty(id))
{
return "Artist-Musicbrainz-" + id;
}
return "Artist-" + item.Name;
}
}
}

View File

@@ -1145,6 +1145,11 @@ namespace MediaBrowser.Controller.Entities
return changed;
}
public virtual string GetClientTypeName()
{
return GetType().Name;
}
/// <summary>
/// Determines if the item is considered new based on user settings
/// </summary>

View File

@@ -1038,16 +1038,13 @@ namespace MediaBrowser.Controller.Entities
}
}
if (recursive)
if (recursive && child.IsFolder)
{
var folder = child as Folder;
var folder = (Folder)child;
if (folder != null)
if (folder.AddChildrenToList(user, includeLinkedChildren, list, true, filter))
{
if (folder.AddChildrenToList(user, includeLinkedChildren, list, true, filter))
{
hasLinkedChildren = true;
}
hasLinkedChildren = true;
}
}
}
@@ -1150,14 +1147,11 @@ namespace MediaBrowser.Controller.Entities
list.Add(child);
}
if (recursive)
if (recursive && child.IsFolder)
{
var folder = child as Folder;
var folder = (Folder)child;
if (folder != null)
{
folder.AddChildrenToList(list, true, filter);
}
folder.AddChildrenToList(list, true, filter);
}
}
}

View File

@@ -12,6 +12,11 @@ namespace MediaBrowser.Controller.Entities
Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
}
public interface IHasDualAccess : IItemByName
{
bool IsAccessedByName { get; }
}
public static class IItemByNameExtensions
{
public static ItemByNameCounts GetItemByNameCounts(this IItemByName item, User user)

View File

@@ -60,7 +60,7 @@ namespace MediaBrowser.Controller.Library
/// </summary>
/// <param name="name">The name.</param>
/// <returns>Task{Artist}.</returns>
Artist GetArtist(string name);
MusicArtist GetArtist(string name);
/// <summary>
/// Gets a Studio
@@ -302,5 +302,18 @@ namespace MediaBrowser.Controller.Library
/// <param name="updateType">Type of the update.</param>
/// <returns>Task.</returns>
Task SaveMetadata(BaseItem item, ItemUpdateType updateType);
/// <summary>
/// Gets all artists.
/// </summary>
/// <returns>IEnumerable{System.String}.</returns>
IEnumerable<string> GetAllArtists();
/// <summary>
/// Gets all artists.
/// </summary>
/// <param name="items">The items.</param>
/// <returns>IEnumerable{System.String}.</returns>
IEnumerable<string> GetAllArtists(IEnumerable<BaseItem> items);
}
}

View File

@@ -115,7 +115,6 @@
<Compile Include="Session\ISessionManager.cs" />
<Compile Include="Drawing\ImageExtensions.cs" />
<Compile Include="Entities\AggregateFolder.cs" />
<Compile Include="Entities\Audio\Artist.cs" />
<Compile Include="Entities\Audio\Audio.cs" />
<Compile Include="Entities\Audio\MusicAlbum.cs" />
<Compile Include="Entities\Audio\MusicArtist.cs" />