{"record":{"id":"c6e22cbed5469b20","repo":"Jackett/Jackett","slug":"duplicate-music-search-param-paramstr","errorCode":null,"errorMessage":"Duplicate music-search param: {paramStr}","messagePattern":"Duplicate music-search param: (.+?)","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/Jackett.Common/Models/TorznabCapabilities.cs","lineNumber":189,"sourceCode":"                if (Enum.TryParse(paramStr, true, out MovieSearchParam param))\n                    if (!MovieSearchParams.Contains(param))\n                        MovieSearchParams.Add(param);\n                    else\n                        throw new Exception($\"Duplicate movie-search param: {paramStr}\");\n                else\n                    throw new Exception($\"Not supported movie-search param: {paramStr}\");\n        }\n\n        private void ParseMusicSearchParams(IEnumerable<string> paramsList)\n        {\n            if (paramsList == null)\n                return;\n            foreach (var paramStr in paramsList)\n                if (Enum.TryParse(paramStr, true, out MusicSearchParam param))\n                    if (!MusicSearchParams.Contains(param))\n                        MusicSearchParams.Add(param);\n                    else\n                        throw new Exception($\"Duplicate music-search param: {paramStr}\");\n                else\n                    throw new Exception($\"Not supported music-search param: {paramStr}\");\n        }\n\n        private void ParseBookSearchParams(IEnumerable<string> paramsList)\n        {\n            if (paramsList == null)\n                return;\n            foreach (var paramStr in paramsList)\n                if (Enum.TryParse(paramStr, true, out BookSearchParam param))\n                    if (!BookSearchParams.Contains(param))\n                        BookSearchParams.Add(param);\n                    else\n                        throw new Exception($\"Duplicate book-search param: {paramStr}\");\n                else\n                    throw new Exception($\"Not supported book-search param: {paramStr}\");\n        }\n","sourceCodeStart":171,"sourceCodeEnd":207,"githubUrl":"https://github.com/Jackett/Jackett/blob/adff1941476d8057a430cf55360356c1d23e971e/src/Jackett.Common/Models/TorznabCapabilities.cs#L171-L207","documentation":"Thrown by TorznabCapabilities.ParseMusicSearchParams when a music-search parameter is repeated. The music capability list (artist, album, label, year, etc.) must be unique; a duplicate indicates a malformed indexer definition.","triggerScenarios":"The list passed to ParseMusicSearchParams contains the same MusicSearchParam twice, so MusicSearchParams.Contains(param) returns true on the second pass.","commonSituations":"Indexer CapsMapping authored with a duplicated music param; capabilities JSON with repeated tokens; merging definitions without de-duplication.","solutions":["Remove the duplicate music-search param from the indexer definition.","De-duplicate (Distinct()) dynamically generated param lists before parsing.","Pull an updated indexer definition from the Jackett repository."],"exampleFix":"// before\ncapabilities.ParseMusicSearchParams(new[] { \"artist\", \"album\", \"artist\" }); // throws\n// after\ncapabilities.ParseMusicSearchParams(new[] { \"artist\", \"album\" });","handlingStrategy":"validation","validationCode":"var unique = paramsList?.Distinct(StringComparer.OrdinalIgnoreCase);\ncapabilities.ParseMusicSearchParams(unique);","typeGuard":"static bool HasDuplicateMusicParams(IEnumerable<string> p) =>\n    p.GroupBy(x => x, StringComparer.OrdinalIgnoreCase).Any(g => g.Count() > 1);","tryCatchPattern":"try { capabilities.ParseMusicSearchParams(list); }\ncatch (Exception ex) when (ex.Message.StartsWith(\"Duplicate music-search\"))\n{ logger.Error(ex); }","preventionTips":["Author music caps with unique params.","Distinct() generated lists.","Lint definitions in CI."],"tags":["torznab","indexer","configuration","parsing","caps-mapping"],"backgroundTag":null,"analyzedSha":"adff1941476d8057a430cf55360356c1d23e971e","analyzedAt":"2026-08-13T15:06:32.872Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}