support plot keywords

This commit is contained in:
Luke Pulverenti
2014-01-14 10:50:39 -05:00
parent eb42293901
commit ce13ff95ad
16 changed files with 174 additions and 13 deletions

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace MediaBrowser.Controller.Entities
{
public interface IHasKeywords
{
/// <summary>
/// Gets or sets the keywords.
/// </summary>
/// <value>The keywords.</value>
List<string> Keywords { get; set; }
}
public static class KeywordExtensions
{
public static void AddKeyword(this IHasKeywords item, string name)
{
if (string.IsNullOrWhiteSpace(name))
{
throw new ArgumentNullException("name");
}
if (!item.Keywords.Contains(name, StringComparer.OrdinalIgnoreCase))
{
item.Keywords.Add(name);
}
}
}
}

View File

@@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.Entities.Movies
/// <summary>
/// Class BoxSet
/// </summary>
public class BoxSet : Folder, IHasTrailers, IHasTags, IHasPreferredMetadataLanguage, IHasDisplayOrder
public class BoxSet : Folder, IHasTrailers, IHasTags, IHasKeywords, IHasPreferredMetadataLanguage, IHasDisplayOrder
{
public BoxSet()
{
@@ -18,6 +18,7 @@ namespace MediaBrowser.Controller.Entities.Movies
Tags = new List<string>();
DisplayOrder = ItemSortBy.PremiereDate;
Keywords = new List<string>();
}
public List<Guid> LocalTrailerIds { get; set; }
@@ -33,6 +34,7 @@ namespace MediaBrowser.Controller.Entities.Movies
/// </summary>
/// <value>The tags.</value>
public List<string> Tags { get; set; }
public List<string> Keywords { get; set; }
public string PreferredMetadataLanguage { get; set; }

View File

@@ -12,7 +12,7 @@ namespace MediaBrowser.Controller.Entities.Movies
/// <summary>
/// Class Movie
/// </summary>
public class Movie : Video, IHasCriticRating, IHasSoundtracks, IHasBudget, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasTags, IHasPreferredMetadataLanguage
public class Movie : Video, IHasCriticRating, IHasSoundtracks, IHasBudget, IHasKeywords, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasTags, IHasPreferredMetadataLanguage
{
public List<Guid> SpecialFeatureIds { get; set; }
@@ -39,10 +39,12 @@ namespace MediaBrowser.Controller.Entities.Movies
ThemeVideoIds = new List<Guid>();
Taglines = new List<string>();
Tags = new List<string>();
Keywords = new List<string>();
}
public List<Guid> LocalTrailerIds { get; set; }
public List<string> Keywords { get; set; }
public List<MediaUrl> RemoteTrailers { get; set; }
/// <summary>

View File

@@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Class Trailer
/// </summary>
public class Trailer : Video, IHasCriticRating, IHasSoundtracks, IHasBudget, IHasTrailers, IHasTaglines, IHasTags, IHasPreferredMetadataLanguage
public class Trailer : Video, IHasCriticRating, IHasSoundtracks, IHasBudget, IHasTrailers, IHasKeywords, IHasTaglines, IHasTags, IHasPreferredMetadataLanguage
{
public List<Guid> SoundtrackIds { get; set; }
@@ -28,12 +28,15 @@ namespace MediaBrowser.Controller.Entities
SoundtrackIds = new List<Guid>();
LocalTrailerIds = new List<Guid>();
Tags = new List<string>();
Keywords = new List<string>();
}
public List<Guid> LocalTrailerIds { get; set; }
public List<MediaUrl> RemoteTrailers { get; set; }
public List<string> Keywords { get; set; }
/// <summary>
/// Gets or sets the tags.
/// </summary>

View File

@@ -35,7 +35,17 @@ namespace MediaBrowser.Controller.Library
/// <value>The file system children.</value>
public IEnumerable<FileSystemInfo> FileSystemChildren
{
get { return FileSystemDictionary.Values; }
get
{
var dict = FileSystemDictionary;
if (dict == null)
{
return new List<FileSystemInfo>();
}
return dict.Values;
}
}
/// <summary>

View File

@@ -87,6 +87,7 @@
<Compile Include="Entities\IHasCriticRating.cs" />
<Compile Include="Entities\IHasDisplayOrder.cs" />
<Compile Include="Entities\IHasImages.cs" />
<Compile Include="Entities\IHasKeywords.cs" />
<Compile Include="Entities\IHasMediaStreams.cs" />
<Compile Include="Entities\IHasPreferredMetadataLanguage.cs" />
<Compile Include="Entities\IHasProductionLocations.cs" />

View File

@@ -79,6 +79,11 @@ namespace MediaBrowser.Controller.Providers
hasTags.Tags.Clear();
}
var hasKeywords = item as IHasKeywords;
if (hasKeywords != null)
{
hasKeywords.Keywords.Clear();
}
var hasTrailers = item as IHasTrailers;
if (hasTrailers != null)
@@ -747,6 +752,19 @@ namespace MediaBrowser.Controller.Providers
break;
}
case "PlotKeywords":
{
using (var subtree = reader.ReadSubtree())
{
var hasTags = item as IHasKeywords;
if (hasTags != null)
{
FetchFromKeywordsNode(subtree, hasTags);
}
}
break;
}
case "Persons":
{
using (var subtree = reader.ReadSubtree())
@@ -912,6 +930,35 @@ namespace MediaBrowser.Controller.Providers
}
}
private void FetchFromKeywordsNode(XmlReader reader, IHasKeywords item)
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
switch (reader.Name)
{
case "PlotKeyword":
{
var tag = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(tag))
{
item.AddKeyword(tag);
}
break;
}
default:
reader.Skip();
break;
}
}
}
}
/// <summary>
/// Fetches the data from persons node.
/// </summary>