update data queries

This commit is contained in:
Luke Pulverenti
2017-05-21 03:25:49 -04:00
parent ead88d3b65
commit da77b05817
62 changed files with 620 additions and 446 deletions

View File

@@ -266,20 +266,6 @@ namespace MediaBrowser.Controller.Entities.Audio
return info;
}
public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
{
return inputItems.Where(GetItemFilter());
}
public Func<BaseItem, bool> GetItemFilter()
{
return i =>
{
var hasArtist = i as IHasArtist;
return hasArtist != null && hasArtist.HasAnyArtist(Name);
};
}
[IgnoreDataMember]
public override bool SupportsPeople
{

View File

@@ -91,16 +91,6 @@ namespace MediaBrowser.Controller.Entities.Audio
}
}
public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
{
return inputItems.Where(GetItemFilter());
}
public Func<BaseItem, bool> GetItemFilter()
{
return i => i is IHasMusicGenres && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase);
}
[IgnoreDataMember]
public override bool SupportsPeople
{

View File

@@ -22,6 +22,7 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Extensions;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Sorting;
@@ -186,10 +187,15 @@ namespace MediaBrowser.Controller.Entities
}
set
{
var isSortNameDefault = IsSortNameDefault(SortName);
_name = value;
// lazy load this again
_sortName = null;
if (isSortNameDefault)
{
// lazy load this again
SortName = null;
}
}
}
@@ -580,7 +586,6 @@ namespace MediaBrowser.Controller.Entities
}
}
private string _forcedSortName;
/// <summary>
/// Gets or sets the name of the forced sort.
/// </summary>
@@ -588,8 +593,42 @@ namespace MediaBrowser.Controller.Entities
[IgnoreDataMember]
public string ForcedSortName
{
get { return _forcedSortName; }
set { _forcedSortName = value; _sortName = null; }
get
{
var sortName = SortName;
if (string.IsNullOrWhiteSpace(sortName))
{
return null;
}
if (string.Equals(sortName, CreateSortName(), StringComparison.OrdinalIgnoreCase))
{
return null;
}
return sortName;
}
set
{
if (string.IsNullOrWhiteSpace(value))
{
SortName = null;
}
else
{
var newValue = CreateSortNameFromCustomValue(value);
if (string.Equals(newValue, CreateSortName(), StringComparison.OrdinalIgnoreCase))
{
SortName = null;
}
else
{
SortName = newValue;
}
}
}
}
private string _sortName;
@@ -604,15 +643,7 @@ namespace MediaBrowser.Controller.Entities
{
if (_sortName == null)
{
if (!string.IsNullOrWhiteSpace(ForcedSortName))
{
// Need the ToLower because that's what CreateSortName does
_sortName = ModifySortChunks(ForcedSortName).ToLower();
}
else
{
_sortName = CreateSortName();
}
_sortName = CreateSortName();
}
return _sortName;
}
@@ -622,6 +653,21 @@ namespace MediaBrowser.Controller.Entities
}
}
private string CreateSortNameFromCustomValue(string value)
{
return string.IsNullOrWhiteSpace(value) ? null : ModifySortChunks(value).ToLower();
}
public bool IsSortNameDefault(string value)
{
if (string.IsNullOrWhiteSpace(value))
{
return true;
}
return string.Equals(CreateSortNameFromCustomValue(value), CreateSortName(), StringComparison.OrdinalIgnoreCase);
}
public string GetInternalMetadataPath()
{
var basePath = ConfigurationManager.ApplicationPaths.InternalMetadataPath;
@@ -1303,7 +1349,6 @@ namespace MediaBrowser.Controller.Entities
public void AfterMetadataRefresh()
{
_sortName = null;
}
/// <summary>
@@ -2187,8 +2232,6 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public virtual bool BeforeMetadataRefresh()
{
_sortName = null;
var hasChanges = false;
if (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Path))
@@ -2210,7 +2253,7 @@ namespace MediaBrowser.Controller.Entities
return path;
}
public virtual Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> itemFields)
public virtual Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields)
{
if (RunTimeTicks.HasValue)
{

View File

@@ -12,6 +12,7 @@ using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
@@ -672,7 +673,8 @@ namespace MediaBrowser.Controller.Entities
return ItemRepository.GetItemList(new InternalItemsQuery
{
ParentId = Id,
GroupByPresentationUniqueKey = false
GroupByPresentationUniqueKey = false,
DtoOptions = new DtoOptions(true)
});
}
@@ -690,7 +692,11 @@ namespace MediaBrowser.Controller.Entities
{
Recursive = false,
Limit = 0,
ParentId = Id
ParentId = Id,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).Result;
@@ -705,7 +711,11 @@ namespace MediaBrowser.Controller.Entities
IsFolder = false,
IsVirtualItem = false,
EnableTotalRecordCount = true,
Limit = 0
Limit = 0,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).Result.TotalRecordCount;
}
@@ -1481,7 +1491,7 @@ namespace MediaBrowser.Controller.Entities
}
}
public override async Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> itemFields)
public override async Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields)
{
if (!SupportsUserDataFromChildren)
{
@@ -1490,7 +1500,7 @@ namespace MediaBrowser.Controller.Entities
if (itemDto != null)
{
if (itemFields.Contains(ItemFields.RecursiveItemCount))
if (fields.Contains(ItemFields.RecursiveItemCount))
{
itemDto.RecursiveItemCount = GetRecursiveChildCount(user);
}
@@ -1505,7 +1515,11 @@ namespace MediaBrowser.Controller.Entities
IsVirtualItem = false,
EnableTotalRecordCount = true,
Limit = 0,
IsPlayed = false
IsPlayed = false,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).ConfigureAwait(false);

View File

@@ -69,16 +69,6 @@ namespace MediaBrowser.Controller.Entities
return false;
}
public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
{
return inputItems.Where(GetItemFilter());
}
public Func<BaseItem, bool> GetItemFilter()
{
return i => i is Game && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase);
}
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{
query.GenreIds = new[] { Id.ToString("N") };

View File

@@ -81,16 +81,6 @@ namespace MediaBrowser.Controller.Entities
}
}
public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
{
return inputItems.Where(GetItemFilter());
}
public Func<BaseItem, bool> GetItemFilter()
{
return i => !(i is Game) && !(i is IHasMusicGenres) && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase);
}
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{
query.GenreIds = new[] { Id.ToString("N") };

View File

@@ -7,13 +7,6 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public interface IItemByName : IHasMetadata
{
/// <summary>
/// Gets the tagged items.
/// </summary>
/// <param name="inputItems">The input items.</param>
/// <returns>IEnumerable{BaseItem}.</returns>
IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems);
IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query);
}

