2
0
Эх сурвалжийг харах

Add MusicBrainz server validation and fallback (#8833)

Shadowghost 2 жил өмнө
parent
commit
fe3e7979b0

+ 23 - 2
MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumProvider.cs

@@ -13,6 +13,7 @@ using MediaBrowser.Providers.Music;
 using MetaBrainz.MusicBrainz;
 using MetaBrainz.MusicBrainz;
 using MetaBrainz.MusicBrainz.Interfaces.Entities;
 using MetaBrainz.MusicBrainz.Interfaces.Entities;
 using MetaBrainz.MusicBrainz.Interfaces.Searches;
 using MetaBrainz.MusicBrainz.Interfaces.Searches;
+using Microsoft.Extensions.Logging;
 
 
 namespace MediaBrowser.Providers.Plugins.MusicBrainz;
 namespace MediaBrowser.Providers.Plugins.MusicBrainz;
 
 
@@ -21,16 +22,36 @@ namespace MediaBrowser.Providers.Plugins.MusicBrainz;
 /// </summary>
 /// </summary>
 public class MusicBrainzAlbumProvider : IRemoteMetadataProvider<MusicAlbum, AlbumInfo>, IHasOrder, IDisposable
 public class MusicBrainzAlbumProvider : IRemoteMetadataProvider<MusicAlbum, AlbumInfo>, IHasOrder, IDisposable
 {
 {
+    private readonly ILogger<MusicBrainzAlbumProvider> _logger;
     private readonly Query _musicBrainzQuery;
     private readonly Query _musicBrainzQuery;
+    private readonly string _musicBrainzDefaultUri = "https://musicbrainz.org";
 
 
     /// <summary>
     /// <summary>
     /// Initializes a new instance of the <see cref="MusicBrainzAlbumProvider"/> class.
     /// Initializes a new instance of the <see cref="MusicBrainzAlbumProvider"/> class.
     /// </summary>
     /// </summary>
-    public MusicBrainzAlbumProvider()
+    /// <param name="logger">The logger.</param>
+    public MusicBrainzAlbumProvider(ILogger<MusicBrainzAlbumProvider> logger)
     {
     {
+        _logger = logger;
+
         MusicBrainz.Plugin.Instance!.ConfigurationChanged += (_, _) =>
         MusicBrainz.Plugin.Instance!.ConfigurationChanged += (_, _) =>
             {
             {
-                Query.DefaultServer = MusicBrainz.Plugin.Instance.Configuration.Server;
+                if (Uri.TryCreate(MusicBrainz.Plugin.Instance.Configuration.Server, UriKind.Absolute, out var server))
+                {
+                    Query.DefaultServer = server.Host;
+                    Query.DefaultPort = server.Port;
+                    Query.DefaultUrlScheme = server.Scheme;
+                }
+                else
+                {
+                    // Fallback to official server
+                    _logger.LogWarning("Invalid MusicBrainz server specified, falling back to official server");
+                    var defaultServer = new Uri(_musicBrainzDefaultUri);
+                    Query.DefaultServer = defaultServer.Host;
+                    Query.DefaultPort = defaultServer.Port;
+                    Query.DefaultUrlScheme = defaultServer.Scheme;
+                }
+
                 Query.DelayBetweenRequests = MusicBrainz.Plugin.Instance.Configuration.RateLimit;
                 Query.DelayBetweenRequests = MusicBrainz.Plugin.Instance.Configuration.RateLimit;
             };
             };
 
 

+ 23 - 3
MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistProvider.cs

@@ -4,7 +4,6 @@ using System.Linq;
 using System.Net.Http;
 using System.Net.Http;
 using System.Threading;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
-using System.Xml;
 using Jellyfin.Extensions;
 using Jellyfin.Extensions;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Controller.Providers;
@@ -14,6 +13,7 @@ using MediaBrowser.Providers.Music;
 using MetaBrainz.MusicBrainz;
 using MetaBrainz.MusicBrainz;
 using MetaBrainz.MusicBrainz.Interfaces.Entities;
 using MetaBrainz.MusicBrainz.Interfaces.Entities;
 using MetaBrainz.MusicBrainz.Interfaces.Searches;
 using MetaBrainz.MusicBrainz.Interfaces.Searches;
+using Microsoft.Extensions.Logging;
 
 
 namespace MediaBrowser.Providers.Plugins.MusicBrainz;
 namespace MediaBrowser.Providers.Plugins.MusicBrainz;
 
 
@@ -22,16 +22,36 @@ namespace MediaBrowser.Providers.Plugins.MusicBrainz;
 /// </summary>
 /// </summary>
 public class MusicBrainzArtistProvider : IRemoteMetadataProvider<MusicArtist, ArtistInfo>, IDisposable
 public class MusicBrainzArtistProvider : IRemoteMetadataProvider<MusicArtist, ArtistInfo>, IDisposable
 {
 {
+    private readonly ILogger<MusicBrainzArtistProvider> _logger;
     private readonly Query _musicBrainzQuery;
     private readonly Query _musicBrainzQuery;
+    private readonly string _musicBrainzDefaultUri = "https://musicbrainz.org";
 
 
     /// <summary>
     /// <summary>
     /// Initializes a new instance of the <see cref="MusicBrainzArtistProvider"/> class.
     /// Initializes a new instance of the <see cref="MusicBrainzArtistProvider"/> class.
     /// </summary>
     /// </summary>
-    public MusicBrainzArtistProvider()
+    /// <param name="logger">The logger.</param>
+    public MusicBrainzArtistProvider(ILogger<MusicBrainzArtistProvider> logger)
     {
     {
+        _logger = logger;
+
         MusicBrainz.Plugin.Instance!.ConfigurationChanged += (_, _) =>
         MusicBrainz.Plugin.Instance!.ConfigurationChanged += (_, _) =>
             {
             {
-                Query.DefaultServer = MusicBrainz.Plugin.Instance.Configuration.Server;
+                if (Uri.TryCreate(MusicBrainz.Plugin.Instance.Configuration.Server, UriKind.Absolute, out var server))
+                {
+                    Query.DefaultServer = server.Host;
+                    Query.DefaultPort = server.Port;
+                    Query.DefaultUrlScheme = server.Scheme;
+                }
+                else
+                {
+                    // Fallback to official server
+                    _logger.LogWarning("Invalid MusicBrainz server specified, falling back to official server");
+                    var defaultServer = new Uri(_musicBrainzDefaultUri);
+                    Query.DefaultServer = defaultServer.Host;
+                    Query.DefaultPort = defaultServer.Port;
+                    Query.DefaultUrlScheme = defaultServer.Scheme;
+                }
+
                 Query.DelayBetweenRequests = MusicBrainz.Plugin.Instance.Configuration.RateLimit;
                 Query.DelayBetweenRequests = MusicBrainz.Plugin.Instance.Configuration.RateLimit;
             };
             };