From 7f5a4c2d4e3d8e1881dae0403367e35ad5699eaf Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 8 Feb 2014 17:38:02 -0500 Subject: added item type to refresh info --- .../Entities/AggregateFolder.cs | 7 ++-- .../Entities/Audio/MusicArtist.cs | 14 ++------ MediaBrowser.Controller/Entities/BaseItem.cs | 38 ++++++---------------- .../Entities/CollectionFolder.cs | 6 ++-- MediaBrowser.Controller/Entities/Folder.cs | 28 +++++++++------- MediaBrowser.Controller/Entities/IHasImages.cs | 3 +- MediaBrowser.Controller/Entities/Movies/Movie.cs | 2 +- MediaBrowser.Controller/Entities/TV/Season.cs | 8 ++++- MediaBrowser.Controller/Entities/UserRootFolder.cs | 5 +-- MediaBrowser.Controller/Entities/Video.cs | 2 +- 10 files changed, 50 insertions(+), 63 deletions(-) (limited to 'MediaBrowser.Controller/Entities') diff --git a/MediaBrowser.Controller/Entities/AggregateFolder.cs b/MediaBrowser.Controller/Entities/AggregateFolder.cs index ef455846e7..f791f16082 100644 --- a/MediaBrowser.Controller/Entities/AggregateFolder.cs +++ b/MediaBrowser.Controller/Entities/AggregateFolder.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization; +using MediaBrowser.Controller.Providers; namespace MediaBrowser.Controller.Entities { @@ -56,7 +57,7 @@ namespace MediaBrowser.Controller.Entities public List PhysicalLocationsList { get; set; } - protected override IEnumerable GetFileSystemChildren() + protected override IEnumerable GetFileSystemChildren(DirectoryService directoryService) { return CreateResolveArgs().FileSystemChildren; } @@ -118,9 +119,9 @@ namespace MediaBrowser.Controller.Entities /// Get the children of this folder from the actual file system /// /// IEnumerable{BaseItem}. - protected override IEnumerable GetNonCachedChildren() + protected override IEnumerable GetNonCachedChildren(DirectoryService directoryService) { - return base.GetNonCachedChildren().Concat(_virtualChildren); + return base.GetNonCachedChildren(directoryService).Concat(_virtualChildren); } /// diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs index 42bfe9160e..87551ef7b3 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs @@ -52,7 +52,7 @@ namespace MediaBrowser.Controller.Entities.Audio } private readonly Task _cachedTask = Task.FromResult(true); - protected override Task ValidateChildrenInternal(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions) + protected override Task ValidateChildrenInternal(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, DirectoryService directoryService) { if (IsAccessedByName) { @@ -60,17 +60,7 @@ namespace MediaBrowser.Controller.Entities.Audio return _cachedTask; } - return base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions); - } - - public override string GetClientTypeName() - { - if (IsAccessedByName) - { - //return "Artist"; - } - - return base.GetClientTypeName(); + return base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService); } public MusicArtist() diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index b3b6361a71..ad997779d1 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -565,8 +565,10 @@ namespace MediaBrowser.Controller.Entities if (IsFolder || Parent != null) { + options.DirectoryService = options.DirectoryService ?? new DirectoryService(Logger); + var files = locationType == LocationType.FileSystem || locationType == LocationType.Offline ? - GetFileSystemChildren().ToList() : + GetFileSystemChildren(options.DirectoryService).ToList() : new List(); await BeforeRefreshMetadata(options, files, cancellationToken).ConfigureAwait(false); @@ -609,11 +611,11 @@ namespace MediaBrowser.Controller.Entities } } - protected virtual IEnumerable GetFileSystemChildren() + protected virtual IEnumerable GetFileSystemChildren(DirectoryService directoryService) { var path = ContainingFolderPath; - return new DirectoryInfo(path).EnumerateFileSystemInfos("*", SearchOption.TopDirectoryOnly); + return directoryService.GetFileSystemEntries(path); } private async Task RefreshLocalTrailers(IHasTrailers item, MetadataRefreshOptions options, List fileSystemChildren, CancellationToken cancellationToken) @@ -850,29 +852,6 @@ namespace MediaBrowser.Controller.Entities return IsParentalAllowed(user); } - /// - /// Finds the particular item by searching through our parents and, if not found there, loading from repo - /// - /// The id. - /// BaseItem. - /// - protected BaseItem FindParentItem(Guid id) - { - if (id == Guid.Empty) - { - throw new ArgumentException(); - } - - var parent = Parent; - while (parent != null && !parent.IsRoot) - { - if (parent.Id == id) return parent; - parent = parent.Parent; - } - - return null; - } - /// /// Gets a value indicating whether this instance is folder. /// @@ -1226,10 +1205,13 @@ namespace MediaBrowser.Controller.Entities /// /// Validates that images within the item are still on the file system /// - public bool ValidateImages() + public bool ValidateImages(DirectoryService directoryService) { + var allDirectories = ImageInfos.Select(i => System.IO.Path.GetDirectoryName(i.Path)).Distinct(StringComparer.OrdinalIgnoreCase).ToList(); + var allFiles = allDirectories.SelectMany(directoryService.GetFiles).Select(i => i.FullName).ToList(); + var deletedImages = ImageInfos - .Where(image => !File.Exists(image.Path)) + .Where(image => !allFiles.Contains(image.Path, StringComparer.OrdinalIgnoreCase)) .ToList(); if (deletedImages.Count > 0) diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index f8d9c66c7b..eb442bf6fe 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -1,5 +1,6 @@ using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Providers; using System; using System.Collections.Generic; using System.IO; @@ -7,7 +8,6 @@ using System.Linq; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Controller.Providers; namespace MediaBrowser.Controller.Entities { @@ -61,7 +61,7 @@ namespace MediaBrowser.Controller.Entities public List PhysicalLocationsList { get; set; } - protected override IEnumerable GetFileSystemChildren() + protected override IEnumerable GetFileSystemChildren(DirectoryService directoryService) { return CreateResolveArgs().FileSystemChildren; } @@ -120,7 +120,7 @@ namespace MediaBrowser.Controller.Entities /// if set to true [refresh child metadata]. /// The refresh options. /// Task. - protected override Task ValidateChildrenInternal(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions) + protected override Task ValidateChildrenInternal(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, DirectoryService directoryService) { CreateResolveArgs(); ResetDynamicChildren(); diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 8fae9629be..019361f159 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -309,15 +309,19 @@ namespace MediaBrowser.Controller.Entities /// Task. public Task ValidateChildren(IProgress progress, CancellationToken cancellationToken, bool? recursive = null, bool forceRefreshMetadata = false) { + var directoryService = new DirectoryService(Logger); + return ValidateChildrenWithCancellationSupport(progress, cancellationToken, recursive ?? true, true, new MetadataRefreshOptions { - ReplaceAllMetadata = forceRefreshMetadata - }); + ReplaceAllMetadata = forceRefreshMetadata, + DirectoryService = directoryService + + }, directoryService); } - private async Task ValidateChildrenWithCancellationSupport(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions) + private async Task ValidateChildrenWithCancellationSupport(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, DirectoryService directoryService) { cancellationToken.ThrowIfCancellationRequested(); @@ -337,7 +341,7 @@ namespace MediaBrowser.Controller.Entities var linkedCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(innerCancellationTokenSource.Token, cancellationToken); - await ValidateChildrenInternal(progress, linkedCancellationTokenSource.Token, recursive, refreshChildMetadata, refreshOptions).ConfigureAwait(false); + await ValidateChildrenInternal(progress, linkedCancellationTokenSource.Token, recursive, refreshChildMetadata, refreshOptions, directoryService).ConfigureAwait(false); } catch (OperationCanceledException ex) { @@ -369,8 +373,9 @@ namespace MediaBrowser.Controller.Entities /// if set to true [recursive]. /// if set to true [refresh child metadata]. /// The refresh options. + /// The directory service. /// Task. - protected async virtual Task ValidateChildrenInternal(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions) + protected async virtual Task ValidateChildrenInternal(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, DirectoryService directoryService) { var locationType = LocationType; @@ -384,7 +389,7 @@ namespace MediaBrowser.Controller.Entities try { - nonCachedChildren = GetNonCachedChildren(); + nonCachedChildren = GetNonCachedChildren(directoryService); } catch (IOException ex) { @@ -482,7 +487,7 @@ namespace MediaBrowser.Controller.Entities if (recursive) { - await ValidateSubFolders(ActualChildren.OfType().ToList(), progress, cancellationToken).ConfigureAwait(false); + await ValidateSubFolders(ActualChildren.OfType().ToList(), directoryService, progress, cancellationToken).ConfigureAwait(false); } progress.Report(20); @@ -586,10 +591,11 @@ namespace MediaBrowser.Controller.Entities /// Refreshes the children. /// /// The children. + /// The directory service. /// The progress. /// The cancellation token. /// Task. - private async Task ValidateSubFolders(IList children, IProgress progress, CancellationToken cancellationToken) + private async Task ValidateSubFolders(IList children, DirectoryService directoryService, IProgress progress, CancellationToken cancellationToken) { var list = children; var childCount = list.Count; @@ -617,7 +623,7 @@ namespace MediaBrowser.Controller.Entities } }); - await child.ValidateChildrenWithCancellationSupport(innerProgress, cancellationToken, true, false, null) + await child.ValidateChildrenWithCancellationSupport(innerProgress, cancellationToken, true, false, null, directoryService) .ConfigureAwait(false); } } @@ -675,9 +681,9 @@ namespace MediaBrowser.Controller.Entities /// Get the children of this folder from the actual file system /// /// IEnumerable{BaseItem}. - protected virtual IEnumerable GetNonCachedChildren() + protected virtual IEnumerable GetNonCachedChildren(DirectoryService directoryService) { - return LibraryManager.ResolvePaths(GetFileSystemChildren(), this); + return LibraryManager.ResolvePaths(GetFileSystemChildren(directoryService), this); } /// diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs index 62ef0a85a3..053938f339 100644 --- a/MediaBrowser.Controller/Entities/IHasImages.cs +++ b/MediaBrowser.Controller/Entities/IHasImages.cs @@ -1,4 +1,5 @@ using System.IO; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; @@ -108,7 +109,7 @@ namespace MediaBrowser.Controller.Entities /// /// Validates the images and returns true or false indicating if any were removed. /// - bool ValidateImages(); + bool ValidateImages(DirectoryService directoryService); /// /// Gets a value indicating whether this instance is owned item. diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index 7214f0f6f3..50cf31068b 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -113,7 +113,7 @@ namespace MediaBrowser.Controller.Entities.Movies } } - private async Task RefreshSpecialFeatures(MetadataRefreshOptions options, List fileSystemChildren, CancellationToken cancellationToken) + private async Task RefreshSpecialFeatures(MetadataRefreshOptions options, IEnumerable fileSystemChildren, CancellationToken cancellationToken) { var newItems = LoadSpecialFeatures(fileSystemChildren).ToList(); var newItemIds = newItems.Select(i => i.Id).ToList(); diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index d266f1fded..ba79a95cc5 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -1,4 +1,5 @@ using MediaBrowser.Controller.Localization; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; @@ -11,7 +12,7 @@ namespace MediaBrowser.Controller.Entities.TV /// /// Class Season /// - public class Season : Folder, IHasSeries + public class Season : Folder, IHasSeries, IHasLookupInfo { /// @@ -241,5 +242,10 @@ namespace MediaBrowser.Controller.Entities.TV return series == null ? null : series.Name; } } + + public SeasonInfo GetLookupInfo() + { + return GetItemLookupInfo(); + } } } diff --git a/MediaBrowser.Controller/Entities/UserRootFolder.cs b/MediaBrowser.Controller/Entities/UserRootFolder.cs index 8fe5f43f1a..4128c5d95c 100644 --- a/MediaBrowser.Controller/Entities/UserRootFolder.cs +++ b/MediaBrowser.Controller/Entities/UserRootFolder.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using MediaBrowser.Controller.Providers; namespace MediaBrowser.Controller.Entities { @@ -13,9 +14,9 @@ namespace MediaBrowser.Controller.Entities /// Get the children of this folder from the actual file system /// /// IEnumerable{BaseItem}. - protected override IEnumerable GetNonCachedChildren() + protected override IEnumerable GetNonCachedChildren(DirectoryService directoryService) { - return base.GetNonCachedChildren().Concat(LibraryManager.RootFolder.VirtualChildren); + return base.GetNonCachedChildren(directoryService).Concat(LibraryManager.RootFolder.VirtualChildren); } } } diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index e7bee35f50..e2275fde72 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -181,7 +181,7 @@ namespace MediaBrowser.Controller.Entities /// The file system children. /// The cancellation token. /// Task{System.Boolean}. - private async Task RefreshAdditionalParts(MetadataRefreshOptions options, List fileSystemChildren, CancellationToken cancellationToken) + private async Task RefreshAdditionalParts(MetadataRefreshOptions options, IEnumerable fileSystemChildren, CancellationToken cancellationToken) { var newItems = LoadAdditionalParts(fileSystemChildren).ToList(); -- cgit v1.2.3