View File

@@ -166,26 +166,31 @@ namespace MediaBrowser.Controller.Entities
switch (name)
{
case ItemFields.ThemeSongIds:
case ItemFields.ThemeVideoIds:
case ItemFields.ProductionLocations:
case ItemFields.Keywords:
case ItemFields.Taglines:
case ItemFields.CustomRating:
case ItemFields.DateCreated:
case ItemFields.SortName:
case ItemFields.Overview:
case ItemFields.HomePageUrl:
case ItemFields.VoteCount:
case ItemFields.Keywords:
case ItemFields.DisplayMediaType:
//case ItemFields.ServiceName:
case ItemFields.Genres:
case ItemFields.Studios:
case ItemFields.VoteCount:
case ItemFields.CustomRating:
case ItemFields.ProductionLocations:
case ItemFields.Settings:
case ItemFields.OriginalTitle:
case ItemFields.Taglines:
case ItemFields.SortName:
case ItemFields.Studios:
case ItemFields.Tags:
case ItemFields.ThemeSongIds:
case ItemFields.ThemeVideoIds:
case ItemFields.DateCreated:
case ItemFields.Overview:
case ItemFields.Genres:
case ItemFields.DateLastMediaAdded:
return fields.Count == 0 || fields.Contains(name);
case ItemFields.ExternalEtag:
case ItemFields.PresentationUniqueKey:
case ItemFields.InheritedParentalRatingValue:
case ItemFields.ExternalSeriesId:
return fields.Contains(name);
case ItemFields.ServiceName:
return true;
default:
return true;
}

View File

