diff options
Diffstat (limited to 'MediaBrowser.Controller/Entities')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Audio/Audio.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Audio/AudioPodcast.cs | 14 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/AudioBook.cs | 9 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 82 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Book.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 13 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Game.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/IHasMetadata.cs | 11 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/ItemImageInfo.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Movies/BoxSet.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/PhotoAlbum.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Episode.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Season.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Series.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/User.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/UserViewBuilder.cs | 106 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Video.cs | 47 |
17 files changed, 188 insertions, 149 deletions
diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs index 02a9f15a9..16fd75d2e 100644 --- a/MediaBrowser.Controller/Entities/Audio/Audio.cs +++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs @@ -61,6 +61,12 @@ namespace MediaBrowser.Controller.Entities.Audio } [IgnoreDataMember] + public override bool SupportsPeople + { + get { return false; } + } + + [IgnoreDataMember] public override bool SupportsAddingToPlaylist { get { return true; } diff --git a/MediaBrowser.Controller/Entities/Audio/AudioPodcast.cs b/MediaBrowser.Controller/Entities/Audio/AudioPodcast.cs index d2b4569ba..1b717b900 100644 --- a/MediaBrowser.Controller/Entities/Audio/AudioPodcast.cs +++ b/MediaBrowser.Controller/Entities/Audio/AudioPodcast.cs @@ -1,8 +1,9 @@ -using MediaBrowser.Model.Serialization; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Controller.Entities.Audio { - public class AudioPodcast : Audio + public class AudioPodcast : Audio, IHasLookupInfo<SongInfo> { [IgnoreDataMember] public override bool SupportsPositionTicksResume @@ -13,6 +14,15 @@ namespace MediaBrowser.Controller.Entities.Audio } } + [IgnoreDataMember] + public override bool SupportsPlayedStatus + { + get + { + return true; + } + } + public override double? GetDefaultPrimaryImageAspectRatio() { return 1; diff --git a/MediaBrowser.Controller/Entities/AudioBook.cs b/MediaBrowser.Controller/Entities/AudioBook.cs index 1bdcfb881..374bb21f7 100644 --- a/MediaBrowser.Controller/Entities/AudioBook.cs +++ b/MediaBrowser.Controller/Entities/AudioBook.cs @@ -1,11 +1,12 @@ using System; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Entities; namespace MediaBrowser.Controller.Entities { - public class AudioBook : Audio.Audio, IHasSeries + public class AudioBook : Audio.Audio, IHasSeries, IHasLookupInfo<SongInfo> { [IgnoreDataMember] public override bool SupportsPositionTicksResume @@ -50,12 +51,6 @@ namespace MediaBrowser.Controller.Entities return null; } - [IgnoreDataMember] - public override bool EnableRefreshOnDateModifiedChange - { - get { return true; } - } - public Guid? FindSeriesId() { return SeriesId; diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 502ba6c60..89d48ff90 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -477,14 +477,36 @@ namespace MediaBrowser.Controller.Entities locationType != LocationType.Virtual; } - public virtual bool IsAuthorizedToDelete(User user) + public virtual bool IsAuthorizedToDelete(User user, List<Folder> allCollectionFolders) { - return user.Policy.EnableContentDeletion; + if (user.Policy.EnableContentDeletion) + { + return true; + } + + var allowed = user.Policy.EnableContentDeletionFromFolders; + var collectionFolders = LibraryManager.GetCollectionFolders(this, allCollectionFolders); + + foreach (var folder in collectionFolders) + { + if (allowed.Contains(folder.Id.ToString("N"), StringComparer.OrdinalIgnoreCase)) + { + return true; + } + } + + return false; + } + + public bool CanDelete(User user, List<Folder> allCollectionFolders) + { + return CanDelete() && IsAuthorizedToDelete(user, allCollectionFolders); } public bool CanDelete(User user) { - return CanDelete() && IsAuthorizedToDelete(user); + var allCollectionFolders = LibraryManager.GetUserRootFolder().Children.OfType<Folder>().ToList(); + return CanDelete(user, allCollectionFolders); } public virtual bool CanDownload() @@ -1142,7 +1164,7 @@ namespace MediaBrowser.Controller.Entities [IgnoreDataMember] public virtual bool SupportsPeople { - get { return true; } + get { return false; } } [IgnoreDataMember] @@ -1281,8 +1303,8 @@ namespace MediaBrowser.Controller.Entities { var subOptions = new MetadataRefreshOptions(options); - if (!i.ExtraType.HasValue || - i.ExtraType.Value != Model.Entities.ExtraType.ThemeSong || + if (!i.ExtraType.HasValue || + i.ExtraType.Value != Model.Entities.ExtraType.ThemeSong || i.OwnerId != ownerId || i.ParentId != Guid.Empty) { @@ -1356,14 +1378,20 @@ namespace MediaBrowser.Controller.Entities internal virtual bool IsValidFromResolver(BaseItem newItem) { - var current = this; + return true; + } - if (current.IsInMixedFolder != newItem.IsInMixedFolder) + internal virtual ItemUpdateType UpdateFromResolvedItem(BaseItem newItem) + { + var updateType = ItemUpdateType.None; + + if (IsInMixedFolder != newItem.IsInMixedFolder) { - return false; + IsInMixedFolder = newItem.IsInMixedFolder; + updateType |= ItemUpdateType.MetadataImport; } - return true; + return updateType; } public void AfterMetadataRefresh() @@ -1924,6 +1952,8 @@ namespace MediaBrowser.Controller.Entities { existingImage.Path = image.Path; existingImage.DateModified = image.DateModified; + existingImage.Width = image.Width; + existingImage.Height = image.Height; } else @@ -1966,14 +1996,14 @@ namespace MediaBrowser.Controller.Entities /// <param name="type">The type.</param> /// <param name="index">The index.</param> /// <returns>Task.</returns> - public Task DeleteImage(ImageType type, int index) + public void DeleteImage(ImageType type, int index) { var info = GetImageInfo(type, index); if (info == null) { // Nothing to do - return Task.FromResult(true); + return; } // Remove it from the item @@ -1984,7 +2014,7 @@ namespace MediaBrowser.Controller.Entities FileSystem.DeleteFile(info.Path); } - return UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None); + UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None); } public void RemoveImage(ItemImageInfo image) @@ -1997,9 +2027,9 @@ namespace MediaBrowser.Controller.Entities ImageInfos = ImageInfos.Except(deletedImages).ToArray(); } - public virtual Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken) + public virtual void UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken) { - return LibraryManager.UpdateItem(this, updateReason, cancellationToken); + LibraryManager.UpdateItem(this, updateReason, cancellationToken); } /// <summary> @@ -2209,7 +2239,7 @@ namespace MediaBrowser.Controller.Entities return type == ImageType.Backdrop || type == ImageType.Screenshot || type == ImageType.Chapter; } - public Task SwapImages(ImageType type, int index1, int index2) + public void SwapImages(ImageType type, int index1, int index2) { if (!AllowsMultipleImages(type)) { @@ -2222,13 +2252,13 @@ namespace MediaBrowser.Controller.Entities if (info1 == null || info2 == null) { // Nothing to do - return Task.FromResult(true); + return; } if (!info1.IsLocalFile || !info2.IsLocalFile) { // TODO: Not supported yet - return Task.FromResult(true); + return; } var path1 = info1.Path; @@ -2240,7 +2270,12 @@ namespace MediaBrowser.Controller.Entities info1.DateModified = FileSystem.GetLastWriteTimeUtc(info1.Path); info2.DateModified = FileSystem.GetLastWriteTimeUtc(info2.Path); - return UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None); + info1.Width = 0; + info1.Height = 0; + info2.Width = 0; + info2.Height = 0; + + UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None); } public virtual bool IsPlayed(User user) @@ -2526,15 +2561,6 @@ namespace MediaBrowser.Controller.Entities return LibraryManager.DeleteItem(this, options); } - public virtual Task OnFileDeleted() - { - // Remove from database - return Delete(new DeleteOptions - { - DeleteFileLocation = false - }); - } - public virtual List<ExternalUrl> GetRelatedUrls() { return new List<ExternalUrl>(); diff --git a/MediaBrowser.Controller/Entities/Book.cs b/MediaBrowser.Controller/Entities/Book.cs index 9b1a52f83..45e3915ce 100644 --- a/MediaBrowser.Controller/Entities/Book.cs +++ b/MediaBrowser.Controller/Entities/Book.cs @@ -38,12 +38,6 @@ namespace MediaBrowser.Controller.Entities return SeriesPresentationUniqueKey; } - [IgnoreDataMember] - public override bool EnableRefreshOnDateModifiedChange - { - get { return true; } - } - public Guid? FindSeriesId() { return SeriesId; diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 6d88f7015..ce7145a79 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -328,11 +328,6 @@ namespace MediaBrowser.Controller.Entities return dictionary; } - private bool IsValidFromResolver(BaseItem current, BaseItem newItem) - { - return current.IsValidFromResolver(newItem); - } - protected override void TriggerOnRefreshStart() { } @@ -421,10 +416,15 @@ namespace MediaBrowser.Controller.Entities { BaseItem currentChild; - if (currentChildren.TryGetValue(child.Id, out currentChild) && IsValidFromResolver(currentChild, child)) + if (currentChildren.TryGetValue(child.Id, out currentChild) && currentChild.IsValidFromResolver(child)) { validChildren.Add(currentChild); + if (currentChild.UpdateFromResolvedItem(child) > ItemUpdateType.None) + { + currentChild.UpdateToRepository(ItemUpdateType.MetadataImport, cancellationToken); + } + continue; } @@ -542,7 +542,6 @@ namespace MediaBrowser.Controller.Entities if (validChildrenNeedGeneration) { validChildren = Children.ToList(); - validChildrenNeedGeneration = false; } await RefreshMetadataRecursive(validChildren, refreshOptions, recursive, innerProgress, cancellationToken); diff --git a/MediaBrowser.Controller/Entities/Game.cs b/MediaBrowser.Controller/Entities/Game.cs index a99058925..bead0ef95 100644 --- a/MediaBrowser.Controller/Entities/Game.cs +++ b/MediaBrowser.Controller/Entities/Game.cs @@ -29,15 +29,15 @@ namespace MediaBrowser.Controller.Entities } [IgnoreDataMember] - public override bool EnableRefreshOnDateModifiedChange + public override bool SupportsThemeMedia { get { return true; } } [IgnoreDataMember] - public override bool SupportsThemeMedia + public override bool SupportsPeople { - get { return true; } + get { return false; } } /// <summary> diff --git a/MediaBrowser.Controller/Entities/IHasMetadata.cs b/MediaBrowser.Controller/Entities/IHasMetadata.cs index 4146686b2..b7d31b4d6 100644 --- a/MediaBrowser.Controller/Entities/IHasMetadata.cs +++ b/MediaBrowser.Controller/Entities/IHasMetadata.cs @@ -151,11 +151,7 @@ namespace MediaBrowser.Controller.Entities /// <summary> /// Swaps the images. /// </summary> - /// <param name="type">The type.</param> - /// <param name="index1">The index1.</param> - /// <param name="index2">The index2.</param> - /// <returns>Task.</returns> - Task SwapImages(ImageType type, int index1, int index2); + void SwapImages(ImageType type, int index1, int index2); /// <summary> /// Gets or sets the primary image path. @@ -249,10 +245,7 @@ namespace MediaBrowser.Controller.Entities /// <summary> /// Updates to repository. /// </summary> - /// <param name="updateReason">The update reason.</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>Task.</returns> - Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken); + void UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken); /// <summary> /// Sets the image. diff --git a/MediaBrowser.Controller/Entities/ItemImageInfo.cs b/MediaBrowser.Controller/Entities/ItemImageInfo.cs index 6b2d2392d..bd0011c4b 100644 --- a/MediaBrowser.Controller/Entities/ItemImageInfo.cs +++ b/MediaBrowser.Controller/Entities/ItemImageInfo.cs @@ -24,6 +24,9 @@ namespace MediaBrowser.Controller.Entities /// <value>The date modified.</value> public DateTime DateModified { get; set; } + public int Width { get; set; } + public int Height { get; set; } + [IgnoreDataMember] public bool IsLocalFile { diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs index bd8d9024d..268860ff0 100644 --- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs +++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs @@ -45,6 +45,12 @@ namespace MediaBrowser.Controller.Entities.Movies } } + [IgnoreDataMember] + public override bool SupportsPeople + { + get { return true; } + } + public Guid[] LocalTrailerIds { get; set; } public Guid[] RemoteTrailerIds { get; set; } @@ -126,7 +132,7 @@ namespace MediaBrowser.Controller.Entities.Movies } } - public override bool IsAuthorizedToDelete(User user) + public override bool IsAuthorizedToDelete(User user, List<Folder> allCollectionFolders) { return true; } diff --git a/MediaBrowser.Controller/Entities/PhotoAlbum.cs b/MediaBrowser.Controller/Entities/PhotoAlbum.cs index 52d743e36..af9d8c801 100644 --- a/MediaBrowser.Controller/Entities/PhotoAlbum.cs +++ b/MediaBrowser.Controller/Entities/PhotoAlbum.cs @@ -30,10 +30,5 @@ namespace MediaBrowser.Controller.Entities return false; } } - - public override double? GetDefaultPrimaryImageAspectRatio() - { - return 1; - } } } diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs index c30e0ef8e..3f52dfc93 100644 --- a/MediaBrowser.Controller/Entities/TV/Episode.cs +++ b/MediaBrowser.Controller/Entities/TV/Episode.cs @@ -79,6 +79,12 @@ namespace MediaBrowser.Controller.Entities.TV }
[IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get { return true; }
+ }
+
+ [IgnoreDataMember]
public int? AiredSeasonNumber
{
get
diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index bf6dc5678..00bb75fa7 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -41,6 +41,12 @@ namespace MediaBrowser.Controller.Entities.TV } [IgnoreDataMember] + public override bool SupportsPeople + { + get { return true; } + } + + [IgnoreDataMember] public override bool SupportsInheritedParentImages { get { return true; } diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index 5931c32e1..1d09783d1 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -64,6 +64,12 @@ namespace MediaBrowser.Controller.Entities.TV } } + [IgnoreDataMember] + public override bool SupportsPeople + { + get { return true; } + } + public Guid[] LocalTrailerIds { get; set; } public Guid[] RemoteTrailerIds { get; set; } diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs index 36bbf6886..821327b7f 100644 --- a/MediaBrowser.Controller/Entities/User.cs +++ b/MediaBrowser.Controller/Entities/User.cs @@ -235,10 +235,9 @@ namespace MediaBrowser.Controller.Entities }, CancellationToken.None); } - public override Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken) + public override void UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken) { UserManager.UpdateUser(this); - return Task.FromResult(true); } /// <summary> diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index 43adc4af6..97b96127a 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -78,26 +78,26 @@ namespace MediaBrowser.Controller.Entities case SpecialFolder.LiveTvChannels: { - var result = await _liveTvManager.GetInternalChannels(new LiveTvChannelQuery + var result = _liveTvManager.GetInternalChannels(new LiveTvChannelQuery { UserId = query.User.Id.ToString("N"), Limit = query.Limit, StartIndex = query.StartIndex - }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false); + }, new DtoOptions(), CancellationToken.None); return GetResult(result); } case SpecialFolder.LiveTvNowPlaying: { - var result = await _liveTvManager.GetRecommendedProgramsInternal(new RecommendedProgramQuery + var result = _liveTvManager.GetRecommendedProgramsInternal(new RecommendedProgramQuery { UserId = query.User.Id.ToString("N"), Limit = query.Limit, IsAiring = true - }, new Dto.DtoOptions(), CancellationToken.None).ConfigureAwait(false); + }, new Dto.DtoOptions(), CancellationToken.None); return GetResult(result); } @@ -142,22 +142,22 @@ namespace MediaBrowser.Controller.Entities return GetResult(user.RootFolder.GetChildren(user, true), queryParent, query); case CollectionType.Playlists: - return GetPlaylistsView(queryParent, user, query); + return GetPlaylistsView(queryParent, user, query); case CollectionType.BoxSets: return GetBoxsetView(queryParent, user, query); case CollectionType.TvShows: - return await GetTvView(queryParent, user, query).ConfigureAwait(false); + return GetTvView(queryParent, user, query); case CollectionType.Movies: - return await GetMovieFolders(queryParent, user, query).ConfigureAwait(false); + return GetMovieFolders(queryParent, user, query); case SpecialFolder.TvShowSeries: return GetTvSeries(queryParent, user, query); case SpecialFolder.TvGenres: - return await GetTvGenres(queryParent, user, query).ConfigureAwait(false); + return GetTvGenres(queryParent, user, query); case SpecialFolder.TvGenre: return GetTvGenreItems(queryParent, displayParent, user, query); @@ -178,10 +178,10 @@ namespace MediaBrowser.Controller.Entities return GetMovieLatest(queryParent, user, query); case SpecialFolder.MovieGenres: - return await GetMovieGenres(queryParent, user, query).ConfigureAwait(false); + return GetMovieGenres(queryParent, user, query); case SpecialFolder.MovieGenre: - return GetMovieGenreItems(queryParent, displayParent, user, query); + return GetMovieGenreItems(queryParent, displayParent, user, query); case SpecialFolder.MovieResume: return GetMovieResume(queryParent, user, query); @@ -199,7 +199,7 @@ namespace MediaBrowser.Controller.Entities return GetFavoriteSeries(queryParent, user, query); case CollectionType.Music: - return await GetMusicFolders(queryParent, user, query).ConfigureAwait(false); + return GetMusicFolders(queryParent, user, query); case SpecialFolder.MusicGenres: return GetMusicGenres(queryParent, user, query); @@ -223,7 +223,7 @@ namespace MediaBrowser.Controller.Entities return GetMusicSongs(queryParent, user, query); case SpecialFolder.MusicFavorites: - return await GetMusicFavorites(queryParent, user, query).ConfigureAwait(false); + return GetMusicFavorites(queryParent, user, query); case SpecialFolder.MusicFavoriteAlbums: return GetFavoriteAlbums(queryParent, user, query); @@ -245,7 +245,7 @@ namespace MediaBrowser.Controller.Entities } } - private async Task<QueryResult<BaseItem>> GetMusicFolders(Folder parent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetMusicFolders(Folder parent, User user, InternalItemsQuery query) { if (query.Recursive) { @@ -262,25 +262,25 @@ namespace MediaBrowser.Controller.Entities var list = new List<BaseItem>(); - list.Add(await GetUserView(SpecialFolder.MusicLatest, "0", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MusicPlaylists, "1", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MusicAlbums, "2", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MusicAlbumArtists, "3", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MusicArtists, "4", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MusicSongs, "5", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MusicGenres, "6", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MusicFavorites, "7", parent).ConfigureAwait(false)); + list.Add(GetUserView(SpecialFolder.MusicLatest, "Latest", "0", parent)); + list.Add(GetUserView(SpecialFolder.MusicPlaylists, "Playlists", "1", parent)); + list.Add(GetUserView(SpecialFolder.MusicAlbums, "Albums", "2", parent)); + list.Add(GetUserView(SpecialFolder.MusicAlbumArtists, "HeaderAlbumArtists", "3", parent)); + list.Add(GetUserView(SpecialFolder.MusicArtists, "Artists", "4", parent)); + list.Add(GetUserView(SpecialFolder.MusicSongs, "Songs", "5", parent)); + list.Add(GetUserView(SpecialFolder.MusicGenres, "Genres", "6", parent)); + list.Add(GetUserView(SpecialFolder.MusicFavorites, "Favorites", "7", parent)); return GetResult(list, parent, query); } - private async Task<QueryResult<BaseItem>> GetMusicFavorites(Folder parent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetMusicFavorites(Folder parent, User user, InternalItemsQuery query) { var list = new List<BaseItem>(); - list.Add(await GetUserView(SpecialFolder.MusicFavoriteAlbums, "0", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MusicFavoriteArtists, "1", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MusicFavoriteSongs, "2", parent).ConfigureAwait(false)); + list.Add(GetUserView(SpecialFolder.MusicFavoriteAlbums, "HeaderFavoriteAlbums", "0", parent)); + list.Add(GetUserView(SpecialFolder.MusicFavoriteArtists, "HeaderFavoriteArtists", "1", parent)); + list.Add(GetUserView(SpecialFolder.MusicFavoriteSongs, "HeaderFavoriteSongs", "2", parent)); return GetResult(list, parent, query); } @@ -426,7 +426,7 @@ namespace MediaBrowser.Controller.Entities return 50; } - private async Task<QueryResult<BaseItem>> GetMovieFolders(Folder parent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetMovieFolders(Folder parent, User user, InternalItemsQuery query) { if (query.Recursive) { @@ -443,12 +443,12 @@ namespace MediaBrowser.Controller.Entities var list = new List<BaseItem>(); - list.Add(await GetUserView(SpecialFolder.MovieResume, "0", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MovieLatest, "1", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MovieMovies, "2", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MovieCollections, "3", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MovieFavorites, "4", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.MovieGenres, "5", parent).ConfigureAwait(false)); + list.Add(GetUserView(SpecialFolder.MovieResume, "HeaderContinueWatching", "0", parent)); + list.Add(GetUserView(SpecialFolder.MovieLatest, "Latest", "1", parent)); + list.Add(GetUserView(SpecialFolder.MovieMovies, "Movies", "2", parent)); + list.Add(GetUserView(SpecialFolder.MovieCollections, "Collections", "3", parent)); + list.Add(GetUserView(SpecialFolder.MovieFavorites, "Favorites", "4", parent)); + list.Add(GetUserView(SpecialFolder.MovieGenres, "Genres", "5", parent)); return GetResult(list, parent, query); } @@ -538,9 +538,9 @@ namespace MediaBrowser.Controller.Entities }; } - private async Task<QueryResult<BaseItem>> GetMovieGenres(Folder parent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetMovieGenres(Folder parent, User user, InternalItemsQuery query) { - var tasks = parent.QueryRecursive(new InternalItemsQuery(user) + var genres = parent.QueryRecursive(new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(Movie).Name }, Recursive = true, @@ -564,9 +564,7 @@ namespace MediaBrowser.Controller.Entities }) .Where(i => i != null) - .Select(i => GetUserView(i.Name, SpecialFolder.MovieGenre, i.SortName, parent)); - - var genres = await Task.WhenAll(tasks).ConfigureAwait(false); + .Select(i => GetUserViewWithName(i.Name, SpecialFolder.MovieGenre, i.SortName, parent)); return GetResult(genres, parent, query); } @@ -598,7 +596,7 @@ namespace MediaBrowser.Controller.Entities return _libraryManager.GetItemsResult(query); } - private async Task<QueryResult<BaseItem>> GetTvView(Folder parent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetTvView(Folder parent, User user, InternalItemsQuery query) { if (query.Recursive) { @@ -615,13 +613,13 @@ namespace MediaBrowser.Controller.Entities var list = new List<BaseItem>(); - list.Add(await GetUserView(SpecialFolder.TvResume, "0", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.TvNextUp, "1", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.TvLatest, "2", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.TvShowSeries, "3", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.TvFavoriteSeries, "4", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.TvFavoriteEpisodes, "5", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.TvGenres, "6", parent).ConfigureAwait(false)); + list.Add(GetUserView(SpecialFolder.TvResume, "HeaderContinueWatching", "0", parent)); + list.Add(GetUserView(SpecialFolder.TvNextUp, "HeaderNextUp", "1", parent)); + list.Add(GetUserView(SpecialFolder.TvLatest, "Latest", "2", parent)); + list.Add(GetUserView(SpecialFolder.TvShowSeries, "Shows", "3", parent)); + list.Add(GetUserView(SpecialFolder.TvFavoriteSeries, "HeaderFavoriteShows", "4", parent)); + list.Add(GetUserView(SpecialFolder.TvFavoriteEpisodes, "HeaderFavoriteEpisodes", "5", parent)); + list.Add(GetUserView(SpecialFolder.TvGenres, "Genres", "6", parent)); return GetResult(list, parent, query); } @@ -679,9 +677,9 @@ namespace MediaBrowser.Controller.Entities return _libraryManager.GetItemsResult(query); } - private async Task<QueryResult<BaseItem>> GetTvGenres(Folder parent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetTvGenres(Folder parent, User user, InternalItemsQuery query) { - var tasks = parent.QueryRecursive(new InternalItemsQuery(user) + var genres = parent.QueryRecursive(new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(Series).Name }, Recursive = true, @@ -705,9 +703,7 @@ namespace MediaBrowser.Controller.Entities }) .Where(i => i != null) - .Select(i => GetUserView(i.Name, SpecialFolder.TvGenre, i.SortName, parent)); - - var genres = await Task.WhenAll(tasks).ConfigureAwait(false); + .Select(i => GetUserViewWithName(i.Name, SpecialFolder.TvGenre, i.SortName, parent)); return GetResult(genres, parent, query); } @@ -1740,20 +1736,20 @@ namespace MediaBrowser.Controller.Entities var list = new List<BaseItem>(); //list.Add(await GetUserSubView(SpecialFolder.LiveTvNowPlaying, user, "0", parent).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.LiveTvChannels, string.Empty, user.RootFolder).ConfigureAwait(false)); - list.Add(await GetUserView(SpecialFolder.LiveTvRecordingGroups, string.Empty, user.RootFolder).ConfigureAwait(false)); + list.Add(GetUserView(SpecialFolder.LiveTvChannels, "Channels", string.Empty, user.RootFolder)); + list.Add(GetUserView(SpecialFolder.LiveTvRecordingGroups, "HeaderRecordingGroups", string.Empty, user.RootFolder)); return GetResult(list, queryParent, query); } - private Task<UserView> GetUserView(string name, string type, string sortName, BaseItem parent) + private UserView GetUserViewWithName(string name, string type, string sortName, BaseItem parent) { return _userViewManager.GetUserSubView(name, parent.Id.ToString("N"), type, sortName, CancellationToken.None); } - private Task<UserView> GetUserView(string type, string sortName, BaseItem parent) + private UserView GetUserView(string type, string localizationKey, string sortName, BaseItem parent) { - return _userViewManager.GetUserSubView(parent.Id.ToString("N"), type, sortName, CancellationToken.None); + return _userViewManager.GetUserSubView(parent.Id.ToString("N"), type, localizationKey, sortName, CancellationToken.None); } public static IEnumerable<BaseItem> FilterForAdjacency(List<BaseItem> list, string adjacentToId) diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 8693d867c..52f1dd051 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -45,6 +45,12 @@ namespace MediaBrowser.Controller.Entities } [IgnoreDataMember] + public override bool SupportsPeople + { + get { return true; } + } + + [IgnoreDataMember] public override bool SupportsInheritedParentImages { get @@ -78,14 +84,6 @@ namespace MediaBrowser.Controller.Entities } } - public override double? GetDefaultPrimaryImageAspectRatio() - { - double value = 16; - value /= 9; - - return value; - } - public override string CreatePresentationUniqueKey() { if (!string.IsNullOrWhiteSpace(PrimaryVersionId)) @@ -406,30 +404,31 @@ namespace MediaBrowser.Controller.Entities } } - internal override bool IsValidFromResolver(BaseItem newItem) + internal override ItemUpdateType UpdateFromResolvedItem(BaseItem newItem) { - var current = this; + var updateType = base.UpdateFromResolvedItem(newItem); - var newAsVideo = newItem as Video; - - if (newAsVideo != null) + var newVideo = newItem as Video; + if (newVideo != null) { - if (!current.AdditionalParts.SequenceEqual(newAsVideo.AdditionalParts, StringComparer.OrdinalIgnoreCase)) + if (!AdditionalParts.SequenceEqual(newVideo.AdditionalParts, StringComparer.Ordinal)) { - return false; + AdditionalParts = newVideo.AdditionalParts; + updateType |= ItemUpdateType.MetadataImport; } - if (!current.LocalAlternateVersions.SequenceEqual(newAsVideo.LocalAlternateVersions, StringComparer.OrdinalIgnoreCase)) + if (!LocalAlternateVersions.SequenceEqual(newVideo.LocalAlternateVersions, StringComparer.Ordinal)) { - return false; + LocalAlternateVersions = newVideo.LocalAlternateVersions; + updateType |= ItemUpdateType.MetadataImport; } - - if (newAsVideo.VideoType != VideoType) + if (VideoType != newVideo.VideoType) { - return false; + VideoType = newVideo.VideoType; + updateType |= ItemUpdateType.MetadataImport; } } - return base.IsValidFromResolver(newItem); + return updateType; } public static string[] QueryPlayableStreamFiles(string rootPath, VideoType videoType) @@ -521,9 +520,9 @@ namespace MediaBrowser.Controller.Entities } } - public override async Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken) + public override void UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken) { - await base.UpdateToRepository(updateReason, cancellationToken).ConfigureAwait(false); + base.UpdateToRepository(updateReason, cancellationToken); var localAlternates = GetLocalAlternateVersionIds() .Select(i => LibraryManager.GetItemById(i)) @@ -540,7 +539,7 @@ namespace MediaBrowser.Controller.Entities item.Genres = Genres; item.ProviderIds = ProviderIds; - await item.UpdateToRepository(ItemUpdateType.MetadataDownload, cancellationToken).ConfigureAwait(false); + item.UpdateToRepository(ItemUpdateType.MetadataDownload, cancellationToken); } } |
