denormalize series fields

This commit is contained in:
Luke Pulverenti 2016-07-04 16:11:30 -04:00
parent 46dc02705a
commit 26036837dd
8 changed files with 89 additions and 50 deletions

View File

@ -273,7 +273,9 @@ namespace MediaBrowser.Api.Images
{ {
var list = new List<ImageInfo>(); var list = new List<ImageInfo>();
foreach (var image in item.ImageInfos.Where(i => !item.AllowsMultipleImages(i.Type))) var itemImages = item.ImageInfos;
foreach (var image in itemImages.Where(i => !item.AllowsMultipleImages(i.Type)))
{ {
var info = GetImageInfo(item, image, null); var info = GetImageInfo(item, image, null);
@ -283,14 +285,14 @@ namespace MediaBrowser.Api.Images
} }
} }
foreach (var imageType in item.ImageInfos.Select(i => i.Type).Distinct().Where(item.AllowsMultipleImages)) foreach (var imageType in itemImages.Select(i => i.Type).Distinct().Where(item.AllowsMultipleImages))
{ {
var index = 0; var index = 0;
// Prevent implicitly captured closure // Prevent implicitly captured closure
var currentImageType = imageType; var currentImageType = imageType;
foreach (var image in item.ImageInfos.Where(i => i.Type == currentImageType)) foreach (var image in itemImages.Where(i => i.Type == currentImageType))
{ {
var info = GetImageInfo(item, image, index); var info = GetImageInfo(item, image, index);

View File

@ -117,7 +117,7 @@ namespace MediaBrowser.Api
config.EnableStandaloneMusicKeys = true; config.EnableStandaloneMusicKeys = true;
config.EnableCaseSensitiveItemIds = true; config.EnableCaseSensitiveItemIds = true;
//config.EnableFolderView = true; //config.EnableFolderView = true;
config.SchemaVersion = 97; config.SchemaVersion = 99;
} }
public void Post(UpdateStartupConfiguration request) public void Post(UpdateStartupConfiguration request)

View File

@ -17,8 +17,14 @@ namespace MediaBrowser.Controller.Entities
} }
} }
[IgnoreDataMember]
public string SeriesName { get; set; } public string SeriesName { get; set; }
public string FindSeriesName()
{
return SeriesName;
}
public override bool CanDownload() public override bool CanDownload()
{ {
var locationType = LocationType; var locationType = LocationType;

View File

@ -7,6 +7,8 @@ namespace MediaBrowser.Controller.Entities
/// Gets the name of the series. /// Gets the name of the series.
/// </summary> /// </summary>
/// <value>The name of the series.</value> /// <value>The name of the series.</value>
string SeriesName { get; } string SeriesName { get; set; }
string FindSeriesName();
} }
} }

View File

@ -25,11 +25,11 @@ namespace MediaBrowser.Controller.Entities.TV
public List<Guid> RemoteTrailerIds { get; set; } public List<Guid> RemoteTrailerIds { get; set; }
public List<MediaUrl> RemoteTrailers { get; set; } public List<MediaUrl> RemoteTrailers { get; set; }
/// <summary> /// <summary>
/// Gets the season in which it aired. /// Gets the season in which it aired.
/// </summary> /// </summary>
/// <value>The aired season.</value> /// <value>The aired season.</value>
public int? AirsBeforeSeasonNumber { get; set; } public int? AirsBeforeSeasonNumber { get; set; }
public int? AirsAfterSeasonNumber { get; set; } public int? AirsAfterSeasonNumber { get; set; }
public int? AirsBeforeEpisodeNumber { get; set; } public int? AirsBeforeEpisodeNumber { get; set; }
@ -166,13 +166,21 @@ namespace MediaBrowser.Controller.Entities.TV
} }
[IgnoreDataMember] [IgnoreDataMember]
public string SeriesName public string SeriesName { get; set; }
{
get [IgnoreDataMember]
{ public string SeasonName { get; set; }
var series = Series;
return series == null ? null : series.Name; public string FindSeasonName()
} {
var season = Season;
return season == null ? SeasonName : season.Name;
}
public string FindSeriesName()
{
var series = Series;
return series == null ? SeriesName : series.Name;
} }
/// <summary> /// <summary>

View File

@ -235,13 +235,12 @@ namespace MediaBrowser.Controller.Entities.TV
} }
[IgnoreDataMember] [IgnoreDataMember]
public string SeriesName public string SeriesName { get; set; }
public string FindSeriesName()
{ {
get var series = Series;
{ return series == null ? SeriesName : series.Name;
var series = Series;
return series == null ? null : series.Name;
}
} }
/// <summary> /// <summary>

View File

