aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs71
-rw-r--r--MediaBrowser.Providers/All/LocalImageProvider.cs54
-rw-r--r--MediaBrowser.Providers/Books/BookMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs37
-rw-r--r--MediaBrowser.Providers/Folders/FolderMetadataService.cs7
-rw-r--r--MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs57
-rw-r--r--MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Games/GameMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Games/GameSystemMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Genres/GenreMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/LiveTv/AudioRecordingService.cs5
-rw-r--r--MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/LiveTv/VideoRecordingService.cs5
-rw-r--r--MediaBrowser.Providers/Manager/ImageSaver.cs11
-rw-r--r--MediaBrowser.Providers/Manager/ItemImageProvider.cs7
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs37
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs31
-rw-r--r--MediaBrowser.Providers/Manager/ProviderUtils.cs (renamed from MediaBrowser.Providers/ProviderUtils.cs)2
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj6
-rw-r--r--MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs1
-rw-r--r--MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs5
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbImageProvider.cs8
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbProvider.cs2
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs2
-rw-r--r--MediaBrowser.Providers/Movies/MovieMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs1
-rw-r--r--MediaBrowser.Providers/Movies/TrailerMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Music/AlbumMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Music/ArtistMetadataService.cs9
-rw-r--r--MediaBrowser.Providers/Music/AudioMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Music/Extensions.cs14
-rw-r--r--MediaBrowser.Providers/Music/LastfmAlbumProvider.cs27
-rw-r--r--MediaBrowser.Providers/Music/LastfmArtistProvider.cs2
-rw-r--r--MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs3
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs3
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs4
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoMetadataService.cs6
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoXmlParser.cs1
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs1
-rw-r--r--MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/People/PersonMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/RefreshIntrosTask.cs103
-rw-r--r--MediaBrowser.Providers/Savers/AlbumXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/ArtistXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/ChannelXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/FolderXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/GameXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/MovieXmlSaver.cs8
-rw-r--r--MediaBrowser.Providers/Savers/PersonXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/SeasonXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/SeriesXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Studios/StudioMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs65
-rw-r--r--MediaBrowser.Providers/TV/EpisodeMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/TV/SeasonMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/TV/SeriesMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs27
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs5
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs5
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeriesProvider.cs3
-rw-r--r--MediaBrowser.Providers/Users/UserMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Videos/VideoMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Years/YearMetadataService.cs5
70 files changed, 456 insertions, 372 deletions
diff --git a/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs b/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs
index 4a713e735..b0d6af887 100644
--- a/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs
+++ b/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.AdultVideos
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(AdultVideo item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs b/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs
new file mode 100644
index 000000000..cecde64ca
--- /dev/null
+++ b/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs
@@ -0,0 +1,71 @@
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using System.Collections.Generic;
+using System.IO;
+
+namespace MediaBrowser.Providers.All
+{
+ public class InternalMetadataFolderImageProvider : ILocalImageFileProvider, IHasOrder
+ {
+ private readonly IServerConfigurationManager _config;
+
+ public InternalMetadataFolderImageProvider(IServerConfigurationManager config)
+ {
+ _config = config;
+ }
+
+ public string Name
+ {
+ get { return "Internal Images"; }
+ }
+
+ public bool Supports(IHasImages item)
+ {
+ if (!item.IsSaveLocalMetadataEnabled())
+ {
+ return true;
+ }
+
+ var locationType = item.LocationType;
+
+ if (locationType == LocationType.FileSystem ||
+ locationType == LocationType.Offline)
+ {
+ return false;
+ }
+
+ // These always save locally
+ if (item is IItemByName || item is User)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ public int Order
+ {
+ get
+ {
+ // Make sure this is last so that all other locations are scanned first
+ return 1000;
+ }
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item)
+ {
+ var path = _config.ApplicationPaths.GetInternalMetadataPath(item.Id);
+
+ try
+ {
+ return new LocalImageProvider().GetImages(item, path);
+ }
+ catch (DirectoryNotFoundException)
+ {
+ return new List<LocalImageInfo>();
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/All/LocalImageProvider.cs b/MediaBrowser.Providers/All/LocalImageProvider.cs
index 0d078499d..7d70a35b6 100644
--- a/MediaBrowser.Providers/All/LocalImageProvider.cs
+++ b/MediaBrowser.Providers/All/LocalImageProvider.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
@@ -13,15 +12,8 @@ using System.Linq;
namespace MediaBrowser.Providers.All
{
- public class LocalImageProvider : IImageFileProvider
+ public class LocalImageProvider : ILocalImageFileProvider
{
- private readonly IFileSystem _fileSystem;
-
- public LocalImageProvider(IFileSystem fileSystem)
- {
- _fileSystem = fileSystem;
- }
-
public string Name
{
get { return "Local Images"; }
@@ -91,12 +83,37 @@ namespace MediaBrowser.Providers.All
var list = new List<LocalImageInfo>();
- PopulateImages(item, list, files);
+ PopulateImages(item, list, files, true);
+
+ return list;
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item, string path)
+ {
+ return GetImages(item, new[] { path });
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item, IEnumerable<string> paths)
+ {
+ var files = paths.SelectMany(i => new DirectoryInfo(i).EnumerateFiles("*", SearchOption.TopDirectoryOnly))
+ .Where(i =>
+ {
+ var ext = i.Extension;
+
+ return !string.IsNullOrEmpty(ext) &&
+ BaseItem.SupportedImageExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase);
+ })
+ .Cast<FileSystemInfo>()
+ .ToList();
+
+ var list = new List<LocalImageInfo>();
+
+ PopulateImages(item, list, files, false);
return list;
}
- private void PopulateImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files)
+ private void PopulateImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files, bool supportParentSeriesFiles)
{
var imagePrefix = string.Empty;
@@ -126,11 +143,14 @@ namespace MediaBrowser.Providers.All
AddImage(files, images, imagePrefix + "thumb", ImageType.Thumb);
AddImage(files, images, imagePrefix + "landscape", ImageType.Thumb);
- var season = item as Season;
-
- if (season != null)
+ if (supportParentSeriesFiles)
{
- PopulateSeasonImagesFromSeriesFolder(season, images);
+ var season = item as Season;
+
+ if (season != null)
+ {
+ PopulateSeasonImagesFromSeriesFolder(season, images);
+ }
}
}
@@ -278,7 +298,7 @@ namespace MediaBrowser.Providers.All
}
}
- private bool AddImage(List<FileSystemInfo> files, List<LocalImageInfo> images, string name, ImageType type)
+ private bool AddImage(IEnumerable<FileSystemInfo> files, List<LocalImageInfo> images, string name, ImageType type)
{
var image = GetImage(files, name) as FileInfo;
diff --git a/MediaBrowser.Providers/Books/BookMetadataService.cs b/MediaBrowser.Providers/Books/BookMetadataService.cs
index c314b0a08..0cf672e2d 100644
--- a/MediaBrowser.Providers/Books/BookMetadataService.cs
+++ b/MediaBrowser.Providers/Books/BookMetadataService.cs
@@ -39,10 +39,5 @@ namespace MediaBrowser.Providers.Books
target.SeriesName = source.SeriesName;
}
}
-
- protected override Task SaveItem(Book item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
index b1b5c7580..f4716f6dd 100644
--- a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
+++ b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
@@ -41,11 +41,6 @@ namespace MediaBrowser.Providers.BoxSets
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(BoxSet item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeSave(BoxSet item)
{
var updateType = base.BeforeSave(item);
diff --git a/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs b/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs
new file mode 100644
index 000000000..f1b9a8384
--- /dev/null
+++ b/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs
@@ -0,0 +1,37 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Providers.All;
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Folders
+{
+ public class CollectionFolderLocalImageProvider : ILocalImageFileProvider, IHasOrder
+ {
+ public string Name
+ {
+ get { return "Collection Folder Images"; }
+ }
+
+ public bool Supports(IHasImages item)
+ {
+ return item is CollectionFolder && item.LocationType == LocationType.FileSystem;
+ }
+
+ public int Order
+ {
+ get
+ {
+ // Run after LocalImageProvider
+ return 1;
+ }
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item)
+ {
+ var collectionFolder = (CollectionFolder)item;
+
+ return new LocalImageProvider().GetImages(item, collectionFolder.PhysicalLocations);
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/Folders/FolderMetadataService.cs b/MediaBrowser.Providers/Folders/FolderMetadataService.cs
index 5ce23aa76..c9e44177e 100644
--- a/MediaBrowser.Providers/Folders/FolderMetadataService.cs
+++ b/MediaBrowser.Providers/Folders/FolderMetadataService.cs
@@ -7,8 +7,6 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
namespace MediaBrowser.Providers.Folders
{
@@ -35,11 +33,6 @@ namespace MediaBrowser.Providers.Folders
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(Folder item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
public override int Order
{
get
diff --git a/MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs b/MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs
new file mode 100644
index 000000000..e87f0919f
--- /dev/null
+++ b/MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs
@@ -0,0 +1,57 @@
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Providers.All;
+using System.Collections.Generic;
+using System.IO;
+
+namespace MediaBrowser.Providers.Folders
+{
+ public class ImagesByNameImageProvider : ILocalImageFileProvider, IHasOrder
+ {
+ private readonly IFileSystem _fileSystem;
+ private readonly IServerConfigurationManager _config;
+
+ public ImagesByNameImageProvider(IFileSystem fileSystem, IServerConfigurationManager config)
+ {
+ _fileSystem = fileSystem;
+ _config = config;
+ }
+
+ public string Name
+ {
+ get { return "Images By Name"; }
+ }
+
+ public bool Supports(IHasImages item)
+ {
+ return item is ICollectionFolder;
+ }
+
+ public int Order
+ {
+ get
+ {
+ // Run after LocalImageProvider, and after CollectionFolderImageProvider
+ return 2;
+ }
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item)
+ {
+ var name = _fileSystem.GetValidFilename(item.Name);
+
+ var path = Path.Combine(_config.ApplicationPaths.GeneralPath, name);
+
+ try
+ {
+ return new LocalImageProvider().GetImages(item, path);
+ }
+ catch (DirectoryNotFoundException)
+ {
+ return new List<LocalImageInfo>();
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
index 0f2862846..0eaed59c7 100644
--- a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
+++ b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.GameGenres
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(GameGenre item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Games/GameMetadataService.cs b/MediaBrowser.Providers/Games/GameMetadataService.cs
index 3a786385b..1586414ea 100644
--- a/MediaBrowser.Providers/Games/GameMetadataService.cs
+++ b/MediaBrowser.Providers/Games/GameMetadataService.cs
@@ -39,10 +39,5 @@ namespace MediaBrowser.Providers.Games
target.GameSystem = source.GameSystem;
}
}
-
- protected override Task SaveItem(Game item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
index 9fb539d98..ae1ee1993 100644
--- a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
+++ b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
@@ -39,10 +39,5 @@ namespace MediaBrowser.Providers.Games
target.GameSystemName = source.GameSystemName;
}
}
-
- protected override Task SaveItem(GameSystem item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Genres/GenreMetadataService.cs b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
index 199f79baf..b19241095 100644
--- a/MediaBrowser.Providers/Genres/GenreMetadataService.cs
+++ b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Genres
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Genre item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
index d11fb77ee..7ae27f4c9 100644
--- a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
+++ b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
@@ -33,10 +33,5 @@ namespace MediaBrowser.Providers.LiveTv
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(LiveTvAudioRecording item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
index fecee3ae2..57bc70156 100644
--- a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
+++ b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
@@ -29,10 +29,5 @@ namespace MediaBrowser.Providers.LiveTv
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(LiveTvChannel item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
index e6f020323..3172e0134 100644
--- a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
+++ b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
@@ -33,10 +33,5 @@ namespace MediaBrowser.Providers.LiveTv
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(LiveTvProgram item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
index fb4156e8d..f526db775 100644
--- a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
+++ b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
@@ -33,10 +33,5 @@ namespace MediaBrowser.Providers.LiveTv
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(LiveTvVideoRecording item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs
index 1bccc6bb8..1b0ae1b5e 100644
--- a/MediaBrowser.Providers/Manager/ImageSaver.cs
+++ b/MediaBrowser.Providers/Manager/ImageSaver.cs
@@ -30,10 +30,6 @@ namespace MediaBrowser.Providers.Manager
private readonly IServerConfigurationManager _config;
/// <summary>
- /// The remote image cache
- /// </summary>
- private readonly FileSystemRepository _remoteImageCache;
- /// <summary>
/// The _directory watchers
/// </summary>
private readonly ILibraryMonitor _libraryMonitor;
@@ -41,17 +37,18 @@ namespace MediaBrowser.Providers.Manager
private readonly ILogger _logger;
/// <summary>
- /// Initializes a new instance of the <see cref="ImageSaver"/> class.
+ /// Initializes a new instance of the <see cref="ImageSaver" /> class.
/// </summary>
/// <param name="config">The config.</param>
/// <param name="libraryMonitor">The directory watchers.</param>
+ /// <param name="fileSystem">The file system.</param>
+ /// <param name="logger">The logger.</param>
public ImageSaver(IServerConfigurationManager config, ILibraryMonitor libraryMonitor, IFileSystem fileSystem, ILogger logger)
{
_config = config;
_libraryMonitor = libraryMonitor;
_fileSystem = fileSystem;
_logger = logger;
- _remoteImageCache = new FileSystemRepository(config.ApplicationPaths.DownloadedImagesDataPath);
}
/// <summary>
@@ -348,7 +345,7 @@ namespace MediaBrowser.Providers.Manager
// None of the save local conditions passed, so store it in our internal folders
if (string.IsNullOrEmpty(path))
{
- path = _remoteImageCache.GetResourcePath(item.GetType().FullName + item.Id, filename + extension);
+ path = Path.Combine(_config.ApplicationPaths.GetInternalMetadataPath(item.Id), filename + extension);
}
return path;
diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
index 4ba959d14..b50e028bf 100644
--- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs
+++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
@@ -38,7 +38,7 @@ namespace MediaBrowser.Providers.Manager
{
var hasChanges = item.ValidateImages();
- foreach (var provider in providers.OfType<IImageFileProvider>())
+ foreach (var provider in providers.OfType<ILocalImageFileProvider>())
{
var images = provider.GetImages(item);
@@ -117,8 +117,7 @@ namespace MediaBrowser.Providers.Manager
{
var mimeType = "image/" + Path.GetExtension(response.Path).TrimStart('.').ToLower();
- var stream = _fileSystem.GetFileStream(response.Path, FileMode.Open, FileAccess.Read,
- FileShare.Read, true);
+ var stream = _fileSystem.GetFileStream(response.Path, FileMode.Open, FileAccess.Read, FileShare.Read, true);
await _providerManager.SaveImage((BaseItem)item, stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
}
@@ -335,7 +334,7 @@ namespace MediaBrowser.Providers.Manager
}
catch (HttpException ex)
{
- // Sometimes providers send back bad url's. Just move onto the next image
+ // Sometimes providers send back bad url's. Just move to the next image
if (ex.StatusCode.HasValue && ex.StatusCode.Value == HttpStatusCode.NotFound)
{
continue;
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index 21173aebc..be42589b7 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -37,10 +37,18 @@ namespace MediaBrowser.Providers.Manager
/// <summary>
/// Saves the provider result.
/// </summary>
+ /// <param name="item">The item.</param>
/// <param name="result">The result.</param>
/// <returns>Task.</returns>
- protected Task SaveProviderResult(MetadataStatus result)
+ protected Task SaveProviderResult(TItemType item, MetadataStatus result)
{
+ result.ItemId = item.Id;
+ result.ItemName = item.Name;
+
+ var series = item as IHasSeries;
+
+ result.SeriesName = series == null ? null : series.SeriesName;
+
return ProviderRepo.SaveMetadataStatus(result, CancellationToken.None);
}
@@ -97,7 +105,6 @@ namespace MediaBrowser.Providers.Manager
if (providers.Count > 0)
{
-
var result = await RefreshWithProviders(itemOfType, refreshOptions, providers, cancellationToken).ConfigureAwait(false);
updateType = updateType | result.UpdateType;
@@ -140,7 +147,7 @@ namespace MediaBrowser.Providers.Manager
if (providersHadChanges || refreshResult.IsDirty)
{
- await SaveProviderResult(refreshResult).ConfigureAwait(false);
+ await SaveProviderResult(itemOfType, refreshResult).ConfigureAwait(false);
}
}
@@ -231,7 +238,10 @@ namespace MediaBrowser.Providers.Manager
return providers;
}
- protected abstract Task SaveItem(TItemType item, ItemUpdateType reason, CancellationToken cancellationToken);
+ protected Task SaveItem(TItemType item, ItemUpdateType reason, CancellationToken cancellationToken)
+ {
+ return item.UpdateToRepository(reason, cancellationToken);
+ }
public bool CanRefresh(IHasMetadata item)
{
@@ -298,6 +308,7 @@ namespace MediaBrowser.Providers.Manager
}
}
+ // Local metadata is king - if any is found don't run remote providers
if (!options.ReplaceAllMetadata && !hasLocalMetadata)
{
await ExecuteRemoteProviders(item, temp, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), refreshResult, cancellationToken).ConfigureAwait(false);
@@ -349,7 +360,14 @@ namespace MediaBrowser.Providers.Manager
{
Logger.Debug("Running {0} for {1}", provider.GetType().Name, item.Path ?? item.Name);
- id = id ?? item.GetLookupInfo();
+ if (id == null)
+ {
+ id = item.GetLookupInfo();
+ }
+ else
+ {
+ MergeNewData(temp, id);
+ }
try
{
@@ -375,6 +393,15 @@ namespace MediaBrowser.Providers.Manager
}
}
+ private void MergeNewData(TItemType source, TIdType lookupInfo)
+ {
+ // Copy new provider id's that may have been obtained
+ foreach (var providerId in source.ProviderIds)
+ {
+ lookupInfo.ProviderIds[providerId.Key] = providerId.Value;
+ }
+ }
+
protected abstract void MergeData(TItemType source, TItemType target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings);
public virtual int Order
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index aec08a292..e0b07ef3a 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -470,7 +470,7 @@ namespace MediaBrowser.Providers.Manager
}));
// Savers
- list.AddRange(_savers.Where(i => i.IsEnabledFor(item, ItemUpdateType.MetadataEdit)).OrderBy(i => i.Name).Select(i => new MetadataPlugin
+ list.AddRange(_savers.Where(i => IsSaverEnabledForItem(i, item, ItemUpdateType.MetadataEdit)).OrderBy(i => i.Name).Select(i => new MetadataPlugin
{
Name = i.Name,
Type = MetadataPluginType.MetadataSaver
@@ -506,7 +506,7 @@ namespace MediaBrowser.Providers.Manager
/// <returns>Task.</returns>
public async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType)
{
- foreach (var saver in _savers.Where(i => i.IsEnabledFor(item, updateType)))
+ foreach (var saver in _savers.Where(i => IsSaverEnabledForItem(i, item, updateType)))
{
_logger.Debug("Saving {0} to {1}.", item.Path ?? item.Name, saver.Name);
@@ -514,13 +514,17 @@ namespace MediaBrowser.Providers.Manager
if (fileSaver != null)
{
- var locationType = item.LocationType;
- if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ string path = null;
+
+ try
{
- throw new ArgumentException("Only file-system based items can save metadata.");
+ path = fileSaver.GetSavePath(item);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error in {0} GetSavePath", ex, saver.Name);
+ continue;
}
-
- var path = fileSaver.GetSavePath(item);
var semaphore = _fileLocks.GetOrAdd(path, key => new SemaphoreSlim(1, 1));
@@ -554,5 +558,18 @@ namespace MediaBrowser.Providers.Manager
}
}
}
+
+ private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType)
+ {
+ try
+ {
+ return saver.IsEnabledFor(item, updateType);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error in {0}.IsEnabledFor", ex, saver.Name);
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Providers/ProviderUtils.cs b/MediaBrowser.Providers/Manager/ProviderUtils.cs
index ecefb72c4..6e994c9f2 100644
--- a/MediaBrowser.Providers/ProviderUtils.cs
+++ b/MediaBrowser.Providers/Manager/ProviderUtils.cs
@@ -3,7 +3,7 @@ using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Entities;
using System.Collections.Generic;
-namespace MediaBrowser.Providers
+namespace MediaBrowser.Providers.Manager
{
public static class ProviderUtils
{
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index da9ea2947..d494f17b6 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -66,12 +66,15 @@
<ItemGroup>
<Compile Include="AdultVideos\AdultVideoMetadataService.cs" />
<Compile Include="AdultVideos\AdultVideoXmlProvider.cs" />
+ <Compile Include="All\InternalMetadataFolderImageProvider.cs" />
<Compile Include="All\LocalImageProvider.cs" />
<Compile Include="Books\BookMetadataService.cs" />
<Compile Include="BoxSets\BoxSetMetadataService.cs" />
<Compile Include="BoxSets\MovieDbBoxSetImageProvider.cs" />
<Compile Include="BoxSets\MovieDbBoxSetProvider.cs" />
+ <Compile Include="Folders\CollectionFolderImageProvider.cs" />
<Compile Include="Folders\FolderMetadataService.cs" />
+ <Compile Include="Folders\ImagesByNameImageProvider.cs" />
<Compile Include="GameGenres\GameGenreMetadataService.cs" />
<Compile Include="Games\GameMetadataService.cs" />
<Compile Include="Games\GameSystemMetadataService.cs" />
@@ -145,8 +148,7 @@
<Compile Include="People\PersonXmlProvider.cs" />
<Compile Include="People\MovieDbPersonProvider.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="ProviderUtils.cs" />
- <Compile Include="RefreshIntrosTask.cs" />
+ <Compile Include="Manager\ProviderUtils.cs" />
<Compile Include="Savers\AlbumXmlSaver.cs" />
<Compile Include="Savers\ArtistXmlSaver.cs" />
<Compile Include="Savers\BoxSetXmlSaver.cs" />
diff --git a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
index 94d8566e1..ba3b468d4 100644
--- a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
@@ -3,6 +3,7 @@ using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Dto;
diff --git a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
index ebed0c203..45d1eb531 100644
--- a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
+++ b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
@@ -143,10 +144,6 @@ namespace MediaBrowser.Providers.Movies
movieItem.TmdbCollectionName = movieData.belongs_to_collection.name;
}
}
- else
- {
- movie.SetProviderId(MetadataProviders.TmdbCollection, null); // clear out any old entry
- }
float rating;
string voteAvg = movieData.vote_average.ToString(CultureInfo.InvariantCulture);
diff --git a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
index be2f7ad61..db3468816 100644
--- a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Dto;
@@ -15,7 +16,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Movies
{
- class MovieDbImageProvider : IRemoteImageProvider, IHasOrder
+ class MovieDbImageProvider : IRemoteImageProvider, IHasOrder, IHasChangeMonitor
{
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
@@ -207,5 +208,10 @@ namespace MediaBrowser.Providers.Movies
ResourcePool = MovieDbProvider.Current.MovieDbResourcePool
});
}
+
+ public bool HasChanged(IHasMetadata item, DateTime date)
+ {
+ return MovieDbProvider.Current.HasChanged(item, date);
+ }
}
}
diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
index a9526787c..36dfc64d2 100644
--- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
@@ -19,7 +19,7 @@ namespace MediaBrowser.Providers.Movies
/// <summary>
/// Class MovieDbProvider
/// </summary>
- public class MovieDbProvider : IRemoteMetadataProvider<Movie, MovieInfo>, IDisposable, IHasChangeMonitor
+ public class MovieDbProvider : IRemoteMetadataProvider<Movie, MovieInfo>, IDisposable
{
internal readonly SemaphoreSlim MovieDbResourcePool = new SemaphoreSlim(1, 1);
diff --git a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
index df786cffc..ed36cb7af 100644
--- a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Movies
{
- public class MovieDbTrailerProvider : IRemoteMetadataProvider<Trailer, TrailerInfo>, IHasChangeMonitor
+ public class MovieDbTrailerProvider : IRemoteMetadataProvider<Trailer, TrailerInfo>
{
public Task<MetadataResult<Trailer>> GetMetadata(TrailerInfo info, CancellationToken cancellationToken)
{
diff --git a/MediaBrowser.Providers/Movies/MovieMetadataService.cs b/MediaBrowser.Providers/Movies/MovieMetadataService.cs
index 674b36422..34536d97d 100644
--- a/MediaBrowser.Providers/Movies/MovieMetadataService.cs
+++ b/MediaBrowser.Providers/Movies/MovieMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Movies
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Movie item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs b/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs
index 3f200dc8c..483175f37 100644
--- a/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs
+++ b/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs
@@ -1,6 +1,5 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
-using MediaBrowser.Common.Progress;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
diff --git a/MediaBrowser.Providers/Movies/TrailerMetadataService.cs b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs
index 620799a18..d9ae6187c 100644
--- a/MediaBrowser.Providers/Movies/TrailerMetadataService.cs
+++ b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Movies
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Trailer item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs
index d4bbe5a28..410441fc8 100644
--- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs
+++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs
@@ -42,11 +42,6 @@ namespace MediaBrowser.Providers.Music
}
}
- protected override Task SaveItem(MusicAlbum item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeSave(MusicAlbum item)
{
var updateType = base.BeforeSave(item);
diff --git a/MediaBrowser.Providers/Music/ArtistMetadataService.cs b/MediaBrowser.Providers/Music/ArtistMetadataService.cs
index 9cc4406ac..1b7f229e4 100644
--- a/MediaBrowser.Providers/Music/ArtistMetadataService.cs
+++ b/MediaBrowser.Providers/Music/ArtistMetadataService.cs
@@ -9,12 +9,10 @@ using MediaBrowser.Providers.Manager;
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
namespace MediaBrowser.Providers.Music
{
- public class ArtistMetadataService : MetadataService<MusicArtist, ItemLookupInfo>
+ public class ArtistMetadataService : MetadataService<MusicArtist, ArtistInfo>
{
private readonly ILibraryManager _libraryManager;
@@ -37,11 +35,6 @@ namespace MediaBrowser.Providers.Music
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(MusicArtist item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeSave(MusicArtist item)
{
var updateType = base.BeforeSave(item);
diff --git a/MediaBrowser.Providers/Music/AudioMetadataService.cs b/MediaBrowser.Providers/Music/AudioMetadataService.cs
index 408f499dc..cda22b0f5 100644
--- a/MediaBrowser.Providers/Music/AudioMetadataService.cs
+++ b/MediaBrowser.Providers/Music/AudioMetadataService.cs
@@ -44,10 +44,5 @@ namespace MediaBrowser.Providers.Music
target.Album = source.Album;
}
}
-
- protected override Task SaveItem(Audio item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Music/Extensions.cs b/MediaBrowser.Providers/Music/Extensions.cs
index 0ba02cbec..671242eed 100644
--- a/MediaBrowser.Providers/Music/Extensions.cs
+++ b/MediaBrowser.Providers/Music/Extensions.cs
@@ -63,5 +63,19 @@ namespace MediaBrowser.Providers.Music
return id;
}
+
+ public static string GetArtistId(this ArtistInfo info)
+ {
+ string id;
+ info.ProviderIds.TryGetValue(MetadataProviders.MusicBrainzArtist.ToString(), out id);
+
+ if (string.IsNullOrEmpty(id))
+ {
+ return info.SongInfos.Select(i => i.GetProviderId(MetadataProviders.MusicBrainzAlbumArtist))
+ .FirstOrDefault(i => !string.IsNullOrEmpty(i));
+ }
+
+ return id;
+ }
}
}
diff --git a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
index 0affbf909..767c58cb9 100644
--- a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
@@ -5,9 +5,11 @@ using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
+using MoreLinq;
using System;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
@@ -39,6 +41,7 @@ namespace MediaBrowser.Providers.Music
if (lastFmData != null && lastFmData.album != null)
{
result.HasMetadata = true;
+ result.Item = new MusicAlbum();
ProcessAlbumData(result.Item, lastFmData.album);
}
@@ -72,18 +75,18 @@ namespace MediaBrowser.Providers.Music
}
var albumArtist = item.GetAlbumArtist();
- //// Get each song, distinct by the combination of AlbumArtist and Album
- //var songs = item.RecursiveChildren.OfType<Audio>().DistinctBy(i => (i.AlbumArtist ?? string.Empty) + (i.Album ?? string.Empty), StringComparer.OrdinalIgnoreCase).ToList();
-
- //foreach (var song in songs.Where(song => !string.IsNullOrEmpty(song.Album) && !string.IsNullOrEmpty(song.AlbumArtist)))
- //{
- // var result = await GetAlbumResult(song.AlbumArtist, song.Album, cancellationToken).ConfigureAwait(false);
-
- // if (result != null && result.album != null)
- // {
- // return result;
- // }
- //}
+ // Get each song, distinct by the combination of AlbumArtist and Album
+ var songs = item.SongInfos.DistinctBy(i => (i.AlbumArtist ?? string.Empty) + (i.Album ?? string.Empty), StringComparer.OrdinalIgnoreCase).ToList();
+
+ foreach (var song in songs.Where(song => !string.IsNullOrEmpty(song.Album) && !string.IsNullOrEmpty(song.AlbumArtist)))
+ {
+ var result = await GetAlbumResult(song.AlbumArtist, song.Album, cancellationToken).ConfigureAwait(false);
+
+ if (result != null && result.album != null)
+ {
+ return result;
+ }
+ }
if (string.IsNullOrEmpty(albumArtist))
{
diff --git a/MediaBrowser.Providers/Music/LastfmArtistProvider.cs b/MediaBrowser.Providers/Music/LastfmArtistProvider.cs
index 865daaf00..7aceff41a 100644
--- a/MediaBrowser.Providers/Music/LastfmArtistProvider.cs
+++ b/MediaBrowser.Providers/Music/LastfmArtistProvider.cs
@@ -42,7 +42,7 @@ namespace MediaBrowser.Providers.Music
{
var result = new MetadataResult<MusicArtist>();
- var musicBrainzId = id.GetProviderId(MetadataProviders.MusicBrainzArtist);
+ var musicBrainzId = id.GetArtistId();
if (!String.IsNullOrWhiteSpace(musicBrainzId))
{
diff --git a/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs b/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs
index 32101260b..99fe5c38d 100644
--- a/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs
+++ b/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Providers.Movies;
using System;
@@ -7,7 +8,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Music
{
- public class MovieDbMusicVideoProvider : IRemoteMetadataProvider<MusicVideo, MusicVideoInfo>, IHasChangeMonitor
+ public class MovieDbMusicVideoProvider : IRemoteMetadataProvider<MusicVideo, MusicVideoInfo>
{
public Task<MetadataResult<MusicVideo>> GetMetadata(MusicVideoInfo info, CancellationToken cancellationToken)
{
diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
index 1ed5d6b38..2fbcf64ca 100644
--- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
@@ -47,14 +47,12 @@ namespace MediaBrowser.Providers.Music
{
releaseId = releaseResult.ReleaseId;
result.HasMetadata = true;
- result.Item.SetProviderId(MetadataProviders.MusicBrainzAlbum, releaseId);
}
if (!string.IsNullOrEmpty(releaseResult.ReleaseGroupId))
{
releaseGroupId = releaseResult.ReleaseGroupId;
result.HasMetadata = true;
- result.Item.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, releaseGroupId);
}
}
@@ -63,7 +61,6 @@ namespace MediaBrowser.Providers.Music
{
releaseGroupId = await GetReleaseGroupId(releaseId, cancellationToken).ConfigureAwait(false);
result.HasMetadata = true;
- result.Item.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, releaseGroupId);
}
if (result.HasMetadata)
diff --git a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs
index 7eeb617a7..52a598171 100644
--- a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs
@@ -17,8 +17,8 @@ namespace MediaBrowser.Providers.Music
public async Task<MetadataResult<MusicArtist>> GetMetadata(ArtistInfo id, CancellationToken cancellationToken)
{
var result = new MetadataResult<MusicArtist>();
-
- var musicBrainzId = id.GetProviderId(MetadataProviders.MusicBrainzArtist) ?? await FindId(id, cancellationToken).ConfigureAwait(false);
+
+ var musicBrainzId = id.GetArtistId() ?? await FindId(id, cancellationToken).ConfigureAwait(false);
if (!string.IsNullOrWhiteSpace(musicBrainzId))
{
diff --git a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
index 5b46cb6ba..e30f93af9 100644
--- a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
+++ b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
@@ -1,6 +1,7 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
@@ -44,10 +45,5 @@ namespace MediaBrowser.Providers.Music
target.Artist = source.Artist;
}
}
-
- protected override Task SaveItem(MusicVideo item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs b/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs
index 5af203fa7..0c160ff66 100644
--- a/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs
+++ b/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
using System.Xml;
diff --git a/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs b/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
index 5bdc2cdd0..ec763c852 100644
--- a/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Movies;
diff --git a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
index 09b069c73..db5f1b8ce 100644
--- a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
+++ b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.MusicGenres
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(MusicGenre item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/People/PersonMetadataService.cs b/MediaBrowser.Providers/People/PersonMetadataService.cs
index de192ea2f..b3b3e88d0 100644
--- a/MediaBrowser.Providers/People/PersonMetadataService.cs
+++ b/MediaBrowser.Providers/People/PersonMetadataService.cs
@@ -39,10 +39,5 @@ namespace MediaBrowser.Providers.People
target.PlaceOfBirth = source.PlaceOfBirth;
}
}
-
- protected override Task SaveItem(Person item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/RefreshIntrosTask.cs b/MediaBrowser.Providers/RefreshIntrosTask.cs
deleted file mode 100644
index bfe7e7609..000000000
--- a/MediaBrowser.Providers/RefreshIntrosTask.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.IO;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Model.Logging;
-using System;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Providers
-{
- /// <summary>
- /// Class RefreshIntrosTask
- /// </summary>
- public class RefreshIntrosTask : ILibraryPostScanTask
- {
- /// <summary>
- /// The _library manager
- /// </summary>
- private readonly ILibraryManager _libraryManager;
- /// <summary>
- /// The _logger
- /// </summary>
- private readonly ILogger _logger;
-
- private readonly IFileSystem _fileSystem;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="RefreshIntrosTask"/> class.
- /// </summary>
- /// <param name="libraryManager">The library manager.</param>
- /// <param name="logger">The logger.</param>
- public RefreshIntrosTask(ILibraryManager libraryManager, ILogger logger, IFileSystem fileSystem)
- {
- _libraryManager = libraryManager;
- _logger = logger;
- _fileSystem = fileSystem;
- }
-
- /// <summary>
- /// Runs the specified progress.
- /// </summary>
- /// <param name="progress">The progress.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
- {
- var files = _libraryManager.GetAllIntroFiles().ToList();
-
- var numComplete = 0;
-
- foreach (var file in files)
- {
- cancellationToken.ThrowIfCancellationRequested();
-
- try
- {
- await RefreshIntro(file, cancellationToken).ConfigureAwait(false);
- }
- catch (OperationCanceledException)
- {
- throw;
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error refreshing intro {0}", ex, file);
- }
-
- numComplete++;
- double percent = numComplete;
- percent /= files.Count;
- progress.Report(percent * 100);
- }
- }
-
- /// <summary>
- /// Refreshes the intro.
- /// </summary>
- /// <param name="path">The path.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- private async Task RefreshIntro(string path, CancellationToken cancellationToken)
- {
- var item = _libraryManager.ResolvePath(_fileSystem.GetFileSystemInfo(path));
-
- if (item == null)
- {
- _logger.Error("Intro resolver returned null for {0}", path);
- return;
- }
-
- var dbItem = _libraryManager.GetItemById(item.Id);
-
- if (dbItem != null)
- {
- item = dbItem;
- }
-
- // Force the save if it's a new item
- await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs b/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs
index 5d6193491..74c507394 100644
--- a/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -35,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
index 1ae1eaa64..c5c564fba 100644
--- a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
@@ -3,6 +3,7 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Providers.Music;
using System;
using System.Collections.Generic;
@@ -37,6 +38,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs
index 06a17528b..fb5c57095 100644
--- a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs
@@ -7,6 +7,7 @@ using System.IO;
using System.Text;
using System.Threading;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -35,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs b/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs
index 36ee0dcc6..7da6c25c1 100644
--- a/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -22,6 +23,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs b/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs
index f662c6cbf..f9932ce75 100644
--- a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs
@@ -10,6 +10,7 @@ using System.IO;
using System.Security;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -26,6 +27,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs b/MediaBrowser.Providers/Savers/FolderXmlSaver.cs
index e0ae638e9..5c21443ce 100644
--- a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/FolderXmlSaver.cs
@@ -9,6 +9,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -37,6 +38,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var folder = item as Folder;
if (folder == null)
diff --git a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs b/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs
index 017f17f8d..f0d34df08 100644
--- a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs
@@ -7,6 +7,7 @@ using System.IO;
using System.Security;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -35,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/GameXmlSaver.cs b/MediaBrowser.Providers/Savers/GameXmlSaver.cs
index 613819517..a2a96909f 100644
--- a/MediaBrowser.Providers/Savers/GameXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/GameXmlSaver.cs
@@ -1,7 +1,6 @@
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using System.Collections.Generic;
using System.Globalization;
@@ -40,6 +39,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
index 15fdc6752..e62a86af0 100644
--- a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
@@ -11,6 +12,7 @@ using System.Security;
using System.Text;
using System.Threading;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -44,6 +46,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/PersonXmlSaver.cs b/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
index 167e514a8..10f75d591 100644
--- a/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
@@ -6,6 +6,7 @@ using System.IO;
using System.Security;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -30,6 +31,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs b/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs
index 6bb2855f0..cc0bf8b36 100644
--- a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -35,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs b/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs
index 946c49779..ffd90b5d1 100644
--- a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs
@@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using System.Collections.Generic;
using System.IO;
@@ -37,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Studios/StudioMetadataService.cs b/MediaBrowser.Providers/Studios/StudioMetadataService.cs
index 5f39031b2..014ff3340 100644
--- a/MediaBrowser.Providers/Studios/StudioMetadataService.cs
+++ b/MediaBrowser.Providers/Studios/StudioMetadataService.cs
@@ -33,10 +33,5 @@ namespace MediaBrowser.Providers.Studios
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Studio item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs b/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs
index 03346d0d2..df3b8b48f 100644
--- a/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs
+++ b/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs
@@ -2,14 +2,12 @@
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
-using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
namespace MediaBrowser.Providers.TV
{
- public class EpisodeLocalImageProvider : IImageFileProvider
+ public class EpisodeLocalLocalImageProvider : ILocalImageFileProvider
{
public string Name
{
@@ -23,37 +21,46 @@ namespace MediaBrowser.Providers.TV
public List<LocalImageInfo> GetImages(IHasImages item)
{
+ var file = GetFile(item);
+
+ var list = new List<LocalImageInfo>();
+
+ if (file != null)
+ {
+ list.Add(new LocalImageInfo
+ {
+ FileInfo = file,
+ Type = ImageType.Primary
+ });
+ }
+
+ return list;
+ }
+
+ private FileInfo GetFile(IHasImages item)
+ {
var parentPath = Path.GetDirectoryName(item.Path);
var nameWithoutExtension = Path.GetFileNameWithoutExtension(item.Path);
var thumbName = nameWithoutExtension + "-thumb";
- return new DirectoryInfo(parentPath).EnumerateFiles("*", SearchOption.AllDirectories)
- .Where(i =>
- {
- if (BaseItem.SupportedImageExtensions.Contains(i.Extension))
- {
- var currentNameWithoutExtension = Path.GetFileNameWithoutExtension(i.Name);
-
- if (string.Equals(nameWithoutExtension, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
-
- if (string.Equals(thumbName, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
- }
-
- return false;
- })
- .Select(i => new LocalImageInfo
- {
- FileInfo = i,
- Type = ImageType.Primary
- })
- .ToList();
+ var path = Path.Combine(parentPath, thumbName + ".jpg");
+ var fileInfo = new FileInfo(path);
+
+ if (fileInfo.Exists)
+ {
+ return fileInfo;
+ }
+
+ path = Path.Combine(parentPath, "metadata", nameWithoutExtension + ".jpg");
+ fileInfo = new FileInfo(path);
+
+ if (fileInfo.Exists)
+ {
+ return fileInfo;
+ }
+
+ return null;
}
}
}
diff --git a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
index 039a4750d..fa44af155 100644
--- a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
+++ b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
@@ -71,11 +71,6 @@ namespace MediaBrowser.Providers.TV
}
}
- protected override Task SaveItem(Episode item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeMetadataRefresh(Episode item)
{
var updateType = base.BeforeMetadataRefresh(item);
diff --git a/MediaBrowser.Providers/TV/SeasonMetadataService.cs b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
index 5173e03e4..b0c80d5d6 100644
--- a/MediaBrowser.Providers/TV/SeasonMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
@@ -35,11 +35,6 @@ namespace MediaBrowser.Providers.TV
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(Season item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeMetadataRefresh(Season item)
{
var updateType = base.BeforeMetadataRefresh(item);
diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
index b858c3784..76c66ea36 100644
--- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
@@ -36,11 +36,6 @@ namespace MediaBrowser.Providers.TV
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(Series item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeSave(Series item)
{
var updateType = base.BeforeSave(item);
diff --git a/MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs
index 162eb45bc..754f973bc 100644
--- a/MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs
@@ -194,6 +194,11 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
+ if (!_config.Configuration.EnableTvDbUpdates && item.LocationType != LocationType.Virtual)
+ {
+ return false;
+ }
+
if (!item.HasImage(ImageType.Primary))
{
var episode = (Episode)item;
@@ -211,6 +216,7 @@ namespace MediaBrowser.Providers.TV
return files.Any(i => _fileSystem.GetLastWriteTimeUtc(i) > date);
}
}
+
return false;
}
}
diff --git a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
index 41e375bac..1c9f565f3 100644
--- a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
@@ -2,10 +2,8 @@
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Net;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -16,7 +14,6 @@ using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using PersonInfo = MediaBrowser.Controller.Entities.PersonInfo;
namespace MediaBrowser.Providers.TV
{
@@ -71,7 +68,7 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
- if (!_config.Configuration.EnableTvDbUpdates)
+ if (!_config.Configuration.EnableTvDbUpdates && item.LocationType != LocationType.Virtual)
{
return false;
}
@@ -423,28 +420,6 @@ namespace MediaBrowser.Providers.TV
break;
}
- case "filename":
- {
- if (string.IsNullOrEmpty(item.PrimaryImagePath))
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- try
- {
- var url = TVUtils.BannerUrl + val;
-
- //await _providerManager.SaveImage(item, url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Primary, null, cancellationToken).ConfigureAwait(false);
- }
- catch (HttpException)
- {
- status = ProviderRefreshStatus.CompletedWithErrors;
- }
- }
- }
- break;
- }
-
case "Overview":
{
if (!item.LockedFields.Contains(MetadataFields.Overview))
diff --git a/MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs b/MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs
index a63f3ee24..a6276d0d7 100644
--- a/MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs
@@ -342,6 +342,11 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
+ if (!_config.Configuration.EnableTvDbUpdates && item.LocationType != LocationType.Virtual)
+ {
+ return false;
+ }
+
var season = (Season)item;
var series = season.Series;
diff --git a/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs
index e56830644..3e1664f85 100644
--- a/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs
@@ -339,6 +339,11 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
+ if (!_config.Configuration.EnableTvDbUpdates)
+ {
+ return false;
+ }
+
var tvdbId = item.GetProviderId(MetadataProviders.Tvdb);
if (!String.IsNullOrEmpty(tvdbId))
diff --git a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
index 57e518e85..ba8ac9fd6 100644
--- a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
@@ -19,11 +19,10 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using PersonInfo = MediaBrowser.Controller.Entities.PersonInfo;
namespace MediaBrowser.Providers.TV
{
- public class TvdbSeriesProvider : IRemoteMetadataProvider<Series, SeriesInfo>, IHasChangeMonitor
+ public class TvdbSeriesProvider : IRemoteMetadataProvider<Series, SeriesInfo>
{
internal readonly SemaphoreSlim TvDbResourcePool = new SemaphoreSlim(2, 2);
internal static TvdbSeriesProvider Current { get; private set; }
diff --git a/MediaBrowser.Providers/Users/UserMetadataService.cs b/MediaBrowser.Providers/Users/UserMetadataService.cs
index dac0c262f..5b49033a9 100644
--- a/MediaBrowser.Providers/Users/UserMetadataService.cs
+++ b/MediaBrowser.Providers/Users/UserMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Users
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(User item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _userManager.UpdateUser(item);
- }
}
}
diff --git a/MediaBrowser.Providers/Videos/VideoMetadataService.cs b/MediaBrowser.Providers/Videos/VideoMetadataService.cs
index cce9dc6f0..de8bd44e6 100644
--- a/MediaBrowser.Providers/Videos/VideoMetadataService.cs
+++ b/MediaBrowser.Providers/Videos/VideoMetadataService.cs
@@ -35,11 +35,6 @@ namespace MediaBrowser.Providers.Videos
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(Video item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
public override int Order
{
get
diff --git a/MediaBrowser.Providers/Years/YearMetadataService.cs b/MediaBrowser.Providers/Years/YearMetadataService.cs
index d40b8cb65..621ea96ce 100644
--- a/MediaBrowser.Providers/Years/YearMetadataService.cs
+++ b/MediaBrowser.Providers/Years/YearMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Years
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Year item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}