diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index 1144bd3c6..52abbae3e 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -3758,10 +3758,10 @@ namespace Emby.Server.Implementations.Data if (query.MinDateLastSavedForUser.HasValue) { - whereClauses.Add("DateLastSaved>=@MinDateLastSaved"); + whereClauses.Add("DateLastSaved>=@MinDateLastSavedForUser"); if (statement != null) { - statement.TryBind("@MinDateLastSaved", query.MinDateLastSavedForUser.Value); + statement.TryBind("@MinDateLastSavedForUser", query.MinDateLastSavedForUser.Value); } } diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs index 52ebd5e30..9767de9e0 100644 --- a/Emby.Server.Implementations/Dto/DtoService.cs +++ b/Emby.Server.Implementations/Dto/DtoService.cs @@ -1464,9 +1464,9 @@ namespace Emby.Server.Implementations.Dto } } - private BaseItem GetImageDisplayParent(BaseItem item) + private BaseItem GetImageDisplayParent(BaseItem currentItem, BaseItem originalItem) { - var musicAlbum = item as MusicAlbum; + var musicAlbum = currentItem as MusicAlbum; if (musicAlbum != null) { var artist = musicAlbum.GetMusicArtist(new DtoOptions(false)); @@ -1476,7 +1476,14 @@ namespace Emby.Server.Implementations.Dto } } - return item.DisplayParent ?? item.GetParent(); + var parent = currentItem.DisplayParent ?? currentItem.GetParent(); + + if (parent == null && !(originalItem is UserRootFolder) && !(originalItem is UserView) && !(originalItem is AggregateFolder) && !(originalItem is ICollectionFolder) && !(originalItem is Channel)) + { + parent = _libraryManager.GetCollectionFolders(originalItem).FirstOrDefault(); + } + + return parent; } private void AddInheritedImages(BaseItemDto dto, BaseItem item, DtoOptions options, BaseItem owner) @@ -1503,7 +1510,7 @@ namespace Emby.Server.Implementations.Dto var isFirst = true; while (((!dto.HasLogo && logoLimit > 0) || (!dto.HasArtImage && artLimit > 0) || (!dto.HasThumb && thumbLimit > 0) || parent is Series) && - (parent = parent ?? (isFirst ? GetImageDisplayParent(item) ?? owner : parent)) != null) + (parent = parent ?? (isFirst ? GetImageDisplayParent(item, item) ?? owner : parent)) != null) { if (parent == null) { @@ -1560,7 +1567,7 @@ namespace Emby.Server.Implementations.Dto break; } - parent = GetImageDisplayParent(parent); + parent = GetImageDisplayParent(parent, item); } } diff --git a/Emby.Server.Implementations/Session/SessionManager.cs b/Emby.Server.Implementations/Session/SessionManager.cs index 6bfa90498..68ab25947 100644 --- a/Emby.Server.Implementations/Session/SessionManager.cs +++ b/Emby.Server.Implementations/Session/SessionManager.cs @@ -1622,6 +1622,8 @@ namespace Emby.Server.Implementations.Session TranscodingInfo = session.NowPlayingItem == null ? null : session.TranscodingInfo }; + dto.ServerId = _appHost.SystemId; + if (session.UserId.HasValue) { dto.UserId = session.UserId.Value.ToString("N"); diff --git a/MediaBrowser.Controller/Channels/Channel.cs b/MediaBrowser.Controller/Channels/Channel.cs index 8e2faa20e..c6e750a0c 100644 --- a/MediaBrowser.Controller/Channels/Channel.cs +++ b/MediaBrowser.Controller/Channels/Channel.cs @@ -32,6 +32,15 @@ namespace MediaBrowser.Controller.Channels return base.IsVisible(user); } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + [IgnoreDataMember] public override SourceType SourceType { diff --git a/MediaBrowser.Controller/Collections/ManualCollectionsFolder.cs b/MediaBrowser.Controller/Collections/ManualCollectionsFolder.cs index d2d28e504..160a788f1 100644 --- a/MediaBrowser.Controller/Collections/ManualCollectionsFolder.cs +++ b/MediaBrowser.Controller/Collections/ManualCollectionsFolder.cs @@ -1,4 +1,5 @@ using MediaBrowser.Controller.Entities; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Controller.Collections { @@ -18,11 +19,21 @@ namespace MediaBrowser.Controller.Collections } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + public bool IsHiddenFromUser(User user) { return !ConfigurationManager.Configuration.DisplayCollectionsView; } + [IgnoreDataMember] public override string CollectionType { get { return Model.Entities.CollectionType.BoxSets; } diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs index ebd83205e..7a37b2e02 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs @@ -35,6 +35,15 @@ namespace MediaBrowser.Controller.Entities.Audio } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + [IgnoreDataMember] public override bool SupportsCumulativeRunTimeTicks { diff --git a/MediaBrowser.Controller/Entities/BasePluginFolder.cs b/MediaBrowser.Controller/Entities/BasePluginFolder.cs index 7dbea317c..a61862f28 100644 --- a/MediaBrowser.Controller/Entities/BasePluginFolder.cs +++ b/MediaBrowser.Controller/Entities/BasePluginFolder.cs @@ -9,6 +9,7 @@ namespace MediaBrowser.Controller.Entities /// public abstract class BasePluginFolder : Folder, ICollectionFolder { + [IgnoreDataMember] public virtual string CollectionType { get { return null; } @@ -24,6 +25,15 @@ namespace MediaBrowser.Controller.Entities return true; } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + [IgnoreDataMember] public override bool SupportsPeople { diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index 0bd8606b9..d88b7da34 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -49,6 +49,15 @@ namespace MediaBrowser.Controller.Entities } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + public override bool CanDelete() { return false; diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index ea442ba1e..5d74cf218 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -65,6 +65,15 @@ namespace MediaBrowser.Controller.Entities get { return false; } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return true; + } + } + [IgnoreDataMember] public override bool SupportsPlayedStatus { diff --git a/MediaBrowser.Controller/Entities/GameSystem.cs b/MediaBrowser.Controller/Entities/GameSystem.cs index d8879155a..bbaec14a1 100644 --- a/MediaBrowser.Controller/Entities/GameSystem.cs +++ b/MediaBrowser.Controller/Entities/GameSystem.cs @@ -35,6 +35,15 @@ namespace MediaBrowser.Controller.Entities } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + /// /// Gets or sets the game system. /// diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs index 8d440e51b..071ed405f 100644 --- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs +++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs @@ -29,6 +29,7 @@ namespace MediaBrowser.Controller.Entities.Movies Shares = new List(); } + [IgnoreDataMember] protected override bool FilterLinkedChildrenPerUser { get @@ -37,6 +38,15 @@ namespace MediaBrowser.Controller.Entities.Movies } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + public List LocalTrailerIds { get; set; } public List RemoteTrailerIds { get; set; } diff --git a/MediaBrowser.Controller/Entities/PhotoAlbum.cs b/MediaBrowser.Controller/Entities/PhotoAlbum.cs index dd3cd98fb..af9d8c801 100644 --- a/MediaBrowser.Controller/Entities/PhotoAlbum.cs +++ b/MediaBrowser.Controller/Entities/PhotoAlbum.cs @@ -21,5 +21,14 @@ namespace MediaBrowser.Controller.Entities return false; } } + + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } } } diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index 1e4b3fdad..8b73b80b0 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -53,6 +53,15 @@ namespace MediaBrowser.Controller.Entities.TV } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + public List LocalTrailerIds { get; set; } public List RemoteTrailerIds { get; set; } diff --git a/MediaBrowser.Controller/Entities/UserRootFolder.cs b/MediaBrowser.Controller/Entities/UserRootFolder.cs index 3e4931e77..d35156345 100644 --- a/MediaBrowser.Controller/Entities/UserRootFolder.cs +++ b/MediaBrowser.Controller/Entities/UserRootFolder.cs @@ -33,6 +33,15 @@ namespace MediaBrowser.Controller.Entities } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + [IgnoreDataMember] public override bool SupportsPlayedStatus { diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs index 27be696eb..0d2d69c94 100644 --- a/MediaBrowser.Controller/Entities/UserView.cs +++ b/MediaBrowser.Controller/Entities/UserView.cs @@ -40,6 +40,15 @@ namespace MediaBrowser.Controller.Entities return list; } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + [IgnoreDataMember] public override bool SupportsPlayedStatus { diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index b6887940e..7978f4761 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -43,6 +43,15 @@ namespace MediaBrowser.Controller.Entities } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return true; + } + } + [IgnoreDataMember] public override bool SupportsPositionTicksResume { diff --git a/MediaBrowser.Controller/LiveTv/RecordingGroup.cs b/MediaBrowser.Controller/LiveTv/RecordingGroup.cs index b54ca8974..3ee061360 100644 --- a/MediaBrowser.Controller/LiveTv/RecordingGroup.cs +++ b/MediaBrowser.Controller/LiveTv/RecordingGroup.cs @@ -26,6 +26,15 @@ namespace MediaBrowser.Controller.LiveTv } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + [IgnoreDataMember] public override SourceType SourceType { diff --git a/MediaBrowser.Controller/Playlists/Playlist.cs b/MediaBrowser.Controller/Playlists/Playlist.cs index 854f8d7a2..c992ac56a 100644 --- a/MediaBrowser.Controller/Playlists/Playlist.cs +++ b/MediaBrowser.Controller/Playlists/Playlist.cs @@ -32,6 +32,15 @@ namespace MediaBrowser.Controller.Playlists } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + [IgnoreDataMember] public override bool SupportsPlayedStatus { diff --git a/MediaBrowser.Model/Session/PlaystateCommand.cs b/MediaBrowser.Model/Session/PlaystateCommand.cs index 2af4f26e3..3b70d5454 100644 --- a/MediaBrowser.Model/Session/PlaystateCommand.cs +++ b/MediaBrowser.Model/Session/PlaystateCommand.cs @@ -37,6 +37,7 @@ namespace MediaBrowser.Model.Session /// /// The fast forward /// - FastForward + FastForward, + PlayPause } } \ No newline at end of file diff --git a/MediaBrowser.Model/Session/SessionInfoDto.cs b/MediaBrowser.Model/Session/SessionInfoDto.cs index b21a089aa..3081d7ee3 100644 --- a/MediaBrowser.Model/Session/SessionInfoDto.cs +++ b/MediaBrowser.Model/Session/SessionInfoDto.cs @@ -26,6 +26,8 @@ namespace MediaBrowser.Model.Session /// The id. public string Id { get; set; } + public string ServerId { get; set; } + /// /// Gets or sets the user id. /// diff --git a/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs b/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs index 57254eed4..ae700e250 100644 --- a/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs +++ b/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs @@ -33,6 +33,15 @@ namespace MediaBrowser.Server.Implementations.Devices get { return Model.Entities.CollectionType.Photos; } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + public override string GetClientTypeName() { return typeof(CollectionFolder).Name; diff --git a/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs b/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs index bd16dc2e9..236dbde9c 100644 --- a/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs +++ b/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs @@ -37,6 +37,15 @@ namespace MediaBrowser.Server.Implementations.Playlists } } + [IgnoreDataMember] + public override bool SupportsInheritedParentImages + { + get + { + return false; + } + } + [IgnoreDataMember] public override string CollectionType { diff --git a/SharedVersion.cs b/SharedVersion.cs index d71364148..1af2abc27 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,3 +1,3 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.20.16")] +[assembly: AssemblyVersion("3.2.20.17")]