diff --git a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs index 1aaeaaba7..ef38a5fd5 100644 --- a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs +++ b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs @@ -194,9 +194,9 @@ public List SearchForNewArtist(string title) { var lowerTitle = title.ToLowerInvariant(); - if (IsMbidQuery(lowerTitle)) + if (IsMbidQuery(lowerTitle) || IsMbidUrl(lowerTitle)) { - var slug = lowerTitle.Split(':')[1].Trim(); + var slug = ExtractGuidFromQuery(lowerTitle); var isValid = Guid.TryParse(slug, out var searchGuid); @@ -256,9 +256,9 @@ public List SearchForNewAlbum(string title, string artist) { var lowerTitle = title.ToLowerInvariant(); - if (IsMbidQuery(lowerTitle)) + if (IsMbidQuery(lowerTitle) || IsMbidUrl(lowerTitle)) { - var slug = lowerTitle.Split(':')[1].Trim(); + var slug = ExtractGuidFromQuery(lowerTitle); var isValid = Guid.TryParse(slug, out var searchGuid); @@ -364,7 +364,7 @@ public List SearchForNewEntity(string title) { var lowerTitle = title.ToLowerInvariant(); - if (IsMbidQuery(lowerTitle)) + if (IsMbidQuery(lowerTitle) || IsMbidUrl(lowerTitle)) { try { @@ -435,6 +435,37 @@ private static bool IsMbidQuery(string query) return query.StartsWith("lidarr:") || query.StartsWith("lidarrid:") || query.StartsWith("mbid:"); } + private static bool IsMbidUrl(string query) + { + return query.StartsWith("https://musicbrainz.org/") || query.StartsWith("http://musicbrainz.org/"); + } + + private static string ExtractGuidFromQuery(string query) + { + if (query.StartsWith("https://musicbrainz.org/") || query.StartsWith("http://musicbrainz.org/")) + { + var lastSlash = query.LastIndexOf('/'); + if (lastSlash >= 0 && lastSlash < query.Length - 1) + { + return query.Substring(lastSlash + 1).Trim(); + } + + return string.Empty; + } + else if (query.StartsWith("lidarr:") || query.StartsWith("lidarrid:") || query.StartsWith("mbid:")) + { + var parts = query.Split(':'); + if (parts.Length > 1) + { + return parts[1].Trim(); + } + + return string.Empty; + } + + return string.Empty; + } + private Artist MapSearchResult(ArtistResource resource) { var artist = _artistService.FindById(resource.Id);