From 89509074281174a3b7c78d7e857b352a6734db69 Mon Sep 17 00:00:00 2001 From: zarzet Date: Wed, 1 Jul 2026 02:03:10 +0700 Subject: [PATCH] feat(extensions): route Deezer metadata through enabled extension Prefer the enabled Deezer metadata extension over the built-in provider when resolving album, track, and playlist metadata requests. --- go_backend/exports.go | 23 +++++++++++++++++++++++ go_backend/exports_supplement_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/go_backend/exports.go b/go_backend/exports.go index 558ce01b..1f741707 100644 --- a/go_backend/exports.go +++ b/go_backend/exports.go @@ -2281,6 +2281,16 @@ func GetProviderMetadataJSON(providerID, resourceType, resourceID string) (strin switch strings.ToLower(trimmedProviderID) { case "deezer": + if response, ok, err := getEnabledExtensionProviderMetadataResponse(trimmedProviderID, resourceType, resourceID); ok || err != nil { + if err != nil { + return "", err + } + jsonBytes, err := json.Marshal(response) + if err != nil { + return "", err + } + return string(jsonBytes), nil + } return GetDeezerMetadata(resourceType, resourceID) default: response, err := getExtensionProviderMetadataResponse(trimmedProviderID, resourceType, resourceID) @@ -2296,6 +2306,19 @@ func GetProviderMetadataJSON(providerID, resourceType, resourceID string) (strin } } +func getEnabledExtensionProviderMetadataResponse(providerID, resourceType, resourceID string) (map[string]interface{}, bool, error) { + manager := getExtensionManager() + ext, err := manager.GetExtension(providerID) + if err != nil || ext == nil || !ext.Enabled || !ext.Manifest.IsMetadataProvider() { + return nil, false, nil + } + response, err := getExtensionProviderMetadataResponse(providerID, resourceType, resourceID) + if err != nil { + return nil, true, err + } + return response, true, nil +} + func GetDeezerExtendedMetadata(trackID string) (string, error) { if trackID == "" { return "", fmt.Errorf("empty track ID") diff --git a/go_backend/exports_supplement_test.go b/go_backend/exports_supplement_test.go index 78ed8918..f7a2becf 100644 --- a/go_backend/exports_supplement_test.go +++ b/go_backend/exports_supplement_test.go @@ -44,6 +44,31 @@ func TestDownloadErrorClassificationDetectsVerificationRequired(t *testing.T) { } } +func TestGetProviderMetadataPrefersEnabledDeezerExtension(t *testing.T) { + dir := t.TempDir() + if err := InitExtensionSystem(filepath.Join(dir, "extensions"), filepath.Join(dir, "data")); err != nil { + t.Fatalf("InitExtensionSystem: %v", err) + } + CleanupExtensions() + defer CleanupExtensions() + + ext := newTestLoadedExtension(t, ExtensionTypeMetadataProvider) + ext.ID = "deezer" + ext.Manifest.Name = "deezer" + manager := getExtensionManager() + manager.mu.Lock() + manager.extensions = map[string]*loadedExtension{ext.ID: ext} + manager.mu.Unlock() + + jsonText, err := GetProviderMetadataJSON("deezer", "album", "201") + if err != nil { + t.Fatalf("GetProviderMetadataJSON deezer album: %v", err) + } + if !strings.Contains(jsonText, "album-track") { + t.Fatalf("expected enabled deezer extension metadata, got %s", jsonText) + } +} + func TestExportsJSONWrappersAndExtensionManagerSurface(t *testing.T) { dir := t.TempDir() dataDir := filepath.Join(dir, "data")