diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-01 13:26:31 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-01 13:26:31 -0500 |
| commit | b9d17c9bc765a0c59d81db6277300a6860bf8421 (patch) | |
| tree | 8a7c538cb73c27b7e06f0055ce4f0bb45175e7aa /MediaBrowser.Controller/Entities | |
| parent | 88b638fbd69ed99bde7065f66af433b015977cb7 (diff) | |
add more methods to file system interface
Diffstat (limited to 'MediaBrowser.Controller/Entities')
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 27 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 125 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/IHasImages.cs | 6 |
3 files changed, 79 insertions, 79 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 11562b3d7..dbda4a243 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -156,7 +156,7 @@ namespace MediaBrowser.Controller.Entities public DateTime DateModified { get; set; } public DateTime DateLastSaved { get; set; } - + /// <summary> /// The logger /// </summary> @@ -327,21 +327,18 @@ namespace MediaBrowser.Controller.Entities // When resolving the root, we need it's grandchildren (children of user views) var flattenFolderDepth = isPhysicalRoot ? 2 : 0; - args.FileSystemDictionary = FileData.GetFilteredFileSystemEntries(args.Path, FileSystem, Logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf); + var fileSystemDictionary = FileData.GetFilteredFileSystemEntries(args.Path, FileSystem, Logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf); // Need to remove subpaths that may have been resolved from shortcuts // Example: if \\server\movies exists, then strip out \\server\movies\action if (isPhysicalRoot) { - var paths = args.FileSystemDictionary.Keys.ToList(); + var paths = LibraryManager.NormalizeRootPathList(fileSystemDictionary.Keys); - foreach (var subPath in paths - .Where(subPath => !subPath.EndsWith(":\\", StringComparison.OrdinalIgnoreCase) && paths.Any(i => subPath.StartsWith(i.TrimEnd(System.IO.Path.DirectorySeparatorChar) + System.IO.Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase)))) - { - Logger.Info("Ignoring duplicate path: {0}", subPath); - args.FileSystemDictionary.Remove(subPath); - } + fileSystemDictionary = paths.Select(i => (FileSystemInfo)new DirectoryInfo(i)).ToDictionary(i => i.FullName); } + + args.FileSystemDictionary = fileSystemDictionary; } //update our dates @@ -1016,14 +1013,18 @@ namespace MediaBrowser.Controller.Entities return lang; } + public virtual bool IsSaveLocalMetadataEnabled() + { + return ConfigurationManager.Configuration.SaveLocalMeta; + } + /// <summary> /// Determines if a given user has access to this item /// </summary> /// <param name="user">The user.</param> - /// <param name="localizationManager">The localization manager.</param> /// <returns><c>true</c> if [is parental allowed] [the specified user]; otherwise, <c>false</c>.</returns> /// <exception cref="System.ArgumentNullException">user</exception> - public bool IsParentalAllowed(User user, ILocalizationManager localizationManager) + public bool IsParentalAllowed(User user) { if (user == null) { @@ -1049,7 +1050,7 @@ namespace MediaBrowser.Controller.Entities return !GetBlockUnratedValue(user.Configuration); } - var value = localizationManager.GetRatingLevel(rating); + var value = LocalizationManager.GetRatingLevel(rating); // Could not determine the integer value if (!value.HasValue) @@ -1084,7 +1085,7 @@ namespace MediaBrowser.Controller.Entities throw new ArgumentNullException("user"); } - return IsParentalAllowed(user, LocalizationManager); + return IsParentalAllowed(user); } /// <summary> diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 912b8fa93..a85157a26 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -519,85 +519,84 @@ namespace MediaBrowser.Controller.Entities await Task.WhenAll(tasks).ConfigureAwait(false); } - Tuple<BaseItem, bool> currentTuple = tuple; - - tasks.Add(Task.Run(async () => - { - cancellationToken.ThrowIfCancellationRequested(); - - var child = currentTuple.Item1; - try - { - //refresh it - await child.RefreshMetadata(cancellationToken, forceSave: currentTuple.Item2, forceRefresh: forceRefreshMetadata, resetResolveArgs: false).ConfigureAwait(false); - } - catch (IOException ex) - { - Logger.ErrorException("Error refreshing {0}", ex, child.Path ?? child.Name); - } + tasks.Add(RefreshChild(tuple, progress, percentages, list.Count, cancellationToken, recursive, forceRefreshMetadata)); + } - // Refresh children if a folder and the item changed or recursive is set to true - var refreshChildren = child.IsFolder && (currentTuple.Item2 || (recursive.HasValue && recursive.Value)); + cancellationToken.ThrowIfCancellationRequested(); - if (refreshChildren) - { - // Don't refresh children if explicitly set to false - if (recursive.HasValue && recursive.Value == false) - { - refreshChildren = false; - } - } + await Task.WhenAll(tasks).ConfigureAwait(false); + } - if (refreshChildren) - { - cancellationToken.ThrowIfCancellationRequested(); + private async Task RefreshChild(Tuple<BaseItem, bool> currentTuple, IProgress<double> progress, Dictionary<Guid, double> percentages, int childCount, CancellationToken cancellationToken, bool? recursive, bool forceRefreshMetadata = false) + { + cancellationToken.ThrowIfCancellationRequested(); - var innerProgress = new ActionableProgress<double>(); + var child = currentTuple.Item1; + try + { + //refresh it + await child.RefreshMetadata(cancellationToken, forceSave: currentTuple.Item2, forceRefresh: forceRefreshMetadata, resetResolveArgs: false).ConfigureAwait(false); + } + catch (IOException ex) + { + Logger.ErrorException("Error refreshing {0}", ex, child.Path ?? child.Name); + } - innerProgress.RegisterAction(p => - { - lock (percentages) - { - percentages[child.Id] = p / 100; + // Refresh children if a folder and the item changed or recursive is set to true + var refreshChildren = child.IsFolder && (currentTuple.Item2 || (recursive.HasValue && recursive.Value)); - var percent = percentages.Values.Sum(); - percent /= list.Count; + if (refreshChildren) + { + // Don't refresh children if explicitly set to false + if (recursive.HasValue && recursive.Value == false) + { + refreshChildren = false; + } + } - progress.Report((90 * percent) + 10); - } - }); + if (refreshChildren) + { + cancellationToken.ThrowIfCancellationRequested(); - await ((Folder)child).ValidateChildren(innerProgress, cancellationToken, recursive, forceRefreshMetadata).ConfigureAwait(false); + var innerProgress = new ActionableProgress<double>(); - try - { - // Some folder providers are unable to refresh until children have been refreshed. - await child.RefreshMetadata(cancellationToken, resetResolveArgs: false).ConfigureAwait(false); - } - catch (IOException ex) - { - Logger.ErrorException("Error refreshing {0}", ex, child.Path ?? child.Name); - } - } - else + innerProgress.RegisterAction(p => + { + lock (percentages) { - lock (percentages) - { - percentages[child.Id] = 1; + percentages[child.Id] = p / 100; - var percent = percentages.Values.Sum(); - percent /= list.Count; + var percent = percentages.Values.Sum(); + percent /= childCount; - progress.Report((90 * percent) + 10); - } + progress.Report((90 * percent) + 10); } + }); - }, cancellationToken)); + await ((Folder)child).ValidateChildren(innerProgress, cancellationToken, recursive, forceRefreshMetadata).ConfigureAwait(false); + + try + { + // Some folder providers are unable to refresh until children have been refreshed. + await child.RefreshMetadata(cancellationToken, resetResolveArgs: false).ConfigureAwait(false); + } + catch (IOException ex) + { + Logger.ErrorException("Error refreshing {0}", ex, child.Path ?? child.Name); + } } + else + { + lock (percentages) + { + percentages[child.Id] = 1; - cancellationToken.ThrowIfCancellationRequested(); + var percent = percentages.Values.Sum(); + percent /= childCount; - await Task.WhenAll(tasks).ConfigureAwait(false); + progress.Report((90 * percent) + 10); + } + } } /// <summary> @@ -646,7 +645,7 @@ namespace MediaBrowser.Controller.Entities private bool ContainsPath(string parent, string path) { - return string.Equals(parent, path, StringComparison.OrdinalIgnoreCase) || path.IndexOf(parent.TrimEnd(System.IO.Path.DirectorySeparatorChar) + System.IO.Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase) != -1; + return string.Equals(parent, path, StringComparison.OrdinalIgnoreCase) || FileSystem.ContainsSubPath(parent, path); } /// <summary> diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs index d800acd9b..a7cd76a66 100644 --- a/MediaBrowser.Controller/Entities/IHasImages.cs +++ b/MediaBrowser.Controller/Entities/IHasImages.cs @@ -16,8 +16,8 @@ namespace MediaBrowser.Controller.Entities /// Gets the path. /// </summary> /// <value>The path.</value> - string Path { get; } - + string Path { get; set; } + /// <summary> /// Gets the identifier. /// </summary> @@ -100,7 +100,7 @@ namespace MediaBrowser.Controller.Entities { return item.HasImage(imageType, 0); } - + /// <summary> /// Sets the image path. /// </summary> |