@ -1076,15 +1076,11 @@ namespace MediaBrowser.Server.Implementations.Dto
dto.PreferredMetadataCountryCode = item.PreferredMetadataCountryCode; dto.PreferredMetadataCountryCode = item.PreferredMetadataCountryCode;
dto.PreferredMetadataLanguage = item.PreferredMetadataLanguage; dto.PreferredMetadataLanguage = item.PreferredMetadataLanguage;
var hasCriticRating = item as IHasCriticRating; dto.CriticRating = item.CriticRating;
if (hasCriticRating != null)
{
dto.CriticRating = hasCriticRating.CriticRating;
if (fields.Contains(ItemFields.CriticRatingSummary)) if (fields.Contains(ItemFields.CriticRatingSummary))
{ {
dto.CriticRatingSummary = hasCriticRating.CriticRatingSummary; dto.CriticRatingSummary = item.CriticRatingSummary;
}
} }
var hasTrailers = item as IHasTrailers; var hasTrailers = item as IHasTrailers;
@ -1127,11 +1123,7 @@ namespace MediaBrowser.Server.Implementations.Dto
if (fields.Contains(ItemFields.ShortOverview)) if (fields.Contains(ItemFields.ShortOverview))
{ {
var hasShortOverview = item as IHasShortOverview; dto.ShortOverview = item.ShortOverview;
if (hasShortOverview != null)
{
dto.ShortOverview = hasShortOverview.ShortOverview;
}
} }
// If there are no backdrops, indicate what parent has them in case the Ui wants to allow inheritance // If there are no backdrops, indicate what parent has them in case the Ui wants to allow inheritance
@ -1426,14 +1418,7 @@ namespace MediaBrowser.Server.Implementations.Dto
dto.SeasonId = seasonId.Value.ToString("N"); dto.SeasonId = seasonId.Value.ToString("N");
} }
var episodeSeason = episode.Season; dto.SeasonName = episode.SeasonName;
if (episodeSeason != null)
{
if (fields.Contains(ItemFields.SeasonName))
{
dto.SeasonName = episodeSeason.Name;
}
}
var episodeSeries = episode.Series; var episodeSeries = episode.Series;
@ -1483,14 +1468,19 @@ namespace MediaBrowser.Server.Implementations.Dto
var season = item as Season; var season = item as Season;
if (season != null) if (season != null)
{ {
dto.SeriesName = season.SeriesName;
series = season.Series; series = season.Series;
if (series != null) if (series != null)
{ {
dto.SeriesId = GetDtoId(series); dto.SeriesId = GetDtoId(series);
dto.SeriesName = series.Name;
dto.AirTime = series.AirTime; dto.AirTime = series.AirTime;
dto.SeriesStudio = series.Studios.FirstOrDefault();
if (fields.Contains(ItemFields.SeriesStudio))
{
dto.SeriesStudio = series.Studios.FirstOrDefault();
}
if (options.GetImageLimit(ImageType.Primary) > 0) if (options.GetImageLimit(ImageType.Primary) > 0)
{ {

View File

@ -95,7 +95,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
private IDbCommand _updateInheritedRatingCommand; private IDbCommand _updateInheritedRatingCommand;
private IDbCommand _updateInheritedTagsCommand; private IDbCommand _updateInheritedTagsCommand;
public const int LatestSchemaVersion = 97; public const int LatestSchemaVersion = 99;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class. /// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
@ -271,6 +271,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
_connection.AddColumn(Logger, "TypedBaseItems", "IsVirtualItem", "BIT"); _connection.AddColumn(Logger, "TypedBaseItems", "IsVirtualItem", "BIT");
_connection.AddColumn(Logger, "TypedBaseItems", "SeriesName", "Text"); _connection.AddColumn(Logger, "TypedBaseItems", "SeriesName", "Text");
_connection.AddColumn(Logger, "TypedBaseItems", "UserDataKey", "Text"); _connection.AddColumn(Logger, "TypedBaseItems", "UserDataKey", "Text");
_connection.AddColumn(Logger, "TypedBaseItems", "SeasonName", "Text");
_connection.AddColumn(Logger, "UserDataKeys", "Priority", "INT"); _connection.AddColumn(Logger, "UserDataKeys", "Priority", "INT");
_connection.AddColumn(Logger, "ItemValues", "CleanValue", "Text"); _connection.AddColumn(Logger, "ItemValues", "CleanValue", "Text");
@ -402,7 +403,9 @@ namespace MediaBrowser.Server.Implementations.Persistence
"Album", "Album",
"CriticRating", "CriticRating",
"CriticRatingSummary", "CriticRatingSummary",
"IsVirtualItem" "IsVirtualItem",
"SeriesName",
"SeasonName"
}; };
private readonly string[] _mediaStreamSaveColumns = private readonly string[] _mediaStreamSaveColumns =
@ -522,7 +525,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
"Album", "Album",
"IsVirtualItem", "IsVirtualItem",
"SeriesName", "SeriesName",
"UserDataKey" "UserDataKey",
"SeasonName"
}; };
_saveItemCommand = _connection.CreateCommand(); _saveItemCommand = _connection.CreateCommand();
_saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values ("; _saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
@ -944,7 +948,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
var hasSeries = item as IHasSeries; var hasSeries = item as IHasSeries;
if (hasSeries != null) if (hasSeries != null)
{ {
_saveItemCommand.GetParameter(index++).Value = hasSeries.SeriesName; _saveItemCommand.GetParameter(index++).Value = hasSeries.FindSeriesName();
} }
else else
{ {
@ -953,6 +957,16 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveItemCommand.GetParameter(index++).Value = item.GetUserDataKeys().FirstOrDefault(); _saveItemCommand.GetParameter(index++).Value = item.GetUserDataKeys().FirstOrDefault();
var episode = item as Episode;
if (episode != null)
{
_saveItemCommand.GetParameter(index++).Value = episode.FindSeasonName();
}
else
{
_saveItemCommand.GetParameter(index++).Value = null;
}
_saveItemCommand.Transaction = transaction; _saveItemCommand.Transaction = transaction;
_saveItemCommand.ExecuteNonQuery(); _saveItemCommand.ExecuteNonQuery();
@ -1375,6 +1389,24 @@ namespace MediaBrowser.Server.Implementations.Persistence
item.IsVirtualItem = reader.GetBoolean(58); item.IsVirtualItem = reader.GetBoolean(58);
} }
var hasSeries = item as IHasSeries;
if (hasSeries != null)
{
if (!reader.IsDBNull(59))
{
hasSeries.SeriesName = reader.GetString(59);
}
}
var episode = item as Episode;
if (episode != null)
{
if (!reader.IsDBNull(60))
{
episode.SeasonName = reader.GetString(60);
}
}
return item; return item;
} }