@@ -93,22 +93,6 @@ namespace MediaBrowser.Controller.Entities
}
}
public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
{
var itemsWithPerson = LibraryManager.GetItemIds(new InternalItemsQuery
{
PersonIds = new[] { Id.ToString("N") }
});
return inputItems.Where(i => itemsWithPerson.Contains(i.Id));
}
public Func<BaseItem, bool> GetItemFilter()
{
return i => LibraryManager.GetPeople(i).Any(p => string.Equals(p.Name, Name, StringComparison.OrdinalIgnoreCase));
}
[IgnoreDataMember]
public override bool SupportsPeople
{

View File

@@ -88,16 +88,6 @@ namespace MediaBrowser.Controller.Entities
}
}
public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
{
return inputItems.Where(GetItemFilter());
}
public Func<BaseItem, bool> GetItemFilter()
{
return i => i.Studios.Contains(Name, StringComparer.OrdinalIgnoreCase);
}
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{
query.StudioIds = new[] { Id.ToString("N") };

View File

@@ -5,6 +5,7 @@ using MediaBrowser.Model.Users;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Serialization;
@@ -160,7 +161,7 @@ namespace MediaBrowser.Controller.Entities.TV
Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager);
var items = GetEpisodes(user).Where(filter);
var items = GetEpisodes(user, query.DtoOptions).Where(filter);
var result = PostFilterAndSort(items, query, false, false);
@@ -170,21 +171,19 @@ namespace MediaBrowser.Controller.Entities.TV
/// <summary>
/// Gets the episodes.
/// </summary>
/// <param name="user">The user.</param>
/// <returns>IEnumerable{Episode}.</returns>
public IEnumerable<Episode> GetEpisodes(User user)
public IEnumerable<Episode> GetEpisodes(User user, DtoOptions options)
{
return GetEpisodes(Series, user);
return GetEpisodes(Series, user, options);
}
public IEnumerable<Episode> GetEpisodes(Series series, User user)
public IEnumerable<Episode> GetEpisodes(Series series, User user, DtoOptions options)
{
return GetEpisodes(series, user, null);
return GetEpisodes(series, user, null, options);
}
public IEnumerable<Episode> GetEpisodes(Series series, User user, IEnumerable<Episode> allSeriesEpisodes)
public IEnumerable<Episode> GetEpisodes(Series series, User user, IEnumerable<Episode> allSeriesEpisodes, DtoOptions options)
{
return series.GetSeasonEpisodes(this, user, allSeriesEpisodes);
return series.GetSeasonEpisodes(this, user, allSeriesEpisodes, options);
}
public IEnumerable<Episode> GetEpisodes()
@@ -194,7 +193,7 @@ namespace MediaBrowser.Controller.Entities.TV
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
{
return GetEpisodes(user);
return GetEpisodes(user, new DtoOptions(true));
}
protected override bool GetBlockUnratedValue(UserPolicy config)

View File

