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/Music | |
| parent | ef623f512903624bba48f243e3a659ec46064054 (diff) | |
Fix more warnings
Diffstat (limited to 'MediaBrowser.Providers/Music')
12 files changed, 219 insertions, 189 deletions
diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs index 4e59b4119b..69133c1c16 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 5b87825542..1f099c60f2 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 c2a8431cdd..85a87630d7 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 7ccf7cffa9..e61d8792c5 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 c59e9551c4..b9315744fd 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 2540a6047e..583c01b7c8 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 3e1022d7d4..cf3b49881a 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 3bf854b91f..4d4739cef2 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 179e953f48..8e71b625ee 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 728f7731af..5d675392c9 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 614de11cac..2adaf6fa4a 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 c743ffcb0e..bbf0cd8db5 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) { } |
