update storage of genres, studios, tags, & keywords

pull/702/head
Luke Pulverenti 9 years ago
parent e0bfbffa75
commit 977f62336b

@ -298,11 +298,7 @@ namespace MediaBrowser.Api
hasShortOverview.ShortOverview = request.ShortOverview; hasShortOverview.ShortOverview = request.ShortOverview;
} }
var hasKeywords = item as IHasKeywords; item.Keywords = request.Keywords;
if (hasKeywords != null)
{
hasKeywords.Keywords = request.Keywords;
}
if (request.Studios != null) if (request.Studios != null)
{ {

@ -127,13 +127,7 @@ namespace MediaBrowser.Api
private static IEnumerable<string> GetKeywords(BaseItem item) private static IEnumerable<string> GetKeywords(BaseItem item)
{ {
var hasTags = item as IHasKeywords; return item.Keywords;
if (hasTags != null)
{
return hasTags.Keywords;
}
return new List<string>();
} }
/// <summary> /// <summary>

@ -37,6 +37,7 @@ namespace MediaBrowser.Controller.Entities
{ {
protected BaseItem() protected BaseItem()
{ {
Keywords = new List<string>();
Tags = new List<string>(); Tags = new List<string>();
Genres = new List<string>(); Genres = new List<string>();
Studios = new List<string>(); Studios = new List<string>();
@ -811,6 +812,8 @@ namespace MediaBrowser.Controller.Entities
[IgnoreDataMember] [IgnoreDataMember]
public List<string> Tags { get; set; } public List<string> Tags { get; set; }
public List<string> Keywords { get; set; }
/// <summary> /// <summary>
/// Gets or sets the home page URL. /// Gets or sets the home page URL.
/// </summary> /// </summary>

@ -33,6 +33,7 @@ namespace MediaBrowser.Controller.Entities
public string[] ExcludeTags { get; set; } public string[] ExcludeTags { get; set; }
public string[] ExcludeInheritedTags { get; set; } public string[] ExcludeInheritedTags { get; set; }
public string[] Genres { get; set; } public string[] Genres { get; set; }
public string[] Keywords { get; set; }
public bool? IsMissing { get; set; } public bool? IsMissing { get; set; }
public bool? IsUnaired { get; set; } public bool? IsUnaired { get; set; }
@ -151,6 +152,7 @@ namespace MediaBrowser.Controller.Entities
OfficialRatings = new string[] { }; OfficialRatings = new string[] { };
SortBy = new string[] { }; SortBy = new string[] { };
MediaTypes = new string[] { }; MediaTypes = new string[] { };
Keywords = new string[] { };
IncludeItemTypes = new string[] { }; IncludeItemTypes = new string[] { };
ExcludeItemTypes = new string[] { }; ExcludeItemTypes = new string[] { };
Genres = new string[] { }; Genres = new string[] { };

@ -1,21 +1,11 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
namespace MediaBrowser.Controller.Entities 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 class KeywordExtensions
{ {
public static void AddKeyword(this IHasKeywords item, string name) public static void AddKeyword(this BaseItem item, string name)
{ {
if (string.IsNullOrWhiteSpace(name)) if (string.IsNullOrWhiteSpace(name))
{ {

@ -15,7 +15,7 @@ namespace MediaBrowser.Controller.Entities.Movies
/// <summary> /// <summary>
/// Class BoxSet /// Class BoxSet
/// </summary> /// </summary>
public class BoxSet : Folder, IHasTrailers, IHasKeywords, IHasDisplayOrder, IHasLookupInfo<BoxSetInfo>, IHasShares public class BoxSet : Folder, IHasTrailers, IHasDisplayOrder, IHasLookupInfo<BoxSetInfo>, IHasShares
{ {
public List<Share> Shares { get; set; } public List<Share> Shares { get; set; }
@ -26,7 +26,6 @@ namespace MediaBrowser.Controller.Entities.Movies
RemoteTrailerIds = new List<Guid>(); RemoteTrailerIds = new List<Guid>();
DisplayOrder = ItemSortBy.PremiereDate; DisplayOrder = ItemSortBy.PremiereDate;
Keywords = new List<string>();
Shares = new List<Share>(); Shares = new List<Share>();
} }
@ -47,12 +46,6 @@ namespace MediaBrowser.Controller.Entities.Movies
/// <value>The remote trailers.</value> /// <value>The remote trailers.</value>
public List<MediaUrl> RemoteTrailers { get; set; } public List<MediaUrl> RemoteTrailers { get; set; }
/// <summary>
/// Gets or sets the tags.
/// </summary>
/// <value>The tags.</value>
public List<string> Keywords { get; set; }
/// <summary> /// <summary>
/// Gets or sets the display order. /// Gets or sets the display order.
/// </summary> /// </summary>

@ -15,7 +15,7 @@ namespace MediaBrowser.Controller.Entities.Movies
/// <summary> /// <summary>
/// Class Movie /// Class Movie
/// </summary> /// </summary>
public class Movie : Video, IHasCriticRating, IHasSpecialFeatures, IHasProductionLocations, IHasBudget, IHasKeywords, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping, IHasOriginalTitle public class Movie : Video, IHasCriticRating, IHasSpecialFeatures, IHasProductionLocations, IHasBudget, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping, IHasOriginalTitle
{ {
public List<Guid> SpecialFeatureIds { get; set; } public List<Guid> SpecialFeatureIds { get; set; }
@ -32,7 +32,6 @@ namespace MediaBrowser.Controller.Entities.Movies
ThemeSongIds = new List<Guid>(); ThemeSongIds = new List<Guid>();
ThemeVideoIds = new List<Guid>(); ThemeVideoIds = new List<Guid>();
Taglines = new List<string>(); Taglines = new List<string>();
Keywords = new List<string>();
ProductionLocations = new List<string>(); ProductionLocations = new List<string>();
} }
@ -42,7 +41,6 @@ namespace MediaBrowser.Controller.Entities.Movies
public List<Guid> LocalTrailerIds { get; set; } public List<Guid> LocalTrailerIds { get; set; }
public List<Guid> RemoteTrailerIds { get; set; } public List<Guid> RemoteTrailerIds { get; set; }
public List<string> Keywords { get; set; }
public List<MediaUrl> RemoteTrailers { get; set; } public List<MediaUrl> RemoteTrailers { get; set; }

@ -12,7 +12,7 @@ namespace MediaBrowser.Controller.Entities
/// <summary> /// <summary>
/// Class Trailer /// Class Trailer
/// </summary> /// </summary>
public class Trailer : Video, IHasCriticRating, IHasProductionLocations, IHasBudget, IHasKeywords, IHasTaglines, IHasMetascore, IHasOriginalTitle, IHasLookupInfo<TrailerInfo> public class Trailer : Video, IHasCriticRating, IHasProductionLocations, IHasBudget, IHasTaglines, IHasMetascore, IHasOriginalTitle, IHasLookupInfo<TrailerInfo>
{ {
public List<string> ProductionLocations { get; set; } public List<string> ProductionLocations { get; set; }
@ -31,8 +31,6 @@ namespace MediaBrowser.Controller.Entities
public List<MediaUrl> RemoteTrailers { get; set; } public List<MediaUrl> RemoteTrailers { get; set; }
public List<string> Keywords { get; set; }
[IgnoreDataMember] [IgnoreDataMember]
public bool IsLocalTrailer public bool IsLocalTrailer
{ {

@ -142,7 +142,7 @@
<Compile Include="Entities\IHasDisplayOrder.cs" /> <Compile Include="Entities\IHasDisplayOrder.cs" />
<Compile Include="Entities\IHasId.cs" /> <Compile Include="Entities\IHasId.cs" />
<Compile Include="Entities\IHasImages.cs" /> <Compile Include="Entities\IHasImages.cs" />
<Compile Include="Entities\IHasKeywords.cs" /> <Compile Include="Entities\KeywordExtensions.cs" />
<Compile Include="Entities\IHasMediaSources.cs" /> <Compile Include="Entities\IHasMediaSources.cs" />
<Compile Include="Entities\IHasMetascore.cs" /> <Compile Include="Entities\IHasMetascore.cs" />
<Compile Include="Entities\IHasOriginalTitle.cs" /> <Compile Include="Entities\IHasOriginalTitle.cs" />

@ -816,11 +816,7 @@ namespace MediaBrowser.Controller.Providers
{ {
using (var subtree = reader.ReadSubtree()) using (var subtree = reader.ReadSubtree())
{ {
var hasTags = item as IHasKeywords; FetchFromKeywordsNode(subtree, item);
if (hasTags != null)
{
FetchFromKeywordsNode(subtree, hasTags);
}
} }
break; break;
} }
@ -1099,7 +1095,7 @@ namespace MediaBrowser.Controller.Providers
} }
} }
private void FetchFromKeywordsNode(XmlReader reader, IHasKeywords item) private void FetchFromKeywordsNode(XmlReader reader, BaseItem item)
{ {
reader.MoveToContent(); reader.MoveToContent();

@ -609,21 +609,17 @@ namespace MediaBrowser.LocalMetadata.Savers
} }
} }
var hasKeywords = item as IHasKeywords; if (item.Keywords.Count > 0)
if (hasKeywords != null)
{
if (hasKeywords.Keywords.Count > 0)
{ {
builder.Append("<PlotKeywords>"); builder.Append("<PlotKeywords>");
foreach (var tag in hasKeywords.Keywords) foreach (var tag in item.Keywords)
{ {
builder.Append("<PlotKeyword>" + SecurityElement.Escape(tag) + "</PlotKeyword>"); builder.Append("<PlotKeyword>" + SecurityElement.Escape(tag) + "</PlotKeyword>");
} }
builder.Append("</PlotKeywords>"); builder.Append("</PlotKeywords>");
} }
}
var people = libraryManager.GetPeople(item); var people = libraryManager.GetPeople(item);

@ -165,15 +165,9 @@ namespace MediaBrowser.Providers.Manager
if (!lockedFields.Contains(MetadataFields.Keywords)) if (!lockedFields.Contains(MetadataFields.Keywords))
{ {
var sourceHasKeywords = source as IHasKeywords; if (replaceData || target.Keywords.Count == 0)
var targetHasKeywords = target as IHasKeywords;
if (sourceHasKeywords != null && targetHasKeywords != null)
{
if (replaceData || targetHasKeywords.Keywords.Count == 0)
{ {
targetHasKeywords.Keywords = sourceHasKeywords.Keywords; target.Keywords = source.Keywords;
}
} }
} }

@ -314,11 +314,7 @@ namespace MediaBrowser.Providers.Movies
if (movieData.keywords != null && movieData.keywords.keywords != null) if (movieData.keywords != null && movieData.keywords.keywords != null)
{ {
var hasTags = movie as IHasKeywords; movie.Keywords = movieData.keywords.keywords.Select(i => i.name).ToList();
if (hasTags != null)
{
hasTags.Keywords = movieData.keywords.keywords.Select(i => i.name).ToList();
}
} }
if (movieData.trailers != null && movieData.trailers.youtube != null && if (movieData.trailers != null && movieData.trailers.youtube != null &&

@ -983,16 +983,7 @@ namespace MediaBrowser.Server.Implementations.Dto
if (fields.Contains(ItemFields.Keywords)) if (fields.Contains(ItemFields.Keywords))
{ {
var hasTags = item as IHasKeywords; dto.Keywords = item.Keywords;
if (hasTags != null)
{
dto.Keywords = hasTags.Keywords;
}
if (dto.Keywords == null)
{
dto.Keywords = new List<string>();
}
} }
if (fields.Contains(ItemFields.ProductionLocations)) if (fields.Contains(ItemFields.ProductionLocations))

@ -433,13 +433,7 @@ namespace MediaBrowser.Server.Implementations.Intros
private static IEnumerable<string> GetKeywords(BaseItem item) private static IEnumerable<string> GetKeywords(BaseItem item)
{ {
var hasTags = item as IHasKeywords; return item.Keywords;
if (hasTags != null)
{
return hasTags.Keywords;
}
return new List<string>();
} }
public IEnumerable<string> GetAllIntroFiles() public IEnumerable<string> GetAllIntroFiles()

@ -87,7 +87,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
private IDbCommand _updateInheritedRatingCommand; private IDbCommand _updateInheritedRatingCommand;
private IDbCommand _updateInheritedTagsCommand; private IDbCommand _updateInheritedTagsCommand;
public const int LatestSchemaVersion = 80; public const int LatestSchemaVersion = 82;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class. /// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
@ -2489,8 +2489,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
var index = 0; var index = 0;
foreach (var item in query.Genres) foreach (var item in query.Genres)
{ {
clauses.Add("Genres like @Genres" + index); clauses.Add("@Genre" + index + " in (select value from itemvalues where ItemId=Guid and Type=2)");
cmd.Parameters.Add(cmd, "@Genres" + index, DbType.String).Value = "%" + item + "%"; cmd.Parameters.Add(cmd, "@Genre" + index, DbType.String).Value = item;
index++; index++;
} }
var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")"; var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")";
@ -2503,8 +2503,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
var index = 0; var index = 0;
foreach (var item in query.Tags) foreach (var item in query.Tags)
{ {
clauses.Add("Tags like @Tags" + index); clauses.Add("@Tag" + index + " in (select value from itemvalues where ItemId=Guid and Type=4)");
cmd.Parameters.Add(cmd, "@Tags" + index, DbType.String).Value = "%" + item + "%"; cmd.Parameters.Add(cmd, "@Tag" + index, DbType.String).Value = item;
index++; index++;
} }
var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")"; var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")";
@ -2517,8 +2517,22 @@ namespace MediaBrowser.Server.Implementations.Persistence
var index = 0; var index = 0;
foreach (var item in query.Studios) foreach (var item in query.Studios)
{ {
clauses.Add("Studios like @Studios" + index); clauses.Add("@Studio" + index + " in (select value from itemvalues where ItemId=Guid and Type=3)");
cmd.Parameters.Add(cmd, "@Studios" + index, DbType.String).Value = "%" + item + "%"; cmd.Parameters.Add(cmd, "@Studio" + index, DbType.String).Value = item;
index++;
}
var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")";
whereClauses.Add(clause);
}
if (query.Keywords.Length > 0)
{
var clauses = new List<string>();
var index = 0;
foreach (var item in query.Keywords)
{
clauses.Add("@Keyword" + index + " in (select value from itemvalues where ItemId=Guid and Type=5)");
cmd.Parameters.Add(cmd, "@Keyword" + index, DbType.String).Value = item;
index++; index++;
} }
var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")"; var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")";
@ -3233,6 +3247,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
list.AddRange(hasAlbumArtist.AlbumArtists.Select(i => new Tuple<int, string>(1, i))); list.AddRange(hasAlbumArtist.AlbumArtists.Select(i => new Tuple<int, string>(1, i)));
} }
list.AddRange(item.Genres.Select(i => new Tuple<int, string>(2, i)));
list.AddRange(item.Studios.Select(i => new Tuple<int, string>(3, i)));
list.AddRange(item.Tags.Select(i => new Tuple<int, string>(4, i)));
list.AddRange(item.Keywords.Select(i => new Tuple<int, string>(5, i)));
return list; return list;
} }

@ -32,7 +32,7 @@ namespace MediaBrowser.Server.Mono.Native
{ {
PageSize = 4096, PageSize = 4096,
CacheSize = 2000, CacheSize = 2000,
SyncMode = SynchronizationModes.Full, SyncMode = SynchronizationModes.Normal,
DataSource = dbPath, DataSource = dbPath,
JournalMode = SQLiteJournalModeEnum.Wal JournalMode = SQLiteJournalModeEnum.Wal
}; };

@ -32,7 +32,7 @@ namespace MediaBrowser.ServerApplication.Native
{ {
PageSize = 4096, PageSize = 4096,
CacheSize = 2000, CacheSize = 2000,
SyncMode = SynchronizationModes.Full, SyncMode = SynchronizationModes.Normal,
DataSource = dbPath, DataSource = dbPath,
JournalMode = SQLiteJournalModeEnum.Wal JournalMode = SQLiteJournalModeEnum.Wal
}; };

@ -932,13 +932,9 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{ {
var val = reader.ReadElementContentAsString(); var val = reader.ReadElementContentAsString();
var hasKeywords = item as IHasKeywords;
if (hasKeywords != null)
{
if (!string.IsNullOrWhiteSpace(val)) if (!string.IsNullOrWhiteSpace(val))
{ {
hasKeywords.AddKeyword(val); item.AddKeyword(val);
}
} }
break; break;
} }

@ -752,14 +752,10 @@ namespace MediaBrowser.XbmcMetadata.Savers
} }
} }
var hasKeywords = item as IHasKeywords; foreach (var tag in item.Keywords)
if (hasKeywords != null)
{
foreach (var tag in hasKeywords.Keywords)
{ {
writer.WriteElementString("plotkeyword", tag); writer.WriteElementString("plotkeyword", tag);
} }
}
var hasAwards = item as IHasAwards; var hasAwards = item as IHasAwards;
if (hasAwards != null && !string.IsNullOrEmpty(hasAwards.AwardSummary)) if (hasAwards != null && !string.IsNullOrEmpty(hasAwards.AwardSummary))

Loading…
Cancel
Save