@@ -8,6 +8,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
@@ -250,12 +251,15 @@ namespace MediaBrowser.Controller.Entities.TV
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
{
return GetSeasons(user);
return GetSeasons(user, new DtoOptions(true));
}
public IEnumerable<Season> GetSeasons(User user)
public IEnumerable<Season> GetSeasons(User user, DtoOptions options)
{
var query = new InternalItemsQuery(user);
var query = new InternalItemsQuery(user)
{
DtoOptions = options
};
SetSeasonQueryOptions(query, user);
@@ -321,7 +325,7 @@ namespace MediaBrowser.Controller.Entities.TV
return Task.FromResult(LibraryManager.GetItemsResult(query));
}
public IEnumerable<Episode> GetEpisodes(User user)
public IEnumerable<Episode> GetEpisodes(User user, DtoOptions options)
{
var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
var seriesKey = GetUniqueSeriesKey(this);
@@ -331,7 +335,8 @@ namespace MediaBrowser.Controller.Entities.TV
AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name },
SortBy = new[] { ItemSortBy.SortName }
SortBy = new[] { ItemSortBy.SortName },
DtoOptions = options
};
var config = user.Configuration;
if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes)
@@ -352,7 +357,7 @@ namespace MediaBrowser.Controller.Entities.TV
var allSeriesEpisodes = allItems.OfType<Episode>().ToList();
var allEpisodes = allItems.OfType<Season>()
.SelectMany(i => i.GetEpisodes(this, user, allSeriesEpisodes))
.SelectMany(i => i.GetEpisodes(this, user, allSeriesEpisodes, options))
.Reverse()
.ToList();
@@ -429,7 +434,7 @@ namespace MediaBrowser.Controller.Entities.TV
progress.Report(100);
}
public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user)
public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, DtoOptions options)
{
var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
@@ -445,7 +450,8 @@ namespace MediaBrowser.Controller.Entities.TV
AncestorWithPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? null : seriesKey,
SeriesPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? seriesKey : null,
IncludeItemTypes = new[] { typeof(Episode).Name },
SortBy = new[] { ItemSortBy.SortName }
SortBy = new[] { ItemSortBy.SortName },
DtoOptions = options
};
if (user != null)
{
@@ -466,14 +472,14 @@ namespace MediaBrowser.Controller.Entities.TV
var allItems = LibraryManager.GetItemList(query).OfType<Episode>();
return GetSeasonEpisodes(parentSeason, user, allItems);
return GetSeasonEpisodes(parentSeason, user, allItems, options);
}
public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, IEnumerable<Episode> allSeriesEpisodes)
public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, IEnumerable<Episode> allSeriesEpisodes, DtoOptions options)
{
if (allSeriesEpisodes == null)
{
return GetSeasonEpisodes(parentSeason, user);
return GetSeasonEpisodes(parentSeason, user, options);
}
var episodes = FilterEpisodesBySeason(allSeriesEpisodes, parentSeason, ConfigurationManager.Configuration.DisplaySpecialsWithinSeasons);

View File

@@ -7,6 +7,7 @@ using System.Collections.Generic;
using MediaBrowser.Model.Serialization;
using System.Threading.Tasks;
using System.Linq;
using MediaBrowser.Controller.Dto;
namespace MediaBrowser.Controller.Entities
{
@@ -75,7 +76,8 @@ namespace MediaBrowser.Controller.Entities
var result = GetItems(new InternalItemsQuery
{
User = user,
EnableTotalRecordCount = false
EnableTotalRecordCount = false,
DtoOptions = new DtoOptions(true)
}).Result;
@@ -100,7 +102,9 @@ namespace MediaBrowser.Controller.Entities
Recursive = true,
EnableTotalRecordCount = false,
ForceDirect = true
ForceDirect = true,
DtoOptions = query.DtoOptions
}).Result;

View File

@@ -17,6 +17,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Extensions;
namespace MediaBrowser.Controller.Entities
@@ -83,7 +84,7 @@ namespace MediaBrowser.Controller.Entities
Limit = query.Limit,
StartIndex = query.StartIndex
}, CancellationToken.None).ConfigureAwait(false);
}, new DtoOptions(), CancellationToken.None).ConfigureAwait(false);
return GetResult(result);
}
@@ -110,7 +111,7 @@ namespace MediaBrowser.Controller.Entities
Limit = query.Limit,
StartIndex = query.StartIndex
}, CancellationToken.None).ConfigureAwait(false);
}, new DtoOptions(), CancellationToken.None).ConfigureAwait(false);
return GetResult(result);
}
@@ -394,7 +395,7 @@ namespace MediaBrowser.Controller.Entities
ParentId = parent == null ? null : parent.Id.ToString("N"),
GroupItems = true
}).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null);
}, query.DtoOptions).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null);
query.SortBy = new string[] { };
@@ -662,7 +663,7 @@ namespace MediaBrowser.Controller.Entities
StartIndex = query.StartIndex,
UserId = query.User.Id.ToString("N")
}, parentFolders);
}, parentFolders, query.DtoOptions);
return result;
}
@@ -1783,7 +1784,7 @@ namespace MediaBrowser.Controller.Entities
Status = RecordingStatus.Completed,
UserId = user.Id.ToString("N")
}, CancellationToken.None).ConfigureAwait(false);
}, new DtoOptions(), CancellationToken.None).ConfigureAwait(false);
}
var list = new List<BaseItem>();

View File

@@ -65,20 +65,6 @@ namespace MediaBrowser.Controller.Entities
return true;
}
public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
{
int year;
var usCulture = new CultureInfo("en-US");
if (!int.TryParse(Name, NumberStyles.Integer, usCulture, out year))
{
return inputItems;
}
return inputItems.Where(i => i.ProductionYear.HasValue && i.ProductionYear.Value == year);
}
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{
int year;
@@ -107,12 +93,6 @@ namespace MediaBrowser.Controller.Entities
return null;
}
public Func<BaseItem, bool> GetItemFilter()
{
var val = GetYearValue();
return i => i.ProductionYear.HasValue && val.HasValue && i.ProductionYear.Value == val.Value;
}
[IgnoreDataMember]
public override bool SupportsPeople
{