diff options
Diffstat (limited to 'MediaBrowser.Controller/Entities')
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 56 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 27 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/InternalItemsQuery.cs | 4 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/User.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/UserView.cs | 22 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/UserViewBuilder.cs | 73 |
6 files changed, 115 insertions, 77 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 594b5ca93..25e742e7c 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -62,6 +62,7 @@ namespace MediaBrowser.Controller.Entities /// Gets or sets the channel identifier. /// </summary> /// <value>The channel identifier.</value> + [IgnoreDataMember] public string ChannelId { get; set; } [IgnoreDataMember] @@ -183,7 +184,7 @@ namespace MediaBrowser.Controller.Entities { // Local trailer, special feature, theme video, etc. // An item that belongs to another item but is not part of the Parent-Child tree - return !IsFolder && Parent == null && LocationType == LocationType.FileSystem; + return !IsFolder && ParentId == Guid.Empty && LocationType == LocationType.FileSystem; } } @@ -331,25 +332,8 @@ namespace MediaBrowser.Controller.Entities return Name; } - /// <summary> - /// Returns true if this item should not attempt to fetch metadata - /// </summary> - /// <value><c>true</c> if [dont fetch meta]; otherwise, <c>false</c>.</value> - [Obsolete("Please use IsLocked instead of DontFetchMeta")] - public bool DontFetchMeta { get; set; } - [IgnoreDataMember] - public bool IsLocked - { - get - { - return DontFetchMeta; - } - set - { - DontFetchMeta = value; - } - } + public bool IsLocked { get; set; } public bool IsUnidentified { get; set; } @@ -484,7 +468,6 @@ namespace MediaBrowser.Controller.Entities public Guid ParentId { get; set; } - private Folder _parent; /// <summary> /// Gets or sets the parent. /// </summary> @@ -494,11 +477,6 @@ namespace MediaBrowser.Controller.Entities { get { - if (_parent != null) - { - return _parent; - } - if (ParentId != Guid.Empty) { return LibraryManager.GetItemById(ParentId) as Folder; @@ -506,12 +484,14 @@ namespace MediaBrowser.Controller.Entities return null; } - set { _parent = value; } + set + { + + } } public void SetParent(Folder parent) { - Parent = parent; ParentId = parent == null ? Guid.Empty : parent.Id; } @@ -558,6 +538,7 @@ namespace MediaBrowser.Controller.Entities /// Gets or sets the end date. /// </summary> /// <value>The end date.</value> + [IgnoreDataMember] public DateTime? EndDate { get; set; } /// <summary> @@ -582,6 +563,7 @@ namespace MediaBrowser.Controller.Entities /// Gets or sets the custom rating. /// </summary> /// <value>The custom rating.</value> + [IgnoreDataMember] public string CustomRating { get; set; } /// <summary> @@ -591,12 +573,6 @@ namespace MediaBrowser.Controller.Entities public string Overview { get; set; } /// <summary> - /// Gets or sets the people. - /// </summary> - /// <value>The people.</value> - public List<PersonInfo> People { get; set; } - - /// <summary> /// Gets or sets the studios. /// </summary> /// <value>The studios.</value> @@ -618,6 +594,7 @@ namespace MediaBrowser.Controller.Entities /// Gets or sets the community rating. /// </summary> /// <value>The community rating.</value> + [IgnoreDataMember] public float? CommunityRating { get; set; } /// <summary> @@ -643,6 +620,7 @@ namespace MediaBrowser.Controller.Entities /// This could be episode number, album track number, etc. /// </summary> /// <value>The index number.</value> + [IgnoreDataMember] public int? IndexNumber { get; set; } /// <summary> @@ -705,7 +683,7 @@ namespace MediaBrowser.Controller.Entities { var files = fileSystemChildren.OfType<DirectoryInfo>() .Where(i => string.Equals(i.Name, ThemeSongsFolderName, StringComparison.OrdinalIgnoreCase)) - .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly)) + .SelectMany(i => directoryService.GetFiles(i.FullName)) .ToList(); // Support plex/xbmc convention @@ -741,7 +719,7 @@ namespace MediaBrowser.Controller.Entities { var files = fileSystemChildren.OfType<DirectoryInfo>() .Where(i => string.Equals(i.Name, ThemeVideosFolderName, StringComparison.OrdinalIgnoreCase)) - .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly)); + .SelectMany(i => directoryService.GetFiles(i.FullName)); return LibraryManager.ResolvePaths(files, directoryService, null) .OfType<Video>() @@ -765,7 +743,7 @@ namespace MediaBrowser.Controller.Entities public Task RefreshMetadata(CancellationToken cancellationToken) { - return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService()), cancellationToken); + return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService(FileSystem)), cancellationToken); } /// <summary> @@ -1114,7 +1092,7 @@ namespace MediaBrowser.Controller.Entities // Could not determine the integer value if (!value.HasValue) { - return true; + return !GetBlockUnratedValue(user.Policy); } return value.Value <= maxAllowedRating.Value; @@ -1418,7 +1396,7 @@ namespace MediaBrowser.Controller.Entities /// <returns>Task.</returns> public virtual Task ChangedExternally() { - ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions()); + ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions(FileSystem)); return Task.FromResult(true); } @@ -1635,7 +1613,7 @@ namespace MediaBrowser.Controller.Entities var newImagePaths = images.Select(i => i.FullName).ToList(); var deleted = existingImages - .Where(i => !newImagePaths.Contains(i.Path, StringComparer.OrdinalIgnoreCase) && !File.Exists(i.Path)) + .Where(i => !newImagePaths.Contains(i.Path, StringComparer.OrdinalIgnoreCase) && !FileSystem.FileExists(i.Path)) .ToList(); ImageInfos = ImageInfos.Except(deleted).ToList(); diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index c3ac77328..4cdc4657e 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -48,7 +48,7 @@ namespace MediaBrowser.Controller.Entities [IgnoreDataMember] public virtual bool IsPreSorted { - get { return ConfigurationManager.Configuration.EnableWindowsShortcuts; } + get { return false; } } /// <summary> @@ -120,7 +120,7 @@ namespace MediaBrowser.Controller.Entities [IgnoreDataMember] protected virtual bool SupportsShortcutChildren { - get { return false; } + get { return ConfigurationManager.Configuration.EnableWindowsShortcuts; } } /// <summary> @@ -371,7 +371,7 @@ namespace MediaBrowser.Controller.Entities public Task ValidateChildren(IProgress<double> progress, CancellationToken cancellationToken) { - return ValidateChildren(progress, cancellationToken, new MetadataRefreshOptions(new DirectoryService())); + return ValidateChildren(progress, cancellationToken, new MetadataRefreshOptions(new DirectoryService(FileSystem))); } /// <summary> @@ -474,7 +474,7 @@ namespace MediaBrowser.Controller.Entities currentChild.DateModified = child.DateModified; } - currentChild.IsOffline = false; + await UpdateIsOffline(currentChild, false).ConfigureAwait(false); validChildren.Add(currentChild); } else @@ -509,12 +509,12 @@ namespace MediaBrowser.Controller.Entities else if (!string.IsNullOrEmpty(item.Path) && IsPathOffline(item.Path)) { - item.IsOffline = true; + await UpdateIsOffline(item, true).ConfigureAwait(false); validChildren.Add(item); } else { - item.IsOffline = false; + await UpdateIsOffline(item, false).ConfigureAwait(false); actualRemovals.Add(item); } } @@ -569,6 +569,17 @@ namespace MediaBrowser.Controller.Entities progress.Report(100); } + private Task UpdateIsOffline(BaseItem item, bool newValue) + { + if (item.IsOffline != newValue) + { + item.IsOffline = newValue; + return item.UpdateToRepository(ItemUpdateType.None, CancellationToken.None); + } + + return Task.FromResult(true); + } + private async Task RefreshMetadataRecursive(MetadataRefreshOptions refreshOptions, bool recursive, IProgress<double> progress, CancellationToken cancellationToken) { var children = ActualChildren.ToList(); @@ -693,7 +704,7 @@ namespace MediaBrowser.Controller.Entities /// <returns><c>true</c> if the specified path is offline; otherwise, <c>false</c>.</returns> private bool IsPathOffline(string path) { - if (File.Exists(path)) + if (FileSystem.FileExists(path)) { return false; } @@ -703,7 +714,7 @@ namespace MediaBrowser.Controller.Entities // Depending on whether the path is local or unc, it may return either null or '\' at the top while (!string.IsNullOrEmpty(path) && path.Length > 1) { - if (Directory.Exists(path)) + if (FileSystem.DirectoryExists(path)) { return false; } diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs index 0af4972f7..bde4d0f45 100644 --- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs +++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs @@ -98,7 +98,9 @@ namespace MediaBrowser.Controller.Entities public bool? IsCurrentSchema { get; set; } public bool? HasDeadParentId { get; set; } - + public bool? IsOffline { get; set; } + public LocationType? LocationType { get; set; } + public InternalItemsQuery() { Tags = new string[] { }; diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs index 71e3d1ce0..bf0f7a2a8 100644 --- a/MediaBrowser.Controller/Entities/User.cs +++ b/MediaBrowser.Controller/Entities/User.cs @@ -177,24 +177,24 @@ namespace MediaBrowser.Controller.Entities var oldConfigurationDirectory = ConfigurationDirectoryPath; // Exceptions will be thrown if these paths already exist - if (Directory.Exists(newConfigDirectory)) + if (FileSystem.DirectoryExists(newConfigDirectory)) { FileSystem.DeleteDirectory(newConfigDirectory, true); } - if (Directory.Exists(oldConfigurationDirectory)) + if (FileSystem.DirectoryExists(oldConfigurationDirectory)) { - Directory.Move(oldConfigurationDirectory, newConfigDirectory); + FileSystem.MoveDirectory(oldConfigurationDirectory, newConfigDirectory); } else { - Directory.CreateDirectory(newConfigDirectory); + FileSystem.CreateDirectory(newConfigDirectory); } } Name = newName; - return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService()) + return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService(FileSystem)) { ReplaceAllMetadata = true, ImageRefreshMode = ImageRefreshMode.FullRefresh, diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs index 488e54cc3..f4577435f 100644 --- a/MediaBrowser.Controller/Entities/UserView.cs +++ b/MediaBrowser.Controller/Entities/UserView.cs @@ -82,7 +82,27 @@ namespace MediaBrowser.Controller.Entities { CollectionType.Books, CollectionType.HomeVideos, - CollectionType.Photos + CollectionType.Photos, + CollectionType.Playlists, + CollectionType.BoxSets + }; + + var collectionFolder = folder as ICollectionFolder; + + if (collectionFolder == null) + { + return false; + } + + return standaloneTypes.Contains(collectionFolder.CollectionType ?? string.Empty); + } + + public static bool IsUserSpecific(Folder folder) + { + var standaloneTypes = new List<string> + { + CollectionType.Playlists, + CollectionType.BoxSets }; var collectionFolder = folder as ICollectionFolder; diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index cee5dadd2..e05b838d0 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -577,19 +577,9 @@ namespace MediaBrowser.Controller.Entities private async Task<QueryResult<BaseItem>> GetBoxsetView(Folder parent, User user, InternalItemsQuery query) { - return GetResult(GetMediaFolders(user).SelectMany(i => - { - var hasCollectionType = i as ICollectionFolder; - Func<BaseItem, bool> filter = b => b is BoxSet; - - if (hasCollectionType != null && string.Equals(hasCollectionType.CollectionType, CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase)) - { - return i.GetChildren(user, true).Where(filter); - } - - return i.GetRecursiveChildren(user, filter); + var collections = _collectionManager.GetCollections(user); - }), parent, query); + return GetResult(collections, parent, query); } private async Task<QueryResult<BaseItem>> GetPhotosView(Folder queryParent, User user, InternalItemsQuery query) @@ -1041,12 +1031,12 @@ namespace MediaBrowser.Controller.Entities return false; } - if (request.IsUnidentified.HasValue) + if (request.IsYearMismatched.HasValue) { return false; } - if (request.IsYearMismatched.HasValue) + if (request.IsUnidentified.HasValue) { return false; } @@ -1418,15 +1408,6 @@ namespace MediaBrowser.Controller.Entities } } - if (query.IsUnidentified.HasValue) - { - var val = query.IsUnidentified.Value; - if (item.IsUnidentified != val) - { - return false; - } - } - if (query.IsLocked.HasValue) { var val = query.IsLocked.Value; @@ -1448,6 +1429,15 @@ namespace MediaBrowser.Controller.Entities } } + if (query.IsUnidentified.HasValue) + { + var val = query.IsUnidentified.Value; + if (item.IsUnidentified != val) + { + return false; + } + } + if (query.HasImdbId.HasValue) { var filterValue = query.HasImdbId.Value; @@ -1808,6 +1798,13 @@ namespace MediaBrowser.Controller.Entities private IEnumerable<Folder> GetMediaFolders(User user) { + if (user == null) + { + return _libraryManager.RootFolder + .Children + .OfType<Folder>() + .Where(i => !UserView.IsExcludedFromGrouping(i)); + } return user.RootFolder .GetChildren(user, true, true) .OfType<Folder>() @@ -1816,6 +1813,16 @@ namespace MediaBrowser.Controller.Entities private IEnumerable<Folder> GetMediaFolders(User user, IEnumerable<string> viewTypes) { + if (user == null) + { + return GetMediaFolders(null) + .Where(i => + { + var folder = i as ICollectionFolder; + + return folder != null && viewTypes.Contains(folder.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase); + }); + } return GetMediaFolders(user) .Where(i => { @@ -1839,9 +1846,19 @@ namespace MediaBrowser.Controller.Entities { if (parent == null || parent is UserView) { + if (user == null) + { + return GetMediaFolders(null, viewTypes).SelectMany(i => i.GetRecursiveChildren()); + } + return GetMediaFolders(user, viewTypes).SelectMany(i => i.GetRecursiveChildren(user)); } + if (user == null) + { + return parent.GetRecursiveChildren(); + } + return parent.GetRecursiveChildren(user); } @@ -1849,9 +1866,19 @@ namespace MediaBrowser.Controller.Entities { if (parent == null || parent is UserView) { + if (user == null) + { + return GetMediaFolders(null, viewTypes).SelectMany(i => i.GetRecursiveChildren(filter)); + } + return GetMediaFolders(user, viewTypes).SelectMany(i => i.GetRecursiveChildren(user, filter)); } + if (user == null) + { + return parent.GetRecursiveChildren(filter); + } + return parent.GetRecursiveChildren(user, filter); } |
