diff options
| author | Bond_009 <bond.009@outlook.com> | 2019-09-10 22:37:53 +0200 |
|---|---|---|
| committer | Bond_009 <Bond.009@outlook.com> | 2019-10-29 17:55:16 +0100 |
| commit | d9a03c9bb120cada54729d314a204a63fbf607b5 (patch) | |
| tree | d3009bcad0cb5836c3930589356d73daadfcb6fc /MediaBrowser.Providers | |
| parent | ef623f512903624bba48f243e3a659ec46064054 (diff) | |
Fix more warnings
Diffstat (limited to 'MediaBrowser.Providers')
44 files changed, 631 insertions, 419 deletions
diff --git a/MediaBrowser.Providers/Books/AudioBookMetadataService.cs b/MediaBrowser.Providers/Books/AudioBookMetadataService.cs index 0062d5ab3..309241bfa 100644 --- a/MediaBrowser.Providers/Books/AudioBookMetadataService.cs +++ b/MediaBrowser.Providers/Books/AudioBookMetadataService.cs @@ -16,9 +16,8 @@ namespace MediaBrowser.Providers.Books ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, - IUserDataManager userDataManager, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { } diff --git a/MediaBrowser.Providers/Books/BookMetadataService.cs b/MediaBrowser.Providers/Books/BookMetadataService.cs index 358f87a0f..9d6a1ef59 100644 --- a/MediaBrowser.Providers/Books/BookMetadataService.cs +++ b/MediaBrowser.Providers/Books/BookMetadataService.cs @@ -11,6 +11,17 @@ namespace MediaBrowser.Providers.Books { public class BookMetadataService : MetadataService<Book, BookInfo> { + public BookMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) + { + } + + /// <inheritdoc /> protected override void MergeData(MetadataResult<Book> source, MetadataResult<Book> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); @@ -20,9 +31,5 @@ namespace MediaBrowser.Providers.Books target.Item.SeriesName = source.Item.SeriesName; } } - - public BookMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) - { - } } } diff --git a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs index 693edb143..5bf01232c 100644 --- a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs +++ b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs @@ -14,11 +14,35 @@ namespace MediaBrowser.Providers.BoxSets { public class BoxSetMetadataService : MetadataService<BoxSet, BoxSetInfo> { + public BoxSetMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) + { + } + + /// <inheritdoc /> + protected override bool EnableUpdatingGenresFromChildren => true; + + /// <inheritdoc /> + protected override bool EnableUpdatingOfficialRatingFromChildren => true; + + /// <inheritdoc /> + protected override bool EnableUpdatingStudiosFromChildren => true; + + /// <inheritdoc /> + protected override bool EnableUpdatingPremiereDateFromChildren => true; + + /// <inheritdoc /> protected override IList<BaseItem> GetChildrenForMetadataUpdates(BoxSet item) { return item.GetLinkedChildren(); } + /// <inheritdoc /> protected override void MergeData(MetadataResult<BoxSet> source, MetadataResult<BoxSet> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); @@ -32,6 +56,7 @@ namespace MediaBrowser.Providers.BoxSets } } + /// <inheritdoc /> protected override ItemUpdateType BeforeSaveInternal(BoxSet item, bool isFullRefresh, ItemUpdateType currentUpdateType) { var updateType = base.BeforeSaveInternal(item, isFullRefresh, currentUpdateType); @@ -47,17 +72,5 @@ namespace MediaBrowser.Providers.BoxSets return updateType; } - - public BoxSetMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) - { - } - - protected override bool EnableUpdatingGenresFromChildren => true; - - protected override bool EnableUpdatingOfficialRatingFromChildren => true; - - protected override bool EnableUpdatingStudiosFromChildren => true; - - protected override bool EnableUpdatingPremiereDateFromChildren => true; } } diff --git a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs index 0763a0163..da41f208c 100644 --- a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs +++ b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.Channels { public class ChannelMetadataService : MetadataService<Channel, ItemLookupInfo> { - protected override void MergeData(MetadataResult<Channel> source, MetadataResult<Channel> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public ChannelMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<Channel> source, MetadataResult<Channel> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs b/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs index 2c28b3e35..dd1b4709d 100644 --- a/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs +++ b/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs @@ -12,13 +12,20 @@ namespace MediaBrowser.Providers.Folders { public class CollectionFolderMetadataService : MetadataService<CollectionFolder, ItemLookupInfo> { - protected override void MergeData(MetadataResult<CollectionFolder> source, MetadataResult<CollectionFolder> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public CollectionFolderMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public CollectionFolderMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<CollectionFolder> source, MetadataResult<CollectionFolder> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/Folders/FolderMetadataService.cs b/MediaBrowser.Providers/Folders/FolderMetadataService.cs index bb1634422..8409e03fd 100644 --- a/MediaBrowser.Providers/Folders/FolderMetadataService.cs +++ b/MediaBrowser.Providers/Folders/FolderMetadataService.cs @@ -11,16 +11,24 @@ namespace MediaBrowser.Providers.Folders { public class FolderMetadataService : MetadataService<Folder, ItemLookupInfo> { + public FolderMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) + { + } + + /// <inheritdoc /> // Make sure the type-specific services get picked first public override int Order => 10; + /// <inheritdoc /> protected override void MergeData(MetadataResult<Folder> source, MetadataResult<Folder> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - - public FolderMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) - { - } } } diff --git a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs index 8d6e77aeb..2ceb71afc 100644 --- a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs +++ b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.Folders { public class UserViewMetadataService : MetadataService<UserView, ItemLookupInfo> { - protected override void MergeData(MetadataResult<UserView> source, MetadataResult<UserView> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public UserViewMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public UserViewMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<UserView> source, MetadataResult<UserView> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/Genres/GenreMetadataService.cs b/MediaBrowser.Providers/Genres/GenreMetadataService.cs index 28a46b008..932eb368c 100644 --- a/MediaBrowser.Providers/Genres/GenreMetadataService.cs +++ b/MediaBrowser.Providers/Genres/GenreMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.Genres { public class GenreMetadataService : MetadataService<Genre, ItemLookupInfo> { - protected override void MergeData(MetadataResult<Genre> source, MetadataResult<Genre> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public GenreMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<Genre> source, MetadataResult<Genre> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs index 6009d3a58..13dd97215 100644 --- a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs +++ b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.LiveTv { public class LiveTvMetadataService : MetadataService<LiveTvChannel, ItemLookupInfo> { - protected override void MergeData(MetadataResult<LiveTvChannel> source, MetadataResult<LiveTvChannel> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public LiveTvMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public LiveTvMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<LiveTvChannel> source, MetadataResult<LiveTvChannel> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs index 033aea146..e9179815e 100644 --- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs +++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs @@ -340,7 +340,7 @@ namespace MediaBrowser.Providers.Manager if (deleted) { - item.ValidateImages(new DirectoryService(_logger, _fileSystem)); + item.ValidateImages(new DirectoryService(_fileSystem)); } } diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index f0716f201..c3401f12b 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -23,16 +23,14 @@ namespace MediaBrowser.Providers.Manager protected readonly ILogger Logger; protected readonly IProviderManager ProviderManager; protected readonly IFileSystem FileSystem; - protected readonly IUserDataManager UserDataManager; protected readonly ILibraryManager LibraryManager; - protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) + protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, ILibraryManager libraryManager) { ServerConfigurationManager = serverConfigurationManager; Logger = logger; ProviderManager = providerManager; FileSystem = fileSystem; - UserDataManager = userDataManager; LibraryManager = libraryManager; } @@ -44,7 +42,7 @@ namespace MediaBrowser.Providers.Manager } catch (Exception ex) { - Logger.LogError(ex, "Error getting file {path}", path); + Logger.LogError(ex, "Error getting file {Path}", path); return null; } } diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 6a8d03f6d..631d063a5 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -328,7 +328,7 @@ namespace MediaBrowser.Providers.Manager return GetImageProviders(item, libraryOptions, options, new ImageRefreshOptions( - new DirectoryService(_logger, _fileSystem)), + new DirectoryService(_fileSystem)), includeDisabled) .OfType<IRemoteImageProvider>(); } @@ -507,7 +507,7 @@ namespace MediaBrowser.Providers.Manager var imageProviders = GetImageProviders(dummy, libraryOptions, options, new ImageRefreshOptions( - new DirectoryService(_logger, _fileSystem)), + new DirectoryService(_fileSystem)), true) .ToList(); diff --git a/MediaBrowser.Providers/Movies/MovieExternalIds.cs b/MediaBrowser.Providers/Movies/MovieExternalIds.cs index 09ed6034c..55810b1ed 100644 --- a/MediaBrowser.Providers/Movies/MovieExternalIds.cs +++ b/MediaBrowser.Providers/Movies/MovieExternalIds.cs @@ -9,17 +9,20 @@ namespace MediaBrowser.Providers.Movies { public class ImdbExternalId : IExternalId { + /// <inheritdoc /> public string Name => "IMDb"; + /// <inheritdoc /> public string Key => MetadataProviders.Imdb.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://www.imdb.com/title/{0}"; + /// <inheritdoc /> public bool Supports(IHasProviderIds item) { // Supports images for tv movies - var tvProgram = item as LiveTvProgram; - if (tvProgram != null && tvProgram.IsMovie) + if (item is LiveTvProgram tvProgram && tvProgram.IsMovie) { return true; } @@ -28,18 +31,18 @@ namespace MediaBrowser.Providers.Movies } } - public class ImdbPersonExternalId : IExternalId { + /// <inheritdoc /> public string Name => "IMDb"; + /// <inheritdoc /> public string Key => MetadataProviders.Imdb.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://www.imdb.com/name/{0}"; - public bool Supports(IHasProviderIds item) - { - return item is Person; - } + /// <inheritdoc /> + public bool Supports(IHasProviderIds item) => item is Person; } } diff --git a/MediaBrowser.Providers/Movies/MovieMetadataService.cs b/MediaBrowser.Providers/Movies/MovieMetadataService.cs index 41806e49b..c6cc5c7dc 100644 --- a/MediaBrowser.Providers/Movies/MovieMetadataService.cs +++ b/MediaBrowser.Providers/Movies/MovieMetadataService.cs @@ -1,5 +1,4 @@ using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; @@ -12,6 +11,17 @@ namespace MediaBrowser.Providers.Movies { public class MovieMetadataService : MetadataService<Movie, MovieInfo> { + public MovieMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) + { + } + + /// <inheritdoc /> protected override bool IsFullLocalMetadata(Movie item) { if (string.IsNullOrWhiteSpace(item.Overview)) @@ -25,6 +35,7 @@ namespace MediaBrowser.Providers.Movies return base.IsFullLocalMetadata(item); } + /// <inheritdoc /> protected override void MergeData(MetadataResult<Movie> source, MetadataResult<Movie> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); @@ -37,40 +48,5 @@ namespace MediaBrowser.Providers.Movies targetItem.CollectionName = sourceItem.CollectionName; } } - - public MovieMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) - { - } } - - public class TrailerMetadataService : MetadataService<Trailer, TrailerInfo> - { - protected override bool IsFullLocalMetadata(Trailer item) - { - if (string.IsNullOrWhiteSpace(item.Overview)) - { - return false; - } - if (!item.ProductionYear.HasValue) - { - return false; - } - return base.IsFullLocalMetadata(item); - } - - protected override void MergeData(MetadataResult<Trailer> source, MetadataResult<Trailer> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) - { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); - - if (replaceData || target.Item.TrailerTypes.Length == 0) - { - target.Item.TrailerTypes = source.Item.TrailerTypes; - } - } - - public TrailerMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) - { - } - } - } diff --git a/MediaBrowser.Providers/Movies/TrailerMetadataService.cs b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs new file mode 100644 index 000000000..53b556940 --- /dev/null +++ b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs @@ -0,0 +1,49 @@ +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.IO; +using MediaBrowser.Providers.Manager; +using Microsoft.Extensions.Logging; + +namespace MediaBrowser.Providers.Movies +{ + public class TrailerMetadataService : MetadataService<Trailer, TrailerInfo> + { + public TrailerMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) + { + } + + /// <inheritdoc /> + protected override bool IsFullLocalMetadata(Trailer item) + { + if (string.IsNullOrWhiteSpace(item.Overview)) + { + return false; + } + if (!item.ProductionYear.HasValue) + { + return false; + } + return base.IsFullLocalMetadata(item); + } + + /// <inheritdoc /> + protected override void MergeData(MetadataResult<Trailer> source, MetadataResult<Trailer> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); + + if (replaceData || target.Item.TrailerTypes.Length == 0) + { + target.Item.TrailerTypes = source.Item.TrailerTypes; + } + } + } +} diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs index 4e59b4119..69133c1c1 100644 --- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs +++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs @@ -20,9 +20,8 @@ namespace MediaBrowser.Providers.Music ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, - IUserDataManager userDataManager, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { } @@ -37,10 +36,7 @@ namespace MediaBrowser.Providers.Music /// <inheritdoc /> protected override IList<BaseItem> GetChildrenForMetadataUpdates(MusicAlbum item) - { - return item.GetRecursiveChildren(i => i is Audio) - .ToList(); - } + => item.GetRecursiveChildren(i => i is Audio); /// <inheritdoc /> protected override ItemUpdateType UpdateMetadataFromChildren(MusicAlbum item, IList<BaseItem> children, bool isFullRefresh, ItemUpdateType currentUpdateType) @@ -53,20 +49,18 @@ namespace MediaBrowser.Providers.Music { var name = children.Select(i => i.Album).FirstOrDefault(i => !string.IsNullOrEmpty(i)); - if (!string.IsNullOrEmpty(name)) + if (!string.IsNullOrEmpty(name) + && !string.Equals(item.Name, name, StringComparison.Ordinal)) { - if (!string.Equals(item.Name, name, StringComparison.Ordinal)) - { - item.Name = name; - updateType = updateType | ItemUpdateType.MetadataEdit; - } + item.Name = name; + updateType |= ItemUpdateType.MetadataEdit; } } var songs = children.Cast<Audio>().ToArray(); - updateType = updateType | SetAlbumArtistFromSongs(item, songs); - updateType = updateType | SetArtistsFromSongs(item, songs); + updateType |= SetAlbumArtistFromSongs(item, songs); + updateType |= SetArtistsFromSongs(item, songs); } return updateType; diff --git a/MediaBrowser.Providers/Music/ArtistMetadataService.cs b/MediaBrowser.Providers/Music/ArtistMetadataService.cs index 5b8782554..1f099c60f 100644 --- a/MediaBrowser.Providers/Music/ArtistMetadataService.cs +++ b/MediaBrowser.Providers/Music/ArtistMetadataService.cs @@ -13,26 +13,35 @@ namespace MediaBrowser.Providers.Music { public class ArtistMetadataService : MetadataService<MusicArtist, ArtistInfo> { - protected override IList<BaseItem> GetChildrenForMetadataUpdates(MusicArtist item) + public ArtistMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - return item.IsAccessedByName ? - item.GetTaggedItems(new InternalItemsQuery - { - Recursive = true, - IsFolder = false - }) : - item.GetRecursiveChildren(i => i is IHasArtist && !i.IsFolder); } + /// <inheritdoc /> protected override bool EnableUpdatingGenresFromChildren => true; - protected override void MergeData(MetadataResult<MusicArtist> source, MetadataResult<MusicArtist> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + /// <inheritdoc /> + protected override IList<BaseItem> GetChildrenForMetadataUpdates(MusicArtist item) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); + return item.IsAccessedByName + ? item.GetTaggedItems(new InternalItemsQuery + { + Recursive = true, + IsFolder = false + }) + : item.GetRecursiveChildren(i => i is IHasArtist && !i.IsFolder); } - public ArtistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<MusicArtist> source, MetadataResult<MusicArtist> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/Music/AudioDbAlbumImageProvider.cs b/MediaBrowser.Providers/Music/AudioDbAlbumImageProvider.cs index c2a8431cd..85a87630d 100644 --- a/MediaBrowser.Providers/Music/AudioDbAlbumImageProvider.cs +++ b/MediaBrowser.Providers/Music/AudioDbAlbumImageProvider.cs @@ -25,6 +25,14 @@ namespace MediaBrowser.Providers.Music _json = json; } + /// <inheritdoc /> + public string Name => "TheAudioDB"; + + /// <inheritdoc /> + // After embedded and fanart + public int Order => 2; + + /// <inheritdoc /> public IEnumerable<ImageType> GetSupportedImages(BaseItem item) { return new List<ImageType> @@ -34,6 +42,7 @@ namespace MediaBrowser.Providers.Music }; } + /// <inheritdoc /> public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken) { var id = item.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); @@ -82,6 +91,7 @@ namespace MediaBrowser.Providers.Music return list; } + /// <inheritdoc /> public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) { return _httpClient.GetResponse(new HttpRequestOptions @@ -91,13 +101,7 @@ namespace MediaBrowser.Providers.Music }); } - public string Name => "TheAudioDB"; - // After embedded and fanart - public int Order => 2; - - public bool Supports(BaseItem item) - { - return item is MusicAlbum; - } + /// <inheritdoc /> + public bool Supports(BaseItem item) => item is MusicAlbum; } } diff --git a/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs b/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs index 7ccf7cffa..e61d8792c 100644 --- a/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.Configuration; @@ -26,8 +27,6 @@ namespace MediaBrowser.Providers.Music public static AudioDbAlbumProvider Current; - private readonly CultureInfo _usCulture = new CultureInfo("en-US"); - public AudioDbAlbumProvider(IServerConfigurationManager config, IFileSystem fileSystem, IHttpClient httpClient, IJsonSerializer json) { _config = config; @@ -38,11 +37,18 @@ namespace MediaBrowser.Providers.Music Current = this; } + /// <inheritdoc /> + public string Name => "TheAudioDB"; + + /// <inheritdoc /> + // After music brainz + public int Order => 1; + + /// <inheritdoc /> public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(AlbumInfo searchInfo, CancellationToken cancellationToken) - { - return Task.FromResult((IEnumerable<RemoteSearchResult>)new List<RemoteSearchResult>()); - } + => Task.FromResult(Enumerable.Empty<RemoteSearchResult>()); + /// <inheritdoc /> public async Task<MetadataResult<MusicAlbum>> GetMetadata(AlbumInfo info, CancellationToken cancellationToken) { var result = new MetadataResult<MusicAlbum>(); @@ -77,7 +83,7 @@ namespace MediaBrowser.Providers.Music if (!string.IsNullOrEmpty(result.intYearReleased)) { - item.ProductionYear = int.Parse(result.intYearReleased, _usCulture); + item.ProductionYear = int.Parse(result.intYearReleased, CultureInfo.InvariantCulture); } if (!string.IsNullOrEmpty(result.strGenre)) @@ -126,8 +132,6 @@ namespace MediaBrowser.Providers.Music item.Overview = (overview ?? string.Empty).StripHtml(); } - public string Name => "TheAudioDB"; - internal Task EnsureInfo(string musicBrainzReleaseGroupId, CancellationToken cancellationToken) { var xmlPath = GetAlbumInfoPath(_config.ApplicationPaths, musicBrainzReleaseGroupId); @@ -155,20 +159,18 @@ namespace MediaBrowser.Providers.Music Directory.CreateDirectory(Path.GetDirectoryName(path)); - using (var httpResponse = await _httpClient.SendAsync(new HttpRequestOptions - { - Url = url, - CancellationToken = cancellationToken + using (var httpResponse = await _httpClient.SendAsync( + new HttpRequestOptions + { + Url = url, + CancellationToken = cancellationToken - }, "GET").ConfigureAwait(false)) + }, + "GET").ConfigureAwait(false)) + using (var response = httpResponse.Content) + using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) { - using (var response = httpResponse.Content) - { - using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) - { - await response.CopyToAsync(xmlFileStream).ConfigureAwait(false); - } - } + await response.CopyToAsync(xmlFileStream).ConfigureAwait(false); } } @@ -192,8 +194,6 @@ namespace MediaBrowser.Providers.Music return Path.Combine(dataPath, "album.json"); } - // After music brainz - public int Order => 1; public class Album { @@ -242,6 +242,7 @@ namespace MediaBrowser.Providers.Music public List<Album> album { get; set; } } + /// <inheritdoc /> public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) { throw new NotImplementedException(); diff --git a/MediaBrowser.Providers/Music/AudioDbArtistImageProvider.cs b/MediaBrowser.Providers/Music/AudioDbArtistImageProvider.cs index c59e9551c..b9315744f 100644 --- a/MediaBrowser.Providers/Music/AudioDbArtistImageProvider.cs +++ b/MediaBrowser.Providers/Music/AudioDbArtistImageProvider.cs @@ -25,6 +25,14 @@ namespace MediaBrowser.Providers.Music _httpClient = httpClient; } + /// <inheritdoc /> + public string Name => "TheAudioDB"; + + /// <inheritdoc /> + // After fanart + public int Order => 1; + + /// <inheritdoc /> public IEnumerable<ImageType> GetSupportedImages(BaseItem item) { return new List<ImageType> @@ -36,6 +44,7 @@ namespace MediaBrowser.Providers.Music }; } + /// <inheritdoc /> public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken) { var id = item.GetProviderId(MetadataProviders.MusicBrainzArtist); @@ -133,13 +142,7 @@ namespace MediaBrowser.Providers.Music }); } - public string Name => "TheAudioDB"; - - public bool Supports(BaseItem item) - { - return item is MusicArtist; - } - // After fanart - public int Order => 1; + /// <inheritdoc /> + public bool Supports(BaseItem item) => item is MusicArtist; } } diff --git a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs index 2540a6047..583c01b7c 100644 --- a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs +++ b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.Configuration; @@ -37,11 +38,18 @@ namespace MediaBrowser.Providers.Music Current = this; } + /// <inheritdoc /> + public string Name => "TheAudioDB"; + + /// <inheritdoc /> + // After musicbrainz + public int Order => 1; + + /// <inheritdoc /> public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ArtistInfo searchInfo, CancellationToken cancellationToken) - { - return Task.FromResult((IEnumerable<RemoteSearchResult>)new List<RemoteSearchResult>()); - } + => Task.FromResult(Enumerable.Empty<RemoteSearchResult>()); + /// <inheritdoc /> public async Task<MetadataResult<MusicArtist>> GetMetadata(ArtistInfo info, CancellationToken cancellationToken) { var result = new MetadataResult<MusicArtist>(); @@ -114,20 +122,16 @@ namespace MediaBrowser.Providers.Music item.Overview = (overview ?? string.Empty).StripHtml(); } - public string Name => "TheAudioDB"; - internal Task EnsureArtistInfo(string musicBrainzId, CancellationToken cancellationToken) { var xmlPath = GetArtistInfoPath(_config.ApplicationPaths, musicBrainzId); var fileInfo = _fileSystem.GetFileSystemInfo(xmlPath); - if (fileInfo.Exists) + if (fileInfo.Exists + && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 2) { - if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 2) - { - return Task.CompletedTask; - } + return Task.CompletedTask; } return DownloadArtistInfo(musicBrainzId, cancellationToken); @@ -141,22 +145,22 @@ namespace MediaBrowser.Providers.Music var path = GetArtistInfoPath(_config.ApplicationPaths, musicBrainzId); - using (var httpResponse = await _httpClient.SendAsync(new HttpRequestOptions - { - Url = url, - CancellationToken = cancellationToken, - BufferContent = true + using (var httpResponse = await _httpClient.SendAsync( + new HttpRequestOptions + { + Url = url, + CancellationToken = cancellationToken, + BufferContent = true - }, "GET").ConfigureAwait(false)) + }, + "GET").ConfigureAwait(false)) + using (var response = httpResponse.Content) { - using (var response = httpResponse.Content) - { - Directory.CreateDirectory(Path.GetDirectoryName(path)); + Directory.CreateDirectory(Path.GetDirectoryName(path)); - using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) - { - await response.CopyToAsync(xmlFileStream).ConfigureAwait(false); - } + using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + { + await response.CopyToAsync(xmlFileStream).ConfigureAwait(false); } } } @@ -168,11 +172,7 @@ namespace MediaBrowser.Providers.Music /// <param name="musicBrainzArtistId">The music brainz artist identifier.</param> /// <returns>System.String.</returns> private static string GetArtistDataPath(IApplicationPaths appPaths, string musicBrainzArtistId) - { - var dataPath = Path.Combine(GetArtistDataPath(appPaths), musicBrainzArtistId); - - return dataPath; - } + => Path.Combine(GetArtistDataPath(appPaths), musicBrainzArtistId); /// <summary> /// Gets the artist data path. @@ -180,11 +180,7 @@ namespace MediaBrowser.Providers.Music /// <param name="appPaths">The application paths.</param> /// <returns>System.String.</returns> private static string GetArtistDataPath(IApplicationPaths appPaths) - { - var dataPath = Path.Combine(appPaths.CachePath, "audiodb-artist"); - - return dataPath; - } + => Path.Combine(appPaths.CachePath, "audiodb-artist"); internal static string GetArtistInfoPath(IApplicationPaths appPaths, string musicBrainzArtistId) { @@ -242,9 +238,8 @@ namespace MediaBrowser.Providers.Music { public List<Artist> artists { get; set; } } - // After musicbrainz - public int Order => 1; + /// <inheritdoc /> public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) { throw new NotImplementedException(); diff --git a/MediaBrowser.Providers/Music/AudioDbExternalIds.cs b/MediaBrowser.Providers/Music/AudioDbExternalIds.cs index 3e1022d7d..cf3b49881 100644 --- a/MediaBrowser.Providers/Music/AudioDbExternalIds.cs +++ b/MediaBrowser.Providers/Music/AudioDbExternalIds.cs @@ -6,58 +6,63 @@ namespace MediaBrowser.Providers.Music { public class AudioDbAlbumExternalId : IExternalId { + /// <inheritdoc /> public string Name => "TheAudioDb"; + /// <inheritdoc /> public string Key => MetadataProviders.AudioDbAlbum.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://www.theaudiodb.com/album/{0}"; + /// <inheritdoc /> public bool Supports(IHasProviderIds item) - { - return item is MusicAlbum; - } + => item is MusicAlbum; } public class AudioDbOtherAlbumExternalId : IExternalId { + /// <inheritdoc /> public string Name => "TheAudioDb Album"; + /// <inheritdoc /> public string Key => MetadataProviders.AudioDbAlbum.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://www.theaudiodb.com/album/{0}"; - public bool Supports(IHasProviderIds item) - { - return item is Audio; - } + /// <inheritdoc /> + public bool Supports(IHasProviderIds item) => item is Audio; } public class AudioDbArtistExternalId : IExternalId { + /// <inheritdoc /> public string Name => "TheAudioDb"; + /// <inheritdoc /> public string Key => MetadataProviders.AudioDbArtist.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://www.theaudiodb.com/artist/{0}"; - public bool Supports(IHasProviderIds item) - { - return item is MusicArtist; - } + /// <inheritdoc /> + public bool Supports(IHasProviderIds item) => item is MusicArtist; } public class AudioDbOtherArtistExternalId : IExternalId { + /// <inheritdoc /> public string Name => "TheAudioDb Artist"; + /// <inheritdoc /> public string Key => MetadataProviders.AudioDbArtist.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://www.theaudiodb.com/artist/{0}"; + /// <inheritdoc /> public bool Supports(IHasProviderIds item) - { - return item is Audio || item is MusicAlbum; - } + => item is Audio || item is MusicAlbum; } - } diff --git a/MediaBrowser.Providers/Music/AudioMetadataService.cs b/MediaBrowser.Providers/Music/AudioMetadataService.cs index 3bf854b91..4d4739cef 100644 --- a/MediaBrowser.Providers/Music/AudioMetadataService.cs +++ b/MediaBrowser.Providers/Music/AudioMetadataService.cs @@ -16,9 +16,8 @@ namespace MediaBrowser.Providers.Music ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, - IUserDataManager userDataManager, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { } diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs index 179e953f4..8e71b625e 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Globalization; using System.IO; using System.Linq; using System.Net; @@ -14,7 +15,6 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -using MediaBrowser.Model.Serialization; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; @@ -22,16 +22,6 @@ namespace MediaBrowser.Providers.Music { public class MusicBrainzAlbumProvider : IRemoteMetadataProvider<MusicAlbum, AlbumInfo>, IHasOrder { - internal static MusicBrainzAlbumProvider Current; - - private readonly IHttpClient _httpClient; - private readonly IApplicationHost _appHost; - private readonly ILogger _logger; - private readonly IJsonSerializer _json; - private Stopwatch _stopWatchMusicBrainz = new Stopwatch(); - - public readonly string MusicBrainzBaseUrl; - /// <summary> /// The Jellyfin user-agent is unrestricted but source IP must not exceed /// one request per second, therefore we rate limit to avoid throttling. @@ -47,19 +37,27 @@ namespace MediaBrowser.Providers.Music /// </summary> private const uint MusicBrainzQueryAttempts = 5u; + internal static MusicBrainzAlbumProvider Current; + + private readonly IHttpClient _httpClient; + private readonly IApplicationHost _appHost; + private readonly ILogger _logger; + + private readonly string _musicBrainzBaseUrl; + + private Stopwatch _stopWatchMusicBrainz = new Stopwatch(); + public MusicBrainzAlbumProvider( IHttpClient httpClient, IApplicationHost appHost, ILogger logger, - IJsonSerializer json, IConfiguration configuration) { _httpClient = httpClient; _appHost = appHost; _logger = logger; - _json = json; - MusicBrainzBaseUrl = configuration["MusicBrainz:BaseUrl"]; + _musicBrainzBaseUrl = configuration["MusicBrainz:BaseUrl"]; // Use a stopwatch to ensure we don't exceed the MusicBrainz rate limit _stopWatchMusicBrainz.Start(); @@ -67,6 +65,13 @@ namespace MediaBrowser.Providers.Music Current = this; } + /// <inheritdoc /> + public string Name => "MusicBrainz"; + + /// <inheritdoc /> + public int Order => 0; + + /// <inheritdoc /> public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(AlbumInfo searchInfo, CancellationToken cancellationToken) { var releaseId = searchInfo.GetReleaseId(); @@ -76,11 +81,11 @@ namespace MediaBrowser.Providers.Music if (!string.IsNullOrEmpty(releaseId)) { - url = string.Format("/ws/2/release/?query=reid:{0}", releaseId); + url = "/ws/2/release/?query=reid:" + releaseId.ToString(CultureInfo.InvariantCulture); } else if (!string.IsNullOrEmpty(releaseGroupId)) { - url = string.Format("/ws/2/release?release-group={0}", releaseGroupId); + url = "/ws/2/release?release-group=" + releaseGroupId.ToString(CultureInfo.InvariantCulture); } else { @@ -88,7 +93,9 @@ namespace MediaBrowser.Providers.Music if (!string.IsNullOrWhiteSpace(artistMusicBrainzId)) { - url = string.Format("/ws/2/release/?query=\"{0}\" AND arid:{1}", + url = string.Format( + CultureInfo.InvariantCulture, + "/ws/2/release/?query=\"{0}\" AND arid:{1}", WebUtility.UrlEncode(searchInfo.Name), artistMusicBrainzId); } @@ -97,7 +104,9 @@ namespace MediaBrowser.Providers.Music // I'm sure there is a better way but for now it resolves search for 12" Mixes var queryName = searchInfo.Name.Replace("\"", string.Empty); - url = string.Format("/ws/2/release/?query=\"{0}\" AND artist:\"{1}\"", + url = string.Format( + CultureInfo.InvariantCulture, + "/ws/2/release/?query=\"{0}\" AND artist:\"{1}\"", WebUtility.UrlEncode(queryName), WebUtility.UrlEncode(searchInfo.GetAlbumArtist())); } @@ -106,11 +115,9 @@ namespace MediaBrowser.Providers.Music if (!string.IsNullOrWhiteSpace(url)) { using (var response = await GetMusicBrainzResponse(url, cancellationToken).ConfigureAwait(false)) + using (var stream = response.Content) { - using (var stream = response.Content) - { - return GetResultsFromResponse(stream); - } + return GetResultsFromResponse(stream); } } @@ -156,6 +163,7 @@ namespace MediaBrowser.Providers.Music { result.SetProviderId(MetadataProviders.MusicBrainzAlbum, i.ReleaseId); } + if (!string.IsNullOrWhiteSpace(i.ReleaseGroupId)) { result.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, i.ReleaseGroupId); @@ -168,6 +176,7 @@ namespace MediaBrowser.Providers.Music } } + /// <inheritdoc /> public async Task<MetadataResult<MusicAlbum>> GetMetadata(AlbumInfo id, CancellationToken cancellationToken) { var releaseId = id.GetReleaseId(); @@ -238,8 +247,6 @@ namespace MediaBrowser.Providers.Music return result; } - public string Name => "MusicBrainz"; - private Task<ReleaseResult> GetReleaseResult(string artistMusicBrainId, string artistName, string albumName, CancellationToken cancellationToken) { if (!string.IsNullOrEmpty(artistMusicBrainId)) @@ -282,7 +289,9 @@ namespace MediaBrowser.Providers.Music private async Task<ReleaseResult> GetReleaseResultByArtistName(string albumName, string artistName, CancellationToken cancellationToken) { - var url = string.Format("/ws/2/release/?query=\"{0}\" AND artist:\"{1}\"", + var url = string.Format( + CultureInfo.InvariantCulture, + "/ws/2/release/?query=\"{0}\" AND artist:\"{1}\"", WebUtility.UrlEncode(albumName), WebUtility.UrlEncode(artistName)); @@ -334,6 +343,7 @@ namespace MediaBrowser.Providers.Music reader.Read(); continue; } + using (var subReader = reader.ReadSubtree()) { return ParseReleaseList(subReader).ToList(); @@ -601,7 +611,7 @@ namespace MediaBrowser.Providers.Music private async Task<string> GetReleaseIdFromReleaseGroupId(string releaseGroupId, CancellationToken cancellationToken) { - var url = string.Format("/ws/2/release?release-group={0}", releaseGroupId); + var url = "/ws/2/release?release-group=" + releaseGroupId.ToString(CultureInfo.InvariantCulture); using (var response = await GetMusicBrainzResponse(url, cancellationToken).ConfigureAwait(false)) using (var stream = response.Content) @@ -637,7 +647,7 @@ namespace MediaBrowser.Providers.Music /// <returns>Task{System.String}.</returns> private async Task<string> GetReleaseGroupFromReleaseId(string releaseEntryId, CancellationToken cancellationToken) { - var url = string.Format("/ws/2/release-group/?query=reid:{0}", releaseEntryId); + var url = "/ws/2/release-group/?query=reid:" + releaseEntryId.ToString(CultureInfo.InvariantCulture); using (var response = await GetMusicBrainzResponse(url, cancellationToken).ConfigureAwait(false)) using (var stream = response.Content) @@ -687,6 +697,7 @@ namespace MediaBrowser.Providers.Music reader.Read(); } } + return null; } } @@ -734,11 +745,15 @@ namespace MediaBrowser.Providers.Music { var options = new HttpRequestOptions { - Url = MusicBrainzBaseUrl.TrimEnd('/') + url, + Url = _musicBrainzBaseUrl.TrimEnd('/') + url, CancellationToken = cancellationToken, // MusicBrainz request a contact email address is supplied, as comment, in user agent field: // https://musicbrainz.org/doc/XML_Web_Service/Rate_Limiting#User-Agent - UserAgent = string.Format("{0} ( {1} )", _appHost.ApplicationUserAgent, _appHost.ApplicationUserAgentAddress), + UserAgent = string.Format( + CultureInfo.InvariantCulture, + "{0} ( {1} )", + _appHost.ApplicationUserAgent, + _appHost.ApplicationUserAgentAddress), BufferContent = false }; @@ -768,7 +783,7 @@ namespace MediaBrowser.Providers.Music while (attempts < MusicBrainzQueryAttempts && response.StatusCode == HttpStatusCode.ServiceUnavailable); // Log error if unable to query MB database due to throttling - if (attempts == MusicBrainzQueryAttempts && response.StatusCode == HttpStatusCode.ServiceUnavailable ) + if (attempts == MusicBrainzQueryAttempts && response.StatusCode == HttpStatusCode.ServiceUnavailable) { _logger.LogError("GetMusicBrainzResponse: 503 Service Unavailable (throttled) response received {0} times whilst requesting {1}", attempts, options.Url); } @@ -776,8 +791,7 @@ namespace MediaBrowser.Providers.Music return response; } - public int Order => 0; - + /// <inheritdoc /> public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) { throw new NotImplementedException(); diff --git a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs index 728f7731a..5d675392c 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Net; @@ -18,25 +19,19 @@ namespace MediaBrowser.Providers.Music { public class MusicBrainzArtistProvider : IRemoteMetadataProvider<MusicArtist, ArtistInfo> { - public MusicBrainzArtistProvider() - { - - } - + /// <inheritdoc /> public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ArtistInfo searchInfo, CancellationToken cancellationToken) { var musicBrainzId = searchInfo.GetMusicBrainzArtistId(); if (!string.IsNullOrWhiteSpace(musicBrainzId)) { - var url = string.Format("/ws/2/artist/?query=arid:{0}", musicBrainzId); + var url = "/ws/2/artist/?query=arid:{0}" + musicBrainzId.ToString(CultureInfo.InvariantCulture); using (var response = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, cancellationToken).ConfigureAwait(false)) + using (var stream = response.Content) { - using (var stream = response.Content) - { - return GetResultsFromResponse(stream); - } + return GetResultsFromResponse(stream); } } else @@ -47,15 +42,13 @@ namespace MediaBrowser.Providers.Music var url = string.Format("/ws/2/artist/?query=\"{0}\"&dismax=true", UrlEncode(nameToSearch)); using (var response = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, cancellationToken).ConfigureAwait(false)) + using (var stream = response.Content) { - using (var stream = response.Content) - { - var results = GetResultsFromResponse(stream).ToList(); + var results = GetResultsFromResponse(stream).ToList(); - if (results.Count > 0) - { - return results; - } + if (results.Count > 0) + { + return results; } } diff --git a/MediaBrowser.Providers/Music/MusicExternalIds.cs b/MediaBrowser.Providers/Music/MusicExternalIds.cs index 614de11ca..2adaf6fa4 100644 --- a/MediaBrowser.Providers/Music/MusicExternalIds.cs +++ b/MediaBrowser.Providers/Music/MusicExternalIds.cs @@ -7,99 +7,113 @@ namespace MediaBrowser.Providers.Music { public class MusicBrainzReleaseGroupExternalId : IExternalId { + /// <inheritdoc /> public string Name => "MusicBrainz Release Group"; + /// <inheritdoc /> public string Key => MetadataProviders.MusicBrainzReleaseGroup.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://musicbrainz.org/release-group/{0}"; + /// <inheritdoc /> public bool Supports(IHasProviderIds item) - { - return item is Audio || item is MusicAlbum; - } + => item is Audio || item is MusicAlbum; } public class MusicBrainzAlbumArtistExternalId : IExternalId { + /// <inheritdoc /> public string Name => "MusicBrainz Album Artist"; + /// <inheritdoc /> public string Key => MetadataProviders.MusicBrainzAlbumArtist.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://musicbrainz.org/artist/{0}"; + /// <inheritdoc /> public bool Supports(IHasProviderIds item) - { - return item is Audio; - } + => item is Audio; } public class MusicBrainzAlbumExternalId : IExternalId { + /// <inheritdoc /> public string Name => "MusicBrainz Album"; + /// <inheritdoc /> public string Key => MetadataProviders.MusicBrainzAlbum.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://musicbrainz.org/release/{0}"; + /// <inheritdoc /> public bool Supports(IHasProviderIds item) - { - return item is Audio || item is MusicAlbum; - } + => item is Audio || item is MusicAlbum; } public class MusicBrainzArtistExternalId : IExternalId { + /// <inheritdoc /> public string Name => "MusicBrainz"; + /// <inheritdoc /> public string Key => MetadataProviders.MusicBrainzArtist.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://musicbrainz.org/artist/{0}"; - public bool Supports(IHasProviderIds item) - { - return item is MusicArtist; - } + /// <inheritdoc /> + public bool Supports(IHasProviderIds item) => item is MusicArtist; } public class MusicBrainzOtherArtistExternalId : IExternalId { + /// <inheritdoc /> public string Name => "MusicBrainz Artist"; + /// <inheritdoc /> + public string Key => MetadataProviders.MusicBrainzArtist.ToString(); + /// <inheritdoc /> + public string UrlFormatString => "https://musicbrainz.org/artist/{0}"; + /// <inheritdoc /> public bool Supports(IHasProviderIds item) - { - return item is Audio || item is MusicAlbum; - } + => item is Audio || item is MusicAlbum; } public class MusicBrainzTrackId : IExternalId { + /// <inheritdoc /> public string Name => "MusicBrainz Track"; + /// <inheritdoc /> public string Key => MetadataProviders.MusicBrainzTrack.ToString(); + /// <inheritdoc /> public string UrlFormatString => "https://musicbrainz.org/track/{0}"; - public bool Supports(IHasProviderIds item) - { - return item is Audio; - } + /// <inheritdoc /> + public bool Supports(IHasProviderIds item) => item is Audio; } public class ImvdbId : IExternalId { + /// <inheritdoc /> public string Name => "IMVDb"; + /// <inheritdoc /> public string Key => "IMVDb"; + /// <inheritdoc /> public string UrlFormatString => null; + /// <inheritdoc /> public bool Supports(IHasProviderIds item) - { - return item is MusicVideo; - } + => item is MusicVideo; } } diff --git a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs index c743ffcb0..bbf0cd8db 100644 --- a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs +++ b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs @@ -16,9 +16,8 @@ namespace MediaBrowser.Providers.Music ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, - IUserDataManager userDataManager, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { } diff --git a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs index d25ddb220..d74e91ad6 100644 --- a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs +++ b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.MusicGenres { public class MusicGenreMetadataService : MetadataService<MusicGenre, ItemLookupInfo> { - protected override void MergeData(MetadataResult<MusicGenre> source, MetadataResult<MusicGenre> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public MusicGenreMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public MusicGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<MusicGenre> source, MetadataResult<MusicGenre> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/People/PersonMetadataService.cs b/MediaBrowser.Providers/People/PersonMetadataService.cs index adbeb94ea..cdc3c77b7 100644 --- a/MediaBrowser.Providers/People/PersonMetadataService.cs +++ b/MediaBrowser.Providers/People/PersonMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.People { public class PersonMetadataService : MetadataService<Person, PersonLookupInfo> { - protected override void MergeData(MetadataResult<Person> source, MetadataResult<Person> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public PersonMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public PersonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<Person> source, MetadataResult<Person> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs index 8c8b99e89..50476044b 100644 --- a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs +++ b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs @@ -32,23 +32,22 @@ namespace MediaBrowser.Providers.People _tvDbClientManager = tvDbClientManager; } - public string Name => ProviderName; + /// <inheritdoc /> + public string Name => "TheTVDB"; - public static string ProviderName => "TheTVDB"; + /// <inheritdoc /> + public int Order => 1; - public bool Supports(BaseItem item) - { - return item is Person; - } + /// <inheritdoc /> + public bool Supports(BaseItem item) => item is Person; + /// <inheritdoc /> public IEnumerable<ImageType> GetSupportedImages(BaseItem item) { - return new List<ImageType> - { - ImageType.Primary - }; + yield return ImageType.Primary; } + /// <inheritdoc /> public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken) { var seriesWithPerson = _libraryManager.GetItemList(new InternalItemsQuery @@ -104,8 +103,7 @@ namespace MediaBrowser.Providers.People } } - public int Order => 1; - + /// <inheritdoc /> public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) { return _httpClient.GetResponse(new HttpRequestOptions diff --git a/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs b/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs index 993581cca..845404dfb 100644 --- a/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs +++ b/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.Photos { public class PhotoAlbumMetadataService : MetadataService<PhotoAlbum, ItemLookupInfo> { - protected override void MergeData(MetadataResult<PhotoAlbum> source, MetadataResult<PhotoAlbum> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public PhotoAlbumMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public PhotoAlbumMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<PhotoAlbum> source, MetadataResult<PhotoAlbum> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs index b739c5765..5d6ff8814 100644 --- a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs +++ b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.Photos { public class PhotoMetadataService : MetadataService<Photo, ItemLookupInfo> { - protected override void MergeData(MetadataResult<Photo> source, MetadataResult<Photo> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public PhotoMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public PhotoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<Photo> source, MetadataResult<Photo> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs index 30ce5c64c..32bd6c282 100644 --- a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs +++ b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs @@ -13,11 +13,30 @@ namespace MediaBrowser.Providers.Playlists { public class PlaylistMetadataService : MetadataService<Playlist, ItemLookupInfo> { - protected override IList<BaseItem> GetChildrenForMetadataUpdates(Playlist item) + public PlaylistMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - return item.GetLinkedChildren(); } + /// <inheritdoc /> + protected override bool EnableUpdatingGenresFromChildren => true; + + /// <inheritdoc /> + protected override bool EnableUpdatingOfficialRatingFromChildren => true; + + /// <inheritdoc /> + protected override bool EnableUpdatingStudiosFromChildren => true; + + /// <inheritdoc /> + protected override IList<BaseItem> GetChildrenForMetadataUpdates(Playlist item) + => item.GetLinkedChildren(); + + /// <inheritdoc /> protected override void MergeData(MetadataResult<Playlist> source, MetadataResult<Playlist> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); @@ -32,15 +51,5 @@ namespace MediaBrowser.Providers.Playlists targetItem.Shares = sourceItem.Shares; } } - - public PlaylistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) - { - } - - protected override bool EnableUpdatingGenresFromChildren => true; - - protected override bool EnableUpdatingOfficialRatingFromChildren => true; - - protected override bool EnableUpdatingStudiosFromChildren => true; } } diff --git a/MediaBrowser.Providers/Studios/StudioMetadataService.cs b/MediaBrowser.Providers/Studios/StudioMetadataService.cs index 78204dccf..6fa30c753 100644 --- a/MediaBrowser.Providers/Studios/StudioMetadataService.cs +++ b/MediaBrowser.Providers/Studios/StudioMetadataService.cs @@ -11,13 +11,19 @@ namespace MediaBrowser.Providers.Studios { public class StudioMetadataService : MetadataService<Studio, ItemLookupInfo> { - protected override void MergeData(MetadataResult<Studio> source, MetadataResult<Studio> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public StudioMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public StudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<Studio> source, MetadataResult<Studio> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs index b4a4c36e5..c6199399d 100644 --- a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs +++ b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs @@ -19,6 +19,7 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.IO; using MediaBrowser.Model.Providers; using Microsoft.Extensions.Logging; +using static MediaBrowser.Model.IO.StreamDefaults; namespace MediaBrowser.Providers.Subtitles { @@ -30,8 +31,6 @@ namespace MediaBrowser.Providers.Subtitles private readonly ILibraryMonitor _monitor; private readonly IMediaSourceManager _mediaSourceManager; - public event EventHandler<SubtitleDownloadFailureEventArgs> SubtitleDownloadFailure; - private ILocalizationManager _localization; public SubtitleManager( @@ -48,17 +47,18 @@ namespace MediaBrowser.Providers.Subtitles _localization = localizationManager; } + /// <inheritdoc /> + public event EventHandler<SubtitleDownloadFailureEventArgs> SubtitleDownloadFailure; + + /// <inheritdoc /> public void AddParts(IEnumerable<ISubtitleProvider> subtitleProviders) { _subtitleProviders = subtitleProviders - .OrderBy(i => - { - var hasOrder = i as IHasOrder; - return hasOrder == null ? 0 : hasOrder.Order; - }) + .OrderBy(i => !(i is IHasOrder hasOrder) ? 0 : hasOrder.Order) .ToArray(); } + /// <inheritdoc /> public async Task<RemoteSubtitleInfo[]> SearchSubtitles(SubtitleSearchRequest request, CancellationToken cancellationToken) { if (request.Language != null) @@ -104,7 +104,7 @@ namespace MediaBrowser.Providers.Subtitles _logger.LogError(ex, "Error downloading subtitles from {Provider}", provider.Name); } } - return new RemoteSubtitleInfo[] { }; + return Array.Empty<RemoteSubtitleInfo>(); } var tasks = providers.Select(async i => @@ -120,7 +120,7 @@ namespace MediaBrowser.Providers.Subtitles catch (Exception ex) { _logger.LogError(ex, "Error downloading subtitles from {0}", i.Name); - return new RemoteSubtitleInfo[] { }; + return Array.Empty<RemoteSubtitleInfo>(); } }); @@ -129,6 +129,7 @@ namespace MediaBrowser.Providers.Subtitles return results.SelectMany(i => i).ToArray(); } + /// <inheritdoc /> public Task DownloadSubtitles(Video video, string subtitleId, CancellationToken cancellationToken) { var libraryOptions = BaseItem.LibraryManager.GetLibraryOptions(video); @@ -136,7 +137,9 @@ namespace MediaBrowser.Providers.Subtitles return DownloadSubtitles(video, libraryOptions, subtitleId, cancellationToken); } - public async Task DownloadSubtitles(Video video, + /// <inheritdoc /> + public async Task DownloadSubtitles( + Video video, LibraryOptions libraryOptions, string subtitleId, CancellationToken cancellationToken) @@ -151,31 +154,29 @@ namespace MediaBrowser.Providers.Subtitles var response = await GetRemoteSubtitles(subtitleId, cancellationToken).ConfigureAwait(false); using (var stream = response.Stream) + using (var memoryStream = new MemoryStream()) { - using (var memoryStream = new MemoryStream()) - { - await stream.CopyToAsync(memoryStream).ConfigureAwait(false); - memoryStream.Position = 0; + await stream.CopyToAsync(memoryStream).ConfigureAwait(false); + memoryStream.Position = 0; - var savePaths = new List<string>(); - var saveFileName = Path.GetFileNameWithoutExtension(video.Path) + "." + response.Language.ToLowerInvariant(); + var savePaths = new List<string>(); + var saveFileName = Path.GetFileNameWithoutExtension(video.Path) + "." + response.Language.ToLowerInvariant(); - if (response.IsForced) - { - saveFileName += ".forced"; - } + if (response.IsForced) + { + saveFileName += ".forced"; + } - saveFileName += "." + response.Format.ToLowerInvariant(); + saveFileName += "." + response.Format.ToLowerInvariant(); - if (saveInMediaFolder) - { - savePaths.Add(Path.Combine(video.ContainingFolderPath, saveFileName)); - } + if (saveInMediaFolder) + { + savePaths.Add(Path.Combine(video.ContainingFolderPath, saveFileName)); + } - savePaths.Add(Path.Combine(video.GetInternalMetadataPath(), saveFileName)); + savePaths.Add(Path.Combine(video.GetInternalMetadataPath(), saveFileName)); - await TrySaveToFiles(memoryStream, savePaths).ConfigureAwait(false); - } + await TrySaveToFiles(memoryStream, savePaths).ConfigureAwait(false); } } catch (RateLimitExceededException) @@ -209,7 +210,7 @@ namespace MediaBrowser.Providers.Subtitles { Directory.CreateDirectory(Path.GetDirectoryName(savePath)); - using (var fs = _fileSystem.GetFileStream(savePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + using (var fs = new FileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.Read, DefaultFileStreamBufferSize, true)) { await stream.CopyToAsync(fs).ConfigureAwait(false); } @@ -237,11 +238,12 @@ namespace MediaBrowser.Providers.Subtitles } } + /// <inheritdoc /> public Task<RemoteSubtitleInfo[]> SearchSubtitles(Video video, string language, bool? isPerfectMatch, CancellationToken cancellationToken) { if (video.VideoType != VideoType.VideoFile) { - return Task.FromResult(new RemoteSubtitleInfo[] { }); + return Task.FromResult(Array.Empty<RemoteSubtitleInfo>()); } VideoContentType mediaType; @@ -257,7 +259,7 @@ namespace MediaBrowser.Providers.Subtitles else { // These are the only supported types - return Task.FromResult(new RemoteSubtitleInfo[] { }); + return Task.FromResult(Array.Empty<RemoteSubtitleInfo>()); } var request = new SubtitleSearchRequest @@ -274,9 +276,7 @@ namespace MediaBrowser.Providers.Subtitles IsPerfectMatch = isPerfectMatch ?? false }; - var episode = video as Episode; - - if (episode != null) + if (video is Episode episode) { request.IndexNumberEnd = episode.IndexNumberEnd; request.SeriesName = episode.SeriesName; @@ -303,6 +303,7 @@ namespace MediaBrowser.Providers.Subtitles return _subtitleProviders.First(i => string.Equals(id, GetProviderId(i.Name))); } + /// <inheritdoc /> public Task DeleteSubtitles(BaseItem item, int index) { var stream = _mediaSourceManager.GetMediaStreams(new MediaStreamQuery @@ -328,16 +329,18 @@ namespace MediaBrowser.Providers.Subtitles return item.RefreshMetadata(CancellationToken.None); } + /// <inheritdoc /> public Task<SubtitleResponse> GetRemoteSubtitles(string id, CancellationToken cancellationToken) { var parts = id.Split(new[] { '_' }, 2); - var provider = GetProvider(parts.First()); + var provider = GetProvider(parts[0]); id = parts.Last(); return provider.GetSubtitles(id, cancellationToken); } + /// <inheritdoc /> public SubtitleProviderInfo[] GetSupportedProviders(BaseItem video) { VideoContentType mediaType; @@ -353,7 +356,7 @@ namespace MediaBrowser.Providers.Subtitles else { // These are the only supported types - return new SubtitleProviderInfo[] { }; + return Array.Empty<SubtitleProviderInfo>(); } return _subtitleProviders diff --git a/MediaBrowser.Providers/TV/DummySeasonProvider.cs b/MediaBrowser.Providers/TV/DummySeasonProvider.cs index bd58fc5de..8b5e6aaba 100644 --- a/MediaBrowser.Providers/TV/DummySeasonProvider.cs +++ b/MediaBrowser.Providers/TV/DummySeasonProvider.cs @@ -16,17 +16,17 @@ namespace MediaBrowser.Providers.TV { public class DummySeasonProvider { - private readonly IServerConfigurationManager _config; private readonly ILogger _logger; private readonly ILocalizationManager _localization; private readonly ILibraryManager _libraryManager; private readonly IFileSystem _fileSystem; - private readonly CultureInfo _usCulture = new CultureInfo("en-US"); - - public DummySeasonProvider(IServerConfigurationManager config, ILogger logger, ILocalizationManager localization, ILibraryManager libraryManager, IFileSystem fileSystem) + public DummySeasonProvider( + ILogger logger, + ILocalizationManager localization, + ILibraryManager libraryManager, + IFileSystem fileSystem) { - _config = config; _logger = logger; _localization = localization; _libraryManager = libraryManager; @@ -127,9 +127,14 @@ namespace MediaBrowser.Providers.TV bool isVirtualItem, CancellationToken cancellationToken) { - var seasonName = seasonNumber == 0 ? - _libraryManager.GetLibraryOptions(series).SeasonZeroDisplayName : - (seasonNumber.HasValue ? string.Format(_localization.GetLocalizedString("NameSeasonNumber"), seasonNumber.Value.ToString(_usCulture)) : _localization.GetLocalizedString("NameSeasonUnknown")); + var seasonName = seasonNumber == 0 + ? _libraryManager.GetLibraryOptions(series).SeasonZeroDisplayName + : (seasonNumber.HasValue + ? string.Format( + CultureInfo.InvariantCulture, + _localization.GetLocalizedString("NameSeasonNumber"), + seasonNumber.Value) + : _localization.GetLocalizedString("NameSeasonUnknown")); _logger.LogInformation("Creating Season {0} entry for {1}", seasonName, series.Name); @@ -137,7 +142,9 @@ namespace MediaBrowser.Providers.TV { Name = seasonName, IndexNumber = seasonNumber, - Id = _libraryManager.GetNewItemId((series.Id + (seasonNumber ?? -1).ToString(_usCulture) + seasonName), typeof(Season)), + Id = _libraryManager.GetNewItemId( + series.Id + (seasonNumber ?? -1).ToString(CultureInfo.InvariantCulture) + seasonName, + typeof(Season)), IsVirtualItem = isVirtualItem, SeriesId = series.Id, SeriesName = series.Name @@ -147,7 +154,7 @@ namespace MediaBrowser.Providers.TV series.AddChild(season, cancellationToken); - await season.RefreshMetadata(new MetadataRefreshOptions(new DirectoryService(_logger, _fileSystem)), cancellationToken).ConfigureAwait(false); + await season.RefreshMetadata(new MetadataRefreshOptions(new DirectoryService(_fileSystem)), cancellationToken).ConfigureAwait(false); return season; } diff --git a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs index 5993f615a..89615f406 100644 --- a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs +++ b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs @@ -12,6 +12,17 @@ namespace MediaBrowser.Providers.TV { public class EpisodeMetadataService : MetadataService<Episode, EpisodeInfo> { + public EpisodeMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) + { + } + + /// <inheritdoc /> protected override ItemUpdateType BeforeSaveInternal(Episode item, bool isFullRefresh, ItemUpdateType currentUpdateType) { var updateType = base.BeforeSaveInternal(item, isFullRefresh, currentUpdateType); @@ -54,6 +65,7 @@ namespace MediaBrowser.Providers.TV return updateType; } + /// <inheritdoc /> protected override void MergeData(MetadataResult<Episode> source, MetadataResult<Episode> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); @@ -81,9 +93,5 @@ namespace MediaBrowser.Providers.TV targetItem.IndexNumberEnd = sourceItem.IndexNumberEnd; } } - - public EpisodeMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) - { - } } } diff --git a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs index 752c0941d..e72df50de 100644 --- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs @@ -19,6 +19,8 @@ namespace MediaBrowser.Providers.TV { public class MissingEpisodeProvider { + private const double UnairedEpisodeThresholdDays = 2; + private readonly IServerConfigurationManager _config; private readonly ILogger _logger; private readonly ILibraryManager _libraryManager; @@ -26,9 +28,6 @@ namespace MediaBrowser.Providers.TV private readonly IFileSystem _fileSystem; private readonly TvDbClientManager _tvDbClientManager; - private readonly CultureInfo _usCulture = new CultureInfo("en-US"); - private const double UnairedEpisodeThresholdDays = 2; - public MissingEpisodeProvider( ILogger logger, IServerConfigurationManager config, @@ -61,7 +60,7 @@ namespace MediaBrowser.Providers.TV DateTime.TryParse(i.FirstAired, out var firstAired); var seasonNumber = i.AiredSeason.GetValueOrDefault(-1); var episodeNumber = i.AiredEpisodeNumber.GetValueOrDefault(-1); - return (seasonNumber: seasonNumber, episodeNumber: episodeNumber, firstAired: firstAired); + return (seasonNumber, episodeNumber, firstAired); }) .Where(i => i.seasonNumber != -1 && i.episodeNumber != -1) .OrderBy(i => i.seasonNumber) @@ -247,8 +246,9 @@ namespace MediaBrowser.Providers.TV /// </summary> /// <param name="allRecursiveChildren"></param> /// <param name="episodeLookup">The episode lookup.</param> - /// <returns>Task{System.Boolean}.</returns> - private bool RemoveObsoleteOrMissingSeasons(IList<BaseItem> allRecursiveChildren, + /// <returns><see cref="bool" />.</returns> + private bool RemoveObsoleteOrMissingSeasons( + IList<BaseItem> allRecursiveChildren, IEnumerable<(int seasonNumber, int episodeNumber, DateTime firstAired)> episodeLookup) { var existingSeasons = allRecursiveChildren.OfType<Season>().ToList(); @@ -298,7 +298,6 @@ namespace MediaBrowser.Providers.TV _libraryManager.DeleteItem(seasonToRemove, new DeleteOptions { DeleteFileLocation = true - }, false); hasChanges = true; @@ -322,18 +321,20 @@ namespace MediaBrowser.Providers.TV if (season == null) { - var provider = new DummySeasonProvider(_config, _logger, _localization, _libraryManager, _fileSystem); + var provider = new DummySeasonProvider(_logger, _localization, _libraryManager, _fileSystem); season = await provider.AddSeason(series, seasonNumber, true, cancellationToken).ConfigureAwait(false); } - var name = $"Episode {episodeNumber.ToString(_usCulture)}"; + var name = "Episode " + episodeNumber.ToString(CultureInfo.InvariantCulture); var episode = new Episode { Name = name, IndexNumber = episodeNumber, ParentIndexNumber = seasonNumber, - Id = _libraryManager.GetNewItemId(series.Id + seasonNumber.ToString(_usCulture) + name, typeof(Episode)), + Id = _libraryManager.GetNewItemId( + series.Id + seasonNumber.ToString(CultureInfo.InvariantCulture) + name, + typeof(Episode)), IsVirtualItem = true, SeasonId = season?.Id ?? Guid.Empty, SeriesId = series.Id @@ -341,7 +342,7 @@ namespace MediaBrowser.Providers.TV season.AddChild(episode, cancellationToken); - await episode.RefreshMetadata(new MetadataRefreshOptions(new DirectoryService(_logger, _fileSystem)), cancellationToken).ConfigureAwait(false); + await episode.RefreshMetadata(new MetadataRefreshOptions(new DirectoryService(_fileSystem)), cancellationToken).ConfigureAwait(false); } /// <summary> @@ -351,7 +352,7 @@ namespace MediaBrowser.Providers.TV /// <param name="seasonCounts"></param> /// <param name="episodeTuple"></param> /// <returns>Episode.</returns> - private Episode GetExistingEpisode(IList<Episode> existingEpisodes, IReadOnlyDictionary<int, int> seasonCounts, (int seasonNumber, int episodeNumber, DateTime firstAired) episodeTuple) + private Episode GetExistingEpisode(IEnumerable<Episode> existingEpisodes, IReadOnlyDictionary<int, int> seasonCounts, (int seasonNumber, int episodeNumber, DateTime firstAired) episodeTuple) { var seasonNumber = episodeTuple.seasonNumber; var episodeNumber = episodeTuple.episodeNumber; @@ -380,9 +381,6 @@ namespace MediaBrowser.Providers.TV } private Episode GetExistingEpisode(IEnumerable<Episode> existingEpisodes, int season, int episode) - { - return existingEpisodes - .FirstOrDefault(i => i.ParentIndexNumber == season && i.ContainsEpisodeNumber(episode)); - } + => existingEpisodes.FirstOrDefault(i => i.ParentIndexNumber == season && i.ContainsEpisodeNumber(episode)); } } diff --git a/MediaBrowser.Providers/TV/SeasonMetadataService.cs b/MediaBrowser.Providers/TV/SeasonMetadataService.cs index c575057de..0672f886a 100644 --- a/MediaBrowser.Providers/TV/SeasonMetadataService.cs +++ b/MediaBrowser.Providers/TV/SeasonMetadataService.cs @@ -15,6 +15,17 @@ namespace MediaBrowser.Providers.TV { public class SeasonMetadataService : MetadataService<Season, SeasonInfo> { + public SeasonMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) + { + } + + /// <inheritdoc /> protected override ItemUpdateType BeforeSaveInternal(Season item, bool isFullRefresh, ItemUpdateType currentUpdateType) { var updateType = base.BeforeSaveInternal(item, isFullRefresh, currentUpdateType); @@ -54,13 +65,14 @@ namespace MediaBrowser.Providers.TV return updateType; } + /// <inheritdoc /> protected override bool EnableUpdatingPremiereDateFromChildren => true; + /// <inheritdoc /> protected override IList<BaseItem> GetChildrenForMetadataUpdates(Season item) - { - return item.GetEpisodes(); - } + => item.GetEpisodes(); + /// <inheritdoc /> protected override ItemUpdateType UpdateMetadataFromChildren(Season item, IList<BaseItem> children, bool isFullRefresh, ItemUpdateType currentUpdateType) { var updateType = base.UpdateMetadataFromChildren(item, children, isFullRefresh, currentUpdateType); @@ -73,6 +85,7 @@ namespace MediaBrowser.Providers.TV return updateType; } + /// <inheritdoc /> protected override void MergeData(MetadataResult<Season> source, MetadataResult<Season> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); @@ -90,9 +103,5 @@ namespace MediaBrowser.Providers.TV return ItemUpdateType.None; } - - public SeasonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) - { - } } } diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs index d5b0b6fd8..e9e633ce7 100644 --- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs +++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs @@ -24,22 +24,21 @@ namespace MediaBrowser.Providers.TV ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, - IUserDataManager userDataManager, ILibraryManager libraryManager, ILocalizationManager localization, - TvDbClientManager tvDbClientManager - ) - : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + TvDbClientManager tvDbClientManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { _localization = localization; _tvDbClientManager = tvDbClientManager; } + /// <inheritdoc /> protected override async Task AfterMetadataRefresh(Series item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken) { await base.AfterMetadataRefresh(item, refreshOptions, cancellationToken).ConfigureAwait(false); - var seasonProvider = new DummySeasonProvider(ServerConfigurationManager, Logger, _localization, LibraryManager, FileSystem); + var seasonProvider = new DummySeasonProvider(Logger, _localization, LibraryManager, FileSystem); await seasonProvider.Run(item, cancellationToken).ConfigureAwait(false); // TODO why does it not register this itself omg @@ -60,6 +59,7 @@ namespace MediaBrowser.Providers.TV } } + /// <inheritdoc /> protected override bool IsFullLocalMetadata(Series item) { if (string.IsNullOrWhiteSpace(item.Overview)) @@ -73,6 +73,7 @@ namespace MediaBrowser.Providers.TV return base.IsFullLocalMetadata(item); } + /// <inheritdoc /> protected override void MergeData(MetadataResult<Series> source, MetadataResult<Series> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); diff --git a/MediaBrowser.Providers/TV/TvExternalIds.cs b/MediaBrowser.Providers/TV/TvExternalIds.cs index 3f889fbbe..646dae3e0 100644 --- a/MediaBrowser.Providers/TV/TvExternalIds.cs +++ b/MediaBrowser.Providers/TV/TvExternalIds.cs @@ -7,57 +7,62 @@ namespace MediaBrowser.Providers.TV { public class Zap2ItExternalId : IExternalId { + /// <inheritdoc /> public string Name => "Zap2It"; + /// <inheritdoc /> public string Key => MetadataProviders.Zap2It.ToString(); + /// <inheritdoc /> public string UrlFormatString => "http://tvlistings.zap2it.com/overview.html?programSeriesId={0}"; - public bool Supports(IHasProviderIds item) - { - return item is Series; - } + /// <inheritdoc /> + public bool Supports(IHasProviderIds item) => item is Series; } public class TvdbExternalId : IExternalId { + /// <inheritdoc /> public string Name => "TheTVDB"; + /// <inheritdoc /> public string Key => MetadataProviders.Tvdb.ToString(); + /// <inheritdoc /> public string UrlFormatString => TvdbUtils.TvdbBaseUrl + "?tab=series&id={0}"; - public bool Supports(IHasProviderIds item) - { - return item is Series; - } + /// <inheritdoc /> + public bool Supports(IHasProviderIds item) => item is Series; + } public class TvdbSeasonExternalId : IExternalId { + /// <inheritdoc /> public string Name => "TheTVDB"; + /// <inheritdoc /> public string Key => MetadataProviders.Tvdb.ToString(); + /// <inheritdoc /> public string UrlFormatString => null; - public bool Supports(IHasProviderIds item) - { - return item is Season; - } + /// <inheritdoc /> + public bool Supports(IHasProviderIds item) => item is Season; } public class TvdbEpisodeExternalId : IExternalId { + /// <inheritdoc /> public string Name => "TheTVDB"; + /// <inheritdoc /> public string Key => MetadataProviders.Tvdb.ToString(); + /// <inheritdoc /> public string UrlFormatString => TvdbUtils.TvdbBaseUrl + "?tab=episode&id={0}"; - public bool Supports(IHasProviderIds item) - { - return item is Episode; - } + /// <inheritdoc /> + public bool Supports(IHasProviderIds item) => item is Episode; } } diff --git a/MediaBrowser.Providers/Users/UserMetadataService.cs b/MediaBrowser.Providers/Users/UserMetadataService.cs index 024c2f959..9c2e27816 100644 --- a/MediaBrowser.Providers/Users/UserMetadataService.cs +++ b/MediaBrowser.Providers/Users/UserMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.Users { public class UserMetadataService : MetadataService<User, ItemLookupInfo> { - protected override void MergeData(MetadataResult<User> source, MetadataResult<User> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public UserMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public UserMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<User> source, MetadataResult<User> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } diff --git a/MediaBrowser.Providers/Videos/VideoMetadataService.cs b/MediaBrowser.Providers/Videos/VideoMetadataService.cs index f5f5b8971..996af0368 100644 --- a/MediaBrowser.Providers/Videos/VideoMetadataService.cs +++ b/MediaBrowser.Providers/Videos/VideoMetadataService.cs @@ -11,16 +11,24 @@ namespace MediaBrowser.Providers.Videos { public class VideoMetadataService : MetadataService<Video, ItemLookupInfo> { + public VideoMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) + { + } + + /// <inheritdoc /> // Make sure the type-specific services get picked first public override int Order => 10; + /// <inheritdoc /> protected override void MergeData(MetadataResult<Video> source, MetadataResult<Video> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - - public VideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) - { - } } } diff --git a/MediaBrowser.Providers/Years/YearMetadataService.cs b/MediaBrowser.Providers/Years/YearMetadataService.cs index b94494253..414795e35 100644 --- a/MediaBrowser.Providers/Years/YearMetadataService.cs +++ b/MediaBrowser.Providers/Years/YearMetadataService.cs @@ -11,13 +11,20 @@ namespace MediaBrowser.Providers.Years { public class YearMetadataService : MetadataService<Year, ItemLookupInfo> { - protected override void MergeData(MetadataResult<Year> source, MetadataResult<Year> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) + public YearMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) { - ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } - public YearMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager) + /// <inheritdoc /> + protected override void MergeData(MetadataResult<Year> source, MetadataResult<Year> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { + ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); } } } |
