diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs index 84d7ea40da..d0378821f6 100644 --- a/MediaBrowser.Controller/Entities/UserView.cs +++ b/MediaBrowser.Controller/Entities/UserView.cs @@ -16,6 +16,11 @@ namespace MediaBrowser.Controller.Entities public static ITVSeriesManager TVSeriesManager; + public bool ContainsDynamicCategories(User user) + { + return true; + } + public override Task> GetItems(InternalItemsQuery query) { var parent = this as Folder; diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index be3cd99be8..113a4c6f44 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -67,6 +67,7 @@ namespace MediaBrowser.Model.Dto public float? Metascore { get; set; } public bool? IsUnidentified { get; set; } + public bool? HasDynamicCategories { get; set; } public int? AnimeSeriesIndex { get; set; } diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 75037159c2..48408b4ea2 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -395,6 +395,18 @@ namespace MediaBrowser.Server.Implementations.Dto } } } + + var userView = item as UserView; + if (userView != null) + { + dto.HasDynamicCategories = userView.ContainsDynamicCategories(user); + } + + var collectionFolder = item as ICollectionFolder; + if (collectionFolder != null) + { + dto.HasDynamicCategories = false; + } } private int GetChildCount(Folder folder, User user) diff --git a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs index 0407510a84..70c366bf52 100644 --- a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs +++ b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs @@ -143,7 +143,7 @@ namespace MediaBrowser.Server.Implementations.Sync var fileTransferProgress = new ActionableProgress(); fileTransferProgress.RegisterAction(pct => progress.Report(pct * .92)); - var localItem = CreateLocalItem(provider, target, libraryItem, serverId, jobItem.OriginalFileName); + var localItem = CreateLocalItem(provider, jobItem.SyncJobId, target, libraryItem, serverId, jobItem.OriginalFileName); await _syncManager.ReportSyncJobItemTransferBeginning(internalSyncJobItem.Id); @@ -226,9 +226,9 @@ namespace MediaBrowser.Server.Implementations.Sync } } - public LocalItem CreateLocalItem(IServerSyncProvider provider, SyncTarget target, BaseItemDto libraryItem, string serverId, string originalFileName) + public LocalItem CreateLocalItem(IServerSyncProvider provider, string syncJobId, SyncTarget target, BaseItemDto libraryItem, string serverId, string originalFileName) { - var path = GetDirectoryPath(provider, libraryItem, serverId); + var path = GetDirectoryPath(provider, syncJobId, libraryItem, serverId); path.Add(GetLocalFileName(provider, libraryItem, originalFileName)); var localPath = provider.GetFullPath(path, target); @@ -249,21 +249,20 @@ namespace MediaBrowser.Server.Implementations.Sync }; } - private List GetDirectoryPath(IServerSyncProvider provider, BaseItemDto item, string serverId) + private List GetDirectoryPath(IServerSyncProvider provider, string syncJobId, BaseItemDto item, string serverId) { var parts = new List { - serverId + serverId, + syncJobId }; if (item.IsType("episode")) { parts.Add("TV"); - parts.Add(item.SeriesName); - - if (!string.IsNullOrWhiteSpace(item.SeasonName)) + if (!string.IsNullOrWhiteSpace(item.SeriesName)) { - parts.Add(item.SeasonName); + parts.Add(item.SeriesName); } } else if (item.IsVideo) @@ -302,7 +301,7 @@ namespace MediaBrowser.Server.Implementations.Sync { var filename = originalFileName; - if (string.IsNullOrEmpty(filename)) + if (string.IsNullOrWhiteSpace(filename)) { filename = item.Name; }