aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Entities/AggregateFolder.cs4
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicArtist.cs2
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs53
-rw-r--r--MediaBrowser.Controller/Entities/CollectionFolder.cs5
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs18
-rw-r--r--MediaBrowser.Controller/Entities/IHasImages.cs17
-rw-r--r--MediaBrowser.Controller/Entities/IHasMetadata.cs12
-rw-r--r--MediaBrowser.Controller/Entities/Movies/Movie.cs8
-rw-r--r--MediaBrowser.Controller/Entities/TV/Episode.cs53
-rw-r--r--MediaBrowser.Controller/Entities/TV/Season.cs34
-rw-r--r--MediaBrowser.Controller/Entities/UserRootFolder.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Video.cs15
-rw-r--r--MediaBrowser.Controller/Library/ItemUpdateType.cs2
-rw-r--r--MediaBrowser.Controller/Providers/DirectoryService.cs11
-rw-r--r--MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/IHasChangeMonitor.cs3
-rw-r--r--MediaBrowser.Controller/Providers/ILocalImageProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs6
18 files changed, 205 insertions, 44 deletions
diff --git a/MediaBrowser.Controller/Entities/AggregateFolder.cs b/MediaBrowser.Controller/Entities/AggregateFolder.cs
index f791f16082..363b0a81b1 100644
--- a/MediaBrowser.Controller/Entities/AggregateFolder.cs
+++ b/MediaBrowser.Controller/Entities/AggregateFolder.cs
@@ -57,7 +57,7 @@ namespace MediaBrowser.Controller.Entities
public List<string> PhysicalLocationsList { get; set; }
- protected override IEnumerable<FileSystemInfo> GetFileSystemChildren(DirectoryService directoryService)
+ protected override IEnumerable<FileSystemInfo> GetFileSystemChildren(IDirectoryService directoryService)
{
return CreateResolveArgs().FileSystemChildren;
}
@@ -119,7 +119,7 @@ namespace MediaBrowser.Controller.Entities
/// Get the children of this folder from the actual file system
/// </summary>
/// <returns>IEnumerable{BaseItem}.</returns>
- protected override IEnumerable<BaseItem> GetNonCachedChildren(DirectoryService directoryService)
+ protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
{
return base.GetNonCachedChildren(directoryService).Concat(_virtualChildren);
}
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
index 87551ef7b3..2b5570a80c 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<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, DirectoryService directoryService)
+ protected override Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService)
{
if (IsAccessedByName)
{
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 72e7f5bf19..38f40ea482 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -563,6 +563,8 @@ namespace MediaBrowser.Controller.Entities
{
var locationType = LocationType;
+ var requiresSave = false;
+
if (IsFolder || Parent != null)
{
options.DirectoryService = options.DirectoryService ?? new DirectoryService(Logger);
@@ -571,13 +573,34 @@ namespace MediaBrowser.Controller.Entities
GetFileSystemChildren(options.DirectoryService).ToList() :
new List<FileSystemInfo>();
- await BeforeRefreshMetadata(options, files, cancellationToken).ConfigureAwait(false);
+ var ownedItemsChanged = await RefreshedOwnedItems(options, files, cancellationToken).ConfigureAwait(false);
+
+ if (ownedItemsChanged)
+ {
+ requiresSave = true;
+ }
}
+ var dateLastSaved = DateLastSaved;
+
await ProviderManager.RefreshMetadata(this, options, cancellationToken).ConfigureAwait(false);
+
+ // If it wasn't saved by the provider process, save now
+ if (requiresSave && dateLastSaved == DateLastSaved)
+ {
+ await UpdateToRepository(ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false);
+ }
}
- protected virtual async Task BeforeRefreshMetadata(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ /// <summary>
+ /// Refreshes owned items such as trailers, theme videos, special features, etc.
+ /// Returns true or false indicating if changes were found.
+ /// </summary>
+ /// <param name="options"></param>
+ /// <param name="fileSystemChildren"></param>
+ /// <param name="cancellationToken"></param>
+ /// <returns></returns>
+ protected virtual async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
{
var themeSongsChanged = false;
@@ -605,13 +628,10 @@ namespace MediaBrowser.Controller.Entities
}
}
- if (themeSongsChanged || themeVideosChanged || localTrailersChanged)
- {
- options.ForceSave = true;
- }
+ return themeSongsChanged || themeVideosChanged || localTrailersChanged;
}
- protected virtual IEnumerable<FileSystemInfo> GetFileSystemChildren(DirectoryService directoryService)
+ protected virtual IEnumerable<FileSystemInfo> GetFileSystemChildren(IDirectoryService directoryService)
{
var path = ContainingFolderPath;
@@ -1205,7 +1225,7 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Validates that images within the item are still on the file system
/// </summary>
- public bool ValidateImages(DirectoryService directoryService)
+ public bool ValidateImages(IDirectoryService 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();
@@ -1390,5 +1410,22 @@ namespace MediaBrowser.Controller.Entities
ParentIndexNumber = ParentIndexNumber
};
}
+
+ /// <summary>
+ /// This is called before any metadata refresh and returns ItemUpdateType indictating if changes were made, and what.
+ /// </summary>
+ /// <returns>ItemUpdateType.</returns>
+ public virtual ItemUpdateType BeforeMetadataRefresh()
+ {
+ var updateType = ItemUpdateType.None;
+
+ if (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Path))
+ {
+ Name = System.IO.Path.GetFileNameWithoutExtension(Path);
+ updateType = updateType | ItemUpdateType.MetadataEdit;
+ }
+
+ return updateType;
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs
index eb442bf6fe..25f42538cd 100644
--- a/MediaBrowser.Controller/Entities/CollectionFolder.cs
+++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs
@@ -61,7 +61,7 @@ namespace MediaBrowser.Controller.Entities
public List<string> PhysicalLocationsList { get; set; }
- protected override IEnumerable<FileSystemInfo> GetFileSystemChildren(DirectoryService directoryService)
+ protected override IEnumerable<FileSystemInfo> GetFileSystemChildren(IDirectoryService directoryService)
{
return CreateResolveArgs().FileSystemChildren;
}
@@ -119,8 +119,9 @@ namespace MediaBrowser.Controller.Entities
/// <param name="recursive">if set to <c>true</c> [recursive].</param>
/// <param name="refreshChildMetadata">if set to <c>true</c> [refresh child metadata].</param>
/// <param name="refreshOptions">The refresh options.</param>
+ /// <param name="directoryService">The directory service.</param>
/// <returns>Task.</returns>
- protected override Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, DirectoryService directoryService)
+ protected override Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService)
{
CreateResolveArgs();
ResetDynamicChildren();
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 933cf758c2..f0b044d435 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -319,7 +319,7 @@ namespace MediaBrowser.Controller.Entities
return ValidateChildrenWithCancellationSupport(progress, cancellationToken, recursive, true, metadataRefreshOptions, metadataRefreshOptions.DirectoryService);
}
- private async Task ValidateChildrenWithCancellationSupport(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, DirectoryService directoryService)
+ private async Task ValidateChildrenWithCancellationSupport(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService)
{
cancellationToken.ThrowIfCancellationRequested();
@@ -373,7 +373,7 @@ namespace MediaBrowser.Controller.Entities
/// <param name="refreshOptions">The refresh options.</param>
/// <param name="directoryService">The directory service.</param>
/// <returns>Task.</returns>
- protected async virtual Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, DirectoryService directoryService)
+ protected async virtual Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService)
{
var locationType = LocationType;
@@ -593,7 +593,7 @@ namespace MediaBrowser.Controller.Entities
/// <param name="progress">The progress.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
- private async Task ValidateSubFolders(IList<Folder> children, DirectoryService directoryService, IProgress<double> progress, CancellationToken cancellationToken)
+ private async Task ValidateSubFolders(IList<Folder> children, IDirectoryService directoryService, IProgress<double> progress, CancellationToken cancellationToken)
{
var list = children;
var childCount = list.Count;
@@ -679,7 +679,7 @@ namespace MediaBrowser.Controller.Entities
/// Get the children of this folder from the actual file system
/// </summary>
/// <returns>IEnumerable{BaseItem}.</returns>
- protected virtual IEnumerable<BaseItem> GetNonCachedChildren(DirectoryService directoryService)
+ protected virtual IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
{
return LibraryManager.ResolvePaths<BaseItem>(GetFileSystemChildren(directoryService), this);
}
@@ -927,17 +927,21 @@ namespace MediaBrowser.Controller.Entities
return item;
}
- protected override Task BeforeRefreshMetadata(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ protected override async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
{
+ var changesFound = false;
+
if (SupportsShortcutChildren && LocationType == LocationType.FileSystem)
{
if (RefreshLinkedChildren(fileSystemChildren))
{
- options.ForceSave = true;
+ changesFound = true;
}
}
- return base.BeforeRefreshMetadata(options, fileSystemChildren, cancellationToken);
+ var baseHasChanges = await base.RefreshedOwnedItems(options, fileSystemChildren, cancellationToken).ConfigureAwait(false);
+
+ return baseHasChanges || changesFound;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs
index 053938f339..eee1693638 100644
--- a/MediaBrowser.Controller/Entities/IHasImages.cs
+++ b/MediaBrowser.Controller/Entities/IHasImages.cs
@@ -1,8 +1,8 @@
-using System.IO;
-using MediaBrowser.Controller.Providers;
+using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
+using System.IO;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Entities
@@ -109,7 +109,7 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Validates the images and returns true or false indicating if any were removed.
/// </summary>
- bool ValidateImages(DirectoryService directoryService);
+ bool ValidateImages(IDirectoryService directoryService);
/// <summary>
/// Gets a value indicating whether this instance is owned item.
@@ -166,5 +166,16 @@ namespace MediaBrowser.Controller.Entities
{
item.SetImagePath(imageType, 0, file);
}
+
+ /// <summary>
+ /// Sets the image path.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="imageType">Type of the image.</param>
+ /// <param name="file">The file.</param>
+ public static void SetImagePath(this IHasImages item, ImageType imageType, string file)
+ {
+ item.SetImagePath(imageType, new FileInfo(file));
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/IHasMetadata.cs b/MediaBrowser.Controller/Entities/IHasMetadata.cs
index 1a1956c56e..0285b6749b 100644
--- a/MediaBrowser.Controller/Entities/IHasMetadata.cs
+++ b/MediaBrowser.Controller/Entities/IHasMetadata.cs
@@ -1,9 +1,9 @@
-using System;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Model.Entities;
+using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Entities
{
@@ -49,5 +49,11 @@ namespace MediaBrowser.Controller.Entities
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken);
+
+ /// <summary>
+ /// This is called before any metadata refresh and returns ItemUpdateType indictating if changes were made, and what.
+ /// </summary>
+ /// <returns>ItemUpdateType.</returns>
+ ItemUpdateType BeforeMetadataRefresh();
}
}
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs
index 50cf31068b..8eba21df01 100644
--- a/MediaBrowser.Controller/Entities/Movies/Movie.cs
+++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs
@@ -96,9 +96,9 @@ namespace MediaBrowser.Controller.Entities.Movies
return this.GetProviderId(MetadataProviders.Tmdb) ?? this.GetProviderId(MetadataProviders.Imdb) ?? base.GetUserDataKey();
}
- protected override async Task BeforeRefreshMetadata(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ protected override async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
{
- await base.BeforeRefreshMetadata(options, fileSystemChildren, cancellationToken).ConfigureAwait(false);
+ var hasChanges = await base.RefreshedOwnedItems(options, fileSystemChildren, cancellationToken).ConfigureAwait(false);
// Must have a parent to have special features
// In other words, it must be part of the Parent/Child tree
@@ -108,9 +108,11 @@ namespace MediaBrowser.Controller.Entities.Movies
if (specialFeaturesChanged)
{
- options.ForceSave = true;
+ hasChanges = true;
}
}
+
+ return hasChanges;
}
private async Task<bool> RefreshSpecialFeatures(MetadataRefreshOptions options, IEnumerable<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs
index 5413aa8852..39c11569a5 100644
--- a/MediaBrowser.Controller/Entities/TV/Episode.cs
+++ b/MediaBrowser.Controller/Entities/TV/Episode.cs
@@ -1,5 +1,7 @@
-using MediaBrowser.Controller.Providers;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
+using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -260,5 +262,54 @@ namespace MediaBrowser.Controller.Entities.TV
return id;
}
+
+ public override ItemUpdateType BeforeMetadataRefresh()
+ {
+ var updateType = base.BeforeMetadataRefresh();
+
+ var locationType = LocationType;
+ if (locationType == LocationType.FileSystem || locationType == LocationType.Offline)
+ {
+ if (!IndexNumber.HasValue && !string.IsNullOrEmpty(Path))
+ {
+ IndexNumber = IndexNumber ?? TVUtils.GetEpisodeNumberFromFile(Path, Parent is Season);
+
+ // If a change was made record it
+ if (IndexNumber.HasValue)
+ {
+ updateType = updateType | ItemUpdateType.MetadataImport;
+ }
+ }
+
+ if (!IndexNumberEnd.HasValue && !string.IsNullOrEmpty(Path))
+ {
+ IndexNumberEnd = IndexNumberEnd ?? TVUtils.GetEndingEpisodeNumberFromFile(Path);
+
+ // If a change was made record it
+ if (IndexNumberEnd.HasValue)
+ {
+ updateType = updateType | ItemUpdateType.MetadataImport;
+ }
+ }
+ }
+
+ if (!ParentIndexNumber.HasValue)
+ {
+ var season = Season;
+
+ if (season != null)
+ {
+ ParentIndexNumber = season.IndexNumber;
+ }
+
+ // If a change was made record it
+ if (ParentIndexNumber.HasValue)
+ {
+ updateType = updateType | ItemUpdateType.MetadataImport;
+ }
+ }
+
+ return updateType;
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs
index ba79a95cc5..830ccb8a2c 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.Library;
+using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
@@ -243,9 +244,40 @@ namespace MediaBrowser.Controller.Entities.TV
}
}
+ /// <summary>
+ /// Gets the lookup information.
+ /// </summary>
+ /// <returns>SeasonInfo.</returns>
public SeasonInfo GetLookupInfo()
{
return GetItemLookupInfo<SeasonInfo>();
}
+
+ /// <summary>
+ /// This is called before any metadata refresh and returns ItemUpdateType indictating if changes were made, and what.
+ /// </summary>
+ /// <returns>ItemUpdateType.</returns>
+ public override ItemUpdateType BeforeMetadataRefresh()
+ {
+ var updateType = base.BeforeMetadataRefresh();
+
+ var locationType = LocationType;
+
+ if (locationType == LocationType.FileSystem || locationType == LocationType.Offline)
+ {
+ if (!IndexNumber.HasValue && !string.IsNullOrEmpty(Path))
+ {
+ IndexNumber = IndexNumber ?? TVUtils.GetSeasonNumberFromPath(Path);
+
+ // If a change was made record it
+ if (IndexNumber.HasValue)
+ {
+ updateType = updateType | ItemUpdateType.MetadataImport;
+ }
+ }
+ }
+
+ return updateType;
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/UserRootFolder.cs b/MediaBrowser.Controller/Entities/UserRootFolder.cs
index 4128c5d95c..9afcdfe67e 100644
--- a/MediaBrowser.Controller/Entities/UserRootFolder.cs
+++ b/MediaBrowser.Controller/Entities/UserRootFolder.cs
@@ -14,7 +14,7 @@ namespace MediaBrowser.Controller.Entities
/// Get the children of this folder from the actual file system
/// </summary>
/// <returns>IEnumerable{BaseItem}.</returns>
- protected override IEnumerable<BaseItem> GetNonCachedChildren(DirectoryService directoryService)
+ protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
{
return base.GetNonCachedChildren(directoryService).Concat(LibraryManager.RootFolder.VirtualChildren);
}
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs
index e2275fde72..e778b38bd2 100644
--- a/MediaBrowser.Controller/Entities/Video.cs
+++ b/MediaBrowser.Controller/Entities/Video.cs
@@ -27,9 +27,16 @@ namespace MediaBrowser.Controller.Entities
PlayableStreamFileNames = new List<string>();
AdditionalPartIds = new List<Guid>();
Tags = new List<string>();
+ SubtitleFiles = new List<string>();
}
/// <summary>
+ /// Gets or sets the subtitle paths.
+ /// </summary>
+ /// <value>The subtitle paths.</value>
+ public List<string> SubtitleFiles { get; set; }
+
+ /// <summary>
/// Gets or sets a value indicating whether this instance has subtitles.
/// </summary>
/// <value><c>true</c> if this instance has subtitles; otherwise, <c>false</c>.</value>
@@ -156,9 +163,9 @@ namespace MediaBrowser.Controller.Entities
}
}
- protected override async Task BeforeRefreshMetadata(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ protected override async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
{
- await base.BeforeRefreshMetadata(options, fileSystemChildren, cancellationToken).ConfigureAwait(false);
+ var hasChanges = await base.RefreshedOwnedItems(options, fileSystemChildren, cancellationToken).ConfigureAwait(false);
// Must have a parent to have additional parts
// In other words, it must be part of the Parent/Child tree
@@ -169,9 +176,11 @@ namespace MediaBrowser.Controller.Entities
if (additionalPartsChanged)
{
- options.ForceSave = true;
+ hasChanges = true;
}
}
+
+ return hasChanges;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Library/ItemUpdateType.cs b/MediaBrowser.Controller/Library/ItemUpdateType.cs
index 31a00d7b4e..cf62633562 100644
--- a/MediaBrowser.Controller/Library/ItemUpdateType.cs
+++ b/MediaBrowser.Controller/Library/ItemUpdateType.cs
@@ -5,7 +5,7 @@ namespace MediaBrowser.Controller.Library
[Flags]
public enum ItemUpdateType
{
- Unspecified = 1,
+ None = 1,
MetadataImport = 2,
ImageUpdate = 4,
MetadataDownload = 8,
diff --git a/MediaBrowser.Controller/Providers/DirectoryService.cs b/MediaBrowser.Controller/Providers/DirectoryService.cs
index 961f3acc76..828d662f68 100644
--- a/MediaBrowser.Controller/Providers/DirectoryService.cs
+++ b/MediaBrowser.Controller/Providers/DirectoryService.cs
@@ -6,7 +6,16 @@ using MediaBrowser.Model.Logging;
namespace MediaBrowser.Controller.Providers
{
- public class DirectoryService
+ public interface IDirectoryService
+ {
+ List<FileSystemInfo> GetFileSystemEntries(string path);
+ IEnumerable<FileInfo> GetFiles(string path);
+ IEnumerable<DirectoryInfo> GetDirectories(string path);
+ FileInfo GetFile(string path);
+ DirectoryInfo GetDirectory(string path);
+ }
+
+ public class DirectoryService : IDirectoryService
{
private readonly ILogger _logger;
diff --git a/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs b/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs
index 7cf9e961eb..c98810cbcb 100644
--- a/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs
@@ -12,6 +12,6 @@ namespace MediaBrowser.Controller.Providers
public interface ICustomMetadataProvider<TItemType> : IMetadataProvider<TItemType>, ICustomMetadataProvider
where TItemType : IHasMetadata
{
- Task<ItemUpdateType> FetchAsync(TItemType item, CancellationToken cancellationToken);
+ Task<ItemUpdateType> FetchAsync(TItemType item, IDirectoryService directoryService, CancellationToken cancellationToken);
}
}
diff --git a/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs b/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs
index ada2cbc6c4..aa0b0e3c97 100644
--- a/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs
+++ b/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs
@@ -9,8 +9,9 @@ namespace MediaBrowser.Controller.Providers
/// Determines whether the specified item has changed.
/// </summary>
/// <param name="item">The item.</param>
+ /// <param name="directoryService">The directory service.</param>
/// <param name="date">The date.</param>
/// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns>
- bool HasChanged(IHasMetadata item, DateTime date);
+ bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date);
}
}
diff --git a/MediaBrowser.Controller/Providers/ILocalImageProvider.cs b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs
index cd139bb14f..11b8897e70 100644
--- a/MediaBrowser.Controller/Providers/ILocalImageProvider.cs
+++ b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs
@@ -17,7 +17,7 @@ namespace MediaBrowser.Controller.Providers
public interface ILocalImageFileProvider : ILocalImageProvider
{
- List<LocalImageInfo> GetImages(IHasImages item, DirectoryService directoryService);
+ List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService);
}
public class LocalImageInfo
diff --git a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
index 3ab26ad668..780aa6a568 100644
--- a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
+++ b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Model.Logging;
-using System;
+using System;
namespace MediaBrowser.Controller.Providers
{
@@ -17,13 +16,12 @@ namespace MediaBrowser.Controller.Providers
/// </summary>
[Obsolete]
public bool ForceSave { get; set; }
-
- public DirectoryService DirectoryService { get; set; }
}
public class ImageRefreshOptions
{
public ImageRefreshMode ImageRefreshMode { get; set; }
+ public IDirectoryService DirectoryService { get; set; }
public ImageRefreshOptions()
{