From 0eb19ce834f40b5d9a7524fa5f69a5c67fa4cdff Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 15 Dec 2024 10:05:45 +0200 Subject: [PATCH 001/127] Bump version to 1.28.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5e221e849..1c59a8dc2 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.28.1' + majorVersion: '1.28.2' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From b95eac98b97853510f377d8d866c33c7ccd7f0c9 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 10 Dec 2024 19:25:13 -0800 Subject: [PATCH 002/127] Fixed: Error getting processes in some cases (cherry picked from commit b552d4e9f7ca7388404aa0d52566010a54cb0244) --- src/NzbDrone.Common/Processes/ProcessProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Common/Processes/ProcessProvider.cs b/src/NzbDrone.Common/Processes/ProcessProvider.cs index 5db0565e0..4947e7080 100644 --- a/src/NzbDrone.Common/Processes/ProcessProvider.cs +++ b/src/NzbDrone.Common/Processes/ProcessProvider.cs @@ -313,7 +313,7 @@ namespace NzbDrone.Common.Processes processInfo = new ProcessInfo(); processInfo.Id = process.Id; processInfo.Name = process.ProcessName; - processInfo.StartPath = process.MainModule.FileName; + processInfo.StartPath = process.MainModule?.FileName; if (process.Id != GetCurrentProcessId() && process.HasExited) { From c6440bb21b6ebe6c1703cf87b2d335490f75280c Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 8 Dec 2024 17:24:47 -0800 Subject: [PATCH 003/127] Upgrade TypeScript and core-js (cherry picked from commit 148480909917f69ff3b2ca547ccb4716dd56606e) --- package.json | 4 ++-- yarn.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index cf67c6b83..8cce90994 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "redux-thunk": "2.4.2", "reselect": "4.1.8", "stacktrace-js": "2.0.2", - "typescript": "5.1.6" + "typescript": "5.7.2" }, "devDependencies": { "@babel/core": "7.25.8", @@ -104,7 +104,7 @@ "babel-loader": "9.2.1", "babel-plugin-inline-classnames": "2.0.1", "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "core-js": "3.38.1", + "core-js": "3.39.0", "css-loader": "6.7.3", "css-modules-typescript-loader": "4.0.1", "eslint": "8.57.1", diff --git a/yarn.lock b/yarn.lock index f7d3237b1..09d06336a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2423,10 +2423,10 @@ core-js-compat@^3.38.0, core-js-compat@^3.38.1: dependencies: browserslist "^4.23.3" -core-js@3.38.1: - version "3.38.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.38.1.tgz#aa375b79a286a670388a1a363363d53677c0383e" - integrity sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw== +core-js@3.39.0: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.39.0.tgz#57f7647f4d2d030c32a72ea23a0555b2eaa30f83" + integrity sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g== core-js@^2.4.0: version "2.6.12" @@ -6705,10 +6705,10 @@ typescript-plugin-css-modules@5.0.1: stylus "^0.59.0" tsconfig-paths "^4.1.2" -typescript@5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== +typescript@5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== unbox-primitive@^1.0.2: version "1.0.2" From 6b8a7993ff95bc413cacffff5261bcc8848dd5a7 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 15 Dec 2024 16:40:05 +0000 Subject: [PATCH 004/127] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: GkhnGRBZ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/tr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 87bb3305e..d0f39da51 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -227,7 +227,7 @@ "StartupDirectory": "Başlangıç Dizini", "SuggestTranslationChange": "Çeviri değişikliği önerin", "SystemTimeHealthCheckMessage": "Sistem saati 1 günden fazla kapalı. Zamanlanan görevler, saat düzeltilene kadar doğru çalışmayabilir", - "TableOptionsColumnsMessage": "Hangi sütunların görünür olduğunu ve hangi sırada görüneceklerini seçin", + "TableOptionsColumnsMessage": "Hangi sütunların görünür olacağını ve hangi sırayla görüneceğini seçin", "Title": "Başlık", "Today": "Bugün", "Tomorrow": "Yarın", From cf012eb00192713b749584ff91c01ec16d61ef55 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 15 Dec 2024 18:50:16 +0200 Subject: [PATCH 005/127] Use minor version for core-js in babel/preset-env --- frontend/build/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/build/webpack.config.js b/frontend/build/webpack.config.js index 28c7b79a4..ceacc4f04 100644 --- a/frontend/build/webpack.config.js +++ b/frontend/build/webpack.config.js @@ -170,7 +170,7 @@ module.exports = (env) => { loose: true, debug: false, useBuiltIns: 'entry', - corejs: 3 + corejs: '3.39' } ] ] From 7cba7152f17e795f51a61ff0e3d9afdd69ce94ad Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 16 Dec 2024 22:11:18 +0200 Subject: [PATCH 006/127] Bump version to 1.29.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1c59a8dc2..78f4ac9b8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.28.2' + majorVersion: '1.29.0' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 6bdf5f5d6916b03a4dbef001bdf1da8fdd074530 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 16 Dec 2024 22:25:55 +0200 Subject: [PATCH 007/127] Use error message from Redacted response --- src/NzbDrone.Core/Indexers/Definitions/Redacted.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Redacted.cs b/src/NzbDrone.Core/Indexers/Definitions/Redacted.cs index 761b101a0..fc20f3e73 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Redacted.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Redacted.cs @@ -8,6 +8,7 @@ using FluentValidation; using NLog; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; +using NzbDrone.Common.Serializer; using NzbDrone.Core.Annotations; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers.Definitions.Gazelle; @@ -252,7 +253,9 @@ namespace NzbDrone.Core.Indexers.Definitions if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK) { - throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request"); + STJson.TryDeserialize(indexerResponse.Content, out var errorResponse); + + throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}"); } if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value)) @@ -487,4 +490,9 @@ namespace NzbDrone.Core.Indexers.Definitions [FieldOption(Label = "Required", Hint = "Abort download if unable to use token")] Required = 2, } + + public class RedactedErrorResponse + { + public string Error { get; init; } + } } From 5ca18683ca59e36f7c4c3af5c7e1ecb937fb2552 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 15 Dec 2024 08:44:18 -0800 Subject: [PATCH 008/127] Upgrade babel to 7.26.0 (cherry picked from commit bfcd017012730c97eb587ae2d2e91f72ee7a1de3) --- package.json | 12 +- yarn.lock | 1245 +++++++++++++++++++++++++++----------------------- 2 files changed, 668 insertions(+), 589 deletions(-) diff --git a/package.json b/package.json index 8cce90994..f735f7881 100644 --- a/package.json +++ b/package.json @@ -84,13 +84,13 @@ "typescript": "5.7.2" }, "devDependencies": { - "@babel/core": "7.25.8", - "@babel/eslint-parser": "7.25.8", - "@babel/plugin-proposal-export-default-from": "7.25.8", + "@babel/core": "7.26.0", + "@babel/eslint-parser": "7.25.9", + "@babel/plugin-proposal-export-default-from": "7.25.9", "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/preset-env": "7.25.8", - "@babel/preset-react": "7.25.7", - "@babel/preset-typescript": "7.25.7", + "@babel/preset-env": "7.26.0", + "@babel/preset-react": "7.26.3", + "@babel/preset-typescript": "7.26.0", "@types/lodash": "4.14.195", "@types/react-document-title": "2.0.10", "@types/react-router-dom": "5.3.3", diff --git a/yarn.lock b/yarn.lock index 09d06336a..b04112079 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,7 +15,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.25.7": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.7.tgz#438f2c524071531d643c6f0188e1e28f130cebc7" integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== @@ -23,47 +23,62 @@ "@babel/highlight" "^7.25.7" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7", "@babel/compat-data@^7.25.8": +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7": version "7.25.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.8.tgz#0376e83df5ab0eb0da18885c0140041f0747a402" integrity sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA== -"@babel/core@7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.8.tgz#a57137d2a51bbcffcfaeba43cb4dd33ae3e0e1c6" - integrity sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg== +"@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== + +"@babel/core@7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.25.7" - "@babel/generator" "^7.25.7" - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helpers" "^7.25.7" - "@babel/parser" "^7.25.8" - "@babel/template" "^7.25.7" - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.8" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/eslint-parser@7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.8.tgz#0119dec46be547d7a339978dedb9d29e517c2443" - integrity sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg== +"@babel/eslint-parser@7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz#603c68a63078796527bc9d0833f5e52dd5f9224c" + integrity sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.7.tgz#de86acbeb975a3e11ee92dd52223e6b03b479c56" - integrity sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA== +"@babel/generator@^7.26.0", "@babel/generator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== dependencies: - "@babel/types" "^7.25.7" + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" @@ -75,15 +90,14 @@ dependencies: "@babel/types" "^7.25.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz#d721650c1f595371e0a23ee816f1c3c488c0d622" - integrity sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg== +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/types" "^7.25.9" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.7": +"@babel/helper-compilation-targets@^7.22.6": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz#11260ac3322dda0ef53edfae6e97b961449f5fa4" integrity sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A== @@ -94,20 +108,31 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz#5d65074c76cae75607421c00d6bd517fe1892d6b" - integrity sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw== +"@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-member-expression-to-functions" "^7.25.7" - "@babel/helper-optimise-call-expression" "^7.25.7" - "@babel/helper-replace-supers" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.7": +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz#dcb464f0e2cdfe0c25cc2a0a59c37ab940ce894e" integrity sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ== @@ -116,6 +141,15 @@ regexpu-core "^6.1.1" semver "^6.3.1" +"@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" @@ -127,109 +161,120 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-member-expression-to-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz#541a33b071f0355a63a0fa4bdf9ac360116b8574" - integrity sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA== +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-module-imports@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz#dba00d9523539152906ba49263e36d7261040472" - integrity sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw== +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-module-transforms@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz#2ac9372c5e001b19bc62f1fe7d96a18cb0901d1a" - integrity sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ== +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== dependencies: - "@babel/helper-module-imports" "^7.25.7" - "@babel/helper-simple-access" "^7.25.7" - "@babel/helper-validator-identifier" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-optimise-call-expression@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz#1de1b99688e987af723eed44fa7fc0ee7b97d77a" - integrity sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng== +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== dependencies: - "@babel/types" "^7.25.7" + "@babel/types" "^7.25.9" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz#8ec5b21812d992e1ef88a9b068260537b6f0e36c" integrity sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw== -"@babel/helper-remap-async-to-generator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz#9efdc39df5f489bcd15533c912b6c723a0a65021" - integrity sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-wrap-function" "^7.25.7" - "@babel/traverse" "^7.25.7" +"@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== -"@babel/helper-replace-supers@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz#38cfda3b6e990879c71d08d0fef9236b62bd75f5" - integrity sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw== +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.7" - "@babel/helper-optimise-call-expression" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-simple-access@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz#5eb9f6a60c5d6b2e0f76057004f8dacbddfae1c0" - integrity sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ== +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-skip-transparent-expression-wrappers@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz#382831c91038b1a6d32643f5f49505b8442cb87c" - integrity sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA== +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" "@babel/helper-string-parser@^7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54" integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + "@babel/helper-validator-identifier@^7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@babel/helper-validator-option@^7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz#97d1d684448228b30b506d90cace495d6f492729" integrity sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ== -"@babel/helper-wrap-function@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz#9f6021dd1c4fdf4ad515c809967fc4bac9a70fe7" - integrity sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg== - dependencies: - "@babel/template" "^7.25.7" - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== -"@babel/helpers@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.7.tgz#091b52cb697a171fe0136ab62e54e407211f09c2" - integrity sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA== +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== dependencies: - "@babel/template" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" "@babel/highlight@^7.25.7": version "7.25.7" @@ -241,58 +286,58 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.25.7", "@babel/parser@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2" - integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== +"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== dependencies: - "@babel/types" "^7.25.8" + "@babel/types" "^7.26.3" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz#93969ac50ef4d68b2504b01b758af714e4cbdd64" - integrity sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz#a338d611adb9dcd599b8b1efa200c88ebeffe046" - integrity sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz#c5f755e911dfac7ef6957300c0f9c4a8c18c06f4" - integrity sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz#3b7ea04492ded990978b6deaa1dfca120ad4455a" - integrity sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/plugin-transform-optional-chaining" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz#9622b1d597a703aa3a921e6f58c9c2d9a028d2c5" - integrity sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-proposal-export-default-from@7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.8.tgz#fa22151caa240683c3659796037237813767f348" - integrity sha512-5SLPHA/Gk7lNdaymtSVS9jH77Cs7yuHTR3dYj+9q+M7R7tNLXhNuvnmOfafRIzpWL+dtMibuu1I4ofrc768Gkw== +"@babel/plugin-proposal-export-default-from@7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz#52702be6ef8367fc8f18b8438278332beeb8f87c" + integrity sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -306,33 +351,33 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-import-assertions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz#8ce248f9f4ed4b7ed4cb2e0eb4ed9efd9f52921f" - integrity sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ== +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-import-attributes@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz#d78dd0499d30df19a598e63ab895e21b909bc43f" - integrity sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw== +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-jsx@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz#5352d398d11ea5e7ef330c854dea1dae0bf18165" - integrity sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw== +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-typescript@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz#bfc05b0cc31ebd8af09964650cee723bb228108b" - integrity sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g== +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -342,498 +387,505 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz#1b9ed22e6890a0e9ff470371c73b8c749bcec386" - integrity sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg== +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-async-generator-functions@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz#3331de02f52cc1f2c75b396bec52188c85b0b1ec" - integrity sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA== +"@babel/plugin-transform-async-generator-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-remap-async-to-generator" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-async-to-generator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz#a44c7323f8d4285a6c568dd43c5c361d6367ec52" - integrity sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg== +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== dependencies: - "@babel/helper-module-imports" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-remap-async-to-generator" "^7.25.7" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" -"@babel/plugin-transform-block-scoped-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz#e0b8843d5571719a2f1bf7e284117a3379fcc17c" - integrity sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ== +"@babel/plugin-transform-block-scoped-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458" + integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-block-scoping@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz#6dab95e98adf780ceef1b1c3ab0e55cd20dd410a" - integrity sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow== +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-properties@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz#a389cfca7a10ac80e3ff4c75fca08bd097ad1523" - integrity sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g== +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-static-block@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz#a8af22028920fe404668031eceb4c3aadccb5262" - integrity sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ== +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-classes@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz#5103206cf80d02283bbbd044509ea3b65d0906bb" - integrity sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg== +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-replace-supers" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz#7f621f0aa1354b5348a935ab12e3903842466f65" - integrity sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA== +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/template" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" -"@babel/plugin-transform-destructuring@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz#f6f26a9feefb5aa41fd45b6f5838901b5333d560" - integrity sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA== +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dotall-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz#9d775c4a3ff1aea64045300fcd4309b4a610ef02" - integrity sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ== +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-keys@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz#fbba7d1155eab76bd4f2a038cbd5d65883bd7a93" - integrity sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg== +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz#102b31608dcc22c08fbca1894e104686029dc141" - integrity sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dynamic-import@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz#f1edbe75b248cf44c70c8ca8ed3818a668753aaa" - integrity sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A== +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-exponentiation-operator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz#5961a3a23a398faccd6cddb34a2182807d75fb5f" - integrity sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg== +"@babel/plugin-transform-exponentiation-operator@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-export-namespace-from@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz#d1988c3019a380b417e0516418b02804d3858145" - integrity sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw== +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-for-of@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz#0acfea0f27aa290818b5b48a5a44b3f03fc13669" - integrity sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw== +"@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-function-name@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz#7e394ccea3693902a8b50ded8b6ae1fa7b8519fd" - integrity sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ== +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-json-strings@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz#6fb3ec383a2ea92652289fdba653e3f9de722694" - integrity sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA== +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz#70cbdc742f2cfdb1a63ea2cbd018d12a60b213c3" - integrity sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w== +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-logical-assignment-operators@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz#01868ff92daa9e525b4c7902aa51979082a05710" - integrity sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g== +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-member-expression-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz#0a36c3fbd450cc9e6485c507f005fa3d1bc8fca5" - integrity sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw== +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-amd@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz#bb4e543b5611f6c8c685a2fd485408713a3adf3d" - integrity sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA== +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-commonjs@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz#173f0c791bb7407c092ce6d77ee90eb3f2d1d2fd" - integrity sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg== +"@babel/plugin-transform-modules-commonjs@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-simple-access" "^7.25.7" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-systemjs@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz#8b14d319a177cc9c85ef8b0512afd429d9e2e60b" - integrity sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g== +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-identifier" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-modules-umd@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz#00ee7a7e124289549381bfb0e24d87fd7f848367" - integrity sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw== +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz#a2f3f6d7f38693b462542951748f0a72a34d196d" - integrity sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-new-target@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz#52b2bde523b76c548749f38dc3054f1f45e82bc9" - integrity sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA== +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-nullish-coalescing-operator@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz#befb4900c130bd52fccf2b926314557987f1b552" - integrity sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ== +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-numeric-separator@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz#91e370486371637bd42161052f2602c701386891" - integrity sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q== +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-object-rest-spread@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz#0904ac16bcce41df4db12d915d6780f85c7fb04b" - integrity sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g== +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== dependencies: - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-transform-parameters" "^7.25.7" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" -"@babel/plugin-transform-object-super@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz#582a9cea8cf0a1e02732be5b5a703a38dedf5661" - integrity sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA== +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-replace-supers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" -"@babel/plugin-transform-optional-catch-binding@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz#2649b86a3bb202c6894ec81a6ddf41b94d8f3103" - integrity sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg== +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-optional-chaining@^7.25.7", "@babel/plugin-transform-optional-chaining@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz#f46283b78adcc5b6ab988a952f989e7dce70653f" - integrity sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg== +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-parameters@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz#80c38b03ef580f6d6bffe1c5254bb35986859ac7" - integrity sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ== +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-methods@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz#c790a04f837b4bd61d6b0317b43aa11ff67dce80" - integrity sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA== +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-property-in-object@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz#1234f856ce85e061f9688764194e51ea7577c434" - integrity sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow== +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-property-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz#a8612b4ea4e10430f00012ecf0155662c7d6550d" - integrity sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw== +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-display-name@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz#2753e875a1b702fb1d806c4f5d4c194d64cadd88" - integrity sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA== +"@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-development@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz#2fbd77887b8fa2942d7cb61edf1029ea1b048554" - integrity sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg== +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== dependencies: - "@babel/plugin-transform-react-jsx" "^7.25.7" + "@babel/plugin-transform-react-jsx" "^7.25.9" -"@babel/plugin-transform-react-jsx@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz#f5e2af6020a562fe048dd343e571c4428e6c5632" - integrity sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q== +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-module-imports" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-jsx" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-transform-react-pure-annotations@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz#6d0b8dadb2d3c5cbb8ade68c5efd49470b0d65f7" - integrity sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA== +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-regenerator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz#6eb006e6d26f627bc2f7844a9f19770721ad6f3e" - integrity sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ== +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz#dc56b25e02afaabef3ce0c5b06b0916e8523e995" - integrity sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng== +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-shorthand-properties@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz#92690a9c671915602d91533c278cc8f6bf12275f" - integrity sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA== +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-spread@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz#df83e899a9fc66284ee601a7b738568435b92998" - integrity sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw== +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-sticky-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz#341c7002bef7f29037be7fb9684e374442dd0d17" - integrity sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw== +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-template-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz#e566c581bb16d8541dd8701093bb3457adfce16b" - integrity sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA== +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typeof-symbol@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz#debb1287182efd20488f126be343328c679b66eb" - integrity sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA== +"@babel/plugin-transform-template-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" + integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typescript@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz#8fc7c3d28ddd36bce45b9b48594129d0e560cfbe" - integrity sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q== +"@babel/plugin-transform-typeof-symbol@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b" + integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/plugin-syntax-typescript" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-escapes@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz#973592b6d13a914794e1de8cf1383e50e0f87f81" - integrity sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ== +"@babel/plugin-transform-typescript@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" + integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" -"@babel/plugin-transform-unicode-property-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz#25349197cce964b1343f74fa7cfdf791a1b1919e" - integrity sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w== +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz#f93a93441baf61f713b6d5552aaa856bfab34809" - integrity sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g== +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-sets-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz#d1b3295d29e0f8f4df76abc909ad1ebee919560c" - integrity sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw== +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/preset-env@7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.8.tgz#dc6b719627fb29cd9cccbbbe041802fd575b524c" - integrity sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg== +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== dependencies: - "@babel/compat-data" "^7.25.8" - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-option" "^7.25.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.7" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1" + integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== + dependencies: + "@babel/compat-data" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.25.7" - "@babel/plugin-syntax-import-attributes" "^7.25.7" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.8" - "@babel/plugin-transform-async-to-generator" "^7.25.7" - "@babel/plugin-transform-block-scoped-functions" "^7.25.7" - "@babel/plugin-transform-block-scoping" "^7.25.7" - "@babel/plugin-transform-class-properties" "^7.25.7" - "@babel/plugin-transform-class-static-block" "^7.25.8" - "@babel/plugin-transform-classes" "^7.25.7" - "@babel/plugin-transform-computed-properties" "^7.25.7" - "@babel/plugin-transform-destructuring" "^7.25.7" - "@babel/plugin-transform-dotall-regex" "^7.25.7" - "@babel/plugin-transform-duplicate-keys" "^7.25.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.7" - "@babel/plugin-transform-dynamic-import" "^7.25.8" - "@babel/plugin-transform-exponentiation-operator" "^7.25.7" - "@babel/plugin-transform-export-namespace-from" "^7.25.8" - "@babel/plugin-transform-for-of" "^7.25.7" - "@babel/plugin-transform-function-name" "^7.25.7" - "@babel/plugin-transform-json-strings" "^7.25.8" - "@babel/plugin-transform-literals" "^7.25.7" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.8" - "@babel/plugin-transform-member-expression-literals" "^7.25.7" - "@babel/plugin-transform-modules-amd" "^7.25.7" - "@babel/plugin-transform-modules-commonjs" "^7.25.7" - "@babel/plugin-transform-modules-systemjs" "^7.25.7" - "@babel/plugin-transform-modules-umd" "^7.25.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.7" - "@babel/plugin-transform-new-target" "^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.8" - "@babel/plugin-transform-numeric-separator" "^7.25.8" - "@babel/plugin-transform-object-rest-spread" "^7.25.8" - "@babel/plugin-transform-object-super" "^7.25.7" - "@babel/plugin-transform-optional-catch-binding" "^7.25.8" - "@babel/plugin-transform-optional-chaining" "^7.25.8" - "@babel/plugin-transform-parameters" "^7.25.7" - "@babel/plugin-transform-private-methods" "^7.25.7" - "@babel/plugin-transform-private-property-in-object" "^7.25.8" - "@babel/plugin-transform-property-literals" "^7.25.7" - "@babel/plugin-transform-regenerator" "^7.25.7" - "@babel/plugin-transform-reserved-words" "^7.25.7" - "@babel/plugin-transform-shorthand-properties" "^7.25.7" - "@babel/plugin-transform-spread" "^7.25.7" - "@babel/plugin-transform-sticky-regex" "^7.25.7" - "@babel/plugin-transform-template-literals" "^7.25.7" - "@babel/plugin-transform-typeof-symbol" "^7.25.7" - "@babel/plugin-transform-unicode-escapes" "^7.25.7" - "@babel/plugin-transform-unicode-property-regex" "^7.25.7" - "@babel/plugin-transform-unicode-regex" "^7.25.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.7" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.25.9" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.25.9" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.25.9" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.25.9" + "@babel/plugin-transform-typeof-symbol" "^7.25.9" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.6" @@ -850,28 +902,28 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.25.7.tgz#081cbe1dea363b732764d06a0fdda67ffa17735d" - integrity sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg== +"@babel/preset-react@7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" + integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-option" "^7.25.7" - "@babel/plugin-transform-react-display-name" "^7.25.7" - "@babel/plugin-transform-react-jsx" "^7.25.7" - "@babel/plugin-transform-react-jsx-development" "^7.25.7" - "@babel/plugin-transform-react-pure-annotations" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" -"@babel/preset-typescript@7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz#43c5b68eccb856ae5b52274b77b1c3c413cde1b7" - integrity sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw== +"@babel/preset-typescript@7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" + integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-option" "^7.25.7" - "@babel/plugin-syntax-jsx" "^7.25.7" - "@babel/plugin-transform-modules-commonjs" "^7.25.7" - "@babel/plugin-transform-typescript" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-typescript" "^7.25.9" "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.25.7" @@ -880,29 +932,29 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.7.tgz#27f69ce382855d915b14ab0fe5fb4cbf88fa0769" - integrity sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA== +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== dependencies: - "@babel/code-frame" "^7.25.7" - "@babel/parser" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/traverse@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.7.tgz#83e367619be1cab8e4f2892ef30ba04c26a40fa8" - integrity sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg== +"@babel/traverse@^7.25.9": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== dependencies: - "@babel/code-frame" "^7.25.7" - "@babel/generator" "^7.25.7" - "@babel/parser" "^7.25.7" - "@babel/template" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.25.7", "@babel/types@^7.25.8", "@babel/types@^7.4.4": +"@babel/types@^7.25.7", "@babel/types@^7.4.4": version "7.25.8" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1" integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== @@ -911,6 +963,14 @@ "@babel/helper-validator-identifier" "^7.25.7" to-fast-properties "^2.0.0" +"@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@csstools/css-parser-algorithms@^2.1.1": version "2.7.1" resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz#6d93a8f7d8aeb7cd9ed0868f946e46f021b6aa70" @@ -5762,6 +5822,18 @@ regexpu-core@^6.1.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + regjsgen@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" @@ -5774,6 +5846,13 @@ regjsparser@^0.11.0: dependencies: jsesc "~3.0.2" +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== + dependencies: + jsesc "~3.0.2" + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" From 54d3d446208c6fda2304d1111c79663c7da91be8 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 15 Dec 2024 08:45:49 -0800 Subject: [PATCH 009/127] Upgrade Font Awesome to 6.7.1 (cherry picked from commit 016b5718386593c030f14fcac307c93ee1ceeca6) --- package.json | 8 ++++---- yarn.lock | 46 +++++++++++++++++++++++----------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index f735f7881..6907d23e3 100644 --- a/package.json +++ b/package.json @@ -23,10 +23,10 @@ "defaults" ], "dependencies": { - "@fortawesome/fontawesome-free": "6.6.0", - "@fortawesome/fontawesome-svg-core": "6.6.0", - "@fortawesome/free-regular-svg-icons": "6.6.0", - "@fortawesome/free-solid-svg-icons": "6.6.0", + "@fortawesome/fontawesome-free": "6.7.1", + "@fortawesome/fontawesome-svg-core": "6.7.1", + "@fortawesome/free-regular-svg-icons": "6.7.1", + "@fortawesome/free-solid-svg-icons": "6.7.1", "@fortawesome/react-fontawesome": "0.2.2", "@juggle/resize-observer": "3.4.0", "@microsoft/signalr": "6.0.25", diff --git a/yarn.lock b/yarn.lock index b04112079..0430b6a0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1028,36 +1028,36 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@fortawesome/fontawesome-common-types@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz#31ab07ca6a06358c5de4d295d4711b675006163f" - integrity sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw== +"@fortawesome/fontawesome-common-types@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.1.tgz#6201640f39fdcf8e41cd9d1a92b2da3a96817fa4" + integrity sha512-gbDz3TwRrIPT3i0cDfujhshnXO9z03IT1UKRIVi/VEjpNHtSBIP2o5XSm+e816FzzCFEzAxPw09Z13n20PaQJQ== -"@fortawesome/fontawesome-free@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.6.0.tgz#0e984f0f2344ee513c185d87d77defac4c0c8224" - integrity sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow== +"@fortawesome/fontawesome-free@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.1.tgz#160a48730d533ec77578ed0141661a8f0150a71d" + integrity sha512-ALIk/MOh5gYe1TG/ieS5mVUsk7VUIJTJKPMK9rFFqOgfp0Q3d5QiBXbcOMwUvs37fyZVCz46YjOE6IFeOAXCHA== -"@fortawesome/fontawesome-svg-core@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz#2a24c32ef92136e98eae2ff334a27145188295ff" - integrity sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg== +"@fortawesome/fontawesome-svg-core@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.1.tgz#1f8ebb6f35cf02f89c110198514e848de17ac99e" + integrity sha512-8dBIHbfsKlCk2jHQ9PoRBg2Z+4TwyE3vZICSnoDlnsHA6SiMlTwfmW6yX0lHsRmWJugkeb92sA0hZdkXJhuz+g== dependencies: - "@fortawesome/fontawesome-common-types" "6.6.0" + "@fortawesome/fontawesome-common-types" "6.7.1" -"@fortawesome/free-regular-svg-icons@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.6.0.tgz#fc49a947ac8dfd20403c9ea5f37f0919425bdf04" - integrity sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ== +"@fortawesome/free-regular-svg-icons@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.7.1.tgz#d7ec06f896ee91116a388a5a234cd26420ccdfe4" + integrity sha512-e13cp+bAx716RZOTQ59DhqikAgETA9u1qTBHO3e3jMQQ+4H/N1NC1ZVeFYt1V0m+Th68BrEL1/X6XplISutbXg== dependencies: - "@fortawesome/fontawesome-common-types" "6.6.0" + "@fortawesome/fontawesome-common-types" "6.7.1" -"@fortawesome/free-solid-svg-icons@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.6.0.tgz#061751ca43be4c4d814f0adbda8f006164ec9f3b" - integrity sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA== +"@fortawesome/free-solid-svg-icons@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.1.tgz#c1f9a6c25562a12c283e87e284f9d82a5b0dbcc0" + integrity sha512-BTKc0b0mgjWZ2UDKVgmwaE0qt0cZs6ITcDgjrti5f/ki7aF5zs+N91V6hitGo3TItCFtnKg6cUVGdTmBFICFRg== dependencies: - "@fortawesome/fontawesome-common-types" "6.6.0" + "@fortawesome/fontawesome-common-types" "6.7.1" "@fortawesome/react-fontawesome@0.2.2": version "0.2.2" From 5fbb3471087376ea965a6b881bb705f01b77e3a1 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 16 Dec 2024 16:09:27 -0800 Subject: [PATCH 010/127] Upgrade typescript-eslint packages to 8.181.1 (cherry picked from commit ed10b63fa0c161cac7e0a2084e53785ab1798208) --- frontend/src/Utilities/String/translate.ts | 2 +- package.json | 4 +- yarn.lock | 170 ++++++++++----------- 3 files changed, 88 insertions(+), 88 deletions(-) diff --git a/frontend/src/Utilities/String/translate.ts b/frontend/src/Utilities/String/translate.ts index 1faa70ecc..72d3adf40 100644 --- a/frontend/src/Utilities/String/translate.ts +++ b/frontend/src/Utilities/String/translate.ts @@ -17,7 +17,7 @@ export async function fetchTranslations(): Promise { translations = data.Strings; resolve(true); - } catch (error) { + } catch { resolve(false); } }); diff --git a/package.json b/package.json index 6907d23e3..25960d641 100644 --- a/package.json +++ b/package.json @@ -97,8 +97,8 @@ "@types/react-text-truncate": "0.19.0", "@types/react-window": "1.8.8", "@types/webpack-livereload-plugin": "2.3.6", - "@typescript-eslint/eslint-plugin": "6.21.0", - "@typescript-eslint/parser": "6.21.0", + "@typescript-eslint/eslint-plugin": "8.18.1", + "@typescript-eslint/parser": "8.18.1", "are-you-es5": "2.1.2", "autoprefixer": "10.4.20", "babel-loader": "9.2.1", diff --git a/yarn.lock b/yarn.lock index 0430b6a0b..c63e95086 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1003,7 +1003,12 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.10.0": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint-community/regexpp@^4.6.1": version "4.11.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== @@ -1318,7 +1323,7 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== -"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -1459,11 +1464,6 @@ dependencies: "@types/node" "*" -"@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - "@types/source-list-map@*": version "0.1.6" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.6.tgz#164e169dd061795b50b83c19e4d3be09f8d3a454" @@ -1509,91 +1509,86 @@ anymatch "^3.0.0" source-map "^0.6.0" -"@typescript-eslint/eslint-plugin@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== +"@typescript-eslint/eslint-plugin@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.1.tgz#992e5ac1553ce20d0d46aa6eccd79dc36dedc805" + integrity sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ== dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.18.1" + "@typescript-eslint/type-utils" "8.18.1" + "@typescript-eslint/utils" "8.18.1" + "@typescript-eslint/visitor-keys" "8.18.1" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/parser@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== +"@typescript-eslint/parser@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.18.1.tgz#c258bae062778b7696793bc492249027a39dfb95" + integrity sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA== dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/scope-manager" "8.18.1" + "@typescript-eslint/types" "8.18.1" + "@typescript-eslint/typescript-estree" "8.18.1" + "@typescript-eslint/visitor-keys" "8.18.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== +"@typescript-eslint/scope-manager@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz#52cedc3a8178d7464a70beffed3203678648e55b" + integrity sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "8.18.1" + "@typescript-eslint/visitor-keys" "8.18.1" -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== +"@typescript-eslint/type-utils@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz#10f41285475c0bdee452b79ff7223f0e43a7781e" + integrity sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ== dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/typescript-estree" "8.18.1" + "@typescript-eslint/utils" "8.18.1" debug "^4.3.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== +"@typescript-eslint/types@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.18.1.tgz#d7f4f94d0bba9ebd088de840266fcd45408a8fff" + integrity sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw== -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== +"@typescript-eslint/typescript-estree@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz#2a86cd64b211a742f78dfa7e6f4860413475367e" + integrity sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "8.18.1" + "@typescript-eslint/visitor-keys" "8.18.1" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== +"@typescript-eslint/utils@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.18.1.tgz#c4199ea23fc823c736e2c96fd07b1f7235fa92d5" + integrity sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "8.18.1" + "@typescript-eslint/types" "8.18.1" + "@typescript-eslint/typescript-estree" "8.18.1" -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== +"@typescript-eslint/visitor-keys@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz#344b4f6bc83f104f514676facf3129260df7610a" + integrity sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ== dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "8.18.1" + eslint-visitor-keys "^4.2.0" "@ungap/structured-clone@^1.2.0": version "1.2.0" @@ -3191,6 +3186,11 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + eslint@8.57.1: version "8.57.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" @@ -3298,7 +3298,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -3832,7 +3832,7 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== @@ -4667,13 +4667,6 @@ mini-css-extract-plugin@2.9.1: schema-utils "^4.0.0" tapable "^2.2.1" -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimatch@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" @@ -4695,6 +4688,13 @@ minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimatch@~3.0.4: version "3.0.8" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" @@ -6076,7 +6076,7 @@ semver@^6.0.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.4: +semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.6.0: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -6646,10 +6646,10 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -ts-api-utils@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== ts-loader@9.5.1: version "9.5.1" From 51fd30ba10a40420d95f80b001c0b273a7b5432d Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 17 Dec 2024 15:28:19 +0200 Subject: [PATCH 011/127] Use message from error response for Gazelle indexers --- .../Indexers/Definitions/Gazelle/GazelleApi.cs | 5 +++++ .../Indexers/Definitions/Gazelle/GazelleParser.cs | 5 ++++- src/NzbDrone.Core/Indexers/Definitions/GreatPosterWall.cs | 5 ++++- src/NzbDrone.Core/Indexers/Definitions/Orpheus.cs | 5 ++++- src/NzbDrone.Core/Indexers/Definitions/Redacted.cs | 7 +------ src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs | 5 ++++- 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleApi.cs b/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleApi.cs index 0703a00d2..89df33663 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleApi.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleApi.cs @@ -95,3 +95,8 @@ public class GazelleIndexResponse public string Authkey { get; set; } public string Passkey { get; set; } } + +public class GazelleErrorResponse +{ + public string Error { get; init; } +} diff --git a/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleParser.cs b/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleParser.cs index b5253ed6f..1682dea35 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleParser.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Net; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; +using NzbDrone.Common.Serializer; using NzbDrone.Core.Indexers.Exceptions; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; @@ -32,7 +33,9 @@ public class GazelleParser : IParseIndexerResponse // Remove cookie cache CookiesUpdater(null, null); - throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request"); + STJson.TryDeserialize(indexerResponse.Content, out var errorResponse); + + throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}"); } if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value)) diff --git a/src/NzbDrone.Core/Indexers/Definitions/GreatPosterWall.cs b/src/NzbDrone.Core/Indexers/Definitions/GreatPosterWall.cs index 4b8302e5a..29e01057f 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/GreatPosterWall.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/GreatPosterWall.cs @@ -7,6 +7,7 @@ using Newtonsoft.Json; using NLog; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; +using NzbDrone.Common.Serializer; using NzbDrone.Core.Annotations; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers.Definitions.Gazelle; @@ -148,7 +149,9 @@ public class GreatPosterWallParser : GazelleParser throw new IndexerException(indexerResponse, $"Redirected to {indexerResponse.HttpResponse.RedirectUrl} from indexer request"); } - throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request"); + STJson.TryDeserialize(indexerResponse.Content, out var errorResponse); + + throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}"); } if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value)) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Orpheus.cs b/src/NzbDrone.Core/Indexers/Definitions/Orpheus.cs index 14ee4a518..7075e170b 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Orpheus.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Orpheus.cs @@ -8,6 +8,7 @@ using FluentValidation; using NLog; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; +using NzbDrone.Common.Serializer; using NzbDrone.Core.Annotations; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers.Definitions.Gazelle; @@ -252,7 +253,9 @@ namespace NzbDrone.Core.Indexers.Definitions if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK) { - throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request"); + STJson.TryDeserialize(indexerResponse.Content, out var errorResponse); + + throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}"); } if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value)) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Redacted.cs b/src/NzbDrone.Core/Indexers/Definitions/Redacted.cs index fc20f3e73..963bb5a2a 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Redacted.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Redacted.cs @@ -253,7 +253,7 @@ namespace NzbDrone.Core.Indexers.Definitions if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK) { - STJson.TryDeserialize(indexerResponse.Content, out var errorResponse); + STJson.TryDeserialize(indexerResponse.Content, out var errorResponse); throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}"); } @@ -490,9 +490,4 @@ namespace NzbDrone.Core.Indexers.Definitions [FieldOption(Label = "Required", Hint = "Abort download if unable to use token")] Required = 2, } - - public class RedactedErrorResponse - { - public string Error { get; init; } - } } diff --git a/src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs b/src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs index 709868b14..ab63387e6 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs @@ -6,6 +6,7 @@ using System.Text.RegularExpressions; using NLog; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; +using NzbDrone.Common.Serializer; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers.Definitions.Gazelle; using NzbDrone.Core.Indexers.Exceptions; @@ -78,7 +79,9 @@ public class SecretCinemaParser : IParseIndexerResponse // Remove cookie cache CookiesUpdater(null, null); - throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request"); + STJson.TryDeserialize(indexerResponse.Content, out var errorResponse); + + throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request: {errorResponse?.Error ?? "Check the logs for more information."}"); } if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value)) From b46e6579767dfbb9efc94059ec8bd112266219ea Mon Sep 17 00:00:00 2001 From: zodihax <07velvety-cosmic@icloud.com> Date: Tue, 17 Dec 2024 22:04:05 +0100 Subject: [PATCH 012/127] Fixed: (NorBits) Searching UTF-8 characters with full search disabled (#2305) Co-authored-by: zodihaxx --- src/NzbDrone.Core/Indexers/Definitions/NorBits.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs index a62d88c5e..096199880 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs @@ -190,7 +190,7 @@ public class NorBitsRequestGenerator : IIndexerRequestGenerator } else if (!string.IsNullOrWhiteSpace(term)) { - searchTerm = "search=" + term.UrlEncode(Encoding.GetEncoding(28591)); + searchTerm = "search=" + term.UrlEncode(Encoding.UTF8); } searchUrl += "?" + searchTerm + "&" + parameters.GetQueryString(); From 52ec5b6ff6d96772928a5268d5d58cf35472b8ac Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 18 Dec 2024 00:47:12 +0200 Subject: [PATCH 013/127] Bump MailKit to 4.8.0 --- src/NzbDrone.Core/Prowlarr.Core.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Prowlarr.Core.csproj b/src/NzbDrone.Core/Prowlarr.Core.csproj index 8f7b485f4..9056ee4cd 100644 --- a/src/NzbDrone.Core/Prowlarr.Core.csproj +++ b/src/NzbDrone.Core/Prowlarr.Core.csproj @@ -6,7 +6,7 @@ - + From 9c2fced391016577903fcbc8070705d36110dc13 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 18 Dec 2024 01:08:17 +0200 Subject: [PATCH 014/127] Bump System.Text.Json to 6.0.10 --- src/NzbDrone.Common/Prowlarr.Common.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/NzbDrone.Common/Prowlarr.Common.csproj b/src/NzbDrone.Common/Prowlarr.Common.csproj index c43b60a4c..fa811ec39 100644 --- a/src/NzbDrone.Common/Prowlarr.Common.csproj +++ b/src/NzbDrone.Common/Prowlarr.Common.csproj @@ -16,6 +16,7 @@ + From 43c7c4325755fe8f1dd3f475153b1ca7becbcbd3 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 18 Dec 2024 12:56:44 +0200 Subject: [PATCH 015/127] Bump Microsoft.Data.SqlClient to 2.1.7 --- src/NzbDrone.Core/Prowlarr.Core.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/NzbDrone.Core/Prowlarr.Core.csproj b/src/NzbDrone.Core/Prowlarr.Core.csproj index 9056ee4cd..1cd59cfd4 100644 --- a/src/NzbDrone.Core/Prowlarr.Core.csproj +++ b/src/NzbDrone.Core/Prowlarr.Core.csproj @@ -9,6 +9,7 @@ + From 500759bf1f1312051af6e9f603e62424536dcef6 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 22 Dec 2024 13:24:47 +0200 Subject: [PATCH 016/127] Bump version to 1.29.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 78f4ac9b8..7cc0a6153 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.29.0' + majorVersion: '1.29.1' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 4659cb706add2e79b1c60652e4da69be9d24bca7 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 27 Dec 2024 22:37:43 +0200 Subject: [PATCH 017/127] Fixed: (Knaben) Update base url Co-authored-by: garfield69 --- src/NzbDrone.Core/Indexers/Definitions/Knaben.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Knaben.cs b/src/NzbDrone.Core/Indexers/Definitions/Knaben.cs index 3e8ca3294..286ef1a1a 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Knaben.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Knaben.cs @@ -23,7 +23,8 @@ namespace NzbDrone.Core.Indexers.Definitions public class Knaben : TorrentIndexerBase { public override string Name => "Knaben"; - public override string[] IndexerUrls => new[] { "https://knaben.eu/" }; + public override string[] IndexerUrls => new[] { "https://knaben.org/" }; + public override string[] LegacyUrls => new[] { "https://knaben.eu/" }; public override string Description => "Knaben is a Public torrent meta-search engine"; public override IndexerPrivacy Privacy => IndexerPrivacy.Public; public override IndexerCapabilities Capabilities => SetCapabilities(); @@ -145,7 +146,7 @@ namespace NzbDrone.Core.Indexers.Definitions public class KnabenRequestGenerator : IIndexerRequestGenerator { - private const string API_SEARCH_ENDPOINT = "https://api.knaben.eu/v1"; + private const string ApiSearchEndpoint = "https://api.knaben.org/v1"; private readonly IndexerCapabilities _capabilities; @@ -226,7 +227,7 @@ namespace NzbDrone.Core.Indexers.Definitions body.Add("categories", categories.Select(int.Parse).Distinct().ToArray()); } - var request = new HttpRequest(API_SEARCH_ENDPOINT, HttpAccept.Json) + var request = new HttpRequest(ApiSearchEndpoint, HttpAccept.Json) { Headers = { From 9ab3c3e6c734092976bd746132efe7b09aa5c949 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 27 Dec 2024 22:40:01 +0200 Subject: [PATCH 018/127] Update how to get cookies info for Cardigann Co-authored-by: garfield69 --- src/Prowlarr.Api.V1/Indexers/IndexerResource.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Prowlarr.Api.V1/Indexers/IndexerResource.cs b/src/Prowlarr.Api.V1/Indexers/IndexerResource.cs index 57ce76f3a..6f1b53499 100644 --- a/src/Prowlarr.Api.V1/Indexers/IndexerResource.cs +++ b/src/Prowlarr.Api.V1/Indexers/IndexerResource.cs @@ -202,15 +202,17 @@ namespace Prowlarr.Api.V1.Indexers { case "info_cookie": field.Label = "How to get the Cookie"; - field.Value = "
  1. Login to this tracker with your browser
  2. Open the DevTools panel by pressing F12
  3. Select the Network tab
  4. Click on the Doc button (Chrome Browser) or HTML button (FireFox)
  5. Refresh the page by pressing F5
  6. Click on the first row entry
  7. Select the Headers tab on the Right panel
  8. Find 'cookie:' in the Request Headers section
  9. Select and Copy the whole cookie string (everything after 'cookie: ') and Paste here.
"; - break; - case "info_flaresolverr": - field.Label = "FlareSolverr Info"; - field.Value = "This site may use Cloudflare DDoS Protection, therefore Prowlarr requires FlareSolverr to access it."; + field.Value = "
  1. Login to this tracker with your browser
  2. If present in the login page, ensure you have the Remember me ticked and the Log Me Out if IP Changes unticked when you login
  3. Navigate to the web site's torrent search page to view the list of available torrents for download
  4. Open the DevTools panel by pressing F12
  5. Select the Network tab
  6. Click on the Doc button (Chrome Browser) or HTML button (FireFox)
  7. Refresh the page by pressing F5
  8. Click on the first row entry
  9. Select the Headers tab on the Right panel
  10. Find 'cookie:' in the Request Headers section
  11. Select and Copy the whole cookie string (everything after 'cookie: ') and Paste here.
"; + field.HelpLink = "https://wiki.servarr.com/useful-tools#finding-cookies"; break; case "info_useragent": field.Label = "How to get the User-Agent"; field.Value = "
  1. From the same place you fetched the cookie,
  2. Find 'user-agent:' in the Request Headers section
  3. Select and Copy the whole user-agent string (everything after 'user-agent: ') and Paste here.
"; + field.HelpLink = "https://wiki.servarr.com/useful-tools#finding-cookies"; + break; + case "info_flaresolverr": + field.Label = "FlareSolverr Info"; + field.Value = "This site may use Cloudflare DDoS Protection, therefore Prowlarr requires FlareSolverr to access it."; break; case "info_category_8000": field.Label = $"About {definition.Name} Categories"; From c8a910eaf429509071f9a75b7b1c414594d6011a Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 27 Dec 2024 22:42:52 +0200 Subject: [PATCH 019/127] Fixed: (RuTracker) Update categories Co-authored-by: garfield69 --- src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs b/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs index 2ec548258..26a5a42de 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs @@ -1292,7 +1292,6 @@ namespace NzbDrone.Core.Indexers.Definitions caps.Categories.AddCategoryMapping(650, NewznabStandardCategory.PCMobileOther, "Игры для мобильных устройств"); caps.Categories.AddCategoryMapping(2149, NewznabStandardCategory.PCMobileAndroid, "|- Игры для Android"); caps.Categories.AddCategoryMapping(2420, NewznabStandardCategory.ConsoleOther, "|- Игры для Oculus Quest"); - caps.Categories.AddCategoryMapping(1001, NewznabStandardCategory.PC, "|- Игры для Java"); caps.Categories.AddCategoryMapping(1004, NewznabStandardCategory.PCMobileOther, "|- Игры для Symbian"); caps.Categories.AddCategoryMapping(1002, NewznabStandardCategory.PCMobileOther, "|- Игры для Windows Mobile"); caps.Categories.AddCategoryMapping(240, NewznabStandardCategory.OtherMisc, "Игровое видео"); @@ -1308,7 +1307,6 @@ namespace NzbDrone.Core.Indexers.Definitions caps.Categories.AddCategoryMapping(1379, NewznabStandardCategory.PC, "|- Операционные системы (Linux, Unix)"); caps.Categories.AddCategoryMapping(1381, NewznabStandardCategory.PC, "|- Программное обеспечение (Linux, Unix)"); caps.Categories.AddCategoryMapping(1473, NewznabStandardCategory.PC, "|- Другие ОС и ПО под них"); - caps.Categories.AddCategoryMapping(1195, NewznabStandardCategory.PC, "Тестовые диски для настройки аудио/видео аппаратуры"); caps.Categories.AddCategoryMapping(1013, NewznabStandardCategory.PC, "Системные программы"); caps.Categories.AddCategoryMapping(1028, NewznabStandardCategory.PC, "|- Работа с жёстким диском"); caps.Categories.AddCategoryMapping(1029, NewznabStandardCategory.PC, "|- Резервное копирование"); @@ -1350,6 +1348,7 @@ namespace NzbDrone.Core.Indexers.Definitions caps.Categories.AddCategoryMapping(1018, NewznabStandardCategory.PC, "|- Шаблоны для сайтов и CMS"); caps.Categories.AddCategoryMapping(1058, NewznabStandardCategory.PC, "|- Разное (Веб-разработка и программирование)"); caps.Categories.AddCategoryMapping(1016, NewznabStandardCategory.PC, "Программы для работы с мультимедиа и 3D"); + caps.Categories.AddCategoryMapping(1195, NewznabStandardCategory.PC, "|- Тестовые диски для настройки аудио/видео аппаратуры"); caps.Categories.AddCategoryMapping(1079, NewznabStandardCategory.PC, "|- Программные комплекты"); caps.Categories.AddCategoryMapping(1080, NewznabStandardCategory.PC, "|- Плагины для программ компании Adobe"); caps.Categories.AddCategoryMapping(1081, NewznabStandardCategory.PC, "|- Графические редакторы"); From 31203d1370a9b61c99c9e3d7fa8e1764bdf0fb09 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 27 Dec 2024 22:50:37 +0200 Subject: [PATCH 020/127] Add more links for info FlareSolverr and category 8000 --- src/Prowlarr.Api.V1/Indexers/IndexerResource.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Prowlarr.Api.V1/Indexers/IndexerResource.cs b/src/Prowlarr.Api.V1/Indexers/IndexerResource.cs index 6f1b53499..31624dbf2 100644 --- a/src/Prowlarr.Api.V1/Indexers/IndexerResource.cs +++ b/src/Prowlarr.Api.V1/Indexers/IndexerResource.cs @@ -213,10 +213,12 @@ namespace Prowlarr.Api.V1.Indexers case "info_flaresolverr": field.Label = "FlareSolverr Info"; field.Value = "This site may use Cloudflare DDoS Protection, therefore Prowlarr requires FlareSolverr to access it."; + field.HelpLink = "https://wiki.servarr.com/prowlarr/faq#can-i-use-flaresolverr-indexers"; break; case "info_category_8000": field.Label = $"About {definition.Name} Categories"; field.Value = $"{definition.Name} does not return categories in its search results. To sync to your apps, include 8000(Other) in your Apps' Sync Categories."; + field.HelpLink = "https://wiki.servarr.com/prowlarr/faq#prowlarr-will-not-sync-x-indexer-to-app"; break; } } From 3a9b841fad457320b77528cb841940ec5f13bf62 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 27 Dec 2024 14:32:06 +0000 Subject: [PATCH 021/127] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: GkhnGRBZ Co-authored-by: Oskari Lavinto Co-authored-by: Tommy Au Co-authored-by: Weblate Co-authored-by: marapavelka Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_TW/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/cs.json | 142 ++++++++++++------ src/NzbDrone.Core/Localization/Core/fi.json | 105 +++++++------ src/NzbDrone.Core/Localization/Core/tr.json | 10 +- .../Localization/Core/zh_TW.json | 16 +- 4 files changed, 169 insertions(+), 104 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index bd43f56f7..caa43cf46 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -1,6 +1,6 @@ { "Add": "Přidat", - "CertificateValidation": "Ověření certifikátu", + "CertificateValidation": "Ověřování certifikátu", "DeleteBackupMessageText": "Opravdu chcete odstranit zálohu '{name}'?", "YesCancel": "Ano, zrušit", "About": "O aplikaci", @@ -18,7 +18,7 @@ "Usenet": "Usenet", "AddDownloadClient": "Přidat klienta pro stahování", "Backups": "Zálohy", - "CancelPendingTask": "Opravdu chcete zrušit tento nevyřízený úkol?", + "CancelPendingTask": "Opravdu chcete zrušit tento úkol čekající na vyřízení?", "MovieIndexScrollBottom": "Rejstřík filmů: Posun dolů", "ProxyType": "Typ serveru proxy", "Reddit": "Reddit", @@ -69,23 +69,23 @@ "UnselectAll": "Odznačit vše", "UpdateStartupNotWritableHealthCheckMessage": "Aktualizaci nelze nainstalovat, protože spouštěcí složku „{startupFolder}“ nelze zapisovat uživatelem „{userName}“.", "Version": "Verze", - "AnalyticsEnabledHelpText": "Odesílejte anonymní informace o použití a chybách na servery {appName}u. To zahrnuje informace o vašem prohlížeči, které stránky {appName} WebUI používáte, hlášení chyb a také verzi operačního systému a běhového prostředí. Tyto informace použijeme k upřednostnění funkcí a oprav chyb.", + "AnalyticsEnabledHelpText": "Odesílejte anonymní informace o použití a chybách na servery {appName}u. To zahrnuje informace o vašem prohlížeči, které stránky webového rozhraní {appName}u používáte, hlášení chyb a také verzi operačního systému a běhového prostředí. Tyto informace použijeme k určení priorit funkcí a oprav chyb.", "ApiKey": "Klíč API", "AppDataDirectory": "Adresář AppData", "AppDataLocationHealthCheckMessage": "Aktualizace nebude možná, aby se zabránilo odstranění AppData při aktualizaci", - "ApplicationStatusCheckAllClientMessage": "Všechny seznamy nejsou k dispozici z důvodu selhání", - "ApplicationStatusCheckSingleClientMessage": "Seznamy nejsou k dispozici z důvodu selhání: {0}", + "ApplicationStatusCheckAllClientMessage": "Všechny aplikace jsou nedostupné z důvodu poruch", + "ApplicationStatusCheckSingleClientMessage": "Aplikace nedostupné z důvodu poruch: {0}", "Apply": "Použít", "Branch": "Větev", - "BranchUpdate": "Pobočka, která se má použít k aktualizaci {appName}", + "BranchUpdate": "Větev použitá k aktualizaci {appName}u", "EditIndexer": "Upravit indexátor", "ForMoreInformationOnTheIndividualDownloadClients": "Další informace o jednotlivých klientech pro stahování získáte kliknutím na informační tlačítka.", "General": "Všeobecné", - "CloseCurrentModal": "Zavřít aktuální modální", + "CloseCurrentModal": "Zavřít aktuální modální okno", "Columns": "Sloupce", - "ConnectionLost": "Spojení ztraceno", + "ConnectionLost": "Ztráta spojení", "ConnectSettings": "Nastavení připojení", - "Custom": "Zvyk", + "Custom": "Vlastní", "Error": "Chyba", "Failed": "Selhalo", "FeatureRequests": "Žádosti o funkce", @@ -106,7 +106,7 @@ "Test": "Test", "UnableToLoadTags": "Značky nelze načíst", "IndexerProxyStatusAllUnavailableHealthCheckMessage": "Všechny indexery nejsou k dispozici z důvodu selhání", - "ApplyTags": "Použít značky", + "ApplyTags": "Použít štítky", "MoreInfo": "Více informací", "System": "Systém", "Enabled": "Povoleno", @@ -171,15 +171,15 @@ "UseProxy": "Použij proxy", "Username": "Uživatelské jméno", "Yesterday": "Včera", - "AutomaticSearch": "Vyhledat automaticky", - "BackupFolderHelpText": "Relativní cesty budou v adresáři AppData společnosti {appName}", + "AutomaticSearch": "Automatické vyhledávání", + "BackupFolderHelpText": "Relativní cesty budou v adresáři AppData {appName}u", "BackupIntervalHelpText": "Interval mezi automatickými zálohami", - "BackupNow": "Ihned zálohovat", + "BackupNow": "Zálohovat nyní", "BackupRetentionHelpText": "Automatické zálohy starší než doba uchovávání budou automaticky vyčištěny", - "BeforeUpdate": "Před zálohováním", + "BeforeUpdate": "Před aktualizací", "BindAddress": "Vázat adresu", - "BindAddressHelpText": "Platná IP adresa, localhost nebo '*' pro všechna rozhraní", - "BranchUpdateMechanism": "Větev používaná externím aktualizačním mechanismem", + "BindAddressHelpText": "Platná IP adresa, localhost nebo ‚*‘ pro všechna rozhraní", + "BranchUpdateMechanism": "Větev použitá externím aktualizačním mechanismem", "BypassProxyForLocalAddresses": "Obcházení proxy serveru pro místní adresy", "DeleteIndexerProxyMessageText": "Opravdu chcete smazat značku „{0}“?", "DeleteTag": "Smazat značku", @@ -222,28 +222,28 @@ "SettingsShowRelativeDates": "Zobrazit relativní data", "SettingsShowRelativeDatesHelpText": "Zobrazit relativní (dnes / včera / atd.) Nebo absolutní data", "SystemTimeHealthCheckMessage": "Systémový čas je vypnutý o více než 1 den. Naplánované úlohy nemusí fungovat správně, dokud nebude čas opraven", - "AddingTag": "Přidání značky", + "AddingTag": "Přidávání štítku", "Age": "Stáří", "All": "Vše", - "AllIndexersHiddenDueToFilter": "Všechny filmy jsou skryty kvůli použitému filtru.", + "AllIndexersHiddenDueToFilter": "Všechny indexery jsou skryty kvůli použitému filtru.", "Analytics": "Analýzy", "EnableRss": "Povolit RSS", "NoChange": "Žádná změna", "Authentication": "Ověřování", - "AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k {appName}", + "AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k {appName}u", "Automatic": "Automatický", "Backup": "Záloha", "Cancel": "Zrušit", - "CertificateValidationHelpText": "Změňte, jak přísné je ověření certifikace HTTPS", + "CertificateValidationHelpText": "Změňte přísnost ověřování certifikace HTTPS", "ChangeHasNotBeenSavedYet": "Změna ještě nebyla uložena", - "Clear": "Vyčistit", + "Clear": "Vymazat", "ClientPriority": "Priorita klienta", "CloneProfile": "Klonovat profil", "Close": "Zavřít", "CouldNotConnectSignalR": "Nelze se připojit k SignalR, uživatelské rozhraní se neaktualizuje", "CustomFilters": "Vlastní filtry", - "Date": "datum", - "Dates": "Termíny", + "Date": "Datum", + "Dates": "Data", "DatabaseMigration": "Migrace databáze", "Delete": "Vymazat", "DeleteApplicationMessageText": "Opravdu chcete smazat oznámení „{0}“?", @@ -320,8 +320,8 @@ "UnableToLoadIndexers": "Nelze načíst indexery", "Yes": "Ano", "GrabReleases": "Uchopte uvolnění", - "ApplicationLongTermStatusCheckSingleClientMessage": "Indexery nedostupné z důvodu selhání po dobu delší než 6 hodin: {0}", - "ApplicationLongTermStatusCheckAllClientMessage": "Všechny indexery nejsou k dispozici z důvodu selhání po dobu delší než 6 hodin", + "ApplicationLongTermStatusCheckSingleClientMessage": "Aplikace nedostupné z důvodu poruchy po dobu delší než 6 hodin: {0}", + "ApplicationLongTermStatusCheckAllClientMessage": "Všechny aplikace jsou z důvodu poruchy nedostupné déle než 6 hodin", "Ended": "Skončil", "LastDuration": "lastDuration", "LastExecution": "Poslední poprava", @@ -331,42 +331,42 @@ "Replace": "Nahradit", "OnLatestVersion": "Nejnovější verze aplikace {appName} je již nainstalována", "More": "Více", - "ApplyTagsHelpTextAdd": "Přidat: Přidá značky k již existujícímu seznamu", - "ApplyTagsHelpTextHowToApplyApplications": "Jak použít značky na vybrané filmy", + "ApplyTagsHelpTextAdd": "Přidat: Přidat štítky do existujícího seznamu štítků", + "ApplyTagsHelpTextHowToApplyApplications": "Jak použít štítky na vybrané aplikace", "DeleteSelectedDownloadClients": "Odstranit klienta pro stahování", "DeleteSelectedIndexersMessageText": "Opravdu chcete smazat {count} vybraný(ch) indexer(ů)?", "DeleteSelectedApplicationsMessageText": "Opravdu chcete odstranit indexer „{0}“?", "DeleteSelectedDownloadClientsMessageText": "Opravdu chcete smazat {count} vybraných klientů pro stahování?", "Year": "Rok", - "ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané značky", + "ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané štítky", "DownloadClientPriorityHelpText": "Upřednostněte více klientů pro stahování. Round-Robin se používá pro klienty se stejnou prioritou.", - "ApplyTagsHelpTextHowToApplyIndexers": "Jak použít značky na vybrané indexery", - "ApplyTagsHelpTextReplace": "Nahradit: Nahradit značky zadanými značkami (prázdné pole vymaže všechny značky)", + "ApplyTagsHelpTextHowToApplyIndexers": "Jak použít štítky na vybrané indexery", + "ApplyTagsHelpTextReplace": "Nahradit: Nahradit štítky zadanými štítky (prázdné pole vymaže všechny štítky)", "Track": "Stopa", "Genre": "Žánry", "ConnectionLostReconnect": "{appName} se pokusí připojit automaticky, nebo můžete kliknout na tlačítko znovunačtení níže.", "RecentChanges": "Nedávné změny", "WhatsNew": "Co je nového?", "DeleteAppProfileMessageText": "Opravdu chcete smazat kvalitní profil {0}", - "ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude třebaho znovu načíst.", + "ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude potřeba ho znovu načíst.", "minutes": "Minut", "ApplicationURL": "URL aplikace", - "ApplicationUrlHelpText": "Externí adresa URL této aplikace včetně http(s)://, portu a základní adresy URL", + "ApplicationUrlHelpText": "Externí adresa URL této aplikace včetně http(s)://, portu a základu URL", "ApplyChanges": "Použít změny", "ApiKeyValidationHealthCheckMessage": "Aktualizujte svůj klíč API tak, aby měl alespoň {length} znaků. Můžete to provést prostřednictvím nastavení nebo konfiguračního souboru", "AppUpdated": "{appName} aktualizován", - "AddDownloadClientImplementation": "Přidat klienta pro stahování - {implementationName}", - "AuthenticationRequired": "Vyžadované ověření", - "AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Pokud nerozumíte rizikům, neměňte je.", + "AddDownloadClientImplementation": "Přidat klienta pro stahování – {implementationName}", + "AuthenticationRequired": "Vyžadováno ověření", + "AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Neměňte, pokud nerozumíte rizikům.", "AddCustomFilter": "Přidat vlastní filtr", "AddConnection": "Přidat spojení", - "AddConnectionImplementation": "Přidat spojení - {implementationName}", - "AddIndexerImplementation": "Přidat indexer - {implementationName}", + "AddConnectionImplementation": "Přidat spojení – {implementationName}", + "AddIndexerImplementation": "Přidat indexer – {implementationName}", "Publisher": "Vydavatel", "Categories": "Kategorie", "Notification": "Oznámení", - "AddApplicationImplementation": "Přidat spojení - {implementationName}", - "AddIndexerProxyImplementation": "Přidat indexátor - {implementationName}", + "AddApplicationImplementation": "Přidat aplikaci – {implementationName}", + "AddIndexerProxyImplementation": "Přidat proxy server indexeru – {implementationName}", "Artist": "Umělec", "EditIndexerImplementation": "Upravit indexer - {implementationName}", "Episode": "epizoda", @@ -392,38 +392,38 @@ "None": "Žádný", "ResetAPIKeyMessageText": "Opravdu chcete resetovat klíč API?", "Database": "Databáze", - "CountDownloadClientsSelected": "{count} vybraných klientů ke stahování", + "CountDownloadClientsSelected": "{count} vybraných klientů pro stahování", "CountIndexersSelected": "{count} vybraných indexerů", "EditIndexerProxyImplementation": "Přidat indexátor - {implementationName}", "AuthBasic": "Základní (vyskakovací okno prohlížeče)", - "AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName} povolení ověření. Ověřování z místních adres můžete volitelně zakázat.", + "AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName}, aby bylo povoleno ověřování. Volitelně můžete zakázat ověřování z místních adres.", "RestartProwlarr": "Restartujte {appName}", "Duration": "Trvání", "EditSelectedDownloadClients": "Upravit vybrané klienty pro stahování", "EditSelectedIndexers": "Upravit vybrané indexery", "AuthenticationMethod": "Metoda ověřování", - "AuthenticationRequiredPasswordHelpTextWarning": "Vložte nové heslo", - "AuthenticationRequiredUsernameHelpTextWarning": "Vložte nové uživatelské jméno", - "AuthenticationMethodHelpTextWarning": "Prosím vyberte platnou metodu ověřování", + "AuthenticationRequiredPasswordHelpTextWarning": "Zadejte nové heslo", + "AuthenticationRequiredUsernameHelpTextWarning": "Zadejte nové uživatelské jméno", + "AuthenticationMethodHelpTextWarning": "Vyberte platnou metodu ověřování", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo", "days": "dnů", "Id": "ID", - "CountApplicationsSelected": "Vybráno {0} kolekcí", + "CountApplicationsSelected": "{count} vybraných aplikací", "IndexerHDBitsSettingsCodecs": "Kodek", "IndexerHDBitsSettingsMediums": "Střední", "Directory": "Adresář", - "CustomFilter": "Vlastní filtry", + "CustomFilter": "Vlastní filtr", "ProxyValidationBadRequest": "Nepodařilo se otestovat proxy. StatusCode: {statusCode}", "Default": "Výchozí", "GrabRelease": "Uchopte uvolnění", "Category": "Kategorie", - "BlackholeFolderHelpText": "Složka do které {appName} uloží {extension} soubor", + "BlackholeFolderHelpText": "Složka, do které {appName} uloží soubor {extension}", "DownloadClientSettingsUrlBaseHelpText": "Přidá předponu do {connectionName} url, jako např. {url}", "Any": "Jakákoliv", "BuiltIn": "Vestavěný", "Script": "Skript", "PublishedDate": "Datum zveřejnění", - "AllSearchResultsHiddenByFilter": "Všechny výsledky jsou schovány použitým filtrem", + "AllSearchResultsHiddenByFilter": "Všechny výsledky vyhledávání jsou skryty použitým filtrem.", "DockerUpdater": "aktualizujte kontejner dockeru, abyste aktualizaci obdrželi", "Download": "Stažení", "ErrorRestoringBackup": "Chyba při obnovování zálohy", @@ -432,9 +432,51 @@ "NoEventsFound": "Nebyly nalezeny žádné události", "RestartReloadNote": "Poznámka: {appName} se během procesu obnovy automaticky restartuje a znovu načte uživatelské rozhraní.", "UpdateAppDirectlyLoadError": "{appName} nelze aktualizovat přímo,", - "AptUpdater": "K instalaci aktualizace použijte apt", + "AptUpdater": "K instalaci aktualizace používat apt", "InstallLatest": "Nainstalujte nejnovější", "Stats": "Postavení", "CurrentlyInstalled": "Aktuálně nainstalováno", - "Mixed": "Pevný" + "Mixed": "Pevný", + "ActiveIndexers": "Aktivní indexery", + "ActiveApps": "Aktivní aplikace", + "AppSettingsSummary": "Aplikace a nastavení pro konfiguraci interakce {appName}u s vašimi programy PVR", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Pokud je torrent blokován pomocí hash, nemusí být u některých indexerů správně odmítnut během RSS/vyhledávání. Povolení této funkce umožní jeho odmítnutí po zachycení torrentu, ale před jeho odesláním klientovi.", + "ApplicationsLoadError": "Nelze načíst seznam aplikací", + "AppProfileInUse": "Používaný profil aplikace", + "AppsMinimumSeedersHelpText": "Minimální počet seederů požadovaných aplikacemi pro indexer, výchozí hodnota synchronizačního profilu je prázdná", + "AverageGrabs": "Průměrné získání", + "AverageQueries": "Průměrné dotazy", + "AdvancedSettingsShownClickToHide": "Rozšířená nastavení jsou zobrazená, klikněte pro skrytí", + "AdvancedSettingsHiddenClickToShow": "Rozšířená nastavení jsou skrytá, klikněte pro zobrazení", + "AppsMinimumSeeders": "Minimální počet seederů aplikací", + "AddNewIndexer": "Přidat nový indexer", + "AddToDownloadClient": "Přidat vydání do klienta pro stahování", + "AddIndexerProxy": "Přidat proxy server indexeru", + "AppProfileSelectHelpText": "Profily aplikace slouží k ovládání nastavení RSS, automatického vyhledávání a interaktivního vyhledávání při synchronizaci aplikace", + "BookSearch": "Vyhledávání knihy", + "ClearHistory": "Vymazat historii", + "Auth": "Ověřování", + "ConnectSettingsSummary": "Oznámení a vlastní skripty", + "AreYouSureYouWantToDeleteIndexer": "Opravdu chcete odstranit ‚{name}‘ z {appName}u?", + "AuthQueries": "Ověřovací dotazy", + "CountIndexersAvailable": "{count} dostupných indexerů", + "ApplicationTagsHelpText": "Synchronizovat s touto aplikací indexery, které mají jeden nebo více shodných štítků. Pokud zde nejsou uvedeny žádné štítky, nebude synchronizace žádných indexerů znemožněna kvůli jejich štítkům.", + "ApplicationTagsHelpTextWarning": "Štítky je potřeba používat opatrně, mohou mít nechtěné účinky. Aplikace se štítkem se bude synchronizovat pouze s indexery se stejným štítkem.", + "BasicSearch": "Základní vyhledávání", + "ClearHistoryMessageText": "Opravdu chcete vymazat celou historii {appName}u?", + "AddDownloadClientToProwlarr": "Přidání klienta pro stahování umožňuje {appName} odesílat vydání přímo z uživatelského rozhraní při ručním vyhledávání.", + "AddRemoveOnly": "Pouze přidat a odebrat", + "AudioSearch": "Vyhledávání audia", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Synchronizovat odmítnuté blokované hashe torrentů při získávání", + "Apps": "Aplikace", + "ClickToChangeQueryOptions": "Kliknutím změníte možnosti dotazu", + "Author": "Autor", + "AverageResponseTimesMs": "Průměrné doby odezvy indexerů (ms)", + "Book": "Kniha", + "BookSearchTypes": "Typy vyhledávání knihy", + "AddApplication": "Přidat aplikaci", + "AddSyncProfile": "Přidat synchronizační profil", + "AddedToDownloadClient": "Vydání přidáno do klienta", + "AddCategory": "Přidat kategorii", + "AreYouSureYouWantToDeleteCategory": "Opravdu chcete odstranit namapovanou kategorii?" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 3031f6fe0..553026f7d 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -5,7 +5,7 @@ "MovieIndexScrollTop": "Elokuvakirjasto: vieritä ylös", "Apply": "Käytä", "ClientPriority": "Lataustyökalun painotus", - "IndexerPriorityHelpText": "Tietolähteen painotus, 1– 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. Kaikkia käytössä olevia tietolähteitä käytetään edelleen RSS-synkronointiin ja hakuun.", + "IndexerPriorityHelpText": "Tietolähteen painotus, 1– 50 (korkein-alin). Oletusarvo on 25.", "Manual": "Manuaalinen", "Add": "Lisää", "Reload": "Lataa uudelleen", @@ -52,14 +52,14 @@ "SettingsShortDateFormat": "Lyhyen päiväyksen esitys", "UnselectAll": "Tyhjennä valinnat", "UpdateStartupTranslocationHealthCheckMessage": "Päivitystä ei voida asentaa, koska käynnistyskansio \"{startupFolder}\" sijaitsee \"App Translocation\" -kansiossa.", - "UpdateUiNotWritableHealthCheckMessage": "Päivityksen asennus ei onnistu, koska käyttäjällä \"{userName}\" ei ole kirjoitusoikeutta käyttöliittymäkansioon \"{uiFolder}\".", + "UpdateUiNotWritableHealthCheckMessage": "Päivityksen asennus ei onnistu, koska käyttäjällä {userName} ei ole kirjoitusoikeutta käyttöliittymäkansioon \"{uiFolder}\".", "UpdateMechanismHelpText": "Käytä {appName}in sisäänrakennettua päivitystoimintoa tai komentosarjaa.", "Enable": "Käytä", "UI": "Käyttöliittymä", "Usenet": "Usenet", "BackupNow": "Varmuuskopioi nyt", "NoBackupsAreAvailable": "Varmuuskopioita ei ole käytettävissä", - "UpdateStartupNotWritableHealthCheckMessage": "Päivitystä ei voida asentaa, koska käyttäjällä \"{userName}\" ei ole kirjoitusoikeutta käynnistyskansioon \"{startupFolder}\".", + "UpdateStartupNotWritableHealthCheckMessage": "Päivitystä ei voida asentaa, koska käyttäjällä {userName} ei ole kirjoitusoikeutta käynnistyskansioon \"{startupFolder}\".", "Updates": "Päivitykset", "UpdateScriptPathHelpText": "Polku komentosarjaan, joka käsittelee puretun päivitystiedoston ja hoitaa asennuksen loppuosuuden.", "Uptime": "Käyttöaika", @@ -70,7 +70,7 @@ "NoTagsHaveBeenAddedYet": "Tunnisteita ei ole vielä lisätty.", "ApplyTags": "Tunnistetoimenpide", "Authentication": "Tunnistautuminen", - "AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana", + "AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana.", "BindAddressHelpText": "Toimiva IP-osoite, localhost tai * (tähti) kaikille verkkoliitännöille.", "Close": "Sulje", "DeleteNotification": "Poista ilmoitus", @@ -95,7 +95,7 @@ "Protocol": "Protokolla", "ProxyBadRequestHealthCheckMessage": "Välityspalvelintesti epäonnistui. Tilakoodi: {statusCode}.", "ProxyFailedToTestHealthCheckMessage": "Välityspalvelintesti epäonnistui: {url}", - "ProxyResolveIpHealthCheckMessage": "Määritetyn välityspalvelimen \"{0}\" IP-osoitteen selvitys epäonnistui.", + "ProxyResolveIpHealthCheckMessage": "Määritetyn välityspalvelimen \"{proxyHostName}\" IP-osoitteen selvitys epäonnistui.", "ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.", "ProxyType": "Välityspalvelimen tyyppi", "ProxyUsernameHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.", @@ -116,7 +116,7 @@ "Security": "Suojaus", "SuggestTranslationChange": "Ehdota käännösmuutosta", "System": "Järjestelmä", - "SystemTimeHealthCheckMessage": "Järjestelmän ajassa on ainakin vuorokauden heitto eivätkä ajoitetut tehtävät tämän vuoksi toimi oikein ennen kuin se on korjattu.", + "SystemTimeHealthCheckMessage": "Järjestelmän aika on ainakin vuorokauden pielessä, eivätkä ajoitetut tehtävät toimi oikein ennen kuin se on korjattu.", "TagCannotBeDeletedWhileInUse": "Tunnistetta ei voi poistaa, koska se on käytössä", "TagIsNotUsedAndCanBeDeleted": "Tunnistetta ei ole määritetty millekään kohteelle, joten sen voi poistaa.", "TagsSettingsSummary": "Täältä näet kaikki tunnisteet käyttökohteineen ja voit poistaa käyttämättömät tunnisteet.", @@ -202,7 +202,7 @@ "SettingsShowRelativeDates": "Suhteellisten päiväysten esitys", "SettingsShowRelativeDatesHelpText": "Korvaa absoluuttiset päiväykset suhteellisilla päiväyksillä (tänään/eilen/yms.).", "ShowSearch": "Näytä haku", - "Source": "Lähdekoodi", + "Source": "Lähde", "SSLPort": "SSL-portti", "StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta", "StartupDirectory": "Käynnistyskansio", @@ -213,7 +213,7 @@ "UnableToAddANewNotificationPleaseTryAgain": "Kytköksen lisäys epäonnistui. Yritä uudelleen.", "Version": "Versio", "View": "Näkymä", - "Warn": "Varoitus", + "Warn": "Varoita", "Wiki": "Wiki", "Port": "Portti", "Automatic": "Automaattinen", @@ -226,11 +226,11 @@ "BeforeUpdate": "Ennen päivitystä", "BindAddress": "Sidososoite", "Branch": "Haara", - "BranchUpdate": "{appName}in versiopäivityksiin käytettävä kehityshaara", + "BranchUpdate": "{appName}in versiopäivityksiin käytettävä kehityshaara.", "BranchUpdateMechanism": "Ulkoisen päivitysratkaisun käyttämä kehityshaara.", "BypassProxyForLocalAddresses": "Ohjaa paikalliset osoitteet välityspalvelimen ohi", "Cancel": "Peruuta", - "CancelPendingTask": "Haluatko varmasti perua tämän odottavan tehtävän?", + "CancelPendingTask": "Haluatko varmasti perua odottavan tehtävän?", "CertificateValidation": "Varmenteen vahvistus", "CertificateValidationHelpText": "Muuta HTTPS-varmennevahvistuksen tarkkuutta. Älä muuta, jollet ymmärrä tähän liittyviä riskejä.", "ChangeHasNotBeenSavedYet": "Muutosta ei ole vielä tallennettu", @@ -280,7 +280,7 @@ "IndexerPriority": "Tietolähteiden painotus", "IndexerProxyStatusAllUnavailableHealthCheckMessage": "Välityspalvelimet eivät ole käytettävissä virheiden vuoksi", "IndexerStatusAllUnavailableHealthCheckMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi", - "IndexerStatusUnavailableHealthCheckMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi: {indexerNames}", + "IndexerStatusUnavailableHealthCheckMessage": "Tietolähteet eivät ole virheiden vuoksi käytettävissä: {indexerNames}", "NoChange": "Ei muutosta", "NoLogFiles": "Lokitiedostoja ei ole", "SSLCertPasswordHelpText": "PFX-tiedoston salasana", @@ -351,7 +351,7 @@ "SettingsLogRotate": "Lokitiedostojen kierrätys", "SettingsLogSql": "Kirjaa SQL", "SettingsSqlLoggingHelpText": "Kirjaa kaikki {appName}in SQL-kyselyt", - "ConnectSettingsSummary": "Ilmoitukset, kuten viestintä mediapalvelimille ja soittimille, sekä omat komentosarjat.", + "ConnectSettingsSummary": "Ilmoitukset ja mukautetut komentosarjat.", "DevelopmentSettings": "Kehittäjäasetukset", "Description": "Kuvaus", "Id": "ID", @@ -411,7 +411,7 @@ "Application": "Sovellus", "GrabReleases": "Kaappaa julkaisu(t)", "Link": "Linkki", - "SearchTypes": "Mitä etsitään", + "SearchTypes": "Hakutyypit", "UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui", "Yes": "Kyllä", "MappedDrivesRunningAsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja UKK:sta.", @@ -434,7 +434,7 @@ "EditSyncProfile": "Muokkaa synkronointiprofiilia", "InstanceName": "Instanssin nimi", "InstanceNameHelpText": "Instanssin nimi välilehdellä ja järjestelmälokissa.", - "ThemeHelpText": "Vaihda sovelluksen käyttöliittymän ulkoasua. \"Automaattinen\" vaihtaa vaalean ja tumman tilan välillä käyttöjärjestelmän teeman mukaan. Innoittanut Theme.Park.", + "ThemeHelpText": "Vaihda sovelluksen käyttöliittymän ulkoasua. \"Automaattinen\" vaihtaa vaalean ja tumman tilan välillä käyttöjärjestelmän teeman mukaan. Innoittanut {inspiredBy}.", "Duration": "Kesto", "ElapsedTime": "Kulunut aika", "EnabledRedirected": "Kulunut, uudelleenohjattu", @@ -455,7 +455,7 @@ "AuthenticationRequired": "Vaadi tunnistautuminen", "Remove": "Poista", "Replace": "Korvaa", - "OnLatestVersion": "{appName}in uusin versio on jo asennettu", + "OnLatestVersion": "Uusin {appName}-versio on jo asennettu", "ApplicationURL": "Sovelluksen URL", "ApplicationUrlHelpText": "Tämän sovelluksen ulkoinen URL-osoite, johon sisältyy http(s)://, portti ja URL-perusta.", "Track": "Valvo", @@ -480,7 +480,7 @@ "Artist": "Esittäjä", "Author": "Kirjailija", "Book": "Kirja", - "UpdateAvailableHealthCheckMessage": "Uusi päivitys on saatavilla", + "UpdateAvailableHealthCheckMessage": "Uusi päivitys on saatavilla: {version}", "Episode": "Jakso", "Label": "Nimi", "Theme": "Teema", @@ -493,16 +493,16 @@ "AddConnection": "Lisää yhteys", "NotificationStatusAllClientHealthCheckMessage": "Mikään ilmoituspavelu ei ole ongelmien vuoksi käytettävissä.", "NotificationStatusSingleClientHealthCheckMessage": "Ilmoitukset eivät ole ongelmien vuoksi käytettävissä: {notificationNames}", - "AuthBasic": "Perus (ponnahdusikkuna)", + "AuthBasic": "Perus (selaimen ponnahdus)", "AuthForm": "Lomake (kirjautumissivu)", - "DisabledForLocalAddresses": "Ei käytössä paikallisille osoitteille", + "DisabledForLocalAddresses": "Ei käytössä paikallisissa osoitteissa", "None": "Ei mitään", "ResetAPIKeyMessageText": "Haluatko varmasti korvata rajapinnan avaimen uudella?", "TotalIndexerSuccessfulGrabs": "Onnistuneiden tietolähdekaappausten kokonaismäärä", "AppUpdated": "{appName} on päivitetty", "AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on käynnistettävä uudelleen.", - "IndexerDownloadClientHelpText": "Määritä tämän tietolähteen kanssa käytettävä lataustyökalu.", - "AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt todennuksen käyttöönoton. Todennus voidaan poistaa käytöstä paikallisille osoitteille.", + "IndexerDownloadClientHelpText": "Määritä {appName}issa tästä tietolähteestä tehdyille kaappauksille käytettävä lataustyökalu.", + "AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt tunnistautumisen käyttöönoton. Paikallisilta osoitteilta se voidaan valinnaisesti poistaa käytöstä.", "TotalGrabs": "Kaappausten kokonaismäärä", "AddDownloadClientImplementation": "Lisäätään lataustyökalua - {implementationName}", "AddIndexerImplementation": "Lisätään tietolähdettä - {implementationName}", @@ -558,7 +558,7 @@ "IndexerStatus": "Tietolähteen tila", "ManageApplications": "Hallitse sovelluksia", "NewznabUrl": "Newznab URL", - "PackSeedTime": "Koosteen jakoaika", + "PackSeedTime": "Paketin jakoaika", "PackSeedTimeHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.", "QueryType": "Kyselyn tyyppi", "SearchAllIndexers": "Etsi kaikista tietolähteistä", @@ -608,18 +608,18 @@ "NotificationsEmailSettingsUseEncryptionHelpText": "Määrittää suositaanko salausta, jos se on määritetty palvelimelle, käytetäänkö aina SSL- (vain portti 465) tai StartTLS-salausta (kaikki muut portit), voi käytetäänkö salausta lainkaan.", "ManageClients": "Hallitse työkaluja", "NoApplicationsFound": "Sovelluksia ei löytynyt", - "DownloadClientAriaSettingsDirectoryHelpText": "Valinnainen latuasten tallennussijainti. Käytä Aria2-oletusta jättämällä tyhjäksi.", - "UrlBaseHelpText": "Lisää {appName}in URL-osoitteeseen jälkiliitteen, esim. \"http://[osoite]:[portti]/[URL-perusta]\". Oletusarvo on tyhjä.", + "DownloadClientAriaSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Aria2:n oletusta jättämällä tyhjäksi.", + "UrlBaseHelpText": "Käänteisen välityspalvelimen tukea varten. Oletusarvo on tyhjä.", "Donate": "Lahjoita", "DownloadClientFloodSettingsAdditionalTagsHelpText": "Lisää median ominaisuuksia tunnisteina. Vihjeet ovat esimerkkejä.", - "DownloadClientRTorrentSettingsDirectoryHelpText": "Valinnainen latuasten tallennussijainti. Käytä Aria2-oletusta jättämällä tyhjäksi.", + "DownloadClientRTorrentSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä rTorrentin oletusta jättämällä tyhjäksi.", "DownloadClientSettingsUseSslHelpText": "Muodosta {clientName} -yhteys käyttäen salattua yhteyttä.", - "DownloadClientTransmissionSettingsDirectoryHelpText": "Vaihtoehtoinen latauskansio. Käytä Transmissionin oletusta jättämällä tyhjäksi.", + "DownloadClientTransmissionSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Transmissionin oletusta jättämällä tyhjäksi.", "DownloadClientTransmissionSettingsUrlBaseHelpText": "Lisää etuliite lataustyökalun {clientName} RPC-URL-osoitteeseen. Esimerkiksi {url}. Oletus on \"{defaultUrl}\".", "IndexerSettingsAppsMinimumSeedersHelpText": "Sovellusten edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.", "Menu": "Valikko", - "ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Hylkää estetyt torrent-hajautusarvot kaapattaessa", - "IndexerBeyondHDSettingsSearchTypes": "Mitä etsitään", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Synkronoi estetyt torrent-hajautusarvot kaapattaessa", + "IndexerBeyondHDSettingsSearchTypes": "Hakutyypit", "IndexerSettingsSeedRatio": "Jakosuhde", "IndexerSettingsSeedTime": "Jakoaika", "IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi.", @@ -632,9 +632,9 @@ "DownloadClientFreeboxSettingsHostHelpText": "Freeboxin isäntänimi tai IP-osoite. Oletus on \"{url}\" (toimii vain samassa verkossa).", "DownloadClientPneumaticSettingsStrmFolder": "Strm-kansio", "DownloadClientQbittorrentSettingsInitialStateHelpText": "Tila, jossa torrentit lisätään qBittorrentiin. Huomioi, että pakotetut torrentit eivät noudata nopeusrajoituksia.", - "DownloadClientSettingsAddPaused": "Lisää pysäytettynä", + "DownloadClientSettingsAddPaused": "Lisää keskeytettynä", "DownloadClientSettingsDestinationHelpText": "Määrittää manuaalisen tallennuskohteen. Käytä oletusta jättämällä tyhjäksi.", - "DownloadClientSettingsInitialState": "Virheellinen tila", + "DownloadClientSettingsInitialState": "Aloitustila", "DownloadClientSettingsInitialStateHelpText": "Lataustyökaluun {clientName} lisättyjen torrentien aloitustila.", "IndexerHDBitsSettingsCodecs": "Koodekit", "IndexerHDBitsSettingsCodecsHelpText": "Jos ei määritetty, käytetään kaikkia vaihtoehtoja.", @@ -642,16 +642,16 @@ "IndexerHDBitsSettingsMediumsHelpText": "Jos ei määritetty, käytetään kaikkia vaihtoehtoja.", "IndexerHDBitsSettingsOriginsHelpText": "Jos ei määritetty, käytetään kaikkia vaihtoehtoja.", "IndexerSettingsAdditionalParameters": "Muut parametrit", - "IndexerSettingsApiPath": "API:n polku", - "IndexerSettingsApiPathHelpText": "Polku API:in (yleensä {url}).", + "IndexerSettingsApiPath": "Rajapinnan sijainti", + "IndexerSettingsApiPathHelpText": "Polku rajapintaan (yleensä {url}).", "IndexerSettingsCookie": "Eväste", - "IndexerSettingsPackSeedTime": "Koosteen jakoaika", + "IndexerSettingsPackSeedTime": "Paketin jakoaika", "IndexerSettingsPackSeedTimeIndexerHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.", "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.", "SecretToken": "Salainen tunniste", "TorrentBlackholeSaveMagnetFiles": "Tallenna magnet-tiedostot", "UseSsl": "Käytä SSL-salausta", - "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein etsittäessä joiltakin tietolähteiltä RSS-syötteen tai haun välityksellä. Tämä mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, mutta ennen välitystä lataustyökalulle.", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein joidenkin tietolähteiden RSS-syötteestä tai hausta. Tämän käyttöönotto mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, kuitenkin ennen kuin niitä välitetään lataustyökalulle.", "BlackholeFolderHelpText": "Kansio, jonne {appName} tallentaa {extension}-tiedoston.", "DownloadClientDelugeSettingsUrlBaseHelpText": "Lisää etuliitteen Delugen JSON-URL-osoitteeseen (ks. {url}).", "DownloadClientFloodSettingsAdditionalTags": "Lisätunnisteet", @@ -661,14 +661,14 @@ "XmlRpcPath": "XML RPC -sijainti", "DownloadClientSettingsUrlBaseHelpText": "Lisää etuliite lataustuökalun {clientName} URL-osoitteeseen, kuten {url}.", "DownloadClientFloodSettingsUrlBaseHelpText": "Lisää etuliitteen Flood-rajapintaan (esim. {url}).", - "DownloadClientDownloadStationSettingsDirectoryHelpText": "Valinnainen jaettu kansio latauksille. Download Stationin oletussijaintia jättämällä tyhjäksi.", + "DownloadClientDownloadStationSettingsDirectoryHelpText": "Vaihtoehtoinen jaettu kansio latauksille. Käytä Download Stationin oletussijaintia jättämällä tyhjäksi.", "DownloadClientFreeboxSettingsApiUrlHelpText": "Määritä Freebox-rajapinnan perus-URL rajapinnan versiolla. Esimerkiksi \"{url}\". Oletus on \"{defaultApiUrl}\".", "DownloadClientQbittorrentSettingsFirstAndLastFirst": "Ensimmäinen ja viimeinen ensin", "DownloadClientFreeboxSettingsAppId": "Sovellustunniste", "DownloadClientFreeboxSettingsPortHelpText": "Freebox-liittymän portti. Oletus on \"{port}\".", "DownloadClientPneumaticSettingsNzbFolder": "NZB-kansio", "DownloadClientQbittorrentSettingsSequentialOrder": "Peräkkäinen järjestys", - "CustomFilter": "Oma suodatin", + "CustomFilter": "Mukautettu suodatin", "DownloadClientFreeboxSettingsAppIdHelpText": "Freebox-rajapinnan käyttöoikeutta määritettäessä käytettävä App ID -sovellustunniste.", "DownloadClientFreeboxSettingsAppToken": "Sovellustietue", "DownloadClientNzbgetSettingsAddPausedHelpText": "Tämä vaatii vähintään NzbGet-version 16.0.", @@ -679,26 +679,26 @@ "DownloadClientRTorrentSettingsUrlPath": "URL-sijainti", "TorrentBlackholeSaveMagnetFilesHelpText": "Tallenna magnet-linkki, jos .torrent-tiedostoa ei ole käytettävissä (hyödyllinen vain lataustyökalun tukiessa tiedostoon tallennettuja magnet-linkkejä).", "TorrentBlackholeTorrentFolder": "Torrent-kansio", - "TorrentBlackholeSaveMagnetFilesExtension": "Tallennettujen magnet-tiedostojen pääte", + "TorrentBlackholeSaveMagnetFilesExtension": "Tallenna magnet-tiedostojen pääte", "TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Magnet-linkeille käytettävä tiedostopääte. Oletus on \".magnet\".", "LabelIsRequired": "Nimi on pakollinen", "Default": "Oletus", "GrabRelease": "Kaappaa julkaisu", - "OverrideGrabModalTitle": "Ohita ja sieppaa - {title}", + "OverrideGrabModalTitle": "Ohita ja kaappaa - {title}", "PrioritySettings": "Painotus: {priority}", "SelectDownloadClientModalTitle": "{modalTitle} - Valitse lataustyökalu", "ProxyValidationBadRequest": "Välityspalvelintesti epäonnistui. Tilakoodi: {statusCode}.", "ProxyValidationUnableToConnect": "Tietolähdettä ei tavoiteta: {exceptionMessage}. Etsi tietoja tämän virheen lähellä olevista lokimerkinnöistä.", "ManualGrab": "Manuaalinen kaappaus", - "OverrideAndAddToDownloadClient": "Ohita ja lisää latausjonoon", + "OverrideAndAddToDownloadClient": "Ohita ja lisää lataustyökaluun", "BuiltIn": "Sisäänrakennettu", - "Any": "Mikä vain", - "Script": "Skripti", - "InfoUrl": "Tietojen URL", + "Any": "Mikä tahansa", + "Script": "Komentosarja", + "InfoUrl": "Tietojen URL-osoite", "PublishedDate": "Julkaisupäivä", - "Redirected": "Uudelleenohjaus", + "Redirected": "Uudelleenohjattu", "AllSearchResultsHiddenByFilter": "Aktiivinen suodatin piilottaa kaikki tulokset.", - "HealthMessagesInfoBox": "Saat lisätietoja näiden vakausviestien syistä painamalla rivin lopussa olevaa wikilinkkiä (kirjakuvake) tai tarkastelemalla [lokitietoja]({link}). Mikäli kohtaat ongelmia näiden viestien tulkinnassa, tavoitat tukemme alla olevilla linkkeillä.", + "HealthMessagesInfoBox": "Saat lisätietoja näiden vakausviestien syistä painamalla rivin lopussa olevaa wikilinkkiä (kirjakuvake) tai tarkastelemalla [lokitietoja]({link}). Mikäli et osaa tulkita näitä viestejä, tavoitat tukemme alla olevilla linkeillä.", "PackageVersionInfo": "{packageVersion} julkaisijalta {packageAuthor}", "ErrorRestoringBackup": "Virhe palautettaessa varmuuskopiota", "ExternalUpdater": "{appName} on määritetty käyttämään ulkoista päivitysratkaisua.", @@ -715,7 +715,22 @@ "UpdaterLogFiles": "Päivittäjän lokitiedostot", "WouldYouLikeToRestoreBackup": "Haluatko palauttaa varmuuskopion \"{name}\"?", "InstallLatest": "Asenna uusin", - "CurrentlyInstalled": "Nykyinen asennettu versio", + "CurrentlyInstalled": "Tällä hetkellä asennettu versio", "PreviouslyInstalled": "Edellinen asennettu versio", - "Mixed": "Korjattu" + "Mixed": "Sekoitettu", + "IndexerSettingsAppsMinimumSeeders": "Sovellusten vähimmäisjakajat", + "FailedToFetchSettings": "Asetusten nouto epäonnistui", + "IndexerAlphaRatioSettingsExcludeSceneHelpText": "Älä huomioi tulosten SCENE-julkaisuja.", + "DownloadClientRTorrentSettingsUrlPathHelpText": "Polku XMLRPC-päätteeseen, katso {url}. Käytettäessä ruTorrentia tämä on yleensä RPC2 tai [ruTorrentin sijainti]{url2}.", + "InstallMajorVersionUpdateMessageLink": "Saat lisätietoja osoitteesta [{domain}]({url}).", + "Install": "Asenna", + "NotificationsTelegramSettingsIncludeAppName": "Sisällytä {appName} otsikkoon", + "InstallMajorVersionUpdate": "Asenna päivitys", + "InstallMajorVersionUpdateMessage": "Tämä päivitys asentaa uuden pääversion, joka ei välttämättä ole yhteensopiva laitteistosi kanssa. Haluatko varmasti asentaa päivityksen?", + "NotificationsTelegramSettingsIncludeAppNameHelpText": "Valinnaisesti ilmoitukset voidaan erottaa muista sovelluksista lisäämällä viestien otsikoiden eteen {appName}.", + "DownloadClientRTorrentSettingsAddStoppedHelpText": "Tämä lisää torrentit ja magnet-linkit rTorentiin pysäytetyssä tilassa. Tämä saattaa rikkoa margnet-tiedostot.", + "DownloadClientSettingsPriorityItemHelpText": "Kaapatuille kohteille käytettävä painotus.", + "LogSizeLimit": "Lokin kokorajoitus", + "LogSizeLimitHelpText": "Lokitiedoston enimmäiskoko ennen pakkausta. Oletusarvo on 1 Mt.", + "IndexerAlphaRatioSettingsExcludeScene": "Ohita SCENE-julkaisut" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index d0f39da51..8242f8cd6 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -35,7 +35,7 @@ "TagsSettingsSummary": "Tüm etiketleri ve nasıl kullanıldıklarını göster. Kullanılmayan etiketler kaldırılabilinir", "Tags": "Etiketler", "System": "Sistem", - "Style": "Tarz", + "Style": "Stil", "Status": "Durum", "Size": "Boyut", "ShowAdvanced": "Gelişmiş'i Göster", @@ -431,8 +431,8 @@ "DownloadClientFreeboxSettingsApiUrl": "API URL'si", "DownloadClientFreeboxSettingsApiUrlHelpText": "Freebox API temel URL'sini API sürümüyle tanımlayın, örneğin '{url}', varsayılan olarak '{defaultApiUrl}' olur", "DownloadClientFreeboxSettingsAppIdHelpText": "Freebox API'sine erişim oluşturulurken verilen uygulama kimliği (ör. 'app_id')", - "DownloadClientFreeboxSettingsAppToken": "Uygulama Jetonu", - "DownloadClientFreeboxSettingsAppTokenHelpText": "Freebox API'sine erişim oluşturulurken alınan uygulama jetonu (ör. 'app_token')", + "DownloadClientFreeboxSettingsAppToken": "Uygulama Token'ı", + "DownloadClientFreeboxSettingsAppTokenHelpText": "Freebox API'sine erişim oluşturulurken alınan uygulama token'ı (ör. 'app_token')", "DownloadClientFreeboxSettingsAppId": "Uygulama kimliği", "DownloadClientFreeboxSettingsHostHelpText": "Freebox'un istemci adı veya istemci IP adresi, varsayılan olarak '{url}' şeklindedir (yalnızca aynı ağda çalışır)", "Duration": "Süre", @@ -486,7 +486,7 @@ "UseSsl": "SSL kullan", "OnApplicationUpdate": "Uygulama Güncellemesinde", "TorrentBlackholeSaveMagnetFiles": "Magnet Dosyalarını Kaydet", - "SecretToken": "Gizlilik Jetonu", + "SecretToken": "Gizlilik Token'ı", "TorrentBlackholeSaveMagnetFilesExtension": "Magnet Dosya Uzantısını Kaydet", "TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Magnet bağlantıları için kullanılacak uzantı, varsayılan olarak '.magnet'tir", "TorrentBlackholeSaveMagnetFilesHelpText": ".torrent dosyası yoksa magnet bağlantısını kaydedin (yalnızca indirme istemcisi bir dosyaya kaydedilen magnetleri destekliyorsa kullanışlıdır)", @@ -701,7 +701,7 @@ "UnableToLoadAppProfiles": "Uygulama profilleri yüklenemiyor", "UnableToLoadDevelopmentSettings": "Geliştirme ayarları yüklenemiyor", "IndexerHDBitsSettingsOrigins": "Kaynaklar", - "IndexerNoDefinitionCheckHealthCheckMessage": "Dizinleyicilerin tanımı yoktur ve çalışmayacaktır: {indexerNames}. Lütfen {appName}'i kaldırın ve (veya) yeniden ekleyin.", + "IndexerNoDefinitionCheckHealthCheckMessage": "{indexerNames} dizinleyicileri tanımsız olduğundan çalışmayacaktır. Lütfen bunları kaldırın ve/veya {appName} uygulamasına yeniden ekleyin.", "MovieSearchTypes": "Film Arama Türleri", "NoIndexerCategories": "Bu dizinleyici için hiçbir kategori bulunamadı", "PackSeedTimeHelpText": "Bir paketin (sezon veya diskografi) torrentinin durdurulmadan önce aktif olması gereken süre, boş bırakılırsa uygulamanın varsayılan değeri kullanılır", diff --git a/src/NzbDrone.Core/Localization/Core/zh_TW.json b/src/NzbDrone.Core/Localization/Core/zh_TW.json index f2dc4a4fd..0d1a65581 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_TW.json +++ b/src/NzbDrone.Core/Localization/Core/zh_TW.json @@ -2,17 +2,17 @@ "About": "關於", "Add": "新增", "Added": "已新增", - "Actions": "執行", + "Actions": "動作", "Age": "年齡", "AddIndexer": "新增索引", "AddNewIndexer": "新增新索引", - "AddDownloadClient": "新增下載器", + "AddDownloadClient": "加入下載用戶端", "Analytics": "分析", "AddIndexerProxy": "新增索引器代理", "AddingTag": "新增標籤", "All": "全部", "AddRemoveOnly": "僅限新增或移除", - "AcceptConfirmationModal": "接受確認模式", + "AcceptConfirmationModal": "接受確認對話框", "Language": "語言", "Filter": "篩選", "Reload": "重新載入", @@ -156,5 +156,13 @@ "AddCategory": "新增類別", "AdvancedSettingsShownClickToHide": "進階設定已顯示,點擊以隱藏", "Version": "版本", - "UpdateAvailableHealthCheckMessage": "可用的新版本: {version}" + "UpdateAvailableHealthCheckMessage": "可用的新版本: {version}", + "AuthenticationRequiredHelpText": "更改需要進行驗證的請求。除非你了解其中的風險,否則請勿修改。", + "AuthenticationRequiredPasswordHelpTextWarning": "請輸入新密碼", + "AuthenticationRequiredUsernameHelpTextWarning": "請輸入新用戶名", + "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "確認新密碼", + "AuthenticationRequired": "需要驗證", + "AuthenticationRequiredWarning": "為防止未經認證的遠程訪問,{appName} 現需要啟用身份認證。您可以選擇禁用本地地址的身份認證。", + "AuthenticationMethodHelpTextWarning": "請選擇一個有效的驗證方式", + "AuthenticationMethod": "驗證方式" } From bb2548a08d5b36ad520a59f6cb957762a646a54e Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 26 Dec 2024 12:37:45 -0800 Subject: [PATCH 022/127] Don't send session information to Sentry (cherry picked from commit fae24e98fb9230c2f3701caef457332952c6723f) --- .../Instrumentation/Sentry/SentryTarget.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs b/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs index 843f904a6..3a4737f74 100644 --- a/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs +++ b/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs @@ -119,7 +119,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry o.Environment = BuildInfo.Branch; // Crash free run statistics (sends a ping for healthy and for crashes sessions) - o.AutoSessionTracking = true; + o.AutoSessionTracking = false; // Caches files in the event device is offline // Sentry creates a 'sentry' sub directory, no need to concat here @@ -148,7 +148,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry _debounce = new SentryDebounce(); // initialize to true and reconfigure later - // Otherwise it will default to false and any errors occuring + // Otherwise it will default to false and any errors occurring // before config file gets read will not be filtered FilterEvents = true; SentryEnabled = true; @@ -207,9 +207,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry private void OnError(Exception ex) { - var webException = ex as WebException; - - if (webException != null) + if (ex is WebException webException) { var response = webException.Response as HttpWebResponse; var statusCode = response?.StatusCode; From 4321c1d40ce64358b82a90bb46c29c8a272a2630 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 28 Dec 2024 23:42:14 +0200 Subject: [PATCH 023/127] Catch search engine related error messages for MyAnonaMouse --- src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs index 94a41a699..ce80fbb74 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs @@ -441,6 +441,11 @@ namespace NzbDrone.Core.Indexers.Definitions return releaseInfos.ToArray(); } + if (jsonResponse.Data == null) + { + throw new IndexerException(indexerResponse, "Unexpected response content from indexer request: {0}", jsonResponse.Message ?? "Check the logs for more information."); + } + var hasUserVip = HasUserVip(httpResponse.GetCookies()); foreach (var item in jsonResponse.Data) @@ -655,7 +660,8 @@ namespace NzbDrone.Core.Indexers.Definitions public class MyAnonamouseResponse { public string Error { get; set; } - public List Data { get; set; } + public IReadOnlyCollection Data { get; set; } + public string Message { get; set; } } public class MyAnonamouseBuyPersonalFreeleechResponse From 9097c0ef6d7b03a24a0294d6eaffdc6b3988b94b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 30 Dec 2024 00:59:35 +0200 Subject: [PATCH 024/127] Bump version to 1.29.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7cc0a6153..2f021d84e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.29.1' + majorVersion: '1.29.2' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 2b4a6def2aa45b9a478a09d2fb00ffd5f442c5dc Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 30 Dec 2024 00:58:03 +0200 Subject: [PATCH 025/127] Fixed privacy level for Nebulance's API key --- src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs b/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs index 9f2333ea1..dcc26338e 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs @@ -322,7 +322,7 @@ namespace NzbDrone.Core.Indexers.Definitions ApiKey = ""; } - [FieldDefinition(4, Label = "ApiKey", HelpText = "IndexerNebulanceSettingsApiKeyHelpText")] + [FieldDefinition(2, Label = "ApiKey", HelpText = "IndexerNebulanceSettingsApiKeyHelpText", Privacy = PrivacyLevel.ApiKey)] public string ApiKey { get; set; } } From 523e46af2a35b127d7253d44b7b613fcdebb3d1f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 31 Dec 2024 01:55:55 +0200 Subject: [PATCH 026/127] Fixed: (AnimeBytes) Include year in release title for series with year in filenames --- .../AnimeBytesTests/AnimeBytesFixture.cs | 2 +- .../Indexers/Definitions/AnimeBytes.cs | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/NzbDrone.Core.Test/IndexerTests/AnimeBytesTests/AnimeBytesFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/AnimeBytesTests/AnimeBytesFixture.cs index a2453592f..ae7eaa762 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/AnimeBytesTests/AnimeBytesFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/AnimeBytesTests/AnimeBytesFixture.cs @@ -122,7 +122,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AnimeBytesTests var fifthTorrentInfo = releases.ElementAt(28) as TorrentInfo; - fifthTorrentInfo.Title.Should().Be("[-ZR-] Dr. STONE: STONE WARS S02 [Web][MKV][h264][1080p][AAC 2.0][Dual Audio][Softsubs (-ZR-)]"); + fifthTorrentInfo.Title.Should().Be("[-ZR-] Dr. STONE: STONE WARS 2021 S02 [Web][MKV][h264][1080p][AAC 2.0][Dual Audio][Softsubs (-ZR-)]"); fifthTorrentInfo.DownloadProtocol.Should().Be(DownloadProtocol.Torrent); fifthTorrentInfo.DownloadUrl.Should().Be("https://animebytes.tv/torrent/944509/download/somepass"); fifthTorrentInfo.InfoUrl.Should().Be("https://animebytes.tv/torrent/944509/group"); diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs index 37729fd00..9d5870e4e 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs @@ -569,7 +569,7 @@ namespace NzbDrone.Core.Indexers.Definitions if (_settings.UseFilenameForSingleEpisodes) { - var files = torrent.Files; + var files = torrent.Files.ToList(); if (files.Count > 1) { @@ -607,11 +607,13 @@ namespace NzbDrone.Core.Indexers.Definitions } } + var useYearInTitle = year is > 0 && torrent.Files.Any(f => f.FileName.Contains(year.Value.ToString())); + foreach (var title in synonyms) { var releaseTitle = groupName is "Movie" or "Live Action Movie" ? $"{releaseGroup}{title} {year} {infoString}" : - $"{releaseGroup}{title} {releaseInfo} {infoString}"; + $"{releaseGroup}{title}{(useYearInTitle ? $" {year}" : string.Empty)} {releaseInfo} {infoString}"; var guid = new Uri(details + "?nh=" + HashUtil.CalculateMd5(title)); @@ -650,7 +652,7 @@ namespace NzbDrone.Core.Indexers.Definitions { var advancedSeasonRegex = new Regex(@"\b(?:(?\d+)(?:st|nd|rd|th) Season|Season (?\d+))\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); var seasonCharactersRegex = new Regex(@"(I{2,})$", RegexOptions.Compiled); - var seasonNumberRegex = new Regex(@"\b(?[2-9])$", RegexOptions.Compiled); + var seasonNumberRegex = new Regex(@"(?[2-9])$", RegexOptions.Compiled); foreach (var title in titles) { @@ -755,7 +757,7 @@ namespace NzbDrone.Core.Indexers.Definitions public int Matches { get; set; } [JsonPropertyName("Groups")] - public AnimeBytesGroup[] Groups { get; set; } + public IReadOnlyCollection Groups { get; set; } } public class AnimeBytesGroup @@ -783,16 +785,16 @@ namespace NzbDrone.Core.Indexers.Definitions public string Image { get; set; } [JsonPropertyName("SynonymnsV2")] - public Dictionary Synonymns { get; set; } + public IReadOnlyDictionary Synonymns { get; set; } [JsonPropertyName("Description")] public string Description { get; set; } [JsonPropertyName("Tags")] - public List Tags { get; set; } + public IReadOnlyCollection Tags { get; set; } [JsonPropertyName("Torrents")] - public List Torrents { get; set; } + public IReadOnlyCollection Torrents { get; set; } } public class AnimeBytesTorrent @@ -831,7 +833,7 @@ namespace NzbDrone.Core.Indexers.Definitions public int FileCount { get; set; } [JsonPropertyName("FileList")] - public List Files { get; set; } + public IReadOnlyCollection Files { get; set; } [JsonPropertyName("UploadTime")] public string UploadTime { get; set; } From 81f7a6cbab0b2bc3502377e7d00a421317677131 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 31 Dec 2024 02:11:14 +0200 Subject: [PATCH 027/127] Word boundary in season number regex for AnimeBytes --- src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs index 9d5870e4e..1d0a78e95 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs @@ -652,7 +652,7 @@ namespace NzbDrone.Core.Indexers.Definitions { var advancedSeasonRegex = new Regex(@"\b(?:(?\d+)(?:st|nd|rd|th) Season|Season (?\d+))\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); var seasonCharactersRegex = new Regex(@"(I{2,})$", RegexOptions.Compiled); - var seasonNumberRegex = new Regex(@"(?[2-9])$", RegexOptions.Compiled); + var seasonNumberRegex = new Regex(@"\b(?[2-9])$", RegexOptions.Compiled); foreach (var title in titles) { From 7b8e352d876cd8f8e5b6296f0c3938bed4db8bb8 Mon Sep 17 00:00:00 2001 From: Qstick Date: Mon, 30 Dec 2024 22:22:19 -0600 Subject: [PATCH 028/127] Bump SonarCloud azure extension to 3.X --- azure-pipelines.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2f021d84e..174c70291 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1169,12 +1169,12 @@ stages: submodules: true - powershell: Set-Service SCardSvr -StartupType Manual displayName: Enable Windows Test Service - - task: SonarCloudPrepare@2 + - task: SonarCloudPrepare@3 condition: eq(variables['System.PullRequest.IsFork'], 'False') inputs: SonarCloud: 'SonarCloud' organization: 'prowlarr' - scannerMode: 'MSBuild' + scannerMode: 'dotnet' projectKey: 'Prowlarr_Prowlarr' projectName: 'Prowlarr' projectVersion: '$(prowlarrVersion)' @@ -1187,7 +1187,7 @@ stages: ./build.sh --backend -f net6.0 -r win-x64 TEST_DIR=_tests/net6.0/win-x64/publish/ ./test.sh Windows Unit Coverage displayName: Coverage Unit Tests - - task: SonarCloudAnalyze@2 + - task: SonarCloudAnalyze@3 condition: eq(variables['System.PullRequest.IsFork'], 'False') displayName: Publish SonarCloud Results - task: reportgenerator@5.3.11 From c88249300c36b232fc2bf93571c7777378dd874d Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 30 Dec 2024 04:09:48 +0200 Subject: [PATCH 029/127] Check if backup folder is writable on backup (cherry picked from commit 8aad79fd3e14eb885724a5e5790803c289be2f25) --- src/NzbDrone.Common/ArchiveService.cs | 19 ++++++++++--------- src/NzbDrone.Core/Backup/BackupService.cs | 11 +++++++++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/NzbDrone.Common/ArchiveService.cs b/src/NzbDrone.Common/ArchiveService.cs index 800d240ab..d420bbbc0 100644 --- a/src/NzbDrone.Common/ArchiveService.cs +++ b/src/NzbDrone.Common/ArchiveService.cs @@ -42,17 +42,18 @@ namespace NzbDrone.Common public void CreateZip(string path, IEnumerable files) { - using (var zipFile = ZipFile.Create(path)) + _logger.Debug("Creating archive {0}", path); + + using var zipFile = ZipFile.Create(path); + + zipFile.BeginUpdate(); + + foreach (var file in files) { - zipFile.BeginUpdate(); - - foreach (var file in files) - { - zipFile.Add(file, Path.GetFileName(file)); - } - - zipFile.CommitUpdate(); + zipFile.Add(file, Path.GetFileName(file)); } + + zipFile.CommitUpdate(); } private void ExtractZip(string compressedFile, string destination) diff --git a/src/NzbDrone.Core/Backup/BackupService.cs b/src/NzbDrone.Core/Backup/BackupService.cs index 14fc91efc..051d045bb 100644 --- a/src/NzbDrone.Core/Backup/BackupService.cs +++ b/src/NzbDrone.Core/Backup/BackupService.cs @@ -66,12 +66,19 @@ namespace NzbDrone.Core.Backup { _logger.ProgressInfo("Starting Backup"); + var backupFolder = GetBackupFolder(backupType); + _diskProvider.EnsureFolder(_backupTempFolder); - _diskProvider.EnsureFolder(GetBackupFolder(backupType)); + _diskProvider.EnsureFolder(backupFolder); + + if (!_diskProvider.FolderWritable(backupFolder)) + { + throw new UnauthorizedAccessException($"Backup folder {backupFolder} is not writable"); + } var dateNow = DateTime.Now; var backupFilename = $"prowlarr_backup_v{BuildInfo.Version}_{dateNow:yyyy.MM.dd_HH.mm.ss}.zip"; - var backupPath = Path.Combine(GetBackupFolder(backupType), backupFilename); + var backupPath = Path.Combine(backupFolder, backupFilename); Cleanup(); From 1a9ad6b363e50e02989e99382089e056a423554c Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 28 Dec 2024 15:32:04 +0200 Subject: [PATCH 030/127] Suggest adding IP to RPC whitelist for on failed Transmission auth (cherry picked from commit f05e552e8e6dc02cd26444073ab9a678dcb36492) --- .../Clients/Transmission/TransmissionProxy.cs | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs index 2c2334f44..76f8684e0 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs @@ -4,6 +4,7 @@ using System.Net; using Newtonsoft.Json.Linq; using NLog; using NzbDrone.Common.Cache; +using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Common.Serializer; @@ -208,7 +209,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission private void AuthenticateClient(HttpRequestBuilder requestBuilder, TransmissionSettings settings, bool reauthenticate = false) { - var authKey = string.Format("{0}:{1}", requestBuilder.BaseUrl, settings.Password); + var authKey = $"{requestBuilder.BaseUrl}:{settings.Password}"; var sessionId = _authSessionIDCache.Find(authKey); @@ -220,24 +221,26 @@ namespace NzbDrone.Core.Download.Clients.Transmission authLoginRequest.SuppressHttpError = true; var response = _httpClient.Execute(authLoginRequest); - if (response.StatusCode == HttpStatusCode.MovedPermanently) - { - var url = response.Headers.GetSingleValue("Location"); - throw new DownloadClientException("Remote site redirected to " + url); - } - else if (response.StatusCode == HttpStatusCode.Conflict) + switch (response.StatusCode) { - sessionId = response.Headers.GetSingleValue("X-Transmission-Session-Id"); + case HttpStatusCode.MovedPermanently: + var url = response.Headers.GetSingleValue("Location"); - if (sessionId == null) - { - throw new DownloadClientException("Remote host did not return a Session Id."); - } - } - else - { - throw new DownloadClientAuthenticationException("Failed to authenticate with Transmission."); + throw new DownloadClientException("Remote site redirected to " + url); + case HttpStatusCode.Forbidden: + throw new DownloadClientException($"Failed to authenticate with Transmission. It may be necessary to add {BuildInfo.AppName}'s IP address to RPC whitelist."); + case HttpStatusCode.Conflict: + sessionId = response.Headers.GetSingleValue("X-Transmission-Session-Id"); + + if (sessionId == null) + { + throw new DownloadClientException("Remote host did not return a Session Id."); + } + + break; + default: + throw new DownloadClientAuthenticationException("Failed to authenticate with Transmission."); } _logger.Debug("Transmission authentication succeeded."); From 1dbff1235e0bc2e250e0fbb8fd5fb7d5e1e476ec Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 31 Dec 2024 16:26:05 +0200 Subject: [PATCH 031/127] Match single digits only in season number regex for AnimeBytes --- src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs index 1d0a78e95..30f084922 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs @@ -652,7 +652,7 @@ namespace NzbDrone.Core.Indexers.Definitions { var advancedSeasonRegex = new Regex(@"\b(?:(?\d+)(?:st|nd|rd|th) Season|Season (?\d+))\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); var seasonCharactersRegex = new Regex(@"(I{2,})$", RegexOptions.Compiled); - var seasonNumberRegex = new Regex(@"\b(?[2-9])$", RegexOptions.Compiled); + var seasonNumberRegex = new Regex(@"\b(?[2-9])$", RegexOptions.Compiled); foreach (var title in titles) { From e01741a69e2b1291839c99c5811931ce45a4d5dd Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 31 Dec 2024 16:33:19 +0200 Subject: [PATCH 032/127] New: (AnimeBytes) Use error message from response --- src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs index 30f084922..780278854 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs @@ -324,6 +324,11 @@ namespace NzbDrone.Core.Indexers.Definitions var response = STJson.Deserialize(indexerResponse.Content); + if (response.Error.IsNotNullOrWhiteSpace()) + { + throw new IndexerException(indexerResponse, "Unexpected response from indexer request: {0}", response.Error); + } + if (response.Matches == 0) { return releaseInfos.ToArray(); @@ -424,7 +429,7 @@ namespace NzbDrone.Core.Indexers.Definitions int? episode = null; var releaseInfo = _settings.EnableSonarrCompatibility && categoryName == "Anime" ? "S01" : ""; - var editionTitle = torrent.EditionData.EditionTitle; + var editionTitle = torrent.EditionData?.EditionTitle; if (editionTitle.IsNotNullOrWhiteSpace()) { @@ -758,6 +763,8 @@ namespace NzbDrone.Core.Indexers.Definitions [JsonPropertyName("Groups")] public IReadOnlyCollection Groups { get; set; } + + public string Error { get; set; } } public class AnimeBytesGroup From 36f6896f30abfa54e36d226ddf3e1540fb1236b8 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 2 Jan 2025 23:20:39 +0200 Subject: [PATCH 033/127] Fixed: (PassThePopcorn) Increase rate limit --- .../Indexers/Definitions/PassThePopcorn/PassThePopcorn.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcorn.cs b/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcorn.cs index 177c4f1b2..7426157ab 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcorn.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcorn.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using NLog; using NzbDrone.Core.Configuration; @@ -15,6 +16,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn public override bool SupportsSearch => true; public override bool SupportsPagination => true; public override int PageSize => 50; + public override TimeSpan RateLimit => TimeSpan.FromSeconds(4); public override IndexerCapabilities Capabilities => SetCapabilities(); From 73494c462cf7039403af19a03f9d7dc546c932e6 Mon Sep 17 00:00:00 2001 From: Stevie Robinson Date: Sun, 5 Jan 2025 02:58:24 +0100 Subject: [PATCH 034/127] Fixed: Listening on all IPv4 Addresses (cherry picked from commit 035c474f10c257331a5f47e863d24af82537e335) --- src/NzbDrone.Core/Validation/IpValidation.cs | 6 ------ src/Prowlarr.Api.V1/Config/HostConfigController.cs | 1 - 2 files changed, 7 deletions(-) diff --git a/src/NzbDrone.Core/Validation/IpValidation.cs b/src/NzbDrone.Core/Validation/IpValidation.cs index eb5863caa..f4afa1f66 100644 --- a/src/NzbDrone.Core/Validation/IpValidation.cs +++ b/src/NzbDrone.Core/Validation/IpValidation.cs @@ -1,5 +1,4 @@ using FluentValidation; -using FluentValidation.Validators; using NzbDrone.Common.Extensions; namespace NzbDrone.Core.Validation @@ -10,10 +9,5 @@ namespace NzbDrone.Core.Validation { return ruleBuilder.Must(x => x.IsValidIpAddress()).WithMessage("Must contain wildcard (*) or a valid IP Address"); } - - public static IRuleBuilderOptions NotListenAllIp4Address(this IRuleBuilder ruleBuilder) - { - return ruleBuilder.SetValidator(new RegularExpressionValidator(@"^(?!0\.0\.0\.0)")).WithMessage("Use * instead of 0.0.0.0"); - } } } diff --git a/src/Prowlarr.Api.V1/Config/HostConfigController.cs b/src/Prowlarr.Api.V1/Config/HostConfigController.cs index 6758040be..a844f8d2e 100644 --- a/src/Prowlarr.Api.V1/Config/HostConfigController.cs +++ b/src/Prowlarr.Api.V1/Config/HostConfigController.cs @@ -34,7 +34,6 @@ namespace Prowlarr.Api.V1.Config SharedValidator.RuleFor(c => c.BindAddress) .ValidIpAddress() - .NotListenAllIp4Address() .When(c => c.BindAddress != "*" && c.BindAddress != "localhost"); SharedValidator.RuleFor(c => c.Port).ValidPort(); From f4d621063bf0bd9867fe24546843db34bb32f56f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 5 Jan 2025 15:40:12 +0200 Subject: [PATCH 035/127] Bump version to 1.30.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 174c70291..76db03c57 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.29.2' + majorVersion: '1.30.0' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 2648f2c639cbb4744b174b8abc82d9b2e142370e Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 6 Jan 2025 12:50:55 +0200 Subject: [PATCH 036/127] Fixed: (BTN) Improve M2TS and ISO titles for BR-DISK detection --- .../BroadcastheNet/BroadcastheNetParser.cs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/BroadcastheNet/BroadcastheNetParser.cs b/src/NzbDrone.Core/Indexers/Definitions/BroadcastheNet/BroadcastheNetParser.cs index 394fed9ad..60c2c0a58 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/BroadcastheNet/BroadcastheNetParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/BroadcastheNet/BroadcastheNetParser.cs @@ -88,7 +88,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet Guid = $"BTN-{torrent.TorrentID}", InfoUrl = $"{protocol}//broadcasthe.net/torrents.php?id={torrent.GroupID}&torrentid={torrent.TorrentID}", DownloadUrl = RegexProtocol.Replace(torrent.DownloadURL, protocol), - Title = CleanReleaseName(torrent.ReleaseName), + Title = GetTitle(torrent), Categories = _categories.MapTrackerCatToNewznab(torrent.Resolution), InfoHash = torrent.InfoHash, Size = torrent.Size, @@ -136,9 +136,17 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet return releaseInfos; } - private string CleanReleaseName(string releaseName) + private static string GetTitle(BroadcastheNetTorrent torrent) { - return releaseName.Replace("\\", ""); + var releaseName = torrent.ReleaseName.Replace("\\", ""); + + if (torrent.Container.ToUpperInvariant() is "M2TS" or "ISO") + { + releaseName = Regex.Replace(releaseName, @"\b(H\.?265)\b", "HEVC", RegexOptions.Compiled); + releaseName = Regex.Replace(releaseName, @"\b(H\.?264)\b", "AVC", RegexOptions.Compiled); + } + + return releaseName; } } } From 2c3621d25e1f4e67abeed6fefa160f114e5096a3 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 7 Jan 2025 04:07:54 +0200 Subject: [PATCH 037/127] Improve error message on non-JSON responses for Nebulance --- src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs b/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs index dcc26338e..731c96bb5 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs @@ -240,8 +240,6 @@ namespace NzbDrone.Core.Indexers.Definitions public IList ParseResponse(IndexerResponse indexerResponse) { - var torrentInfos = new List(); - if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK) { STJson.TryDeserialize>(indexerResponse.HttpResponse.Content, out var errorResponse); @@ -249,6 +247,13 @@ namespace NzbDrone.Core.Indexers.Definitions throw new IndexerException(indexerResponse, "Unexpected response status '{0}' code from indexer request: {1}", indexerResponse.HttpResponse.StatusCode, errorResponse?.Result?.Error?.Message ?? "Check the logs for more information."); } + if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value)) + { + throw new IndexerException(indexerResponse, "Unexpected response header {0} from indexer request, expected {1}", indexerResponse.HttpResponse.Headers.ContentType, HttpAccept.Json.Value); + } + + var torrentInfos = new List(); + JsonRpcResponse jsonResponse; try From 8eb674c8d793e478faa7aa2f3e755fbe0869a94b Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 7 Jan 2025 02:08:10 +0000 Subject: [PATCH 038/127] Multiple Translations updated by Weblate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ignore-downstream Co-authored-by: Altair Co-authored-by: Ano10 Co-authored-by: GkhnGRBZ Co-authored-by: Matti Meikäläinen Co-authored-by: Mickaël O Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Co-authored-by: Weblate Co-authored-by: marapavelka Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/cs.json | 178 +++++++---- src/NzbDrone.Core/Localization/Core/da.json | 6 +- src/NzbDrone.Core/Localization/Core/fi.json | 310 ++++++++++++-------- src/NzbDrone.Core/Localization/Core/fr.json | 8 +- src/NzbDrone.Core/Localization/Core/tr.json | 242 +++++++-------- 5 files changed, 453 insertions(+), 291 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index caa43cf46..48fb9848c 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -1,7 +1,7 @@ { "Add": "Přidat", "CertificateValidation": "Ověřování certifikátu", - "DeleteBackupMessageText": "Opravdu chcete odstranit zálohu '{name}'?", + "DeleteBackupMessageText": "Opravdu chcete odstranit zálohu ‚{name}‘?", "YesCancel": "Ano, zrušit", "About": "O aplikaci", "Component": "Komponenta", @@ -35,21 +35,21 @@ "Warn": "Varovat", "Wiki": "Wiki", "Connections": "Připojení", - "DeleteDownloadClientMessageText": "Opravdu chcete odstranit klienta pro stahování '{name}'?", - "Details": "Detaily", + "DeleteDownloadClientMessageText": "Opravdu chcete odstranit klienta pro stahování ‚{name}‘?", + "Details": "Podrobnosti", "Disabled": "Zakázáno", - "Docker": "Přístavní dělník", + "Docker": "Docker", "Donations": "Dary", - "DownloadClientSettings": "Stáhněte si nastavení klienta", - "DownloadClientStatusAllClientHealthCheckMessage": "Všichni klienti pro stahování nejsou kvůli chybám k dispozici", - "DownloadClientStatusSingleClientHealthCheckMessage": "Stahování klientů není k dispozici z důvodu selhání: {downloadClientNames}", + "DownloadClientSettings": "Nastavení klienta pro stahování", + "DownloadClientStatusAllClientHealthCheckMessage": "Všichni klienti pro stahování jsou nedostupní z důvodu selhání", + "DownloadClientStatusSingleClientHealthCheckMessage": "Klienti pro stahování jsou nedostupní z důvodu selhání: {downloadClientNames}", "Folder": "Složka", - "Grabs": "Urvat", + "Grabs": "Získané", "NoIssuesWithYourConfiguration": "Žádné problémy s vaší konfigurací", "HideAdvanced": "Skrýt pokročilé", "Host": "Hostitel", "Hostname": "Název hostitele", - "IncludeHealthWarningsHelpText": "Zahrnout zdravotní varování", + "IncludeHealthWarningsHelpText": "Včetně varování ohledně zdraví", "Indexer": "Indexer", "IndexerFlags": "Příznaky indexeru", "IndexerPriority": "Priorita indexování", @@ -78,9 +78,9 @@ "Apply": "Použít", "Branch": "Větev", "BranchUpdate": "Větev použitá k aktualizaci {appName}u", - "EditIndexer": "Upravit indexátor", + "EditIndexer": "Upravit indexer", "ForMoreInformationOnTheIndividualDownloadClients": "Další informace o jednotlivých klientech pro stahování získáte kliknutím na informační tlačítka.", - "General": "Všeobecné", + "General": "Obecné", "CloseCurrentModal": "Zavřít aktuální modální okno", "Columns": "Sloupce", "ConnectionLost": "Ztráta spojení", @@ -93,9 +93,9 @@ "Files": "Soubory", "Filter": "Filtr", "Fixed": "Pevný", - "FocusSearchBox": "Zaostřovací vyhledávací pole", + "FocusSearchBox": "Zaměřit vyhledávací pole", "GeneralSettingsSummary": "Port, SSL, uživatelské jméno / heslo, proxy, analytika a aktualizace", - "History": "Dějiny", + "History": "Historie", "HomePage": "Domovská stránka", "SettingsEnableColorImpairedModeHelpText": "Upravený styl umožňující uživatelům s barevným postižením lépe rozlišovat barevně kódované informace", "SettingsLongDateFormat": "Long Date Format", @@ -121,7 +121,7 @@ "NoLinks": "Žádné odkazy", "Presets": "Předvolby", "Priority": "Přednost", - "Grabbed": "Popadl", + "Grabbed": "Získáno", "Health": "Zdraví", "LogLevelTraceHelpTextWarning": "Trasování protokolování by mělo být povoleno pouze dočasně", "ProxyBadRequestHealthCheckMessage": "Nepodařilo se otestovat proxy. StatusCode: {statusCode}", @@ -181,8 +181,8 @@ "BindAddressHelpText": "Platná IP adresa, localhost nebo ‚*‘ pro všechna rozhraní", "BranchUpdateMechanism": "Větev použitá externím aktualizačním mechanismem", "BypassProxyForLocalAddresses": "Obcházení proxy serveru pro místní adresy", - "DeleteIndexerProxyMessageText": "Opravdu chcete smazat značku „{0}“?", - "DeleteTag": "Smazat značku", + "DeleteIndexerProxyMessageText": "Opravdu chcete odstranit proxy indexeru ‚{name}‘?", + "DeleteTag": "Odstranit štítek", "IndexerProxyStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání: {indexerProxyNames}", "Name": "název", "New": "Nový", @@ -201,9 +201,9 @@ "BackupsLoadError": "Nelze načíst zálohy", "DownloadClientsLoadError": "Nelze načíst klienty pro stahování", "UnableToLoadGeneralSettings": "Nelze načíst obecná nastavení", - "DeleteNotification": "Smazat oznámení", + "DeleteNotification": "Odstranit oznámení", "EnableAutomaticSearch": "Povolit automatické vyhledávání", - "EnableInteractiveSearchHelpText": "Bude použito při použití interaktivního vyhledávání", + "EnableInteractiveSearchHelpText": "Použije se při interaktivním vyhledávání", "GeneralSettings": "Obecné nastavení", "InteractiveSearch": "Interaktivní vyhledávání", "Interval": "Interval", @@ -245,25 +245,25 @@ "Date": "Datum", "Dates": "Data", "DatabaseMigration": "Migrace databáze", - "Delete": "Vymazat", - "DeleteApplicationMessageText": "Opravdu chcete smazat oznámení „{0}“?", + "Delete": "Odstranit", + "DeleteApplicationMessageText": "Opravdu chcete odstranit aplikaci ‚{name}‘?", "DeleteBackup": "Odstranit zálohu", - "DeleteDownloadClient": "Odstranit staženého klienta", - "DeleteNotificationMessageText": "Opravdu chcete smazat oznámení '{name}'?", - "DeleteTagMessageText": "Opravdu chcete smazat značku „{0}“?", - "Discord": "Svár", - "DownloadClient": "Stáhnout klienta", - "DownloadClients": "Stáhnout klienty", + "DeleteDownloadClient": "Odstranit klienta pro stahování", + "DeleteNotificationMessageText": "Opravdu chcete odstranit oznámení ‚{name}‘?", + "DeleteTagMessageText": "Opravdu chcete odstranit štítek ‚{label}‘?", + "Discord": "Discord", + "DownloadClient": "Klient pro stahování", + "DownloadClients": "Klienti pro stahování", "Edit": "Upravit", - "Enable": "Umožnit", - "EnableAutomaticSearchHelpText": "Použije se, když se automatické vyhledávání provádí pomocí uživatelského rozhraní nebo {appName}", + "Enable": "Povolit", + "EnableAutomaticSearchHelpText": "Použije se při automatickém vyhledávání prostřednictvím uživatelského rozhraní nebo pomocí {appName}", "EnableInteractiveSearch": "Povolit interaktivní vyhledávání", "EnableSSL": "Povolit SSL", "EnableSslHelpText": " Vyžaduje restartování spuštěné jako správce, aby se projevilo", "Events": "Události", "EventType": "Typ události", "Exception": "Výjimka", - "ExistingTag": "Stávající značka", + "ExistingTag": "Stávající štítek", "IllRestartLater": "Restartuji později", "IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání po dobu delší než 6 hodin: {indexerNames}", "IndexerStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání: {indexerNames}", @@ -307,9 +307,9 @@ "UnsavedChanges": "Neuložené změny", "UpdateAutomaticallyHelpText": "Automaticky stahovat a instalovat aktualizace. Stále budete moci instalovat ze systému: Aktualizace", "NetCore": ".NET Core", - "Filters": "Filtr", - "HistoryCleanupDaysHelpText": "Nastavením na 0 zakážete automatické čištění", - "HistoryCleanupDaysHelpTextWarning": "Soubory v koši starší než vybraný počet dní budou automaticky vyčištěny", + "Filters": "Filtry", + "HistoryCleanupDaysHelpText": "Nastavte na 0 pro zakázání automatického čištění", + "HistoryCleanupDaysHelpTextWarning": "Položky historie starší než vybraný počet dní se vyčistí automaticky", "MaintenanceRelease": "Údržbové vydání: opravy chyb a další vylepšení. Další podrobnosti najdete v GitHub Commit History", "OnGrab": "Chyť", "OnHealthIssue": "K otázce zdraví", @@ -319,10 +319,10 @@ "No": "Ne", "UnableToLoadIndexers": "Nelze načíst indexery", "Yes": "Ano", - "GrabReleases": "Uchopte uvolnění", + "GrabReleases": "Získat vydání", "ApplicationLongTermStatusCheckSingleClientMessage": "Aplikace nedostupné z důvodu poruchy po dobu delší než 6 hodin: {0}", "ApplicationLongTermStatusCheckAllClientMessage": "Všechny aplikace jsou z důvodu poruchy nedostupné déle než 6 hodin", - "Ended": "Skončil", + "Ended": "Ukončeno", "LastDuration": "lastDuration", "LastExecution": "Poslední poprava", "NextExecution": "Další spuštění", @@ -333,21 +333,21 @@ "More": "Více", "ApplyTagsHelpTextAdd": "Přidat: Přidat štítky do existujícího seznamu štítků", "ApplyTagsHelpTextHowToApplyApplications": "Jak použít štítky na vybrané aplikace", - "DeleteSelectedDownloadClients": "Odstranit klienta pro stahování", - "DeleteSelectedIndexersMessageText": "Opravdu chcete smazat {count} vybraný(ch) indexer(ů)?", - "DeleteSelectedApplicationsMessageText": "Opravdu chcete odstranit indexer „{0}“?", - "DeleteSelectedDownloadClientsMessageText": "Opravdu chcete smazat {count} vybraných klientů pro stahování?", + "DeleteSelectedDownloadClients": "Odstranit klienty pro stahování", + "DeleteSelectedIndexersMessageText": "Opravdu chcete odstranit {count} vybraných indexerů?", + "DeleteSelectedApplicationsMessageText": "Opravdu chcete odstranit {count} vybraných aplikací?", + "DeleteSelectedDownloadClientsMessageText": "Opravdu chcete odstranit {count} vybraných klientů pro stahování?", "Year": "Rok", "ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané štítky", - "DownloadClientPriorityHelpText": "Upřednostněte více klientů pro stahování. Round-Robin se používá pro klienty se stejnou prioritou.", + "DownloadClientPriorityHelpText": "Upřednostněte více klientů pro stahování. Pro klienty se stejnou prioritou se používá funkce Round-Robin.", "ApplyTagsHelpTextHowToApplyIndexers": "Jak použít štítky na vybrané indexery", "ApplyTagsHelpTextReplace": "Nahradit: Nahradit štítky zadanými štítky (prázdné pole vymaže všechny štítky)", "Track": "Stopa", - "Genre": "Žánry", + "Genre": "Žánr", "ConnectionLostReconnect": "{appName} se pokusí připojit automaticky, nebo můžete kliknout na tlačítko znovunačtení níže.", "RecentChanges": "Nedávné změny", "WhatsNew": "Co je nového?", - "DeleteAppProfileMessageText": "Opravdu chcete smazat kvalitní profil {0}", + "DeleteAppProfileMessageText": "Opravdu chcete odstranit profil aplikace ‚{name}‘?", "ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude potřeba ho znovu načíst.", "minutes": "Minut", "ApplicationURL": "URL aplikace", @@ -369,7 +369,7 @@ "AddIndexerProxyImplementation": "Přidat proxy server indexeru – {implementationName}", "Artist": "Umělec", "EditIndexerImplementation": "Upravit indexer - {implementationName}", - "Episode": "epizoda", + "Episode": "Epizoda", "NotificationStatusAllClientHealthCheckMessage": "Všechny seznamy nejsou k dispozici z důvodu selhání", "NotificationStatusSingleClientHealthCheckMessage": "Seznamy nejsou k dispozici z důvodu selhání: {notificationNames}", "Application": "Aplikace", @@ -382,19 +382,19 @@ "Album": "Album", "Applications": "Aplikace", "Connect": "Oznámení", - "EditConnectionImplementation": "Přidat spojení - {implementationName}", + "EditConnectionImplementation": "Upravit připojení - {implementationName}", "EditDownloadClientImplementation": "Upravit klienta pro stahování - {implementationName}", "AuthForm": "Formuláře (přihlašovací stránka)", "Clone": "Klonovat", "DefaultNameCopiedProfile": "{name} - Kopírovat", "DisabledForLocalAddresses": "Zakázáno pro místní adresy", - "EditApplicationImplementation": "Přidat spojení - {implementationName}", + "EditApplicationImplementation": "Upravit aplikaci - {implementationName}", "None": "Žádný", "ResetAPIKeyMessageText": "Opravdu chcete resetovat klíč API?", "Database": "Databáze", "CountDownloadClientsSelected": "{count} vybraných klientů pro stahování", "CountIndexersSelected": "{count} vybraných indexerů", - "EditIndexerProxyImplementation": "Přidat indexátor - {implementationName}", + "EditIndexerProxyImplementation": "Upravit proxy indexeru - {implementationName}", "AuthBasic": "Základní (vyskakovací okno prohlížeče)", "AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName}, aby bylo povoleno ověřování. Volitelně můžete zakázat ověřování z místních adres.", "RestartProwlarr": "Restartujte {appName}", @@ -415,16 +415,16 @@ "CustomFilter": "Vlastní filtr", "ProxyValidationBadRequest": "Nepodařilo se otestovat proxy. StatusCode: {statusCode}", "Default": "Výchozí", - "GrabRelease": "Uchopte uvolnění", + "GrabRelease": "Získat vydání", "Category": "Kategorie", "BlackholeFolderHelpText": "Složka, do které {appName} uloží soubor {extension}", - "DownloadClientSettingsUrlBaseHelpText": "Přidá předponu do {connectionName} url, jako např. {url}", + "DownloadClientSettingsUrlBaseHelpText": "Přidá předponu k url {clientName}, například {url}", "Any": "Jakákoliv", "BuiltIn": "Vestavěný", "Script": "Skript", "PublishedDate": "Datum zveřejnění", "AllSearchResultsHiddenByFilter": "Všechny výsledky vyhledávání jsou skryty použitým filtrem.", - "DockerUpdater": "aktualizujte kontejner dockeru, abyste aktualizaci obdrželi", + "DockerUpdater": "Aktualizujte kontejner dockeru, abyste získali aktualizaci", "Download": "Stažení", "ErrorRestoringBackup": "Chyba při obnovování zálohy", "ExternalUpdater": "{appName} je nakonfigurován pro použití externího aktualizačního mechanismu", @@ -478,5 +478,85 @@ "AddSyncProfile": "Přidat synchronizační profil", "AddedToDownloadClient": "Vydání přidáno do klienta", "AddCategory": "Přidat kategorii", - "AreYouSureYouWantToDeleteCategory": "Opravdu chcete odstranit namapovanou kategorii?" + "AreYouSureYouWantToDeleteCategory": "Opravdu chcete odstranit namapovanou kategorii?", + "DownloadClientRTorrentSettingsUrlPath": "Cesta URL", + "DefaultCategory": "Výchozí kategorie", + "DownloadClientFloodSettingsUrlBaseHelpText": "Přidá předponu do Flood API, například {url}", + "DownloadClientFreeboxSettingsApiUrl": "URL API", + "DownloadClientSettingsInitialState": "Počáteční stav", + "DownloadClientSettingsPriorityItemHelpText": "Priorita použitá při získávání položek", + "FailedToFetchSettings": "Nepodařilo se načíst nastavení", + "GrabTitle": "Získat název", + "DownloadClientNzbgetSettingsAddPausedHelpText": "Tato volba vyžaduje NzbGet verze alespoň 16.0", + "EnableRssHelpText": "Povolit kanál RSS pro indexer", + "DeleteApplication": "Odstranit aplikaci", + "DeleteSelectedApplications": "Odstranit vybrané aplikace", + "DeleteSelectedIndexers": "Odstranit vybrané indexery", + "DevelopmentSettings": "Nastavení pro vývoj", + "DisabledUntil": "Zakázáno do", + "DownloadClientCategory": "Kategorie klienta pro stahování", + "DownloadClientDelugeSettingsUrlBaseHelpText": "Přidá předponu do url adresy json deluge, viz {url}", + "DownloadClientDownloadStationSettingsDirectoryHelpText": "Volitelná sdílená složka pro stahování, ponechte prázdné pro použití výchozího umístění Download Station", + "DownloadClientFloodSettingsAdditionalTags": "Další štítky", + "DownloadClientFloodSettingsAdditionalTagsHelpText": "Přidá vlastnosti médií jako štítky. Nápovědy jsou příklady.", + "DownloadClientFloodSettingsTagsHelpText": "Počáteční štítky stahování. Aby bylo stahování rozpoznáno, musí mít všechny počáteční štítky. Tím se zabrání konfliktům s nesouvisejícími stahováními.", + "DownloadClientFreeboxSettingsAppId": "ID aplikace", + "DownloadClientFreeboxSettingsAppToken": "Token aplikace", + "DownloadClientFreeboxSettingsAppTokenHelpText": "Token aplikace získaný při vytváření přístupu k Freebox API (tj. ‚app_token‘)", + "DownloadClientFreeboxSettingsHostHelpText": "Název hostitele nebo IP adresa hostitele Freeboxu, výchozí hodnota je ‚{url}‘ (funguje pouze ve stejné síti)", + "DownloadClientFreeboxSettingsPortHelpText": "Port použitý pro přístup k rozhraní Freeboxu, výchozí hodnota je ‚{port}‘", + "DownloadClientPneumaticSettingsNzbFolder": "Složka Nzb", + "DownloadClientPneumaticSettingsNzbFolderHelpText": "Tato složka bude muset být dostupná z XBMC", + "DownloadClientQbittorrentSettingsContentLayout": "Rozvržení obsahu", + "DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Stahovat v postupném pořadí (qBittorrent 4.1.0+)", + "DownloadClientQbittorrentSettingsSequentialOrder": "Postupné pořadí", + "DownloadClientRTorrentSettingsAddStoppedHelpText": "Povolení přidá torrenty a magnety do rTorrentu v zastaveném stavu. To může způsobit poškození souborů magnet.", + "DownloadClientRTorrentSettingsDirectoryHelpText": "Volitelné umístění pro stahování, ponechte prázdné pro použití výchozího umístění rTorrentu", + "DownloadClientSettingsAddPaused": "Přidat pozastavené", + "DownloadClientSettingsDefaultCategorySubFolderHelpText": "Výchozí záložní kategorie, pokud pro vydání neexistuje žádná namapovaná kategorie. Přidáním kategorie specifické pro {appName} se zabrání konfliktům s nesouvisejícími stahováními, která nejsou {appName}. Použití kategorie je nepovinné, ale důrazně se doporučuje. Vytvoří podadresář [kategorie] ve výstupním adresáři.", + "DownloadClientSettingsUseSslHelpText": "Při připojení k {clientName} použít zabezpečené připojení", + "DownloadClientTransmissionSettingsDirectoryHelpText": "Volitelné umístění pro stahování, ponechte prázdné pro použití výchozího umístění Transmission", + "DownloadClientTransmissionSettingsUrlBaseHelpText": "Přidá předponu k url {clientName} rpc, např. {url}, výchozí hodnota je ‚{defaultUrl}‘", + "DownloadClientsSettingsSummary": "Konfigurace klientů pro stahování pro integraci do vyhledávání v uživatelském rozhraní {appName}", + "ElapsedTime": "Uplynulý čas", + "EnableIndexer": "Povolit indexer", + "External": "Externí", + "FullSync": "Úplná synchronizace", + "HealthMessagesInfoBox": "Další informace o příčině těchto zpráv o kontrole zdraví najdete kliknutím na odkaz wiki (ikona knihy) na konci řádku nebo kontrolou [logů]({link}). Pokud máte potíže s interpretací těchto zpráv, můžete se obrátit na naši podporu, a to na níže uvedených odkazech.", + "Implementation": "Implementace", + "DeleteClientCategory": "Odstranit kategorii klienta pro stahování", + "DownloadClientRTorrentSettingsAddStopped": "Přidat zastavené", + "DeleteIndexerProxy": "Odstranit proxy indexerů", + "Description": "Popis", + "IncludeManualGrabsHelpText": "Včetně ručních získání provedených v {appName}", + "GoToApplication": "Přejít na aplikaci", + "DownloadClientAriaSettingsDirectoryHelpText": "Volitelné umístění pro stahování, ponechte prázdné pro použití výchozího umístění Aria2", + "DownloadClientPneumaticSettingsStrmFolderHelpText": "Soubory .strm v této složce budou importovány pomocí drone", + "Destination": "Cíl", + "DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Stahovat nejprve první a poslední kusy (qBittorrent 4.1.0+)", + "DeleteSelectedIndexer": "Odstranit vybraný indexer", + "DownloadClientPneumaticSettingsStrmFolder": "Složka Strm", + "DownloadClientQbittorrentSettingsFirstAndLastFirst": "Nejprve první a poslední", + "DownloadClientFreeboxSettingsApiUrlHelpText": "Definujte základní adresu URL Freebox API s verzí API, např. ‚{url}‘, výchozí hodnota je ‚{defaultApiUrl}‘", + "HistoryCleanup": "Vyčištění historie", + "DownloadClientFreeboxSettingsAppIdHelpText": "ID aplikace zadané při vytváření přístupu k Freebox API (tj. ‚app_id‘)", + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Zda použít rozvržení obsahu nakonfigurované v qBittorrentu, původní rozvržení z torrentu nebo vždy vytvořit podsložku (qBittorrent 4.3.2+)", + "DownloadClientQbittorrentSettingsInitialStateHelpText": "Počáteční stav torrentů přidaných do qBittorrentu. Pamatujte, že vynucené torrenty nedodržují omezení týkající se seedů", + "DownloadClientQbittorrentSettingsUseSslHelpText": "Používat zabezpečené připojení. Viz Možnosti -> WebUI -> Webové uživatelské rozhraní -> ‚Použít HTTPS místo HTTP‘ v qBittorrentu.", + "FilterPlaceHolder": "Hledat indexery", + "FoundCountReleases": "Nalezeno {itemCount} vydání", + "DownloadClientRTorrentSettingsUrlPathHelpText": "Cesta ke koncovému bodu XMLRPC, viz {url}. Při použití ruTorrentu je to obvykle RPC2 nebo [cesta k ruTorrentu]{url2}.", + "DownloadClientSettingsDefaultCategoryHelpText": "Výchozí záložní kategorie, pokud pro vydání neexistuje žádná namapovaná kategorie. Přidáním kategorie specifické pro {appName} se zabrání konfliktům s nesouvisejícími stahováními, která nejsou {appName}. Použití kategorie je nepovinné, ale důrazně se doporučuje.", + "DownloadClientSettingsInitialStateHelpText": "Počáteční stav pro torrenty přidané do {clientName}", + "EditCategory": "Upravit kategorii", + "HistoryDetails": "Podrobnosti o historii", + "Donate": "Darovat", + "DownloadClientSettingsDestinationHelpText": "Ručně určuje cíl stahování, pro použití výchozího nastavení nechte prázdné", + "EnabledRedirected": "Povoleno, Přesměrováno", + "EditSyncProfile": "Upravit profil synchronizace", + "DeleteAppProfile": "Odstranit profil aplikace", + "IndexerSettingsAppsMinimumSeeders": "Minimální počet seederů aplikací", + "UsenetBlackholeNzbFolder": "Složka Nzb", + "SearchIndexers": "Hledat indexery", + "IndexerSettingsAppsMinimumSeedersHelpText": "Minimální počet seederů požadovaných aplikacemi pro indexer, výchozí hodnota synchronizačního profilu je prázdná" } diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index 1d1e2df7d..1a118a8af 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -424,5 +424,9 @@ "AdvancedSettingsHiddenClickToShow": "Avancerede indstillinger er skjult. Klik for at vise", "AdvancedSettingsShownClickToHide": "Avancerede indstillinger vises. Klik for at skjule", "ApiKeyValidationHealthCheckMessage": "Opdater din API-nøgle til at være på mindste {length} karakterer. Dette kan gøres i indstillingerne eller i konfigurationsfilen", - "AppProfileInUse": "App-profil i brug" + "AppProfileInUse": "App-profil i brug", + "Episode": "afsnit", + "Artist": "kunstner", + "Id": "ID", + "Encoding": "Indkodning" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 553026f7d..27ca44b3e 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -4,7 +4,7 @@ "LogLevel": "Lokikirjauksen laajuus", "MovieIndexScrollTop": "Elokuvakirjasto: vieritä ylös", "Apply": "Käytä", - "ClientPriority": "Lataustyökalun painotus", + "ClientPriority": "Latauspalvelun painotus", "IndexerPriorityHelpText": "Tietolähteen painotus, 1– 50 (korkein-alin). Oletusarvo on 25.", "Manual": "Manuaalinen", "Add": "Lisää", @@ -26,14 +26,14 @@ "Message": "Viesti", "Seeders": "Jakajat", "TestAll": "Kaikkien testaus", - "AddDownloadClient": "Lisää lataustyökalu", + "AddDownloadClient": "Lisää latauspalvelu", "CustomFilters": "Omat suodattimet", "DeleteTag": "Poista tunniste", "EnableRss": "Käytä RSS-syötettä", "Filter": "Suodatus", "Fixed": "Korjattu", "FocusSearchBox": "Kohdista hakukenttä", - "ForMoreInformationOnTheIndividualDownloadClients": "Saat yksittäisestä lataustyökalusta lisätietoja painamalla sen ohessa olevaa \"Lisätietoja\"-painiketta.", + "ForMoreInformationOnTheIndividualDownloadClients": "Saat lisätietoja yksittäisistä latauspalveluista painamalla niiden ohessa olevia lisätietopainikkeita.", "HideAdvanced": "Piilota lisäasetukset", "History": "Historia", "MIA": "Puuttuu", @@ -45,7 +45,7 @@ "Refresh": "Päivitä", "RefreshMovie": "Päivitä elokuva", "ReleaseBranchCheckOfficialBranchMessage": "\"{0}\" ei ole kelvollinen {appName}-julkaisuhaara ja tämän vuoksi et saa päivityksiä.", - "RestartRequiredHelpTextWarning": "Käyttöönotto vaatii in uudelleenkäynnistyksen.", + "RestartRequiredHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", "Result": "Tulos", "Settings": "Asetukset", "SettingsLongDateFormat": "Pitkän päiväyksen esitys", @@ -73,9 +73,9 @@ "AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana.", "BindAddressHelpText": "Toimiva IP-osoite, localhost tai * (tähti) kaikille verkkoliitännöille.", "Close": "Sulje", - "DeleteNotification": "Poista ilmoitus", + "DeleteNotification": "Poista ilmoituspalvelu", "Docker": "Docker", - "DownloadClient": "Lataustyökalu", + "DownloadClient": "Latauspalvelu", "Language": "Kieli", "Search": "Haku", "Details": "Tiedot", @@ -111,18 +111,18 @@ "RestartNow": "Käynnistä uudelleen nyt", "Restore": "Palauta", "Rss": "RSS", - "RssIsNotSupportedWithThisIndexer": "RSS-syötettä ei ole käytettävissä tälle tietolähteelle", + "RssIsNotSupportedWithThisIndexer": "Tämän tietolähteen kanssa ei voida käyttää RSS-syötettä.", "ScriptPath": "Komentosarjan sijainti", "Security": "Suojaus", "SuggestTranslationChange": "Ehdota käännösmuutosta", "System": "Järjestelmä", "SystemTimeHealthCheckMessage": "Järjestelmän aika on ainakin vuorokauden pielessä, eivätkä ajoitetut tehtävät toimi oikein ennen kuin se on korjattu.", - "TagCannotBeDeletedWhileInUse": "Tunnistetta ei voi poistaa, koska se on käytössä", - "TagIsNotUsedAndCanBeDeleted": "Tunnistetta ei ole määritetty millekään kohteelle, joten sen voi poistaa.", + "TagCannotBeDeletedWhileInUse": "Tunnistetta ei voida poistaa kun se on käytössä.", + "TagIsNotUsedAndCanBeDeleted": "Tunniste ei ole käytössä ja voidaan poistaa.", "TagsSettingsSummary": "Täältä näet kaikki tunnisteet käyttökohteineen ja voit poistaa käyttämättömät tunnisteet.", "Tasks": "Tehtävät", "Test": "Testaa", - "TestAllClients": "Lataustyökalujen testaus", + "TestAllClients": "Koesta latauspalvelut", "Time": "Aika", "Title": "Nimike", "Tomorrow": "Huomenna", @@ -133,9 +133,9 @@ "UnableToAddANewApplicationPleaseTryAgain": "Uuden sovelluksen lisäys epäonnistui. Yritä uudelleen.", "UnableToAddANewIndexerPleaseTryAgain": "Uuden tietolähteen lisäys epäonnistui. Yritä uudelleen.", "UnableToAddANewIndexerProxyPleaseTryAgain": "Uuden tiedonhaun välityspalvelimen lisäys epäonnistui. Yritä uudelleen.", - "BackupsLoadError": "Varmuuskopioiden lataus epäonnistui", - "DownloadClientsLoadError": "Lataustyökalujen lataus ei onistu", - "UnableToLoadGeneralSettings": "Virhe ladattaessa yleisiä asetuksia", + "BackupsLoadError": "Varmuuskopioinnin lataus epäonnistui", + "DownloadClientsLoadError": "Latauspalveluiden lataus epäonnistui", + "UnableToLoadGeneralSettings": "Yleisasetusten lataus epäonnistui", "UpdateAutomaticallyHelpText": "Lataa ja asenna päivitykset automaattisesti. Voit myös edelleen suorittaa asennuksen järjestelmäasetusten päivitykset-osiosta.", "Added": "Lisäysaika", "AddIndexer": "Lisää tietolähde", @@ -152,9 +152,9 @@ "DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa tietolähdevälityspalvelimen \"{name}\"?", "DeleteNotificationMessageText": "Haluatko varmasti poistaa ilmoituspalvelun \"{name}\"?", "Disabled": "Ei käytössä", - "DownloadClients": "Lataustyökalut", - "DownloadClientSettings": "Lataustyökalujen asetukset", - "DownloadClientStatusAllClientHealthCheckMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä", + "DownloadClients": "Latauspalvelut", + "DownloadClientSettings": "Latauspalveluasetukset", + "DownloadClientStatusAllClientHealthCheckMessage": "Latauspalveluita ei ole ongelmien vuoksi käytettävissä", "Mode": "Tila", "MoreInfo": "Lisätietoja", "SelectAll": "Valitse kaikki", @@ -166,16 +166,16 @@ "Shutdown": "Sammuta", "Size": "Koko", "Sort": "Järjestys", - "UnableToAddANewDownloadClientPleaseTryAgain": "Uuden lataustyökalun lisäys epäonnistui. Yitä uudelleen.", + "UnableToAddANewDownloadClientPleaseTryAgain": "Latauspalvelun lisääminen epäonnistui. Yritä uudelleen.", "AppDataLocationHealthCheckMessage": "Päivityksiä ei sallita, jotta AppData-kansion poistaminen päivityksen yhteydessä voidaan estää", - "UnableToLoadHistory": "Historian lataus epäonnistui.", - "UnableToLoadNotifications": "Virhe ladattaessa kytköksiä", - "UnableToLoadTags": "Tunnisteiden lataus ei onnistu", - "UnableToLoadUISettings": "Virhe ladattaesssa käyttöliittymän asetuksia", + "UnableToLoadHistory": "Historian lataus epäonnistui", + "UnableToLoadNotifications": "Ilmoituspalveluiden lataus epäonnistui", + "UnableToLoadTags": "Tunnisteiden lataus epäonnistui", + "UnableToLoadUISettings": "Käyttöliittymäasetusten lataus epäonnistui", "UnsavedChanges": "Muutoksia ei ole tallennettu", "Yesterday": "Eilen", - "ConnectionLost": "Ei yhteyttä", - "DeleteDownloadClientMessageText": "Haluatko varmasti poistaa lataustyökalun \"{name}\"?", + "ConnectionLost": "Yhteys menetettiin", + "DeleteDownloadClientMessageText": "Haluatko varmasti poistaa latauspalvelun \"{name}\"?", "DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen \"{label}\"?", "Discord": "Discord", "Donations": "Lahjoitukset", @@ -208,9 +208,9 @@ "StartupDirectory": "Käynnistyskansio", "TableOptions": "Taulukkonäkymän asetukset", "TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys", - "TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille tietolähteille. Käytä kaikille jättämällä tyhjäksi.", + "TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille tietolähteille.", "UnableToAddANewAppProfilePleaseTryAgain": "Uuden sovellusprofiilin lisäys epäonnistui. Yritä uudelleen.", - "UnableToAddANewNotificationPleaseTryAgain": "Kytköksen lisäys epäonnistui. Yritä uudelleen.", + "UnableToAddANewNotificationPleaseTryAgain": "Ilmoituspalvelun lisääminen epäonnistui. Yritä uudelleen.", "Version": "Versio", "View": "Näkymä", "Warn": "Varoita", @@ -221,7 +221,7 @@ "Backup": "Varmuuskopiointi", "BackupFolderHelpText": "Suhteelliset tiedostosijainnit ovat {appName}in AppData-kansiossa.", "BackupIntervalHelpText": "Tietokannan ja asetusten automaattisen varmuuskopioinnin ajoitus.", - "BackupRetentionHelpText": "Säilytysjaksoa vanhemmat varmuuskopiot siivotaan automaattisesti.", + "BackupRetentionHelpText": "Säilytysaikaa vanhemmat varmuuskopiot siivotaan automaattisesti.", "Backups": "Varmuuskopiot", "BeforeUpdate": "Ennen päivitystä", "BindAddress": "Sidososoite", @@ -239,21 +239,21 @@ "CloseCurrentModal": "Sulje nykyinen ikkuna", "Columns": "Sarakkeet", "Component": "Komponentti", - "Connections": "Yhteydet", - "ConnectSettings": "Kytkösasetukset", - "CouldNotConnectSignalR": "SignalR-kirjastoa ei tavoitettu, eikä käyttöliittymää päivitetä", + "Connections": "Ilmoituspalvelut", + "ConnectSettings": "Ilmoituspavelun asetukset", + "CouldNotConnectSignalR": "SignalR-kirjastoa ei tavoitettu, eikä käyttöliittymä päivity.", "Custom": "Mukautettu", "DeleteApplicationMessageText": "Haluatko varmasti poistaa sovelluksen \"{name}\"?", "DeleteBackup": "Poista varmuuskopio", "DeleteBackupMessageText": "Haluatko varmasti poistaa varmuuskopion \"{name}\"?", - "DeleteDownloadClient": "Poista lataustyökalu", - "DownloadClientStatusSingleClientHealthCheckMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä: {downloadClientNames}", + "DeleteDownloadClient": "Poista latauspalvelu", + "DownloadClientStatusSingleClientHealthCheckMessage": "Latauspalveluita ei ole ongelmien vuoksi käytettävissä: {downloadClientNames}", "EditIndexer": "Muokkaa tietolähdettä", "EnableAutomaticSearch": "Käytä automaattihakua", "EnableInteractiveSearch": "Käytä manuaalihakuun", "EnableInteractiveSearchHelpText": "Profiilia käytetään manuaalihakuun.", "EnableSSL": "SSL-salaus", - "EnableSslHelpText": " Käyttöönotto vaatii uudelleenkäynnistyksen järjestelmänvavojan oikeuksilla.", + "EnableSslHelpText": " Käyttöönotto vaatii uudelleenkäynnistyksen järjestelmänvalvojan oikeuksilla.", "Error": "Virhe", "ErrorLoadingContents": "Virhe ladattaessa sisältöjä", "Events": "Tapahtumat", @@ -268,7 +268,7 @@ "Grabs": "Kaappaukset", "Health": "Terveys", "Level": "Taso", - "NoIssuesWithYourConfiguration": "Kokoonpanossasi ei ole ongelmia", + "NoIssuesWithYourConfiguration": "Kokoonpanossasi ei ole ongelmia.", "HomePage": "Verkkosivusto", "Host": "Osoite", "Hostname": "Osoite", @@ -287,7 +287,7 @@ "SSLCertPath": "SSL-varmenteen sijainti", "SSLCertPathHelpText": "PFX-tiedoston sijainti", "Status": "Tila", - "NotificationTriggers": "Laukaisimet", + "NotificationTriggers": "Ilmoituksen laukaisijat", "NoUpdatesAreAvailable": "Päivityksiä ei ole saatavilla", "OAuthPopupMessage": "Selaimesi estää ponnahdukset", "Ok": "Ok", @@ -303,12 +303,12 @@ "RestoreBackup": "Palauta varmuuskopio", "Retention": "Säilytys", "UILanguageHelpText": "{appName}in käyttöliittymän kieli.", - "UILanguageHelpTextWarning": "Selaimen sivupäivitys vaaditaan", + "UILanguageHelpTextWarning": "Vaatii selaimen sivupäivityksen (F5).", "UISettings": "Käyttöliittymän asetukset", - "DownloadClientsSettingsSummary": "{appName}in käyttöliittymästä suoritettavien hakujen yhteydessä käytettävät lataustyökalumääritykset.", - "ProwlarrSupportsAnyDownloadClient": "{appName} tukee alla listatuja lataustyökaluja.", - "AddDownloadClientToProwlarr": "Lisäämällä lataustyökalun {appName} voi käynnistää lataukset suoraan käyttöliittymästä manuaalisen haun yhteydessä.", - "RedirectHelpText": "Uudelleenohjaa tietolähteeltä saapuvat latauspyynnöt ja välitä kaappaus suoraan välittämättä sitä {appName}in välityksellä.", + "DownloadClientsSettingsSummary": "{appName}in käyttöliittymästä suoritettavien hakujen yhteydessä käytettävät latauspalvelut.", + "ProwlarrSupportsAnyDownloadClient": "{appName} tukee kaikkia alla listatuja latauspalveluita.", + "AddDownloadClientToProwlarr": "Lisäämällä latauspalvelun {appName} voi lähettää julkaisut suoraan käyttöliittymästä manuaalihaun tuloksista.", + "RedirectHelpText": "Uudelleenohjaa tietolähteeltä saapuvat latauspyynnöt ja välitä kaappaus suoraan välittämättä sitä {appName}in kautta.", "FullSync": "Täysi synkronointi", "SyncLevelFull": "Täysi synkronointi: Pitää sovelluksen tietolähteet täysin synkronoituna. Tietolähteisiin {appName}issa tehdyt muutokset synkronoidaan etäsovelluksen kanssa ja kaikki etäsovelluksessa tehdyt muutokset korvataan seuraavan synkronoinnin yhteydessä.", "EnableIndexer": "Tietolähteen tila", @@ -326,7 +326,7 @@ "IndexerTagsHelpText": "Tunnisteilla voit kohdistaa tiedonhaun välityspalvelimia ja määrittää mihin sovelluksiin ne synkronoidaan.", "UnableToLoadAppProfiles": "Sovellusprofiilien lataus epäonnistui", "AppProfileSelectHelpText": "Sovellusprofiilieilla määritetään tietolähteelle sovellussynkronoinnin yhteydessä aktivoitavat hakutavat (RSS/automaatti/manuaali).", - "IndexerQuery": "Tietolähteen kysely", + "IndexerQuery": "Tietolähdekysely", "IndexerRss": "Tietolähteen RSS", "SearchIndexers": "Etsi tietolähteistä", "AddRemoveOnly": "Ainoastaan lisää/poista", @@ -339,10 +339,10 @@ "SyncLevelAddRemove": "Vain lisäys/poisto: Kun {appName}in tietolähteitä lisätään tai poistetaan, päivittyy myös etäsovellus.", "SyncAppIndexers": "Synkronoi tietolähteet", "TestAllApps": "Testaa kaikki sovellukset", - "UnableToLoadIndexerProxies": "Tiedonhaun välityspalvelimia ei voitu ladata", - "AddedToDownloadClient": "Julkaisu lisättiin lataustyökaluun", + "UnableToLoadIndexerProxies": "Tiedonhaun välityspalvelinten lataus epäonnistui", + "AddedToDownloadClient": "Julkaisu lisättiin latauspalveluun", "AddNewIndexer": "Lisää uusi tietolähde", - "AddToDownloadClient": "Lisää julkaisu lataustyökaluun", + "AddToDownloadClient": "Lisää julkaisu latauspalveluun", "NoSearchResultsFound": "Tuloksia ei löytynyt. Yritä uutta hakua alta.", "Notification": "Ilmoitus", "DeleteIndexerProxy": "Poista tiedonhaun välityspalvelin", @@ -351,7 +351,7 @@ "SettingsLogRotate": "Lokitiedostojen kierrätys", "SettingsLogSql": "Kirjaa SQL", "SettingsSqlLoggingHelpText": "Kirjaa kaikki {appName}in SQL-kyselyt", - "ConnectSettingsSummary": "Ilmoitukset ja mukautetut komentosarjat.", + "ConnectSettingsSummary": "Yhteydet ilmoituspalveluihin ja mukautetut komentosarjat.", "DevelopmentSettings": "Kehittäjäasetukset", "Description": "Kuvaus", "Id": "ID", @@ -365,14 +365,14 @@ "Category": "Kategoria", "ClearHistory": "Tyhjennä historia", "ClearHistoryMessageText": "Haluatko varmasti tyhjentää kaiken {appName}-historian?", - "Connect": "Kytkökset", + "Connect": "Ilmoituspalvelut", "EnableRssHelpText": "Käytä tietolähteelle RSS-syötettä.", "DeleteApplication": "Poista sovellus", "DeleteAppProfile": "Poista sovellusprofiili", "IndexerProxies": "Tiedonhaun välityspalvelimet", "IndexerAuth": "Tietolähteen todennus", - "Notifications": "Kytkökset", - "NotificationTriggersHelpText": "Valitse tämän ilmoituksen laukaisevat tapahtumat.", + "Notifications": "Ilmoituspalvelut", + "NotificationTriggersHelpText": "Valitse ilmoituksen laukaisevat tapahtumat.", "Stats": "Tilastot", "UnableToLoadDevelopmentSettings": "Kehittäjäasetusten lataus epäonnistui", "AppSettingsSummary": "Sovellukset ja asetukset, joilla määritetään miten {appName} viestii PVR-sovellustesi kanssa.", @@ -387,22 +387,22 @@ "Filters": "Suodattimet", "OnGrab": "Kun julkaisu kaapataan", "OnHealthIssue": "Vakausongelmat", - "HistoryCleanupDaysHelpText": "Arvo \"0\" (nolla) poistaa automaattisen tyhjennyksen käytöstä.", + "HistoryCleanupDaysHelpText": "Poista automaattinen tyhjennys käytöstä asettamalla arvoksi 0.", "HistoryCleanupDaysHelpTextWarning": "Tässä määritettyä aikaa vanhemmat tiedostot poistetaan automaattisesti roskakorista pysyvästi.", "TestAllIndexers": "Tietolähteiden testaus", "UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti rajapinnan kanssa viestinyt sovellus.", "Categories": "Kategoriat", "Database": "Tietokanta", "HistoryCleanup": "Historian siivous", - "IndexerAlreadySetup": "Tietolähteestä on määritetty jo ainakin yksi instanssi", + "IndexerAlreadySetup": "Tietolähteestä on määritetty jo ainakin yksi instanssi.", "IndexerInfo": "Tietolähteen tiedot", - "MassEditor": "Joukkoeditori", + "MassEditor": "Massamuokkaus", "OnApplicationUpdate": "Kun sovellus päivitetään", "OnApplicationUpdateHelpText": "Kun sovellus päivitetään", "Proxies": "Välityspalvelimet", "Public": "Julkinen", "SemiPrivate": "Osittain yksityinen", - "ApplicationsLoadError": "Sovelluslistausta ei voitu ladata", + "ApplicationsLoadError": "Sovelluslistan lataus epäonnistui", "Url": "URL", "Website": "Verkkosivusto", "IndexerNoDefinitionCheckHealthCheckMessage": "Tietolähteillä ei ole määritystä, eivätkä ne toimi: {indexerNames}. Poista ja/tai lisää {appName}iin uudelleen", @@ -411,23 +411,23 @@ "Application": "Sovellus", "GrabReleases": "Kaappaa julkaisu(t)", "Link": "Linkki", - "SearchTypes": "Hakutyypit", + "SearchTypes": "Etsittävät tyypit", "UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui", "Yes": "Kyllä", "MappedDrivesRunningAsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja UKK:sta.", "No": "Ei", - "BookSearchTypes": "Kirjojen hakutyypit", + "BookSearchTypes": "Etsittävät kirjatyypit", "IndexerDetails": "Tietolähteen tiedot", "IndexerName": "Tietolähteen nimi", "IndexerSite": "Tietolähteen sivusto", - "MovieSearchTypes": "Elokuvien hakutyypit", - "MusicSearchTypes": "Musiikin hakutyypit", + "MovieSearchTypes": "Etsittävät elokuvatyypit", + "MusicSearchTypes": "Etsittävät musiikkityypit", "NotSupported": "Ei tuettu", "RawSearchSupported": "Raakahaku tuettu", "SearchCapabilities": "Hakuominaisuudet", - "TVSearchTypes": "Televisiosarjojen hakutyypit", + "TVSearchTypes": "Etsittävät sarja-/jaksotyypit", "MinimumSeeders": "Jakajien vähimmäismäärä", - "MinimumSeedersHelpText": "Sovelluksen edellyttämä jakajien vähimmäismäärä tietolähteestä kaappaukseen.", + "MinimumSeedersHelpText": "Sovelluksen edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä.", "SyncProfile": "Synkronointiprofiili", "SyncProfiles": "Synkronointiprofiilit", "AddSyncProfile": "Lisää synkronointiprofiili", @@ -449,8 +449,8 @@ "ApplicationLongTermStatusCheckAllClientMessage": "Sovellukset eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi.", "ApplicationLongTermStatusCheckSingleClientMessage": "Sovellukset eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi: {0}", "AreYouSureYouWantToDeleteCategory": "Haluatko varmasti poistaa kohdistetun kategorian?", - "DeleteClientCategory": "Poista lataustyökalukategoria", - "DownloadClientCategory": "Lataustyökalukategoria", + "DeleteClientCategory": "Poista latauspalvelukategoria", + "DownloadClientCategory": "Latauspalvelukategoria", "MappedCategories": "Kohdistetut kategoriat", "AuthenticationRequired": "Vaadi tunnistautuminen", "Remove": "Poista", @@ -460,22 +460,22 @@ "ApplicationUrlHelpText": "Tämän sovelluksen ulkoinen URL-osoite, johon sisältyy http(s)://, portti ja URL-perusta.", "Track": "Valvo", "CountIndexersSelected": "{count} tietolähde(ttä) on valittu", - "DeleteSelectedDownloadClients": "Poista lataustyökalu(t)", + "DeleteSelectedDownloadClients": "Poista valitut latauspalvelu(t)", "DeleteSelectedApplicationsMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) sovellu(sta/ksen)?", - "DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valit(n/tua) lataustyökalu(n/a)?", + "DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valittua latauspalvelua?", "DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) tietoläh(teen/dettä)?", "Publisher": "Julkasija", - "SelectIndexers": "Valitse tietolähteet", + "SelectIndexers": "Tietolähteiden monivalinta", "Year": "Vuosi", "Genre": "Lajityyppi", "More": "Lisää", "Season": "Kausi", "ApplyTagsHelpTextAdd": "– \"Lisää\" syötetyt tunnisteet aiempiin tunnisteisiin", "ApplyTagsHelpTextHowToApplyApplications": "Tunnisteiden käyttäminen valituille sovelluksille", - "ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituissa tietolähteissä", + "ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituille tietolähteille", "ApplyTagsHelpTextRemove": "- \"Poista\" tyhjentää syötetyt tunnisteet", "ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi", - "DownloadClientPriorityHelpText": "Lautaustyökalujen painotus, 1– 50 (korkein-alin). Oletusarvo on 1 ja tasaveroiset erotetaan Round-Robin-tekniikalla.", + "DownloadClientPriorityHelpText": "Useiden latauspalveluiden painotus, 1–50 (korkein-alin). Oletusarvo on 1 ja tasaveroiset erotetaan Round-Robin-tekniikalla.", "Album": "Albumi", "Artist": "Esittäjä", "Author": "Kirjailija", @@ -490,9 +490,9 @@ "WhatsNew": "Mikä on uutta?", "ConnectionLostToBackend": "{appName} kadotti yhteyden taustajärjestelmään ja se on käynnistettävä uudelleen.", "minutes": "minuuttia", - "AddConnection": "Lisää yhteys", - "NotificationStatusAllClientHealthCheckMessage": "Mikään ilmoituspavelu ei ole ongelmien vuoksi käytettävissä.", - "NotificationStatusSingleClientHealthCheckMessage": "Ilmoitukset eivät ole ongelmien vuoksi käytettävissä: {notificationNames}", + "AddConnection": "Lisää ilmoituspavelu", + "NotificationStatusAllClientHealthCheckMessage": "Ilmoituspalvelut eivät ole ongelmien vuoksi käytettävissä.", + "NotificationStatusSingleClientHealthCheckMessage": "Ilmoituspalvelut eivät ole ongelmien vuoksi käytettävissä: {notificationNames}.", "AuthBasic": "Perus (selaimen ponnahdus)", "AuthForm": "Lomake (kirjautumissivu)", "DisabledForLocalAddresses": "Ei käytössä paikallisissa osoitteissa", @@ -501,32 +501,32 @@ "TotalIndexerSuccessfulGrabs": "Onnistuneiden tietolähdekaappausten kokonaismäärä", "AppUpdated": "{appName} on päivitetty", "AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on käynnistettävä uudelleen.", - "IndexerDownloadClientHelpText": "Määritä {appName}issa tästä tietolähteestä tehdyille kaappauksille käytettävä lataustyökalu.", + "IndexerDownloadClientHelpText": "Määritä {appName}issa tästä tietolähteestä tehdyille kaappauksille käytettävä latauspalvelu.", "AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt tunnistautumisen käyttöönoton. Paikallisilta osoitteilta se voidaan valinnaisesti poistaa käytöstä.", "TotalGrabs": "Kaappausten kokonaismäärä", - "AddDownloadClientImplementation": "Lisäätään lataustyökalua - {implementationName}", - "AddIndexerImplementation": "Lisätään tietolähdettä - {implementationName}", + "AddDownloadClientImplementation": "Lisätään latauspalvelua – {implementationName}", + "AddIndexerImplementation": "Lisätään tietolähdettä – {implementationName}", "OnGrabHelpText": "Kun julkaisu kaapataan", - "ManageDownloadClients": "Hallitse lataustyökaluja", - "NoDownloadClientsFound": "Lataustyökaluja ei löytynyt", - "CountDownloadClientsSelected": "{count} lataustyökalu(a) on valittu", - "EditSelectedDownloadClients": "Muokkaa valittuja lataustyökaluja", - "IndexerDownloadClientHealthCheckMessage": "Tietolähteet virheellisillä lataustyökaluilla: {indexerNames}.", - "AddIndexerProxyImplementation": "Lisää tiedonhaun välityspalvelin - {implementationName}", - "EditIndexerProxyImplementation": "Muokkaa tiedonhaun välityspalvelinta - {implementationName}", - "EditDownloadClientImplementation": "Muokataan lataustyökalua - {implementationName}", + "ManageDownloadClients": "Hallitse latauspalveluita", + "NoDownloadClientsFound": "Latauspalveluita ei löytynyt", + "CountDownloadClientsSelected": "{count} latauspalvelu(a) on valittu", + "EditSelectedDownloadClients": "Muokkaa valittuja latauspalveluita", + "IndexerDownloadClientHealthCheckMessage": "Tietolähteet virheellisillä latauspalveluilla: {indexerNames}.", + "AddIndexerProxyImplementation": "Lisätään tiedonhaun välityspalvelinta – {implementationName}", + "EditIndexerProxyImplementation": "Muokataan tiedonhaun välityspalvelinta – {implementationName}", + "EditDownloadClientImplementation": "Muokataan latauspalvelua – {implementationName}", "AddCustomFilter": "Lisää oma suodatin", "ApplyChanges": "Toteuta muutokset", "EditSelectedIndexers": "Muokkaa valittuja sisältölähteitä", "NoHistoryFound": "Historiaa ei löytynyt", "NoIndexersFound": "Tietolähteitä ei löytynyt", "StopSelecting": "Lopeta valitseminen", - "EditConnectionImplementation": "Muokataan kytköstä - {implementationName}", - "AddConnectionImplementation": "Lisätään kytköstä - {implementationName}", + "EditConnectionImplementation": "Muokataan ilmoituspalvelua – {implementationName}", + "AddConnectionImplementation": "Lisätään ilmoituspavelua – {implementationName}", "DownloadClientQbittorrentSettingsContentLayout": "Sisällön rakenne", - "EditIndexerImplementation": "Muokataan tietolähdettä - {implementationName}", + "EditIndexerImplementation": "Muokataan tietolähdettä – {implementationName}", "AuthenticationRequiredUsernameHelpTextWarning": "Syötä uusi käyttäjätunnus", - "DefaultNameCopiedProfile": "{name} - Kopioi", + "DefaultNameCopiedProfile": "{name} (kopio)", "AppsMinimumSeedersHelpText": "Sovellusten edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.", "TotalHostGrabs": "Isännän kaappausten kokonaismäärä", "IncludeManualGrabsHelpText": "Sisällytä {appName}in käyttöliittymästä tehdyt manuaalikaappaukset.", @@ -537,8 +537,8 @@ "AuthenticationMethod": "Tunnistautumistapa", "Clone": "Monista", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Vahvista uusi salasana", - "EditApplicationImplementation": "Muokataan sovellusta - {implementationName}", - "AddApplicationImplementation": "Lisätään sovellusta - {implementationName}", + "EditApplicationImplementation": "Muokataan sovellusta – {implementationName}", + "AddApplicationImplementation": "Lisätään sovellusta – {implementationName}", "InvalidUILanguage": "Käytöliittymän kielivalinta on virheellinen. Korjaa se ja tallenna asetukset.", "SeedRatio": "Jakosuhde", "SeedTime": "Jakoaika", @@ -547,7 +547,7 @@ "IndexerDisabled": "Tietolähde ei ole käytössä", "AdvancedSettingsShownClickToHide": "Lisäasetukset näytetään, piilota painamalla tästä.", "AdvancedSettingsHiddenClickToShow": "Lisäasetukset on piilotettu, näytä painamalla tästä.", - "AppsMinimumSeeders": "Sovellusten vähimmäisjakajat", + "AppsMinimumSeeders": "Jakajien vähimmäismäärä", "BasicSearch": "Perushaku", "CountApplicationsSelected": "{count} sovellus(ta) on valittu", "DeleteSelectedApplications": "Poista valitut sovellukset", @@ -576,7 +576,7 @@ "ApplicationTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkittyyn sovellukseen synkronoidaan vain samalla tunnisteella merkityt tietolähteet.", "AverageResponseTimesMs": "Tietolähteiden keskimääräiset vasteajat (ms)", "CountIndexersAvailable": "{count} tietolähde(ttä) on käytettävissä", - "FoundCountReleases": "Löytyi {itemCount} julkaisua", + "FoundCountReleases": "Löydettiin {itemCount} julkaisua", "IndexerTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkitty tietolähde synkronoidaan vain samalla tunnisteella merkittyyn sovellukseen.", "LastFailure": "Edellinen virhe", "SelectedCountOfCountReleases": "Valittu {selectedCount}/{itemCount} julkaisua", @@ -613,21 +613,21 @@ "Donate": "Lahjoita", "DownloadClientFloodSettingsAdditionalTagsHelpText": "Lisää median ominaisuuksia tunnisteina. Vihjeet ovat esimerkkejä.", "DownloadClientRTorrentSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä rTorrentin oletusta jättämällä tyhjäksi.", - "DownloadClientSettingsUseSslHelpText": "Muodosta {clientName} -yhteys käyttäen salattua yhteyttä.", + "DownloadClientSettingsUseSslHelpText": "Muodosta {clientName}-yhteys käyttäen salattua yhteyttä.", "DownloadClientTransmissionSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Transmissionin oletusta jättämällä tyhjäksi.", - "DownloadClientTransmissionSettingsUrlBaseHelpText": "Lisää etuliite lataustyökalun {clientName} RPC-URL-osoitteeseen. Esimerkiksi {url}. Oletus on \"{defaultUrl}\".", + "DownloadClientTransmissionSettingsUrlBaseHelpText": "Lisää latauspalvelun {clientName} RPC-URL-osoitteeseen etuliitteen, esim. \"{url}\". Oletus on \"{defaultUrl}\".", "IndexerSettingsAppsMinimumSeedersHelpText": "Sovellusten edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.", "Menu": "Valikko", "ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Synkronoi estetyt torrent-hajautusarvot kaapattaessa", - "IndexerBeyondHDSettingsSearchTypes": "Hakutyypit", + "IndexerBeyondHDSettingsSearchTypes": "Etsittävät tyypit", "IndexerSettingsSeedRatio": "Jakosuhde", "IndexerSettingsSeedTime": "Jakoaika", - "IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi.", + "IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi.", "IndexerSettingsVipExpiration": "VIP-erääntyy", "Destination": "Kohde", "Directory": "Kansio", - "DownloadClientFloodSettingsTagsHelpText": "Latauksen alkuperäiset tunnisteet. Jotta se voidaa tunnistaa, on latauksella oltava sen alkuperäiset tunnisteet. Tämä välttää ristiriidat muiden latausten kanssa.", - "DownloadClientFreeboxSettingsApiUrl": "Rajapinnan URL-osoite", + "DownloadClientFloodSettingsTagsHelpText": "Latauksen alkuperäiset tunnisteet, jotka tarvitaan sen tunnistamiseen. Tämä välttää ristiriidat muiden latausten kanssa.", + "DownloadClientFreeboxSettingsApiUrl": "Rajapinnan URL", "DownloadClientFreeboxSettingsAppTokenHelpText": "Freebox-rajapinnan käyttöoikeutta määritettäessä saatu app_token-tietue.", "DownloadClientFreeboxSettingsHostHelpText": "Freeboxin isäntänimi tai IP-osoite. Oletus on \"{url}\" (toimii vain samassa verkossa).", "DownloadClientPneumaticSettingsStrmFolder": "Strm-kansio", @@ -635,66 +635,66 @@ "DownloadClientSettingsAddPaused": "Lisää keskeytettynä", "DownloadClientSettingsDestinationHelpText": "Määrittää manuaalisen tallennuskohteen. Käytä oletusta jättämällä tyhjäksi.", "DownloadClientSettingsInitialState": "Aloitustila", - "DownloadClientSettingsInitialStateHelpText": "Lataustyökaluun {clientName} lisättyjen torrentien aloitustila.", + "DownloadClientSettingsInitialStateHelpText": "Latauspalveluun {clientName} lisättyjen torrentien aloitustila.", "IndexerHDBitsSettingsCodecs": "Koodekit", "IndexerHDBitsSettingsCodecsHelpText": "Jos ei määritetty, käytetään kaikkia vaihtoehtoja.", - "IndexerHDBitsSettingsMediums": "Mediatyypit", + "IndexerHDBitsSettingsMediums": "Muodot", "IndexerHDBitsSettingsMediumsHelpText": "Jos ei määritetty, käytetään kaikkia vaihtoehtoja.", "IndexerHDBitsSettingsOriginsHelpText": "Jos ei määritetty, käytetään kaikkia vaihtoehtoja.", "IndexerSettingsAdditionalParameters": "Muut parametrit", "IndexerSettingsApiPath": "Rajapinnan sijainti", - "IndexerSettingsApiPathHelpText": "Polku rajapintaan (yleensä {url}).", + "IndexerSettingsApiPathHelpText": "Rajapinnan sijainti, yleensä \"{url}\".", "IndexerSettingsCookie": "Eväste", "IndexerSettingsPackSeedTime": "Paketin jakoaika", "IndexerSettingsPackSeedTimeIndexerHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.", - "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.", + "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.", "SecretToken": "Salainen tunniste", "TorrentBlackholeSaveMagnetFiles": "Tallenna magnet-tiedostot", "UseSsl": "Käytä SSL-salausta", - "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein joidenkin tietolähteiden RSS-syötteestä tai hausta. Tämän käyttöönotto mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, kuitenkin ennen kuin niitä välitetään lataustyökalulle.", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein joidenkin tietolähteiden RSS-syötteestä tai hausta. Tämän käyttöönotto mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, kuitenkin ennen kuin niitä välitetään latauspalvelulle.", "BlackholeFolderHelpText": "Kansio, jonne {appName} tallentaa {extension}-tiedoston.", - "DownloadClientDelugeSettingsUrlBaseHelpText": "Lisää etuliitteen Delugen JSON-URL-osoitteeseen (ks. {url}).", + "DownloadClientDelugeSettingsUrlBaseHelpText": "Lisää Delugen JSON-URL-osoitteeseen etuliitteen, ks. \"{url})\".", "DownloadClientFloodSettingsAdditionalTags": "Lisätunnisteet", "DownloadClientPneumaticSettingsStrmFolderHelpText": "Tämän kansion .strm-tiedostot tuodaan droonilla.", "DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Lataa tiedostot järjestyksessä (qBittorrent 4.1.0+).", "UsenetBlackholeNzbFolder": "NZB-kansio", "XmlRpcPath": "XML RPC -sijainti", - "DownloadClientSettingsUrlBaseHelpText": "Lisää etuliite lataustuökalun {clientName} URL-osoitteeseen, kuten {url}.", - "DownloadClientFloodSettingsUrlBaseHelpText": "Lisää etuliitteen Flood-rajapintaan (esim. {url}).", + "DownloadClientSettingsUrlBaseHelpText": "Lisää lataustuökalun {clientName} URL-osoitteeseen etuliitteen, esim. \"{url}\".", + "DownloadClientFloodSettingsUrlBaseHelpText": "Lisää Flood-rajapintaan etuliitteen, esim. \"{url}\".", "DownloadClientDownloadStationSettingsDirectoryHelpText": "Vaihtoehtoinen jaettu kansio latauksille. Käytä Download Stationin oletussijaintia jättämällä tyhjäksi.", - "DownloadClientFreeboxSettingsApiUrlHelpText": "Määritä Freebox-rajapinnan perus-URL rajapinnan versiolla. Esimerkiksi \"{url}\". Oletus on \"{defaultApiUrl}\".", + "DownloadClientFreeboxSettingsApiUrlHelpText": "Määritä Freebox-rajapinnan perus-URL rajapinnan versiolla, esim. \"{url}\". Oletus on \"{defaultApiUrl}\".", "DownloadClientQbittorrentSettingsFirstAndLastFirst": "Ensimmäinen ja viimeinen ensin", "DownloadClientFreeboxSettingsAppId": "Sovellustunniste", - "DownloadClientFreeboxSettingsPortHelpText": "Freebox-liittymän portti. Oletus on \"{port}\".", + "DownloadClientFreeboxSettingsPortHelpText": "Freebox-liittymän portti. Oletus on {port}.", "DownloadClientPneumaticSettingsNzbFolder": "NZB-kansio", "DownloadClientQbittorrentSettingsSequentialOrder": "Peräkkäinen järjestys", "CustomFilter": "Mukautettu suodatin", "DownloadClientFreeboxSettingsAppIdHelpText": "Freebox-rajapinnan käyttöoikeutta määritettäessä käytettävä App ID -sovellustunniste.", "DownloadClientFreeboxSettingsAppToken": "Sovellustietue", - "DownloadClientNzbgetSettingsAddPausedHelpText": "Tämä vaatii vähintään NzbGet-version 16.0.", - "DownloadClientPneumaticSettingsNzbFolderHelpText": "Tämän kansion on oltava tavoitettavissa XBMC:stä.", - "DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Aloita lataamalla ensimmäinen ja viimeinen osa (qBittorrent 4.1.0+).", + "DownloadClientNzbgetSettingsAddPausedHelpText": "Tämä vaatii vähintään NzbGetin version 16.0.", + "DownloadClientPneumaticSettingsNzbFolderHelpText": "Tämän kansion on oltava Kodin tavoitettavissa.", + "DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Lataa ensimmäinen ja viimeinen osa ensin (qBittorrent 4.1.0+).", "DownloadClientQbittorrentSettingsUseSslHelpText": "Käytä suojattua yhteyttä. Katso qBittorentin asetusten \"Selainkäyttö\"-osion \"Käytä HTTPS:ää HTTP:n sijaan\" -asetus.", "DownloadClientRTorrentSettingsAddStopped": "Lisää pysäytettynä", "DownloadClientRTorrentSettingsUrlPath": "URL-sijainti", - "TorrentBlackholeSaveMagnetFilesHelpText": "Tallenna magnet-linkki, jos .torrent-tiedostoa ei ole käytettävissä (hyödyllinen vain lataustyökalun tukiessa tiedostoon tallennettuja magnet-linkkejä).", + "TorrentBlackholeSaveMagnetFilesHelpText": "Tallenna magnet-linkki, jos .torrent-tiedostoa ei ole käytettävissä (hyödyllinen vain latauspalvelun tukiessa tiedostoon tallennettuja magnet-linkkejä).", "TorrentBlackholeTorrentFolder": "Torrent-kansio", "TorrentBlackholeSaveMagnetFilesExtension": "Tallenna magnet-tiedostojen pääte", "TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Magnet-linkeille käytettävä tiedostopääte. Oletus on \".magnet\".", "LabelIsRequired": "Nimi on pakollinen", "Default": "Oletus", "GrabRelease": "Kaappaa julkaisu", - "OverrideGrabModalTitle": "Ohita ja kaappaa - {title}", + "OverrideGrabModalTitle": "Ohitetaan ja kaapataan – {title}", "PrioritySettings": "Painotus: {priority}", - "SelectDownloadClientModalTitle": "{modalTitle} - Valitse lataustyökalu", + "SelectDownloadClientModalTitle": "{modalTitle} – Valitse latauspalvelu", "ProxyValidationBadRequest": "Välityspalvelintesti epäonnistui. Tilakoodi: {statusCode}.", - "ProxyValidationUnableToConnect": "Tietolähdettä ei tavoiteta: {exceptionMessage}. Etsi tietoja tämän virheen lähellä olevista lokimerkinnöistä.", - "ManualGrab": "Manuaalinen kaappaus", - "OverrideAndAddToDownloadClient": "Ohita ja lisää lataustyökaluun", + "ProxyValidationUnableToConnect": "Välityspalvelinta ei tavoiteta: {exceptionMessage}. Saat lisätietoja virheen lähellä olevista lokimerkinnöistä.", + "ManualGrab": "Manuaalikaappaus", + "OverrideAndAddToDownloadClient": "Ohita ja lisää etälatauspalveluun", "BuiltIn": "Sisäänrakennettu", "Any": "Mikä tahansa", "Script": "Komentosarja", - "InfoUrl": "Tietojen URL-osoite", + "InfoUrl": "Tietojen URL", "PublishedDate": "Julkaisupäivä", "Redirected": "Uudelleenohjattu", "AllSearchResultsHiddenByFilter": "Aktiivinen suodatin piilottaa kaikki tulokset.", @@ -715,22 +715,96 @@ "UpdaterLogFiles": "Päivittäjän lokitiedostot", "WouldYouLikeToRestoreBackup": "Haluatko palauttaa varmuuskopion \"{name}\"?", "InstallLatest": "Asenna uusin", - "CurrentlyInstalled": "Tällä hetkellä asennettu versio", - "PreviouslyInstalled": "Edellinen asennettu versio", + "CurrentlyInstalled": "Nyt asennettu", + "PreviouslyInstalled": "Aiemmin asennettu", "Mixed": "Sekoitettu", - "IndexerSettingsAppsMinimumSeeders": "Sovellusten vähimmäisjakajat", + "IndexerSettingsAppsMinimumSeeders": "Jakajien vähimmäismäärä", "FailedToFetchSettings": "Asetusten nouto epäonnistui", "IndexerAlphaRatioSettingsExcludeSceneHelpText": "Älä huomioi tulosten SCENE-julkaisuja.", - "DownloadClientRTorrentSettingsUrlPathHelpText": "Polku XMLRPC-päätteeseen, katso {url}. Käytettäessä ruTorrentia tämä on yleensä RPC2 tai [ruTorrentin sijainti]{url2}.", + "DownloadClientRTorrentSettingsUrlPathHelpText": "Polku XMLRPC-päätteeseen, ks. \"{url}\". Käytettäessä ruTorrentia tämä on yleensä RPC2 tai [ruTorrentin sijainti]{url2}.", "InstallMajorVersionUpdateMessageLink": "Saat lisätietoja osoitteesta [{domain}]({url}).", "Install": "Asenna", "NotificationsTelegramSettingsIncludeAppName": "Sisällytä {appName} otsikkoon", "InstallMajorVersionUpdate": "Asenna päivitys", "InstallMajorVersionUpdateMessage": "Tämä päivitys asentaa uuden pääversion, joka ei välttämättä ole yhteensopiva laitteistosi kanssa. Haluatko varmasti asentaa päivityksen?", - "NotificationsTelegramSettingsIncludeAppNameHelpText": "Valinnaisesti ilmoitukset voidaan erottaa muista sovelluksista lisäämällä viestien otsikoiden eteen {appName}.", + "NotificationsTelegramSettingsIncludeAppNameHelpText": "Ilmoitukset voidaan tarvittaessa erottaa muista sovelluksista lisäämällä niiden eteen \"{appName}\".", "DownloadClientRTorrentSettingsAddStoppedHelpText": "Tämä lisää torrentit ja magnet-linkit rTorentiin pysäytetyssä tilassa. Tämä saattaa rikkoa margnet-tiedostot.", "DownloadClientSettingsPriorityItemHelpText": "Kaapatuille kohteille käytettävä painotus.", "LogSizeLimit": "Lokin kokorajoitus", "LogSizeLimitHelpText": "Lokitiedoston enimmäiskoko ennen pakkausta. Oletusarvo on 1 Mt.", - "IndexerAlphaRatioSettingsExcludeScene": "Ohita SCENE-julkaisut" + "IndexerAlphaRatioSettingsExcludeScene": "Ohita SCENE-julkaisut", + "AverageGrabs": "Kaappausten keskiarvo", + "AverageQueries": "Kyselyiden keskiarvo", + "IndexerNewznabSettingsAdditionalParametersHelpText": "Muut Newznab-parametrit", + "IndexerNewznabSettingsVipExpirationHelpText": "Syötä VIP-tilan päättymispäivä (yyyy-mm-dd) tai jätä tyhjäksi. {appName} ilmoittaa viikko ennen VIP-tilan päättymistä.", + "IndexerSettingsQueryLimitHelpText": "Kyselyiden enimmäismäärä, jonka {appName} sallii tietolähteelle.", + "IndexerHDBitsSettingsPasskeyHelpText": "Pääsyavain käyttäjätiedoista", + "DefaultCategory": "Oletuskategoria", + "ClickToChangeQueryOptions": "Muuta kyselyasetuksia painamalla tästä.", + "IndexerSettingsQueryLimit": "Kyselyrajoitus", + "IndexerAvistazSettingsPidHelpText": "PID \"My Account\" tai \"My Profile\" -sivulta.", + "IndexerAvistazSettingsUsernameHelpTextWarning": "Vain vähintään jäsen-tason käyttäjä voi käyttää tämän tietolähteen rajapintaa.", + "IndexerBeyondHDSettingsLimitedOnly": "Vain rajoitetut", + "IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Etsi vain Freeleech-julkaisuja.", + "IndexerFileListSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", + "IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Avaimella on oltava \"User\" ja \"Torrents\" oikeudet.", + "IndexerHDBitsSettingsUseFilenames": "Käytä tiedostonimiä", + "IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", + "IndexerIPTorrentsSettingsCookieUserAgent": "Evästeen käyttäjäagentti", + "IndexerIPTorrentsSettingsCookieUserAgentHelpText": "Evästeeseen liitetty selaimen käyttäjäagentti.", + "IndexerPassThePopcornSettingsApiKeyHelpText": "Sivuston rajapinnan avain", + "IndexerOrpheusSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Settings\" > \"Access Settings\".", + "Open": "Avaa", + "PreferMagnetUrl": "Suosi magnet-URL:eja", + "ProwlarrDownloadClientsAlert": "Latauspalvelut on määritettävä tässä vain, jos hakuja aiotaan tehdä suoraan {appName}ista. Sovelluksien hauille käytetään niiden omien asetusten latauspalvelumäärityksiä.", + "IndexerSettingsLimitsUnitHelpText": "Tietolähteen aikarajoituksille käytettävä yksikkö.", + "IndexerGazelleGamesSettingsSearchGroupNames": "Etsi ryhmien nimillä", + "DownloadClientSettingsDefaultCategoryHelpText": "Oletusarvoinen varakategoria julkaisuille, joilla ei ole kategoriaa. {appName}-kategorian lisääminen välttää ristiriidat ei-{appName} latausten kanssa. Kategoria on valinnainen, mutta erittäin suositeltava.", + "IndexerAvistazSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", + "PreferMagnetUrlHelpText": "Tietolähde käyttää kaappaukseen ensisijaisesti magnet-linkkejä ja varmistuksena torrent-linkkejä.", + "ProwlarrDownloadClientsInAppOnlyAlert": "Latauspalvelut ovat vain {appName}in sisäisiä hakuja varten, eikä niitä synkronoida muihin sovelluksiin (ominaisuutta ole myöskään suunnitteilla).", + "DownloadClientSettingsDefaultCategorySubFolderHelpText": "Oletusarvoinen varakategoria julkaisuille, joilla ei ole kategoriaa. {appName}-kategorian lisääminen välttää ristiriidat ei-{appName} latausten kanssa. Kategoria on valinnainen, mutta erittäin suositeltava. Luo kohdekansioon [kategoria]-alikansion.", + "IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", + "IndexerAvistazSettingsUsernameHelpText": "Sivuston käyttäjätunnus", + "IndexerBeyondHDSettingsRefundOnly": "Vain \"Refund\"", + "IndexerBeyondHDSettingsRefundOnlyHelpText": "Etsi vain Refund-julkaisuja.", + "IndexerBeyondHDSettingsRewindOnly": "Vain \"Rewind\"", + "IndexerBeyondHDSettingsRewindOnlyHelpText": "Etsi vain Rewind-julkaisuja.", + "IndexerBeyondHDSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"My Security\" > \"API Key\".", + "IndexerBeyondHDSettingsSearchTypesHelpText": "Valitse halutut julkaisutyypit. Jos mitään ei ole valittu käytetään kaikkia.", + "IndexerFileListSettingsPasskeyHelpText": "Sivuston pääsyavain. Tämä on latauspalvelussasi näkyvä trakkerin URL-osoitteen aakkosnumeerinen osa.", + "IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", + "IndexerGazelleGamesSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Settings\" > \"Access Settings\".", + "IndexerFileListSettingsUsernameHelpText": "Sivuston käyttäjätunnus", + "IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Etsi julkaisuja ryhmien nimillä.", + "IndexerHDBitsSettingsFreeleechOnlyHelpText": "Näytä vain Freeleech-julkaisut.", + "IndexerNzbIndexSettingsApiKeyHelpText": "Sivuston rajapinnan avain", + "IndexerHDBitsSettingsOrigins": "Alkuperä", + "IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", + "IndexerHDBitsSettingsUseFilenamesHelpText": "Käsittele torrentien tiedostonimiä julkaisujen nimikkeinä.", + "IndexerHDBitsSettingsUsernameHelpText": "Sivuston käyttäjätunnus", + "IndexerSettingsGrabLimitHelpText": "Kaappausten enimmäismäärä, jonka {appName} sallii tietolähteelle.", + "IndexerRedactedSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Settings\" > \"Access Settings\".", + "IndexerSettingsApiUser": "Rajapinnan käyttäjä", + "IndexerSettingsBaseUrl": "Perus-URL", + "IndexerSettingsBaseUrlHelpText": "Määritä verkkotunnus, jota {appName} käyttää sivustolle lähetettäville pyynnöille.", + "IndexerPassThePopcornSettingsApiUserHelpText": "Nämä löytyvät PassThePopcorn-tilin asetuksista, kohdasta \"Edit Profile\" > \"Security\".", + "IndexerSettingsPasskey": "Pääsyavain", + "IndexerBeyondHDSettingsLimitedOnlyHelpText": "Etsi vain Freeleech-julkaisuja (rajoitettu UL).", + "IndexerBeyondHDSettingsRssKeyHelpText": "Sivuston RSS-avain. Löytyy kohdasta \"My Security\" > \"RSS-avain\".", + "IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", + "IndexerNewznabSettingsApiKeyHelpText": "Sivuston rajapinnan avain", + "IndexerNebulanceSettingsApiKeyHelpText": "Rajapinnan avain kohdasta \"Settings\" > \"Api Keys\".\nAvaimella on oltava \"List\" ja \"Download\" oikeudet.", + "IndexerSettingsGrabLimit": "Kaappausrajoitus", + "IndexerSettingsLimitsUnit": "Rajoitusten yksikkö", + "IndexerSettingsRssKey": "RSS-avain", + "IndexerMTeamTpSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Control Panel\" > \"Security\" > \"Laboratory\".", + "IndexerSettingsPreferMagnetUrlHelpText": "Tietolähde käyttää kaappaukseen ensisijaisesti magnet-linkkejä ja varmistuksena torrent-linkkejä.", + "IndexerTorrentSyndikatSettingsApiKeyHelpText": "Sivuston rajapinnan avain", + "IndexerSettingsPreferMagnetUrl": "Suosi magnet-URL:eja", + "IndexerPassThePopcornSettingsGoldenPopcornOnly": "Vain \"Golden Popcorn\"", + "IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Etsi vain ns. kultaisella pocornilla merkittyjä julkaisuja.", + "IndexerSettingsFreeleechOnly": "Vain \"Freeleech\"", + "IndexerSettingsCookieHelpText": "Jos sivusto vaatii kirjautumisevästeen, se on noudettava selaimen kautta.", + "IndexerAvistazSettingsPasswordHelpText": "Sivuston salasana" } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index fdcfafcd1..b156ce10a 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -117,7 +117,7 @@ "SystemTimeHealthCheckMessage": "L'heure du système est décalée de plus d'un jour. Les tâches planifiées peuvent ne pas s'exécuter correctement tant que l'heure ne sera pas corrigée", "SettingsShowRelativeDates": "Afficher les dates relatives", "UnsavedChanges": "Modifications non enregistrées", - "ShowSearchHelpText": "Afficher le bouton de recherche au survol", + "ShowSearchHelpText": "Affiche le bouton de recherche au survol", "ShowSearch": "Afficher la recherche", "SettingsTimeFormat": "Format de l'heure", "SettingsShowRelativeDatesHelpText": "Afficher les dates relatives (aujourd'hui, hier, etc.) ou absolues", @@ -802,5 +802,9 @@ "IndexerAvistazSettingsPasswordHelpText": "Mot de passe du site", "PreferMagnetUrlHelpText": "Si activé, cet indexeur privilégiera si possible l'usage de liens de type magnet aux liens torrent", "PreviouslyInstalled": "Installé précédemment", - "CurrentlyInstalled": "Actuellement installé" + "CurrentlyInstalled": "Actuellement installé", + "IndexerSettingsPreferMagnetUrl": "URL de préférence Magnet", + "IndexerPassThePopcornSettingsGoldenPopcornOnly": "Popcorn doré uniquement", + "IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Rechercher uniquement les versions Golden Popcorn", + "IndexerAvistazSettingsUsernameHelpTextWarning": "Seuls les membres de rang et supérieur peuvent utiliser l'API sur cet indexeur." } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 8242f8cd6..b9a2525f7 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -133,11 +133,11 @@ "RemovedFromTaskQueue": "Görev kuyruğundan kaldırıldı", "SendAnonymousUsageData": "Anonim Kullanım Verilerini Gönderin", "Age": "Yıl", - "AllIndexersHiddenDueToFilter": "Uygulanan filtre nedeniyle tüm dizin oluşturucular gizlendi.", + "AllIndexersHiddenDueToFilter": "Uygulanan filtre nedeniyle tüm indeksleyiciler gizlendi.", "AnalyticsEnabledHelpText": "Anonim kullanım ve hata bilgilerini {appName} sunucularına gönderin. Buna, tarayıcınız, hangi {appName} WebUI sayfalarını kullandığınız, hata raporlamanın yanı sıra işletim sistemi ve çalışma zamanı sürümü hakkındaki bilgiler de dahildir. Bu bilgiyi özelliklere ve hata düzeltmelerine öncelik vermek için kullanacağız.", "ApiKey": "API Anahtarı", "AppDataDirectory": "Uygulama Veri Dizini", - "NoUpdatesAreAvailable": "Güncelleme yok", + "NoUpdatesAreAvailable": "Güncelleme bulunamadı", "OAuthPopupMessage": "Pop-up'lar tarayıcınız tarafından engelleniyor", "Ok": "Tamam", "OnHealthIssueHelpText": "Sağlık Sorunu Hakkında", @@ -164,11 +164,11 @@ "Columns": "Sütunlar", "Component": "Bileşen", "ConnectionLost": "Bağlantı koptu", - "DeleteIndexerProxyMessageText": "'{name}' dizinleyici proxy'sini silmek istediğinizden emin misiniz?", + "DeleteIndexerProxyMessageText": "'{name}' indeksleyici proxy'sini silmek istediğinizden emin misiniz?", "DeleteNotification": "Bildirimi Sil", "DeleteTagMessageText": "'{label}' etiketini silmek istediğinizden emin misiniz?", "Disabled": "Devre dışı", - "Discord": "Uyuşmazlık", + "Discord": "Discord", "Docker": "Docker", "Donations": "Bağış", "DownloadClient": "İndirme İstemcisi", @@ -182,13 +182,13 @@ "HomePage": "Ana Sayfa", "IllRestartLater": "Daha sonra yeniden başlayacağım", "IncludeHealthWarningsHelpText": "Sağlık Uyarılarını Dahil Et", - "IndexerFlags": "Dizinleyici Bayrakları", - "IndexerLongTermStatusAllUnavailableHealthCheckMessage": "6 saatten uzun süren hatalar nedeniyle tüm dizinleyiciler kullanılamıyor", - "IndexerLongTermStatusUnavailableHealthCheckMessage": "6 saatten uzun süren hatalar nedeniyle kullanılamayan dizinleyiciler: {indexerNames}", - "IndexerPriority": "Dizinleyici Önceliği", - "IndexerPriorityHelpText": "Dizinleyici Önceliği 1 (En Yüksek) ile 50 (En Düşük) arasında. Varsayılan: 25.", - "IndexerStatusAllUnavailableHealthCheckMessage": "Tüm dizinleyiciler hatalar nedeniyle kullanılamıyor", - "IndexerStatusUnavailableHealthCheckMessage": "Hatalar nedeniyle kullanılamayan dizinleyiciler: {indexerNames}", + "IndexerFlags": "İndeksleyici Bayrakları", + "IndexerLongTermStatusAllUnavailableHealthCheckMessage": "6 saatten uzun süren hatalar nedeniyle tüm indeksleyiciler kullanılamıyor", + "IndexerLongTermStatusUnavailableHealthCheckMessage": "6 saatten uzun süren hatalar nedeniyle kullanılamayan indeksleyiciler: {indexerNames}", + "IndexerPriority": "İndeksleyici Önceliği", + "IndexerPriorityHelpText": "İndeksleyici Önceliği 1 (En Yüksek) ile 50 (En Düşük) arasında. Varsayılan: 25.", + "IndexerStatusAllUnavailableHealthCheckMessage": "Tüm indeksleyiciler hatalar nedeniyle kullanılamıyor", + "IndexerStatusUnavailableHealthCheckMessage": "Hatalar nedeniyle kullanılamayan indeksleyiciler: {indexerNames}", "Info": "Bilgi", "InteractiveSearch": "Etkileşimli Arama", "KeyboardShortcuts": "Klavye kısayolları", @@ -239,8 +239,8 @@ "UISettings": "UI Ayarları", "UnableToAddANewAppProfilePleaseTryAgain": "Yeni bir kaliteli profil eklenemiyor, lütfen tekrar deneyin.", "UnableToAddANewDownloadClientPleaseTryAgain": "Yeni bir indirme istemcisi eklenemiyor, lütfen tekrar deneyin.", - "UnableToAddANewIndexerPleaseTryAgain": "Yeni bir dizinleyici eklenemiyor, lütfen tekrar deneyin.", - "UnableToAddANewIndexerProxyPleaseTryAgain": "Yeni bir dizinleyici eklenemiyor, lütfen tekrar deneyin.", + "UnableToAddANewIndexerPleaseTryAgain": "Yeni bir indeksleyici eklenemiyor, lütfen tekrar deneyin.", + "UnableToAddANewIndexerProxyPleaseTryAgain": "Yeni bir indeksleyici eklenemiyor, lütfen tekrar deneyin.", "UnableToAddANewNotificationPleaseTryAgain": "Yeni bir bildirim eklenemiyor, lütfen tekrar deneyin.", "BackupsLoadError": "Yedeklemeler yüklenemiyor", "UnableToLoadHistory": "Geçmiş yüklenemiyor", @@ -248,7 +248,7 @@ "UnableToLoadUISettings": "UI ayarları yüklenemiyor", "Yesterday": "Dün", "AcceptConfirmationModal": "Onay Modunu Kabul Et", - "AddIndexer": "Dizinleyici Ekle", + "AddIndexer": "İndeksleyici Ekle", "AddDownloadClient": "İndirme İstemcisi Ekle", "AddingTag": "Etiket ekleniyor", "CouldNotConnectSignalR": "SignalR'ye bağlanılamadı, kullanıcı arayüzü güncellenmeyecek", @@ -256,9 +256,9 @@ "DownloadClientStatusSingleClientHealthCheckMessage": "Hatalar nedeniyle indirme istemcileri kullanılamıyor: {downloadClientNames}", "Enabled": "Etkin", "IgnoredAddresses": "Yoksayılan Adresler", - "Indexer": "Dizinleyici", + "Indexer": "İndeksleyici", "DownloadClientStatusAllClientHealthCheckMessage": "Tüm indirme istemcileri hatalar nedeniyle kullanılamıyor", - "EditIndexer": "Dizinleyiciyi Düzenle", + "EditIndexer": "İndeksleyiciyi Düzenle", "Enable": "Etkinleştir", "EnableInteractiveSearch": "Etkileşimli Aramayı Etkinleştir", "EnableRss": "RSS'yi etkinleştir", @@ -269,20 +269,20 @@ "EventType": "Etkinlik tipi", "Exception": "İstisna", "ExistingTag": "Mevcut etiket", - "IndexerProxyStatusAllUnavailableHealthCheckMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor", - "IndexerProxyStatusUnavailableHealthCheckMessage": "Hatalar nedeniyle dizinleyiciler kullanılamıyor: {indexerProxyNames}", - "Indexers": "Dizinleyiciler", + "IndexerProxyStatusAllUnavailableHealthCheckMessage": "Hatalar nedeniyle tüm indeksleyiciler kullanılamıyor", + "IndexerProxyStatusUnavailableHealthCheckMessage": "Hatalar nedeniyle indeksleyiciler kullanılamıyor: {indexerProxyNames}", + "Indexers": "İndeksleyiciler", "Name": "İsim", "New": "Yeni", "NoBackupsAreAvailable": "Kullanılabilir yedek yok", - "NoLogFiles": "Log kayıt dosyası henüz yok", + "NoLogFiles": "Log kayıt dosyası henüz oluşturulmadı", "Restart": "Tekrar başlat", "RestartRequiredHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir", "Restore": "Onarmak", "Seeders": "Ekme makineleri", "TagCannotBeDeletedWhileInUse": "Kullanımdayken silinemez", "TagIsNotUsedAndCanBeDeleted": "Etiket kullanılmaz ve silinebilir", - "TagsHelpText": "En az bir eşleşen etiketi olan dizinleyiciler için geçerlidir", + "TagsHelpText": "En az bir eşleşen etiketi olan indeksleyiciler için geçerlidir", "UILanguage": "UI Dili", "UpdateScriptPathHelpText": "Çıkarılan bir güncelleme paketini alan ve güncelleme işleminin geri kalanını işleyen özel bir komut dosyasına giden yol", "Uptime": "Çalışma süresi", @@ -315,46 +315,46 @@ "Filters": "Filtreler", "OnGrab": "Yayın Alındığında", "OnHealthIssue": "Sağlık Sorunu Hakkında", - "TestAllIndexers": "Dizinleyicileri Test Et", + "TestAllIndexers": "İndeksleyicileri Test Et", "GrabReleases": "Sürümü Al", "No": "Hayır", "NetCore": ".NET", - "UnableToLoadIndexers": "Dizinleyiciler yüklenemiyor", + "UnableToLoadIndexers": "İndeksleyiciler yüklenemiyor", "Yes": "Evet", "Link": "Bağlantılar", - "MappedDrivesRunningAsService": "Eşlenen ağ sürücüleri, bir Windows Hizmeti olarak çalışırken kullanılamaz. Daha fazla bilgi için lütfen SSS bölümüne bakın", - "Ended": "Biten", - "LastDuration": "Yürütme Süresi", + "MappedDrivesRunningAsService": "Windows Hizmeti olarak çalıştırıldığında eşlenen ağ sürücüleri kullanılamaz. Daha fazla bilgi için lütfen SSS'ye bakın", + "Ended": "Bitti", + "LastDuration": "Son Süre", "LastExecution": "Son Yürütme", "NextExecution": "Sonraki Yürütme", - "Queued": "Kuyruğa alındı", - "ApplicationLongTermStatusCheckAllClientMessage": "6 saatten uzun süren arızalar nedeniyle tüm dizinleyiciler kullanılamıyor", - "ApplicationLongTermStatusCheckSingleClientMessage": "6 saatten uzun süredir yaşanan arızalar nedeniyle dizinleyiciler kullanılamıyor: {0}", + "Queued": "Kuyrukta", + "ApplicationLongTermStatusCheckAllClientMessage": "6 saatten uzun süren arızalar nedeniyle tüm indeksleyiciler kullanılamıyor", + "ApplicationLongTermStatusCheckSingleClientMessage": "6 saatten uzun süredir yaşanan arızalar nedeniyle indeksleyiciler kullanılamıyor: {0}", "Remove": "Kaldır", - "Replace": "Değiştir", + "Replace": "Yer Değiştir", "OnLatestVersion": "{appName}'ın en son sürümü kurulu", - "ApplyTagsHelpTextAdd": "Ekle: Etiketleri mevcut etiket listesine ekleyin", - "ApplyTagsHelpTextHowToApplyApplications": "Seçilen filmlere etiketler nasıl uygulanır", - "ApplyTagsHelpTextRemove": "Kaldır: Girilen etiketleri kaldırın", + "ApplyTagsHelpTextAdd": "Ekle: Mevcut etiket listesine etiketleri ekleyin", + "ApplyTagsHelpTextHowToApplyApplications": "Seçili uygulamalara etiketler nasıl uygulanır?", + "ApplyTagsHelpTextRemove": "Kaldır: Girilen etiketleri kaldır", "ApplyTagsHelpTextHowToApplyIndexers": "Seçilen indeksleyicilere etiketler nasıl uygulanır", - "ApplyTagsHelpTextReplace": "Değiştir: Etiketleri girilen etiketlerle değiştirin (tüm etiketleri kaldırmak için etiket girmeyin)", + "ApplyTagsHelpTextReplace": "Değiştir: Etiketleri girilen değerlerde değiştirin (tüm etiketleri kaldırmak için etiket girmeyin)", "DeleteSelectedDownloadClients": "İndirme İstemcilerini Sil", "DownloadClientPriorityHelpText": "Birden fazla İndirme İstemcisine öncelik verin. Aynı önceliğe sahip istemciler için Round-Robin algoritması kullanılır.", - "Genre": "Türler", + "Genre": "Tür", "Track": "İzleme", "Year": "Yıl", "More": "Daha", "DeleteAppProfileMessageText": "'{name}' uygulama profilini silmek istediğinizden emin misiniz?", - "RecentChanges": "Son değişiklikler", + "RecentChanges": "Son Değişiklikler", "minutes": "Dakika", - "WhatsNew": "Ne var ne yok?", - "ConnectionLostReconnect": "{appName} otomatik bağlanmayı deneyecek veya aşağıda yeniden yükle seçeneğini işaretleyebilirsiniz.", + "WhatsNew": "Neler Yeni?", + "ConnectionLostReconnect": "{appName} otomatik olarak bağlanmayı deneyecek veya aşağıdaki yeniden yükle butonuna tıklayabilirsiniz.", "NotificationStatusAllClientHealthCheckMessage": "Arızalar nedeniyle tüm bildirimler kullanılamıyor", "NotificationStatusSingleClientHealthCheckMessage": "Arızalar nedeniyle bildirimler kullanılamıyor: {notificationNames}", "Applications": "Uygulamalar", "AuthBasic": "Temel (Tarayıcı Açılır Penceresi)", "AuthForm": "Form (Giriş Sayfası)", - "DisabledForLocalAddresses": "Yerel Adreslerde Devre Dışı Bırak", + "DisabledForLocalAddresses": "Yerel Adresler için Devre Dışı", "None": "Yok", "ResetAPIKeyMessageText": "API Anahtarınızı sıfırlamak istediğinizden emin misiniz?", "Categories": "Kategoriler", @@ -362,14 +362,14 @@ "Episode": "Bölüm", "AddConnection": "Bağlantı Ekle", "AddApplicationImplementation": "Uygulama Ekle - {implementationName}", - "AddIndexerImplementation": "Yeni Dizinleyici Ekle - {implementationName}", - "AddIndexerProxyImplementation": "Koşul Ekle - {implementationName}", + "AddIndexerImplementation": "İndeksleyici Ekle - {implementationName}", + "AddIndexerProxyImplementation": "İndeksleyici Proxy'sini Ekle - {implementationName}", "EditConnectionImplementation": "Bildirimi Düzenle - {implementationName}", "AddConnectionImplementation": "Bağlantı Ekle - {implementationName}", - "RestartProwlarr": "{appName}'ı yeniden başlatın", - "EditApplicationImplementation": "Koşul Ekle - {implementationName}", - "EditIndexerImplementation": "Koşul Ekle - {implementationName}", - "EditIndexerProxyImplementation": "Koşul Ekle - {implementationName}", + "RestartProwlarr": "{appName}'ı Yeniden Başlat", + "EditApplicationImplementation": "Uygulamayı Düzenle - {implementationName}", + "EditIndexerImplementation": "İndeksleyiciyi Düzenle - {implementationName}", + "EditIndexerProxyImplementation": "İndeksleyici Proxy'sini Düzenle - {implementationName}", "AddCustomFilter": "Özel Filtre Ekleyin", "AddDownloadClientImplementation": "İndirme İstemcisi Ekle - {implementationName}", "EditDownloadClientImplementation": "İndirme İstemcisini Düzenle - {implementationName}", @@ -377,12 +377,12 @@ "AuthenticationRequired": "Kimlik Doğrulama", "ApplyChanges": "Değişiklikleri Uygula", "CountDownloadClientsSelected": "{count} indirme istemcisi seçildi", - "CountIndexersSelected": "{count} dizinleyici seçildi", + "CountIndexersSelected": "{count} indeksleyici seçildi", "AuthenticationRequiredWarning": "Kimlik doğrulaması olmadan uzaktan erişimi engellemek için, {appName}'da artık kimlik doğrulamanın etkinleştirilmesini gerektiriyor. İsteğe bağlı olarak yerel adresler için kimlik doğrulamayı devre dışı bırakabilirsiniz.", "Clone": "Klon", "Category": "Kategori", "AppUpdated": "{appName} Güncellendi", - "AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gerekli", + "AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; en son değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gereklidir", "ApplicationUrlHelpText": "Bu uygulamanın http(s)://, bağlantı noktası ve URL tabanını içeren harici URL'si", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Yeni şifreyi onayla", "AuthenticationRequiredPasswordHelpTextWarning": "Yeni şifre girin", @@ -398,11 +398,11 @@ "AddDownloadClientToProwlarr": "İndirme istemcisi eklemek, görsel arayüz üzerinde manuel arama yaparak indirilecek içeriği {appName} uygulamasına direkt olarak eklemenize olanak sağlar.", "AddApplication": "Uygulama Ekle", "AddCategory": "Kategori Ekle", - "AddNewIndexer": "Yeni Dizin Oluşturucu Ekle", + "AddNewIndexer": "Yeni İndekleyici Ekle", "ActiveApps": "Aktif Uygulamalar", - "ActiveIndexers": "Aktif Dizin Oluşturucular", + "ActiveIndexers": "Aktif İndeksleyiciler", "AdvancedSettingsHiddenClickToShow": "Gelimiş ayarlar gizli, göstermek için tıklayın", - "AddIndexerProxy": "Dizin Oluşturucu Vekili Ekle", + "AddIndexerProxy": "İndeksleyici Proxy'sini Ekle", "AddedToDownloadClient": "İçerik istemciye eklendi", "Album": "Albüm", "AdvancedSettingsShownClickToHide": "Gelişmiş ayarlar gösteriliyor, gizlemek için tıklayın", @@ -420,11 +420,11 @@ "Database": "Veri tabanı", "DefaultNameCopiedProfile": "{name} - Kopyala", "DeleteSelectedDownloadClientsMessageText": "Seçilen {count} indirme istemcisini silmek istediğinizden emin misiniz?", - "DeleteSelectedIndexersMessageText": "Seçilen {count} dizinleyiciyi silmek istediğinizden emin misiniz?", + "DeleteSelectedIndexersMessageText": "Seçilen {count} indeksleyiciyi silmek istediğinizden emin misiniz?", "DownloadClientFreeboxSettingsPortHelpText": "Freebox arayüzüne erişim için kullanılan bağlantı noktası, varsayılan olarak '{port}' şeklindedir", "ApiKeyValidationHealthCheckMessage": "Lütfen API anahtarınızı en az {length} karakter sayısı kadar güncelleyiniz. Bunu ayarlar veya yapılandırma dosyası üzerinden yapabilirsiniz", "AppProfileInUse": "Kullanımda Olan Uygulama Profili", - "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Eğer bir torrent hash değeri bazlı engellendi ise bazı dizin oluşturucular RSS/Arama sırasında bu torrenti gerektiği gibi reddedemeyebilir, bunu aktif etmek torrentin çekildikten sonra reddedilebilmesine izin verecektir, ama istemciye gönderilmeden önce.", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Bir torrent, hash ile engellenirse bazı indeksleyiciler için RSS/Arama sırasında düzgün bir şekilde reddedilemeyebilir; bu özelliğin etkinleştirilmesi, torrent yakalandıktan sonra ancak istemciye gönderilmeden önce reddedilmesine olanak tanır..", "AppProfileSelectHelpText": "Uygulama profilleri, Uygulama eşitlemede RSS, Otomatik Arama ve İnteraktif Arama ayarlarını kontrol etmek için kullanılır", "ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Alma Sırasında Engellenen Torrent Karmalarını Eşitle ve Reddet", "AppSettingsSummary": "{appName} uygulamasının PVR programlarınızla nasıl etkileşime gireceğini yapılandırmak için uygulamalar ve ayarlar", @@ -464,8 +464,8 @@ "DownloadClientRTorrentSettingsAddStopped": "Durdurulana Ekle", "Label": "Etiket", "EditSelectedDownloadClients": "Seçilen İndirme İstemcilerini Düzenle", - "EditSelectedIndexers": "Seçili Dizinleyicileri Düzenle", - "NoIndexersFound": "Dizinleyici bulunamadı", + "EditSelectedIndexers": "Seçili İndeksleyicileri Düzenle", + "NoIndexersFound": "İndeksleyici bulunamadı", "NoHistoryFound": "Geçmiş bulunamadı", "ManageDownloadClients": "İndirme İstemcilerini Yönet", "InstanceNameHelpText": "Sekmedeki örnek adı ve Syslog uygulaması adı için", @@ -502,62 +502,62 @@ "IndexerSettingsSeedRatioHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran. Boş bırakılırsa indirme istemcisinin varsayılan değerini kullanır. Oran en az 1,0 olmalı ve indeksleyici kurallarına uygun olmalıdır", "External": "Harici", "Notifications": "Bildirimler", - "CountApplicationsSelected": "{count} koleksiyon seçildi", + "CountApplicationsSelected": "{count} uygulama seçildi", "SeedRatio": "Seed Oranı", "ThemeHelpText": "Uygulama UI Temasını Değiştirin, 'Otomatik' Tema, işletim sisteminizde kullandığınız Açık veya Koyu moda göre ayarlanır . {inspiredBy} tarafından esinlenilmiştir.", "Notification": "Bildirimler", "SelectDownloadClientModalTitle": "{modalTitle} - İndirme İstemcisini Seçin", - "EditSyncProfile": "Eşitleme Profili Ekle", + "EditSyncProfile": "Senkronizasyon Profilini Düzenle", "UserAgentProvidedByTheAppThatCalledTheAPI": "API'yi çağıran uygulama tarafından sağlanan Kullanıcı Aracısı", "Author": "Yazar", - "IndexerHDBitsSettingsMediums": "Ortamlar", + "IndexerHDBitsSettingsMediums": "Medyalar", "OnHealthRestoredHelpText": "Sağlığın İyileştirilmesi Hakkında", "SeedTime": "Seed Süresi", "IndexerHDBitsSettingsCodecs": "Kodekler", "Publisher": "Yayımcı", "OnApplicationUpdateHelpText": "Uygulama Güncellemesinde", - "DeleteSelectedApplicationsMessageText": "Seçilen {count} içe aktarma listesini silmek istediğinizden emin misiniz?", + "DeleteSelectedApplicationsMessageText": "Seçili {count} uygulamayı silmek istediğinizden emin misiniz?", "ProxyValidationBadRequest": "Proxy ile test edilemedi. DurumKodu: {statusCode}", "UpdateAvailableHealthCheckMessage": "Yeni güncelleme mevcut: {version}", "days": "gün", "Default": "Varsayılan", - "GrabRelease": "Yayın Alma", + "GrabRelease": "Sürümü Al", "ManualGrab": "Manuel Alımlarda", - "OverrideAndAddToDownloadClient": "Geçersiz kıl ve indirme kuyruğuna ekle", + "OverrideAndAddToDownloadClient": "Geçersiz kıl ve indirme istemcisine ekle", "OverrideGrabModalTitle": "Geçersiz Kıl ve Al - {title}", "PrioritySettings": "Öncelik: {priority}", - "IndexerDownloadClientHealthCheckMessage": "Geçersiz indirme istemcilerine sahip dizinleyiciler: {indexerNames}.", + "IndexerDownloadClientHealthCheckMessage": "Geçersiz indirme istemcilerine sahip indeksleyiciler: {indexerNames}.", "BuiltIn": "Dahili", "Script": "Komut Dosyası", "InfoUrl": "Bilgi URL'si", "PublishedDate": "Yayınlanma Tarihi", "Any": "Herhangi", "AllSearchResultsHiddenByFilter": "Uygulanan filtre nedeniyle tüm arama sonuçları gizlendi.", - "HealthMessagesInfoBox": "Satırın sonundaki wiki bağlantısını (kitap simgesi) tıklayarak veya [log kayıtlarınızı]({link}) kontrol ederek bu durum kontrolü mesajlarının nedeni hakkında daha fazla bilgi bulabilirsiniz. Bu mesajları yorumlamakta zorluk yaşıyorsanız aşağıdaki bağlantılardan destek ekibimize ulaşabilirsiniz.", + "HealthMessagesInfoBox": "Bu sağlık kontrolü mesajlarının nedeni hakkında daha fazla bilgiyi, satırın sonundaki wiki bağlantısına (kitap simgesi) tıklayarak veya [günlüklerinizi]({link}) kontrol ederek bulabilirsiniz. Bu mesajları yorumlamada zorluk çekiyorsanız, aşağıdaki bağlantılardan destek ekibimize ulaşabilirsiniz.", "PackageVersionInfo": "{packageAuthor} tarafından {packageVersion}", "LogSizeLimit": "Log Boyutu Sınırı", "LogSizeLimitHelpText": "Arşivlemeden önce MB cinsinden maksimum log dosya boyutu. Varsayılan 1 MB'tır.", "AptUpdater": "Güncellemeyi yüklemek için apt'ı kullanın", "Download": "İndir", - "ErrorRestoringBackup": "Yedeği geri yüklerken hata", - "ExternalUpdater": "{appName}, harici bir güncelleme mekanizması kullanacak şekilde yapılandırıldı", + "ErrorRestoringBackup": "Yedekleme geri yüklenirken hata oluştu", + "ExternalUpdater": "{appName} harici bir güncelleme mekanizması kullanacak şekilde yapılandırılmıştır", "LogFilesLocation": "Log kayıtlarının bulunduğu konum: {location}", "NoEventsFound": "Etkinlik bulunamadı", - "RestartReloadNote": "Not: {appName}, geri yükleme işlemi sırasında kullanıcı arayüzünü otomatik olarak yeniden başlatacak ve yeniden yükleyecektir.", + "RestartReloadNote": "Not: {appName} geri yükleme işlemi sırasında otomatik olarak yeniden başlatılacak ve kullanıcı arayüzünü yeniden yükleyecektir.", "TheLogLevelDefault": "Log seviyesi varsayılan olarak 'Bilgi' şeklindedir ve [Genel Ayarlar](/ayarlar/genel) bölümünden değiştirilebilir", "UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor,", "DockerUpdater": "Güncellemeyi almak için docker konteynerini güncelleyin", - "FailedToFetchUpdates": "Güncellemeler getirilemedi", + "FailedToFetchUpdates": "Güncellemeler alınamadı", "Logout": "Çıkış", "UpdaterLogFiles": "Log Kayıt Güncelleyici", "WouldYouLikeToRestoreBackup": "'{name}' yedeğini geri yüklemek ister misiniz?", - "InstallLatest": "En Sonu Yükle", + "InstallLatest": "En Son Sürümü Yükle", "Install": "Kur", "InstallMajorVersionUpdate": "Güncellemeyi Kur", "InstallMajorVersionUpdateMessage": "Bu güncelleştirme yeni bir ana sürüm yükleyecek ve sisteminizle uyumlu olmayabilir. Bu güncelleştirmeyi yüklemek istediğinizden emin misiniz?", "InstallMajorVersionUpdateMessageLink": "Daha fazla bilgi için lütfen [{domain}]({url}) adresini kontrol edin.", "Season": "Sezon", - "Artist": "sanatçı", + "Artist": "Sanatçı", "Mixed": "Karışık", "Stats": "Durum", "CurrentlyInstalled": "Şuan Kurulu", @@ -575,12 +575,12 @@ "AreYouSureYouWantToDeleteIndexer": "'{name}' uygulamasını {appName} uygulamasından silmek istediğinizden emin misiniz?", "Auth": "Yetkilendirme", "AverageQueries": "Talep Ortalaması", - "AverageResponseTimesMs": "Ortalama Dizin Oluşturucu Yanıt Süreleri (ms)", + "AverageResponseTimesMs": "Ortalama İndeksleyici Yanıt Süreleri (ms)", "BookSearch": "Kitap Ara", - "DeleteIndexerProxy": "Dizinleyici Proxy'sini Sil", + "DeleteIndexerProxy": "İndeksleyici Proxy'sini Sil", "DownloadClientSettingsPriorityItemHelpText": "Öğeleri alırken kullanılacak öncelik", "EditCategory": "Kategoriyi Düzenle", - "EnableIndexer": "Dizinleyiciyi Etkinleştir", + "EnableIndexer": "İndeksleyiciyi Etkinleştir", "IndexerAlphaRatioSettingsExcludeSceneHelpText": "SAHNE sürümlerini sonuçlardan hariç tut", "IndexerBeyondHDSettingsRefundOnly": "Sadece İade", "DefaultCategory": "Varsayılan Kategori", @@ -591,50 +591,50 @@ "AverageGrabs": "Ortalama Alım Sayısı", "DevelopmentSettings": "Geliştirme Ayarları", "IndexerBeyondHDSettingsRssKeyHelpText": "Siteden RSS Anahtarı (Güvenlik => RSS Anahtarı)", - "ApplicationTagsHelpTextWarning": "Etiketler istenmeyen etkilere neden olabileceğinden dikkatli kullanılmalıdır. Etiketi olan bir uygulama yalnızca aynı etikete sahip dizin oluşturucuları eşitler.", + "ApplicationTagsHelpTextWarning": "Etiketler istenmeyen etkilere neden olabileceğinden dikkatli kullanılmalıdır. Etiketi olan bir uygulama yalnızca aynı etikete sahip indeksleyicilerı eşitler.", "DeleteApplication": "Uygulamayı Sil", - "IndexerDownloadClientHelpText": "Bu dizinleyiciden {appName} içinde yapılan alımlar için hangi indirme istemcisinin kullanılacağını belirtin", + "IndexerDownloadClientHelpText": "Bu indeksleyiciden {appName} içinde yapılan alımlar için hangi indirme istemcisinin kullanılacağını belirtin", "DownloadClientSettingsDefaultCategorySubFolderHelpText": "Bir sürüm için eşlenen kategori yoksa varsayılan olarak kullanılacak yedek kategori. {appName}'a özel bir kategori eklemek, {appName} ile ilgisi olmayan indirmelerle çakışmaları önlemeye yardımcı olur. Kategori kullanmak isteğe bağlıdır ancak önemle tavsiye edilir. Çıkış dizininde bir alt dizin [kategori] oluşturur.", "IncludeManualGrabsHelpText": "{appName} uygulamasında yapılan manuel alımları dahil et", "IndexerAlphaRatioSettingsExcludeScene": "SAHNE'yi hariç tut", "AudioSearch": "Müzik Ara", - "IndexerDisabled": "Dizinleyici Devre Dışı", + "IndexerDisabled": "İndeksleyici Devre Dışı", "ClearHistoryMessageText": "{appName} geçmişinin tamamını temizlemek istediğinizden emin misiniz?", "ClearHistory": "Geçmişi Temizle", "ElapsedTime": "Geçen Süre", "EnabledRedirected": "Etkinleştirildi, Yönlendirildi", - "IndexerAuth": "Dizinleyici Kimlik Doğrulaması", - "EnableRssHelpText": "Dizinleyici için RSS beslemesini etkinleştirin", + "IndexerAuth": "İndeksleyici Kimlik Doğrulaması", + "EnableRssHelpText": "İndeksleyici için RSS beslemesini etkinleştirin", "Description": "Tanım", "AppsMinimumSeeders": "Uygulama İçin Azami Seeder", "AppsMinimumSeedersHelpText": "Uygulamaların gerektirdiği veri kaynağından alınacak öğelerin minimum seeder sayısı. Boş bırakılırsa varsayılan senkronizasyon profili kullanılır", "BasicSearch": "Temel Arama", "DeleteSelectedApplications": "Seçili Uygulamaları Sil", - "DeleteSelectedIndexers": "Seçili Dizinleyicileri Sil", - "IndexerCategories": "Dizinleyici Kategorileri", + "DeleteSelectedIndexers": "Seçili İndeksleyicileri Sil", + "IndexerCategories": "İndeksleyici Kategorileri", "Encoding": "Kodlama", "FullSync": "Tam Senkronizasyon", "GoToApplication": "Uygulamaya git", "BookSearchTypes": "Kitap Arama Türleri", "Id": "KİMLİK", - "DeleteSelectedIndexer": "Seçili Dizinleyiciyi Sil", + "DeleteSelectedIndexer": "Seçili İndeksleyiciyi Sil", "DeleteAppProfile": "Uygulama Profilini Sil", "DeleteClientCategory": "İndirme İstemcisi Kategorisini Sil", "HistoryDetails": "Geçmiş Ayrıntıları", - "IndexerFailureRate": "Dizinleyici Arıza Oranı", + "IndexerFailureRate": "İndeksleyici Arıza Oranı", "IndexerSettingsCookieHelpText": "Site Çerezi", "DisabledUntil": "Şu tarihe kadar devre dışı bırakıldı", "DownloadClientsSettingsSummary": "{appName} kullanıcı arayüzü aramasına entegrasyon için indirme istemcisi yapılandırması", "Apps": "Uygulamalar", - "ApplicationTagsHelpText": "Etiketi olmayan veya bir veya daha fazla eşleşen etiketi olan dizin oluşturucuları bu uygulamayla senkronize edin. Burada hiçbir etiket listelenmezse, etiketleri nedeniyle hiçbir dizin oluşturucunun senkronizasyonu engellenmeyecektir.", + "ApplicationTagsHelpText": "Etiketi olmayan veya bir veya daha fazla eşleşen etiketi olan indeksleyicilerı bu uygulamayla senkronize edin. Burada hiçbir etiket listelenmezse, etiketleri nedeniyle hiçbir indeksleyicinun senkronizasyonu engellenmeyecektir.", "Book": "Kitap", "DownloadClientCategory": "İstemci Kategorisini İndirin", - "FilterPlaceHolder": "Dizinleyici Ara", + "FilterPlaceHolder": "İndeksleyici Ara", "IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Yalnızca freeleech sürümlerini arayın", "IndexerAlreadySetup": "Dizin oluşturucunun en az bir örneği zaten yapılandırılmış", "IndexerBeyondHDSettingsLimitedOnly": "Sadece Sınırlı", "ClickToChangeQueryOptions": "Talep seçeneklerini değiştirmek için tıklayın", - "CountIndexersAvailable": "{count} dizinleyici mevcut", + "CountIndexersAvailable": "{count} indeksleyici mevcut", "DownloadClientSettingsDefaultCategoryHelpText": "Bir sürüm için eşlenen kategori yoksa varsayılan olarak kullanılacak yedek kategori. {appName}'a özel bir kategori eklemek, {appName} ile ilgisi olmayan indirmelerle çakışmaları önlemeye yardımcı olur. Kategori kullanmak isteğe bağlıdır ancak önemle tavsiye edilir.", "IndexerBeyondHDSettingsRewindOnly": "Sadece Geri Sar", "FoundCountReleases": "{itemCount} sürüm bulundu", @@ -651,26 +651,26 @@ "IndexerBeyondHDSettingsRewindOnlyHelpText": "Sadece tekrarları ara", "IndexerBeyondHDSettingsSearchTypes": "Arama Türleri", "IndexerBeyondHDSettingsSearchTypesHelpText": "İlginizi çeken sürüm türlerini seçin. Hiçbiri seçilmezse, tüm seçenekler kullanılır.", - "IndexerDetails": "Dizinleyici Ayrıntıları", + "IndexerDetails": "İndeksleyici Ayrıntıları", "IndexerFileListSettingsFreeleechOnlyHelpText": "Yalnızca freeleech sürümlerini arayın", "IndexerPassThePopcornSettingsApiUserHelpText": "Bu ayarlar PassThePopcorn güvenlik ayarlarınızda (Profil Düzenle > Güvenlik) bulunur.", - "IndexerProxies": "Dizinleyici Proxy'leri", + "IndexerProxies": "İndeksleyici Proxy'leri", "NewznabUrl": "Newznab URL'si", "Open": "Açık", "SearchCapabilities": "Arama Yetenekleri", "TestAllApps": "Tüm Uygulamaları Test Et", - "IndexerVipExpiringHealthCheckMessage": "Dizinleyici VIP avantajlarının süresi yakında doluyor: {indexerNames}", - "IndexerVipExpiredHealthCheckMessage": "Dizinleyici VIP avantajları sona erdi: {indexerNames}", + "IndexerVipExpiringHealthCheckMessage": "İndeksleyici VIP avantajlarının süresi yakında doluyor: {indexerNames}", + "IndexerVipExpiredHealthCheckMessage": "İndeksleyici VIP avantajları sona erdi: {indexerNames}", "IndexerGazelleGamesSettingsSearchGroupNames": "Grup Adlarını Ara", "IndexerSettingsGrabLimit": "Alım Sınırı", "PreferMagnetUrl": "Magnet URL'sini tercih edin", - "PreferMagnetUrlHelpText": "Etkinleştirildiğinde, bu dizinleyici torrent bağlantılarına geri dönüş için magnet URL'lerinin kullanımını tercih edecektir", + "PreferMagnetUrlHelpText": "Etkinleştirildiğinde, bu indeksleyici torrent bağlantılarına geri dönüş için magnet URL'lerinin kullanımını tercih edecektir", "Redirected": "Yönlendirildi", - "SearchCountIndexers": "{count} dizinleyiciyi ara", + "SearchCountIndexers": "{count} indeksleyiciyi ara", "SearchType": "Arama Türü", - "SyncAppIndexers": "Dizinleyicileri Senkronize Et", + "SyncAppIndexers": "İndeksleyicileri Senkronize Et", "TVSearchTypes": "TV Arama Türleri", - "TotalIndexerQueries": "Toplam Dizinleyici Sorguları", + "TotalIndexerQueries": "Toplam İndeksleyici Sorguları", "TotalUserAgentQueries": "Kullanıcı Aracısı Başına Toplam Sorgu Sayısı", "LastFailure": "Son Hata", "RssQueries": "RSS Sorguları", @@ -680,9 +680,9 @@ "IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Yalnızca freeleech sürümlerini arayın", "IndexerHDBitsSettingsUseFilenamesHelpText": "Torrent dosya adlarını sürüm başlıkları olarak kullanmak istiyorsanız bu seçeneği işaretleyin", "IndexerHDBitsSettingsUsernameHelpText": "Site Kullanıcı Adı", - "IndexerHistoryLoadError": "Dizinleyici geçmişi yüklenirken hata oluştu", + "IndexerHistoryLoadError": "İndeksleyici geçmişi yüklenirken hata oluştu", "IndexerIPTorrentsSettingsCookieUserAgent": "Çerezler için Kullanıcı Aracısı", - "IndexerId": "Dizinleyici Kimliği", + "IndexerId": "İndeksleyici Kimliği", "IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Yalnızca freeleech sürümlerini arayın", "IndexerNebulanceSettingsApiKeyHelpText": "API Anahtarı Kullanıcı Ayarları > Api Anahtarları'ndan. Anahtarın Listeleme ve İndirme izinlerine sahip olması gerekir", "IndexerNewznabSettingsVipExpirationHelpText": "VIP Son Kullanma Tarihi için (yyyy-aa-gg) tarihini girin veya boş bırakın, {appName} VIP'nin sona ermesinden 1 hafta sonra bildirimde bulunacaktır", @@ -690,9 +690,9 @@ "IndexerSettingsBaseUrl": "Temel URL", "IndexerSettingsBaseUrlHelpText": "{appName}'ın siteye yönelik istekler için hangi temel URL'yi kullanacağını seçin", "IndexerSettingsLimitsUnit": "Limit Birimi", - "IndexerSettingsLimitsUnitHelpText": "Dizinleyici başına limitleri saymak için zaman birimi", + "IndexerSettingsLimitsUnitHelpText": "İndeksleyici başına limitleri saymak için zaman birimi", "IndexerSettingsRssKey": "RSS Anahtarı", - "MinimumSeedersHelpText": "Dizinleyicinin alım yapması için uygulamanın gerektirdiği minimum seeder sayısı", + "MinimumSeedersHelpText": "İndeksleyicinin alım yapması için uygulamanın gerektirdiği minimum seeder sayısı", "MusicSearchTypes": "Müzik Arama Türleri", "NoApplicationsFound": "Hiçbir uygulama bulunamadı", "OnGrabHelpText": "Yayın Alındığında", @@ -701,15 +701,15 @@ "UnableToLoadAppProfiles": "Uygulama profilleri yüklenemiyor", "UnableToLoadDevelopmentSettings": "Geliştirme ayarları yüklenemiyor", "IndexerHDBitsSettingsOrigins": "Kaynaklar", - "IndexerNoDefinitionCheckHealthCheckMessage": "{indexerNames} dizinleyicileri tanımsız olduğundan çalışmayacaktır. Lütfen bunları kaldırın ve/veya {appName} uygulamasına yeniden ekleyin.", + "IndexerNoDefinitionCheckHealthCheckMessage": "{indexerNames} indeksleyicileri tanımsız olduğundan çalışmayacaktır. Lütfen bunları kaldırın ve/veya {appName} uygulamasına yeniden ekleyin.", "MovieSearchTypes": "Film Arama Türleri", - "NoIndexerCategories": "Bu dizinleyici için hiçbir kategori bulunamadı", + "NoIndexerCategories": "Bu indeksleyici için hiçbir kategori bulunamadı", "PackSeedTimeHelpText": "Bir paketin (sezon veya diskografi) torrentinin durdurulmadan önce aktif olması gereken süre, boş bırakılırsa uygulamanın varsayılan değeri kullanılır", "IndexerSettingsGrabLimitHelpText": "{appName}'ın siteye izin vereceği ilgili birim tarafından belirtilen maksimum kapma sayısı", - "IndexerSettingsPreferMagnetUrlHelpText": "Etkinleştirildiğinde, bu dizinleyici torrent bağlantılarına geri dönüş için magnet URL'lerinin kullanımını tercih edecektir", + "IndexerSettingsPreferMagnetUrlHelpText": "Etkinleştirildiğinde, bu indeksleyici torrent bağlantılarına geri dönüş için magnet URL'lerinin kullanımını tercih edecektir", "Private": "Özel", "ProwlarrSupportsAnyIndexer": "{appName}, 'Generic Newznab' (usenet için) veya 'Generic Torznab' (torrentler için) kullanan Newznab/Torznab standardını kullanan herhangi bir indeksleyiciye ek olarak birçok indeksleyiciyi destekler. Aşağıdan indeksleyicinizi arayın ve seçin.", - "IndexerInfo": "Dizinleyici Bilgileri", + "IndexerInfo": "İndeksleyici Bilgileri", "IndexerMTeamTpSettingsApiKeyHelpText": "Siteden API Anahtarı (Kullanıcı Kontrol Paneli => Güvenlik => Laboratuvar'da Bulunur)", "IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Yalnızca freeleech sürümlerini arayın", "IndexerRedactedSettingsApiKeyHelpText": "Siteden API Anahtarı (Ayarlar => Erişim Ayarları'nda Bulunur)", @@ -717,40 +717,40 @@ "IndexerSettingsVipExpiration": "VIP Son Kullanma Tarihi", "Parameters": "Parametreler", "TotalQueries": "Toplam Sorgular", - "SettingsIndexerLogging": "Gelişmiş Dizin Oluşturucu Günlüğü", + "SettingsIndexerLogging": "Gelişmiş İndeksleyici Günlüğü", "SettingsLogRotate": "Günlük Döndürme", - "TotalIndexerSuccessfulGrabs": "Dizinleyicinin Toplam Başarılı Alma Sayısı", + "TotalIndexerSuccessfulGrabs": "İndeksleyicinin Toplam Başarılı Alma Sayısı", "SyncProfiles": "Profilleri Senkronize Et", - "IndexerProxy": "Dizinleyici Proxy", + "IndexerProxy": "İndeksleyici Proxy", "Redirect": "Yönlendir", "SettingsSqlLoggingHelpText": "{appName} uygulamasından gelen tüm SQL sorgularını günlüğe kaydet", "Proxies": "Proxy'ler", "Public": "Herkese Açık", "RepeatSearch": "Tekrar Ara", "ManageApplications": "Uygulamaları Yönet", - "SearchAllIndexers": "Tüm dizinleyicilerde ara", + "SearchAllIndexers": "Tüm indeksleyicilerde ara", "SeedRatioHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran, boş bırakıldığında uygulamanın varsayılanı kullanılır", "SeedTimeHelpText": "Bir torrentin durdurulmadan önce aktif olması gereken süre, boş bırakıldığında uygulamanın varsayılanı kullanılır", - "IndexerRss": "Dizinleyici RSS", + "IndexerRss": "İndeksleyici RSS", "SearchTypes": "Arama Türleri", "SemiPrivate": "Yarı Özel", "SettingsLogSql": "Sql Günlüğü", "SelectedCountOfCountReleases": "{itemCount} sürümden {selectedCount} tanesi seçildi", - "IndexerSettingsSummary": "Proxy'ler de dahil olmak üzere çeşitli genel dizinleyici ayarlarını yapılandırın.", + "IndexerSettingsSummary": "Proxy'ler de dahil olmak üzere çeşitli genel indeksleyici ayarlarını yapılandırın.", "SettingsLogRotateHelpText": "Günlük klasöründe saklanacak maksimum günlük dosyası sayısı", "TvSearch": "Dizi Ara", - "SelectIndexers": "Dizinleyici Seç", + "SelectIndexers": "İndeksleyici Seç", "Privacy": "Gizlilik", "SettingsConsoleLogLevel": "Konsol Günlük Düzeyi", "SettingsFilterSentryEventsHelpText": "Bilinen kullanıcı hatası olaylarının Analitik olarak gönderilmesini filtreleyin", "SyncLevel": "Senkronizasyon Seviyesi", - "IndexerName": "Dizinleyici Adı", - "IndexerSite": "Dizinleyici Sitesi", - "IndexerTagsHelpTextWarning": "Etiketler dikkatli kullanılmalıdır, istenmeyen etkilere neden olabilirler. Etiketli bir dizinleyici yalnızca aynı etikete sahip uygulamalarla senkronize olur.", + "IndexerName": "İndeksleyici Adı", + "IndexerSite": "İndeksleyici Sitesi", + "IndexerTagsHelpTextWarning": "Etiketler dikkatli kullanılmalıdır, istenmeyen etkilere neden olabilirler. Etiketli bir indeksleyici yalnızca aynı etikete sahip uygulamalarla senkronize olur.", "InitialFailure": "İlk Hata", "MappedCategories": "Haritalanmış Kategoriler", "NotSupported": "Desteklenmiyor", - "SettingsIndexerLoggingHelpText": "Yanıt dahil olmak üzere ek Dizinleyici verilerini günlüğe kaydet", + "SettingsIndexerLoggingHelpText": "Yanıt dahil olmak üzere ek İndeksleyici verilerini günlüğe kaydet", "SearchQueries": "Arama Sorguları", "SyncProfile": "Profil Senkronizasyonu", "NoSearchResultsFound": "Hiçbir arama sonucu bulunamadı, aşağıdan yeni bir arama yapmayı deneyin.", @@ -758,11 +758,11 @@ "VipExpiration": "VIP Son Kullanma Tarihi", "IndexerPassThePopcornSettingsApiKeyHelpText": "Site API Anahtarı", "IndexerSettingsFreeleechOnly": "Sadece Freeleech", - "NoIndexerHistory": "Bu dizinleyici için geçmiş bulunamadı", - "SearchIndexers": "Dizinleyicilerde Ara", + "NoIndexerHistory": "Bu indeksleyici için geçmiş bulunamadı", + "SearchIndexers": "İndeksleyicilerde Ara", "Url": "Url", "Website": "Web site", - "IndexerTagsHelpText": "Etiketleri kullanarak Dizinleyici Proxy'lerini veya Dizinleyici'nin hangi uygulamalarla senkronize edileceğini belirtin.", + "IndexerTagsHelpText": "Etiketleri kullanarak İndeksleyici Proxy'lerini veya İndeksleyici'nin hangi uygulamalarla senkronize edileceğini belirtin.", "MassEditor": "Kitle Editörü", "RawSearchSupported": "Ham Arama Destekleniyor", "SettingsFilterSentryEvents": "Analitik Olayları Filtrele", @@ -770,17 +770,17 @@ "TotalHostGrabs": "İstemci Başına Toplam Alım", "TotalUserAgentGrabs": "Kullanıcı Aracısı Başına Toplam Alım Sayısı", "IndexerGazelleGamesSettingsApiKeyHelpText": "Siteden API Anahtarı (Ayarlar => Erişim Ayarları'nda Bulunur)", - "IndexerObsoleteCheckMessage": "Dizinleyiciler eski veya güncellendi: {0}. Lütfen {appName}'i kaldırın ve (veya) yeniden ekleyin", + "IndexerObsoleteCheckMessage": "İndeksleyiciler eski veya güncellendi: {0}. Lütfen {appName}'i kaldırın ve (veya) yeniden ekleyin", "IndexerNzbIndexSettingsApiKeyHelpText": "Site API Anahtarı", "IndexerOrpheusSettingsApiKeyHelpText": "Siteden API Anahtarı (Ayarlar => Erişim Ayarları'nda Bulunur)", "IndexerHDBitsSettingsPasskeyHelpText": "Kullanıcı Detaylarından Geçiş Anahtarı", - "IndexerQuery": "Dizinleyici Sorgusu", + "IndexerQuery": "İndeksleyici Sorgusu", "MovieSearch": "Film Arama", "TotalGrabs": "Toplam Alınan", "TotalHostQueries": "İstemci Başına Toplam Sorgu", "Query": "Sorgu", "QueryOptions": "Sorgu Seçenekleri", - "SyncLevelAddRemove": "Yalnızca Ekle ve Kaldır: {appName} uygulamasından dizinleyiciler eklendiğinde veya kaldırıldığında, bu uzak uygulama güncellenecektir.", + "SyncLevelAddRemove": "Yalnızca Ekle ve Kaldır: {appName} uygulamasından indeksleyiciler eklendiğinde veya kaldırıldığında, bu uzak uygulama güncellenecektir.", "IndexerIPTorrentsSettingsCookieUserAgentHelpText": "Tarayıcıdan kullanılan çerezle ilişkili Kullanıcı Aracısı", "IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Yalnızca freeleech sürümlerini arayın", "IndexerSettingsAppsMinimumSeedersHelpText": "Uygulamalar tarafından indeksleyicinin alım yapması için gereken minimum sedeerlar, boş bırakılırsa Eşitleme profilinin varsayılanı kullanılacaktır", @@ -790,14 +790,14 @@ "IndexerNewznabSettingsAdditionalParametersHelpText": "Ek Newznab parametreleri", "IndexerNewznabSettingsApiKeyHelpText": "Site API Anahtarı", "IndexerSettingsAppsMinimumSeeders": "Uygulamalar Minimum Seeders", - "RedirectHelpText": "Dizinleyici için gelen indirme isteğini yeniden yönlendirin ve isteği {appName} aracılığıyla proxy olarak göndermek yerine doğrudan alım yapmayı tercih edin", - "SyncLevelFull": "Tam Senkronizasyon: Bu uygulamanın dizinleyicilerini tamamen senkronize halde tutar. {appName} içindeki dizinleyicilerde yapılan değişiklikler daha sonra bu uygulamayla senkronize edilir. Bu uygulama içinde dizinleyicilerde uzaktan yapılan herhangi bir değişiklik, bir sonraki senkronizasyonda {appName} tarafından geçersiz kılınır.", + "RedirectHelpText": "İndeksleyici için gelen indirme isteğini yeniden yönlendirin ve isteği {appName} aracılığıyla proxy olarak göndermek yerine doğrudan alım yapmayı tercih edin", + "SyncLevelFull": "Tam Senkronizasyon: Bu uygulamanın indeksleyicilerini tamamen senkronize halde tutar. {appName} içindeki indeksleyicilerde yapılan değişiklikler daha sonra bu uygulamayla senkronize edilir. Bu uygulama içinde indeksleyicilerde uzaktan yapılan herhangi bir değişiklik, bir sonraki senkronizasyonda {appName} tarafından geçersiz kılınır.", "IndexerSettingsPreferMagnetUrl": "Magnet URL'sini Tercih Et", "IndexerTorrentSyndikatSettingsApiKeyHelpText": "Site API Anahtarı", "ProwlarrDownloadClientsInAppOnlyAlert": "İndirme istemcileri yalnızca {appName} uygulama içi aramalar içindir ve uygulamalarla senkronize edilmez. Geliştiricilerin bu tür bir işlevsellik ekleme planı yoktur.", "ProwlarrSupportsAnyDownloadClient": "{appName} aşağıda listelenen indirme istemcilerini destekler.", - "UnableToLoadIndexerProxies": "Dizin Oluşturucu Proxy'leri yüklenemiyor", - "IndexerStatus": "Dizinleyici Durumu", + "UnableToLoadIndexerProxies": "İndeksleyici Proxy'leri yüklenemiyor", + "IndexerStatus": "İndeksleyici Durumu", "IndexerPassThePopcornSettingsGoldenPopcornOnly": "Sadece Golden Popcorn", "IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Yalnızca Golden Popcorn sürümlerini arayın", "IndexerSettingsPackSeedTime": "Paket Seed Süresi", @@ -805,6 +805,6 @@ "IndexerFileListSettingsPasskeyHelpText": "Site Parolası (Bu, indirme istemcinizde gösterilen izleyici URL'sindeki alfanümerik dizedir)", "IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Kullanıcı ve Torrent izinlerine sahip olmalısınız", "IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Grup adlarına göre sürüm ara", - "IndexerHealthCheckNoIndexers": "Hiçbir dizinleyici etkinleştirilmedi, {appName} arama sonuçlarını döndürmeyecek", + "IndexerHealthCheckNoIndexers": "Hiçbir indeksleyici etkinleştirilmedi, {appName} arama sonuçlarını döndürmeyecek", "QueryType": "Sorgu Türü" } From 547bc2e58c44ef9bdf62af7fbde4dea07f0c85c2 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 10 Jan 2025 22:35:27 +0200 Subject: [PATCH 039/127] New: (MyAnonamouse) Search by languages option Fixes #2326 --- .../Indexers/Definitions/MyAnonamouse.cs | 213 +++++++++++++++++- 1 file changed, 208 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs index ce80fbb74..d2b2f8d1a 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs @@ -294,14 +294,21 @@ namespace NzbDrone.Core.Indexers.Definitions parameters.Set("tor[srchIn][filenames]", "true"); } - var catList = _capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories); + if (_settings.SearchLanguages.Any()) + { + foreach (var (language, index) in _settings.SearchLanguages.Select((value, index) => (value, index))) + { + parameters.Set($"tor[browse_lang][{index}]", language.ToString()); + } + } + + var catList = _capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories).Distinct().ToList(); + if (catList.Any()) { - var index = 0; - foreach (var cat in catList) + foreach (var (category, index) in catList.Select((value, index) => (value, index))) { - parameters.Set("tor[cat][" + index + "]", cat); - index++; + parameters.Set($"tor[cat][{index}]", category); } } else @@ -584,6 +591,7 @@ namespace NzbDrone.Core.Indexers.Definitions SearchInDescription = false; SearchInSeries = false; SearchInFilenames = false; + SearchLanguages = Array.Empty(); } [FieldDefinition(2, Type = FieldType.Textbox, Label = "Mam Id", HelpText = "Mam Session Id (Created Under Preferences -> Security)")] @@ -604,6 +612,9 @@ namespace NzbDrone.Core.Indexers.Definitions [FieldDefinition(7, Type = FieldType.Checkbox, Label = "Search in filenames", HelpText = "Search text in the filenames")] public bool SearchInFilenames { get; set; } + [FieldDefinition(8, Type = FieldType.Select, Label = "Search Languages", SelectOptions = typeof(MyAnonamouseSearchLanguages), HelpText = "Specify the desired languages. If unspecified, all options are used.")] + public IEnumerable SearchLanguages { get; set; } + public override NzbDroneValidationResult Validate() { return new NzbDroneValidationResult(Validator.Validate(this)); @@ -631,6 +642,198 @@ namespace NzbDrone.Core.Indexers.Definitions NotVip = 5, } + public enum MyAnonamouseSearchLanguages + { + [FieldOption(Label="English")] + English = 1, + + [FieldOption(Label="Afrikaans")] + Afrikaans = 17, + + [FieldOption(Label="Arabic")] + Arabic = 32, + + [FieldOption(Label="Bengali")] + Bengali = 35, + + [FieldOption(Label="Bosnian")] + Bosnian = 51, + + [FieldOption(Label="Bulgarian")] + Bulgarian = 18, + + [FieldOption(Label="Burmese")] + Burmese = 6, + + [FieldOption(Label="Cantonese")] + Cantonese = 44, + + [FieldOption(Label="Catalan")] + Catalan = 19, + + [FieldOption(Label="Chinese")] + Chinese = 2, + + [FieldOption(Label="Croatian")] + Croatian = 49, + + [FieldOption(Label="Czech")] + Czech = 20, + + [FieldOption(Label="Danish")] + Danish = 21, + + [FieldOption(Label="Dutch")] + Dutch = 22, + + [FieldOption(Label="Estonian")] + Estonian = 61, + + [FieldOption(Label="Farsi")] + Farsi = 39, + + [FieldOption(Label="Finnish")] + Finnish = 23, + + [FieldOption(Label="French")] + French = 36, + + [FieldOption(Label="German")] + German = 37, + + [FieldOption(Label="Greek")] + Greek = 26, + + [FieldOption(Label="Greek, Ancient")] + GreekAncient = 59, + + [FieldOption(Label="Gujarati")] + Gujarati = 3, + + [FieldOption(Label="Hebrew")] + Hebrew = 27, + + [FieldOption(Label="Hindi")] + Hindi = 8, + + [FieldOption(Label="Hungarian")] + Hungarian = 28, + + [FieldOption(Label="Icelandic")] + Icelandic = 63, + + [FieldOption(Label="Indonesian")] + Indonesian = 53, + + [FieldOption(Label="Irish")] + Irish = 56, + + [FieldOption(Label="Italian")] + Italian = 43, + + [FieldOption(Label="Japanese")] + Japanese = 38, + + [FieldOption(Label="Javanese")] + Javanese = 12, + + [FieldOption(Label="Kannada")] + Kannada = 5, + + [FieldOption(Label="Korean")] + Korean = 41, + + [FieldOption(Label="Lithuanian")] + Lithuanian = 50, + + [FieldOption(Label="Latin")] + Latin = 46, + + [FieldOption(Label="Latvian")] + Latvian = 62, + + [FieldOption(Label="Malay")] + Malay = 33, + + [FieldOption(Label="Malayalam")] + Malayalam = 58, + + [FieldOption(Label="Manx")] + Manx = 57, + + [FieldOption(Label="Marathi")] + Marathi = 9, + + [FieldOption(Label="Norwegian")] + Norwegian = 48, + + [FieldOption(Label="Polish")] + Polish = 45, + + [FieldOption(Label="Portuguese")] + Portuguese = 34, + + [FieldOption(Label="Brazilian Portuguese (BP)")] + BrazilianPortuguese = 52, + + [FieldOption(Label="Punjabi")] + Punjabi = 14, + + [FieldOption(Label="Romanian")] + Romanian = 30, + + [FieldOption(Label="Russian")] + Russian = 16, + + [FieldOption(Label="Scottish Gaelic")] + ScottishGaelic = 24, + + [FieldOption(Label="Sanskrit")] + Sanskrit = 60, + + [FieldOption(Label="Serbian")] + Serbian = 31, + + [FieldOption(Label="Slovenian")] + Slovenian = 54, + + [FieldOption(Label="Spanish")] + Spanish = 4, + + [FieldOption(Label="Castilian Spanish")] + CastilianSpanish = 55, + + [FieldOption(Label="Swedish")] + Swedish = 40, + + [FieldOption(Label="Tagalog")] + Tagalog = 29, + + [FieldOption(Label="Tamil")] + Tamil = 11, + + [FieldOption(Label="Telugu")] + Telugu = 10, + + [FieldOption(Label="Thai")] + Thai = 7, + + [FieldOption(Label="Turkish")] + Turkish = 42, + + [FieldOption(Label="Ukrainian")] + Ukrainian = 25, + + [FieldOption(Label="Urdu")] + Urdu = 15, + + [FieldOption(Label="Vietnamese")] + Vietnamese = 13, + + [FieldOption(Label="Other")] + Other = 47, + } + public class MyAnonamouseTorrent { public int Id { get; set; } From e7ed09a43d4171d52821dab1a883f97da883b48a Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 12 Jan 2025 15:14:09 +0200 Subject: [PATCH 040/127] Bump version to 1.30.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 76db03c57..53c0783f8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.30.0' + majorVersion: '1.30.1' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From a5a86a6f865a707f19e1950827b3245bf65ebbfe Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 12 Jan 2025 08:33:21 +0000 Subject: [PATCH 041/127] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/fi.json | 180 ++++++++++---------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 27ca44b3e..74a5e7a50 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -5,11 +5,11 @@ "MovieIndexScrollTop": "Elokuvakirjasto: vieritä ylös", "Apply": "Käytä", "ClientPriority": "Latauspalvelun painotus", - "IndexerPriorityHelpText": "Tietolähteen painotus, 1– 50 (korkein-alin). Oletusarvo on 25.", + "IndexerPriorityHelpText": "Hakupalvelun painotus, 1– 50 (korkein-alin). Oletusarvo on 25.", "Manual": "Manuaalinen", "Add": "Lisää", "Reload": "Lataa uudelleen", - "Indexers": "Tietolähteet", + "Indexers": "Hakupalvelut", "MovieIndexScrollBottom": "Elokuvakirjasto: vieritä alas", "SSLCertPassword": "SSL-varmenteen salasana", "Style": "Ulkoasu", @@ -111,7 +111,7 @@ "RestartNow": "Käynnistä uudelleen nyt", "Restore": "Palauta", "Rss": "RSS", - "RssIsNotSupportedWithThisIndexer": "Tämän tietolähteen kanssa ei voida käyttää RSS-syötettä.", + "RssIsNotSupportedWithThisIndexer": "Tämän hakupalvelun kanssa ei voida käyttää RSS-syötettä.", "ScriptPath": "Komentosarjan sijainti", "Security": "Suojaus", "SuggestTranslationChange": "Ehdota käännösmuutosta", @@ -131,25 +131,25 @@ "Type": "Tyyppi", "UILanguage": "Käyttöliittymän kieli", "UnableToAddANewApplicationPleaseTryAgain": "Uuden sovelluksen lisäys epäonnistui. Yritä uudelleen.", - "UnableToAddANewIndexerPleaseTryAgain": "Uuden tietolähteen lisäys epäonnistui. Yritä uudelleen.", + "UnableToAddANewIndexerPleaseTryAgain": "Uuden hakupalvelun lisääminen epäonnistui. Yritä uudelleen.", "UnableToAddANewIndexerProxyPleaseTryAgain": "Uuden tiedonhaun välityspalvelimen lisäys epäonnistui. Yritä uudelleen.", "BackupsLoadError": "Varmuuskopioinnin lataus epäonnistui", "DownloadClientsLoadError": "Latauspalveluiden lataus epäonnistui", "UnableToLoadGeneralSettings": "Yleisasetusten lataus epäonnistui", "UpdateAutomaticallyHelpText": "Lataa ja asenna päivitykset automaattisesti. Voit myös edelleen suorittaa asennuksen järjestelmäasetusten päivitykset-osiosta.", "Added": "Lisäysaika", - "AddIndexer": "Lisää tietolähde", + "AddIndexer": "Lisää hakupalvelu", "AddingTag": "Tunniste lisätään", "Age": "Ikä", "All": "Kaikki", - "AllIndexersHiddenDueToFilter": "Aktiivinen suodatin on piilottanut kaikki tietolähteet.", + "AllIndexersHiddenDueToFilter": "Aktiivinen suodatin on piilottanut kaikki hakupalvelut.", "Analytics": "Analytiikka", "AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja {appName}in palvelimille. Tämä sisältää tietoja selaimestasi, käyttöliittymän sivujen käytöstä, virheraportoinnista, käyttöjärjestelmästä ja suoritusalustasta. Käytämme näitä tietoja ominaisuuksien ja vikakorjausten painotukseen.", "ApiKey": "Rajapinnan avain", "AppDataDirectory": "AppData-kansio", "DatabaseMigration": "Tietokannan siirto", "Delete": "Poista", - "DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa tietolähdevälityspalvelimen \"{name}\"?", + "DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa hakupalveluvälityspalvelimen \"{name}\"?", "DeleteNotificationMessageText": "Haluatko varmasti poistaa ilmoituspalvelun \"{name}\"?", "Disabled": "Ei käytössä", "DownloadClients": "Latauspalvelut", @@ -208,7 +208,7 @@ "StartupDirectory": "Käynnistyskansio", "TableOptions": "Taulukkonäkymän asetukset", "TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys", - "TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille tietolähteille.", + "TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille hakupalveluille.", "UnableToAddANewAppProfilePleaseTryAgain": "Uuden sovellusprofiilin lisäys epäonnistui. Yritä uudelleen.", "UnableToAddANewNotificationPleaseTryAgain": "Ilmoituspalvelun lisääminen epäonnistui. Yritä uudelleen.", "Version": "Versio", @@ -248,7 +248,7 @@ "DeleteBackupMessageText": "Haluatko varmasti poistaa varmuuskopion \"{name}\"?", "DeleteDownloadClient": "Poista latauspalvelu", "DownloadClientStatusSingleClientHealthCheckMessage": "Latauspalveluita ei ole ongelmien vuoksi käytettävissä: {downloadClientNames}", - "EditIndexer": "Muokkaa tietolähdettä", + "EditIndexer": "Muokkaa hakupalvelua", "EnableAutomaticSearch": "Käytä automaattihakua", "EnableInteractiveSearch": "Käytä manuaalihakuun", "EnableInteractiveSearchHelpText": "Profiilia käytetään manuaalihakuun.", @@ -273,14 +273,14 @@ "Host": "Osoite", "Hostname": "Osoite", "IncludeHealthWarningsHelpText": "Sisällytä kuntovaroitukset", - "Indexer": "Tietolähde", - "IndexerFlags": "Tietolähteen liput", - "IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Mikään tietolähde ei ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi.", - "IndexerLongTermStatusUnavailableHealthCheckMessage": "Tietolähteet eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi: {indexerNames}", - "IndexerPriority": "Tietolähteiden painotus", + "Indexer": "Hakupalvelu", + "IndexerFlags": "Hakupalvelun liput", + "IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Mikään hakupalvelu ei ole käytettävissä yli kuusi tuntia kestäneiden virheiden vuoksi.", + "IndexerLongTermStatusUnavailableHealthCheckMessage": "Hakupalvelut eivät ole käytettävissä yli kuusi tuntia kestäneiden virheiden vuoksi: {indexerNames}.", + "IndexerPriority": "Hakupalveluiden painotus", "IndexerProxyStatusAllUnavailableHealthCheckMessage": "Välityspalvelimet eivät ole käytettävissä virheiden vuoksi", - "IndexerStatusAllUnavailableHealthCheckMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi", - "IndexerStatusUnavailableHealthCheckMessage": "Tietolähteet eivät ole virheiden vuoksi käytettävissä: {indexerNames}", + "IndexerStatusAllUnavailableHealthCheckMessage": "Hakupalvelut eivät ole virheiden vuoksi käytettävissä.", + "IndexerStatusUnavailableHealthCheckMessage": "Hakupalvelut eivät ole virheiden vuoksi käytettävissä: {indexerNames}.", "NoChange": "Ei muutosta", "NoLogFiles": "Lokitiedostoja ei ole", "SSLCertPasswordHelpText": "PFX-tiedoston salasana", @@ -308,40 +308,40 @@ "DownloadClientsSettingsSummary": "{appName}in käyttöliittymästä suoritettavien hakujen yhteydessä käytettävät latauspalvelut.", "ProwlarrSupportsAnyDownloadClient": "{appName} tukee kaikkia alla listatuja latauspalveluita.", "AddDownloadClientToProwlarr": "Lisäämällä latauspalvelun {appName} voi lähettää julkaisut suoraan käyttöliittymästä manuaalihaun tuloksista.", - "RedirectHelpText": "Uudelleenohjaa tietolähteeltä saapuvat latauspyynnöt ja välitä kaappaus suoraan välittämättä sitä {appName}in kautta.", + "RedirectHelpText": "Uudelleenohjaa hakupalvelulta saapuvat latauspyynnöt ja välitä kaappaus suoraan välittämättä sitä {appName}in kautta.", "FullSync": "Täysi synkronointi", - "SyncLevelFull": "Täysi synkronointi: Pitää sovelluksen tietolähteet täysin synkronoituna. Tietolähteisiin {appName}issa tehdyt muutokset synkronoidaan etäsovelluksen kanssa ja kaikki etäsovelluksessa tehdyt muutokset korvataan seuraavan synkronoinnin yhteydessä.", - "EnableIndexer": "Tietolähteen tila", - "FilterPlaceHolder": "Suodata tietolähteitä", - "IndexerHealthCheckNoIndexers": "Yhtään tietolähdettä ei ole käytössä, eikä {appName} tämän vuoksi löydä tuloksia.", - "IndexerObsoleteCheckMessage": "Tietolähteet ovat poistuneet tai ne ovat muuttuneet: {0}. Poista ja/tai lisää ne {appName}iin uudelleen.", + "SyncLevelFull": "Täysi synkronointi: Pitää sovelluksen hakupalvelut täysin synkronoituna. Hakupalveluihin {appName}issa tehdyt muutokset synkronoidaan etäsovelluksen kanssa ja kaikki etäsovelluksessa tehdyt muutokset korvataan seuraavan synkronoinnin yhteydessä.", + "EnableIndexer": "Ota hakupalvelu käyttöön", + "FilterPlaceHolder": "Suodata hakupalveluita", + "IndexerHealthCheckNoIndexers": "Yhtään hakupalvelua ei ole käytössä, eikä {appName} tämän vuoksi löydä tuloksia.", + "IndexerObsoleteCheckMessage": "Hakupalvelut ovat poistuneet tai ne ovat muuttuneet: {0}. Poista tai lisää ne {appName}iin uudelleen.", "IndexerProxy": "Tiedonhaun välityspalvelin", - "IndexerSettingsSummary": "Määritä useita globaaleita tietolähdeasetuksia, kuten välityspalvelimia.", - "IndexerVipExpiringHealthCheckMessage": "Tietolähteen VIP-edut erääntyvät pian: {indexerNames}", - "ProwlarrSupportsAnyIndexer": "{appName} tukee Newznab- ja Torznab-yhteensopivien tietolähteiden ohella myös useita muita lähteitä vaihtoehdoilla \"Yleinen Newznab\" (Usenetille) ja 'Yleinen Torznab' (torrenteille).", - "SettingsIndexerLogging": "Tehostettu tietolähteiden valvonta", + "IndexerSettingsSummary": "Määritä useita globaaleita hakupalveluasetuksia, kuten välityspalvelimia.", + "IndexerVipExpiringHealthCheckMessage": "Hakupalvelun VIP-edut päättyvät pian: {indexerNames}.", + "ProwlarrSupportsAnyIndexer": "{appName} tukee Newznab- ja Torznab-yhteensopivien hakupalveluiden ohella myös useita muita palveluita vaihtoehdoilla \"Yleinen Newznab\" (Usenetille) ja 'Yleinen Torznab' (torrenteille).", + "SettingsIndexerLogging": "Tehostettu hakupalveluiden valvonta", "AddIndexerProxy": "Lisää tiedonhaun välityspalvelin", "UISettingsSummary": "Kalenterin, päiväyksen ja kellonajan sekä kielen ja heikentyneelle värinäölle sopivan tilan asetukset.", - "SettingsIndexerLoggingHelpText": "Kirjaa tarkempia tietoja tietolähteiden toiminnasta, mukaanlukien vastaukset", + "SettingsIndexerLoggingHelpText": "Kirjaa tarkempia tietoja hakupalveluiden toiminnasta, mukaanlukien vastaukset", "IndexerTagsHelpText": "Tunnisteilla voit kohdistaa tiedonhaun välityspalvelimia ja määrittää mihin sovelluksiin ne synkronoidaan.", "UnableToLoadAppProfiles": "Sovellusprofiilien lataus epäonnistui", - "AppProfileSelectHelpText": "Sovellusprofiilieilla määritetään tietolähteelle sovellussynkronoinnin yhteydessä aktivoitavat hakutavat (RSS/automaatti/manuaali).", - "IndexerQuery": "Tietolähdekysely", - "IndexerRss": "Tietolähteen RSS", - "SearchIndexers": "Etsi tietolähteistä", + "AppProfileSelectHelpText": "Sovellusprofiilieilla määritetään hakupalvelulle sovellussynkronoinnin yhteydessä aktivoitavat hakutavat (RSS/automaatti/manuaali).", + "IndexerQuery": "Hakupalvelukysely", + "IndexerRss": "Hakupalvelun RSS", + "SearchIndexers": "Etsi hakupalveluista", "AddRemoveOnly": "Ainoastaan lisää/poista", - "IndexerVipExpiredHealthCheckMessage": "Tietolähteen VIP-edut ovat erääntyneet: {indexerNames}", + "IndexerVipExpiredHealthCheckMessage": "Hakupalvelun VIP-edut ovat päättyneet: {indexerNames}.", "MaintenanceRelease": "Huoltojulkaisu: korjauksia ja muita parannuksia. Lue lisää Githubin muutoshistoriasta.", "Query": "Kysely", "Redirect": "Uudelleenohjaus", "RestartProwlarr": "Käynnistä {appName} uudelleen", "SyncLevel": "Synkronoinnin laajuus", - "SyncLevelAddRemove": "Vain lisäys/poisto: Kun {appName}in tietolähteitä lisätään tai poistetaan, päivittyy myös etäsovellus.", - "SyncAppIndexers": "Synkronoi tietolähteet", + "SyncLevelAddRemove": "Vain lisäys/poisto: Kun {appName}in hakupalveluita lisätään tai poistetaan, päivittyy myös tämä etäsovellus.", + "SyncAppIndexers": "Synkronoi sovelluksiin", "TestAllApps": "Testaa kaikki sovellukset", "UnableToLoadIndexerProxies": "Tiedonhaun välityspalvelinten lataus epäonnistui", "AddedToDownloadClient": "Julkaisu lisättiin latauspalveluun", - "AddNewIndexer": "Lisää uusi tietolähde", + "AddNewIndexer": "Lisää uusi hakupalvelu", "AddToDownloadClient": "Lisää julkaisu latauspalveluun", "NoSearchResultsFound": "Tuloksia ei löytynyt. Yritä uutta hakua alta.", "Notification": "Ilmoitus", @@ -366,11 +366,11 @@ "ClearHistory": "Tyhjennä historia", "ClearHistoryMessageText": "Haluatko varmasti tyhjentää kaiken {appName}-historian?", "Connect": "Ilmoituspalvelut", - "EnableRssHelpText": "Käytä tietolähteelle RSS-syötettä.", + "EnableRssHelpText": "Käytä hakupalvelulle RSS-syötettä.", "DeleteApplication": "Poista sovellus", "DeleteAppProfile": "Poista sovellusprofiili", "IndexerProxies": "Tiedonhaun välityspalvelimet", - "IndexerAuth": "Tietolähteen todennus", + "IndexerAuth": "Hakupalvelun todennus", "Notifications": "Ilmoituspalvelut", "NotificationTriggersHelpText": "Valitse ilmoituksen laukaisevat tapahtumat.", "Stats": "Tilastot", @@ -389,13 +389,13 @@ "OnHealthIssue": "Vakausongelmat", "HistoryCleanupDaysHelpText": "Poista automaattinen tyhjennys käytöstä asettamalla arvoksi 0.", "HistoryCleanupDaysHelpTextWarning": "Tässä määritettyä aikaa vanhemmat tiedostot poistetaan automaattisesti roskakorista pysyvästi.", - "TestAllIndexers": "Tietolähteiden testaus", + "TestAllIndexers": "Koesta hakupalvelut", "UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti rajapinnan kanssa viestinyt sovellus.", "Categories": "Kategoriat", "Database": "Tietokanta", "HistoryCleanup": "Historian siivous", - "IndexerAlreadySetup": "Tietolähteestä on määritetty jo ainakin yksi instanssi.", - "IndexerInfo": "Tietolähteen tiedot", + "IndexerAlreadySetup": "Hakupalvelusta on määritetty jo ainakin yksi instanssi.", + "IndexerInfo": "Hakupalvelun tiedot", "MassEditor": "Massamuokkaus", "OnApplicationUpdate": "Kun sovellus päivitetään", "OnApplicationUpdateHelpText": "Kun sovellus päivitetään", @@ -405,21 +405,21 @@ "ApplicationsLoadError": "Sovelluslistan lataus epäonnistui", "Url": "URL", "Website": "Verkkosivusto", - "IndexerNoDefinitionCheckHealthCheckMessage": "Tietolähteillä ei ole määritystä, eivätkä ne toimi: {indexerNames}. Poista ja/tai lisää {appName}iin uudelleen", + "IndexerNoDefinitionCheckHealthCheckMessage": "Hakupalveluiden määritykset puuttuvat, eivätkä ne toimi: {indexerNames}. Poista tai lisää ne {appName}iin uudelleen.", "Private": "Yksityinen", "QueryResults": "Kyselyn tulokset", "Application": "Sovellus", "GrabReleases": "Kaappaa julkaisu(t)", "Link": "Linkki", "SearchTypes": "Etsittävät tyypit", - "UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui", + "UnableToLoadIndexers": "Hakupalveluiden lataus epäonnistui", "Yes": "Kyllä", "MappedDrivesRunningAsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja UKK:sta.", "No": "Ei", "BookSearchTypes": "Etsittävät kirjatyypit", - "IndexerDetails": "Tietolähteen tiedot", - "IndexerName": "Tietolähteen nimi", - "IndexerSite": "Tietolähteen sivusto", + "IndexerDetails": "Hakupalvelun tiedot", + "IndexerName": "Hakupalvelun nimi", + "IndexerSite": "Hakupalvelun sivusto", "MovieSearchTypes": "Etsittävät elokuvatyypit", "MusicSearchTypes": "Etsittävät musiikkityypit", "NotSupported": "Ei tuettu", @@ -427,7 +427,7 @@ "SearchCapabilities": "Hakuominaisuudet", "TVSearchTypes": "Etsittävät sarja-/jaksotyypit", "MinimumSeeders": "Jakajien vähimmäismäärä", - "MinimumSeedersHelpText": "Sovelluksen edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä.", + "MinimumSeedersHelpText": "Sovelluksen edellyttämä hakupalvelusta kaapattavien kohteiden jakajien (seed) vähimmäismäärä.", "SyncProfile": "Synkronointiprofiili", "SyncProfiles": "Synkronointiprofiilit", "AddSyncProfile": "Lisää synkronointiprofiili", @@ -459,22 +459,22 @@ "ApplicationURL": "Sovelluksen URL", "ApplicationUrlHelpText": "Tämän sovelluksen ulkoinen URL-osoite, johon sisältyy http(s)://, portti ja URL-perusta.", "Track": "Valvo", - "CountIndexersSelected": "{count} tietolähde(ttä) on valittu", + "CountIndexersSelected": "{count} hakupalvelu(a) on valittu", "DeleteSelectedDownloadClients": "Poista valitut latauspalvelu(t)", "DeleteSelectedApplicationsMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) sovellu(sta/ksen)?", "DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valittua latauspalvelua?", - "DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) tietoläh(teen/dettä)?", + "DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) hakupalvelu(n/a)?", "Publisher": "Julkasija", - "SelectIndexers": "Tietolähteiden monivalinta", + "SelectIndexers": "Palveluiden monivalinta", "Year": "Vuosi", "Genre": "Lajityyppi", "More": "Lisää", "Season": "Kausi", "ApplyTagsHelpTextAdd": "– \"Lisää\" syötetyt tunnisteet aiempiin tunnisteisiin", - "ApplyTagsHelpTextHowToApplyApplications": "Tunnisteiden käyttäminen valituille sovelluksille", - "ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituille tietolähteille", + "ApplyTagsHelpTextHowToApplyApplications": "Tunnisteiden käyttö valituille sovelluksille:", + "ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituille hakupalveluille:", "ApplyTagsHelpTextRemove": "- \"Poista\" tyhjentää syötetyt tunnisteet", - "ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi", + "ApplyTagsHelpTextReplace": "– \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi.", "DownloadClientPriorityHelpText": "Useiden latauspalveluiden painotus, 1–50 (korkein-alin). Oletusarvo on 1 ja tasaveroiset erotetaan Round-Robin-tekniikalla.", "Album": "Albumi", "Artist": "Esittäjä", @@ -498,20 +498,20 @@ "DisabledForLocalAddresses": "Ei käytössä paikallisissa osoitteissa", "None": "Ei mitään", "ResetAPIKeyMessageText": "Haluatko varmasti korvata rajapinnan avaimen uudella?", - "TotalIndexerSuccessfulGrabs": "Onnistuneiden tietolähdekaappausten kokonaismäärä", + "TotalIndexerSuccessfulGrabs": "Onnistuneiden hakupalvelukaappausten kokonaismäärä", "AppUpdated": "{appName} on päivitetty", "AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on käynnistettävä uudelleen.", - "IndexerDownloadClientHelpText": "Määritä {appName}issa tästä tietolähteestä tehdyille kaappauksille käytettävä latauspalvelu.", + "IndexerDownloadClientHelpText": "Määritä {appName}issa tästä hakupalvelusta tehdyille kaappauksille käytettävä latauspalvelu.", "AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt tunnistautumisen käyttöönoton. Paikallisilta osoitteilta se voidaan valinnaisesti poistaa käytöstä.", "TotalGrabs": "Kaappausten kokonaismäärä", "AddDownloadClientImplementation": "Lisätään latauspalvelua – {implementationName}", - "AddIndexerImplementation": "Lisätään tietolähdettä – {implementationName}", + "AddIndexerImplementation": "Lisätään hakupalvelua – {implementationName}", "OnGrabHelpText": "Kun julkaisu kaapataan", "ManageDownloadClients": "Hallitse latauspalveluita", "NoDownloadClientsFound": "Latauspalveluita ei löytynyt", "CountDownloadClientsSelected": "{count} latauspalvelu(a) on valittu", "EditSelectedDownloadClients": "Muokkaa valittuja latauspalveluita", - "IndexerDownloadClientHealthCheckMessage": "Tietolähteet virheellisillä latauspalveluilla: {indexerNames}.", + "IndexerDownloadClientHealthCheckMessage": "Hakupalvelut virheellisillä latauspalveluilla: {indexerNames}.", "AddIndexerProxyImplementation": "Lisätään tiedonhaun välityspalvelinta – {implementationName}", "EditIndexerProxyImplementation": "Muokataan tiedonhaun välityspalvelinta – {implementationName}", "EditDownloadClientImplementation": "Muokataan latauspalvelua – {implementationName}", @@ -519,15 +519,15 @@ "ApplyChanges": "Toteuta muutokset", "EditSelectedIndexers": "Muokkaa valittuja sisältölähteitä", "NoHistoryFound": "Historiaa ei löytynyt", - "NoIndexersFound": "Tietolähteitä ei löytynyt", + "NoIndexersFound": "Hakupalveluita ei löytynyt", "StopSelecting": "Lopeta valitseminen", "EditConnectionImplementation": "Muokataan ilmoituspalvelua – {implementationName}", "AddConnectionImplementation": "Lisätään ilmoituspavelua – {implementationName}", "DownloadClientQbittorrentSettingsContentLayout": "Sisällön rakenne", - "EditIndexerImplementation": "Muokataan tietolähdettä – {implementationName}", + "EditIndexerImplementation": "Muokataan hakupalvelua – {implementationName}", "AuthenticationRequiredUsernameHelpTextWarning": "Syötä uusi käyttäjätunnus", "DefaultNameCopiedProfile": "{name} (kopio)", - "AppsMinimumSeedersHelpText": "Sovellusten edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.", + "AppsMinimumSeedersHelpText": "Sovellusten edellyttämä hakupalvelusta kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.", "TotalHostGrabs": "Isännän kaappausten kokonaismäärä", "IncludeManualGrabsHelpText": "Sisällytä {appName}in käyttöliittymästä tehdyt manuaalikaappaukset.", "AuthenticationRequiredHelpText": "Valitse mitkä pyynnöt vaativat tunnistautumisen. Älä muuta, jos et ymmärrä riskejä.", @@ -544,40 +544,40 @@ "SeedTime": "Jakoaika", "days": "päivää", "HistoryDetails": "Historiatiedot", - "IndexerDisabled": "Tietolähde ei ole käytössä", + "IndexerDisabled": "Hakupalvelu ei ole käytössä", "AdvancedSettingsShownClickToHide": "Lisäasetukset näytetään, piilota painamalla tästä.", "AdvancedSettingsHiddenClickToShow": "Lisäasetukset on piilotettu, näytä painamalla tästä.", "AppsMinimumSeeders": "Jakajien vähimmäismäärä", "BasicSearch": "Perushaku", "CountApplicationsSelected": "{count} sovellus(ta) on valittu", "DeleteSelectedApplications": "Poista valitut sovellukset", - "DeleteSelectedIndexer": "Poista valittu tietolähde", - "DeleteSelectedIndexers": "Poista valitut tietolähteet", + "DeleteSelectedIndexer": "Poista valittu hakupalvelu", + "DeleteSelectedIndexers": "Poista valitut hakupalvelut", "Implementation": "Toteutus", - "IndexerCategories": "Tietolähdekategoriat", - "IndexerStatus": "Tietolähteen tila", + "IndexerCategories": "Hakupalvelukategoriat", + "IndexerStatus": "Hakupalvelun tila", "ManageApplications": "Hallitse sovelluksia", "NewznabUrl": "Newznab URL", "PackSeedTime": "Paketin jakoaika", "PackSeedTimeHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.", "QueryType": "Kyselyn tyyppi", - "SearchAllIndexers": "Etsi kaikista tietolähteistä", + "SearchAllIndexers": "Etsi kaikista hakupalveluista", "SeedRatioHelpText": "Jakosuhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä sovelluksen oletusta jättämällä tyhjäksi.", "TorznabUrl": "Torznab URL", "ApiKeyValidationHealthCheckMessage": "Muuta rajapinnan (API) avain ainakin {length} merkin pituiseksi. Voit tehdä tämän asetuksista tai muokkaamalla asetustiedostoa.", "OnHealthRestored": "Terveystilan vakautuessa", "OnHealthRestoredHelpText": "Terveystilan vakautuessa", "TotalHostQueries": "Isännän kyselyiden kokonaismäärä", - "TotalIndexerQueries": "Tietolähteen kyselyiden kokonaismäärä", + "TotalIndexerQueries": "Hakupalvelun kyselyiden kokonaismäärä", "GoToApplication": "Siirry sovellukseen", - "AreYouSureYouWantToDeleteIndexer": "Haluatko varmasti poistaa tietolähteen \"{name}\" sovelluksesta {appName}?", + "AreYouSureYouWantToDeleteIndexer": "Haluatko varmasti poistaa hakupalvelun \"{name}\" sovelluksesta {appName}?", "AuthQueries": "Todennuskyselyt", - "ApplicationTagsHelpText": "Sovellukseen synkronoidaan yhdellä tai useammalla vastaavalla tunnisteella merkityt tietolähteet. Jos tässä ei ole tunnisteita, ei tietolähteitä synkronoida niiden tunnisteiden vuoksi.", - "ApplicationTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkittyyn sovellukseen synkronoidaan vain samalla tunnisteella merkityt tietolähteet.", - "AverageResponseTimesMs": "Tietolähteiden keskimääräiset vasteajat (ms)", - "CountIndexersAvailable": "{count} tietolähde(ttä) on käytettävissä", + "ApplicationTagsHelpText": "Sovellukseen synkronoidaan yhdellä tai useammalla vastaavalla tunnisteella merkityt hakupalvelut. Jos tässä ei ole tunnisteita, ei palveluiden synkronointia estetä tunnisteiden perusteella.", + "ApplicationTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkittyyn sovellukseen synkronoidaan vain samalla tunnisteella merkityt hakupalvelut.", + "AverageResponseTimesMs": "hakupalveluiden keskimääräiset vasteajat (ms)", + "CountIndexersAvailable": "{count} hakupalvelu(a) on käytettävissä", "FoundCountReleases": "Löydettiin {itemCount} julkaisua", - "IndexerTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkitty tietolähde synkronoidaan vain samalla tunnisteella merkittyyn sovellukseen.", + "IndexerTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkitty hakupalvelu synkronoidaan vain samalla tunnisteella merkittyihin sovelluksiin.", "LastFailure": "Edellinen virhe", "SelectedCountOfCountReleases": "Valittu {selectedCount}/{itemCount} julkaisua", "TotalQueries": "Kyselyiden kokonaismäärä", @@ -587,26 +587,26 @@ "AddApplication": "Lisää sovellus", "AddCategory": "Lisää kategoria", "EditCategory": "Muokkaa kategoriaa", - "IndexerId": "Tietolähteen ID", - "ActiveIndexers": "Aktiiviset tietolähteet", - "NoIndexerCategories": "Tietolähteelle ei löytynyt kategorioita", + "IndexerId": "Hakupalvelun ID", + "ActiveIndexers": "Aktiiviset hakupalvelut", + "NoIndexerCategories": "Hakupalvelulle ei löytynyt kategorioita", "ActiveApps": "Aktiiviset sovellukset", - "NoIndexerHistory": "Tietolähteelle ei löytynyt historiaa", + "NoIndexerHistory": "Hakupalvelulle ei löytynyt historiaa", "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Määrittää käytetäänkö qBittorrentista määritettyä rakennetta, torrentin alkuperäistä rakennetta vai luodaanko uusi alikansio (qBittorrent 4.3.2+).", "External": "Ulkoinen", - "IndexerFailureRate": "Tietolähteen virhetaajuus", - "IndexerHistoryLoadError": "Virhe ladattaessa tietolähteen historiaa", + "IndexerFailureRate": "Hakupalvelun virhetaajuus", + "IndexerHistoryLoadError": "Virhe ladattaessa hakupalvelun historiaa", "InitialFailure": "Alkuperäinen virhe", "PasswordConfirmation": "Salasanan vahvistus", "RepeatSearch": "Toista haku", - "SearchCountIndexers": "Etsi {count} tietolähteestä", + "SearchCountIndexers": "Etsi {count} hakupalvelusta", "SearchQueries": "Hakukyselyt", "SeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä sovelluksen oletusta jättämällä tyhjäksi.", "RssQueries": "RSS-kyselyt", "TotalUserAgentQueries": "Käyttäjäagentin kyselyiden kokonaismäärä", "NotificationsEmailSettingsUseEncryption": "Käytä salausta", "NotificationsEmailSettingsUseEncryptionHelpText": "Määrittää suositaanko salausta, jos se on määritetty palvelimelle, käytetäänkö aina SSL- (vain portti 465) tai StartTLS-salausta (kaikki muut portit), voi käytetäänkö salausta lainkaan.", - "ManageClients": "Hallitse työkaluja", + "ManageClients": "Hallitse palveluita", "NoApplicationsFound": "Sovelluksia ei löytynyt", "DownloadClientAriaSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Aria2:n oletusta jättämällä tyhjäksi.", "UrlBaseHelpText": "Käänteisen välityspalvelimen tukea varten. Oletusarvo on tyhjä.", @@ -616,7 +616,7 @@ "DownloadClientSettingsUseSslHelpText": "Muodosta {clientName}-yhteys käyttäen salattua yhteyttä.", "DownloadClientTransmissionSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Transmissionin oletusta jättämällä tyhjäksi.", "DownloadClientTransmissionSettingsUrlBaseHelpText": "Lisää latauspalvelun {clientName} RPC-URL-osoitteeseen etuliitteen, esim. \"{url}\". Oletus on \"{defaultUrl}\".", - "IndexerSettingsAppsMinimumSeedersHelpText": "Sovellusten edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.", + "IndexerSettingsAppsMinimumSeedersHelpText": "Sovellusten edellyttämä hakupalvelusta kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.", "Menu": "Valikko", "ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Synkronoi estetyt torrent-hajautusarvot kaapattaessa", "IndexerBeyondHDSettingsSearchTypes": "Etsittävät tyypit", @@ -647,11 +647,11 @@ "IndexerSettingsCookie": "Eväste", "IndexerSettingsPackSeedTime": "Paketin jakoaika", "IndexerSettingsPackSeedTimeIndexerHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.", - "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.", + "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa hakupalvelun sääntöjä.", "SecretToken": "Salainen tunniste", "TorrentBlackholeSaveMagnetFiles": "Tallenna magnet-tiedostot", "UseSsl": "Käytä SSL-salausta", - "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein joidenkin tietolähteiden RSS-syötteestä tai hausta. Tämän käyttöönotto mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, kuitenkin ennen kuin niitä välitetään latauspalvelulle.", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein joidenkin hakupalveluiden RSS-syötteestä tai hausta. Tämän käyttöönotto mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, kuitenkin ennen kuin niitä välitetään latauspalvelulle.", "BlackholeFolderHelpText": "Kansio, jonne {appName} tallentaa {extension}-tiedoston.", "DownloadClientDelugeSettingsUrlBaseHelpText": "Lisää Delugen JSON-URL-osoitteeseen etuliitteen, ks. \"{url})\".", "DownloadClientFloodSettingsAdditionalTags": "Lisätunnisteet", @@ -664,7 +664,7 @@ "DownloadClientDownloadStationSettingsDirectoryHelpText": "Vaihtoehtoinen jaettu kansio latauksille. Käytä Download Stationin oletussijaintia jättämällä tyhjäksi.", "DownloadClientFreeboxSettingsApiUrlHelpText": "Määritä Freebox-rajapinnan perus-URL rajapinnan versiolla, esim. \"{url}\". Oletus on \"{defaultApiUrl}\".", "DownloadClientQbittorrentSettingsFirstAndLastFirst": "Ensimmäinen ja viimeinen ensin", - "DownloadClientFreeboxSettingsAppId": "Sovellustunniste", + "DownloadClientFreeboxSettingsAppId": "Sovelluksen ID", "DownloadClientFreeboxSettingsPortHelpText": "Freebox-liittymän portti. Oletus on {port}.", "DownloadClientPneumaticSettingsNzbFolder": "NZB-kansio", "DownloadClientQbittorrentSettingsSequentialOrder": "Peräkkäinen järjestys", @@ -737,13 +737,13 @@ "AverageQueries": "Kyselyiden keskiarvo", "IndexerNewznabSettingsAdditionalParametersHelpText": "Muut Newznab-parametrit", "IndexerNewznabSettingsVipExpirationHelpText": "Syötä VIP-tilan päättymispäivä (yyyy-mm-dd) tai jätä tyhjäksi. {appName} ilmoittaa viikko ennen VIP-tilan päättymistä.", - "IndexerSettingsQueryLimitHelpText": "Kyselyiden enimmäismäärä, jonka {appName} sallii tietolähteelle.", + "IndexerSettingsQueryLimitHelpText": "Kyselyiden enimmäismäärä, jonka {appName} sallii hakupalvelulle.", "IndexerHDBitsSettingsPasskeyHelpText": "Pääsyavain käyttäjätiedoista", "DefaultCategory": "Oletuskategoria", "ClickToChangeQueryOptions": "Muuta kyselyasetuksia painamalla tästä.", "IndexerSettingsQueryLimit": "Kyselyrajoitus", "IndexerAvistazSettingsPidHelpText": "PID \"My Account\" tai \"My Profile\" -sivulta.", - "IndexerAvistazSettingsUsernameHelpTextWarning": "Vain vähintään jäsen-tason käyttäjä voi käyttää tämän tietolähteen rajapintaa.", + "IndexerAvistazSettingsUsernameHelpTextWarning": "Vain vähintään jäsen-tasoinen käyttäjä voi käyttää tämän hakupalvelun rajapintaa.", "IndexerBeyondHDSettingsLimitedOnly": "Vain rajoitetut", "IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Etsi vain Freeleech-julkaisuja.", "IndexerFileListSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", @@ -757,11 +757,11 @@ "Open": "Avaa", "PreferMagnetUrl": "Suosi magnet-URL:eja", "ProwlarrDownloadClientsAlert": "Latauspalvelut on määritettävä tässä vain, jos hakuja aiotaan tehdä suoraan {appName}ista. Sovelluksien hauille käytetään niiden omien asetusten latauspalvelumäärityksiä.", - "IndexerSettingsLimitsUnitHelpText": "Tietolähteen aikarajoituksille käytettävä yksikkö.", + "IndexerSettingsLimitsUnitHelpText": "Hakupalveluiden aikarajoituksiin käytettävä yksikkö.", "IndexerGazelleGamesSettingsSearchGroupNames": "Etsi ryhmien nimillä", "DownloadClientSettingsDefaultCategoryHelpText": "Oletusarvoinen varakategoria julkaisuille, joilla ei ole kategoriaa. {appName}-kategorian lisääminen välttää ristiriidat ei-{appName} latausten kanssa. Kategoria on valinnainen, mutta erittäin suositeltava.", "IndexerAvistazSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", - "PreferMagnetUrlHelpText": "Tietolähde käyttää kaappaukseen ensisijaisesti magnet-linkkejä ja varmistuksena torrent-linkkejä.", + "PreferMagnetUrlHelpText": "Hakupalvelu käyttää kaappaukseen ensisijaisesti magnet-linkkejä ja varmistuksena torrent-linkkejä.", "ProwlarrDownloadClientsInAppOnlyAlert": "Latauspalvelut ovat vain {appName}in sisäisiä hakuja varten, eikä niitä synkronoida muihin sovelluksiin (ominaisuutta ole myöskään suunnitteilla).", "DownloadClientSettingsDefaultCategorySubFolderHelpText": "Oletusarvoinen varakategoria julkaisuille, joilla ei ole kategoriaa. {appName}-kategorian lisääminen välttää ristiriidat ei-{appName} latausten kanssa. Kategoria on valinnainen, mutta erittäin suositeltava. Luo kohdekansioon [kategoria]-alikansion.", "IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", @@ -783,7 +783,7 @@ "IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Etsi vain freeleech-julkaisuja.", "IndexerHDBitsSettingsUseFilenamesHelpText": "Käsittele torrentien tiedostonimiä julkaisujen nimikkeinä.", "IndexerHDBitsSettingsUsernameHelpText": "Sivuston käyttäjätunnus", - "IndexerSettingsGrabLimitHelpText": "Kaappausten enimmäismäärä, jonka {appName} sallii tietolähteelle.", + "IndexerSettingsGrabLimitHelpText": "Kaappausten enimmäismäärä, jonka {appName} sallii hakupalvelulle.", "IndexerRedactedSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Settings\" > \"Access Settings\".", "IndexerSettingsApiUser": "Rajapinnan käyttäjä", "IndexerSettingsBaseUrl": "Perus-URL", @@ -799,7 +799,7 @@ "IndexerSettingsLimitsUnit": "Rajoitusten yksikkö", "IndexerSettingsRssKey": "RSS-avain", "IndexerMTeamTpSettingsApiKeyHelpText": "Sivuston rajapinnan avain. Löytyy kohdasta \"Control Panel\" > \"Security\" > \"Laboratory\".", - "IndexerSettingsPreferMagnetUrlHelpText": "Tietolähde käyttää kaappaukseen ensisijaisesti magnet-linkkejä ja varmistuksena torrent-linkkejä.", + "IndexerSettingsPreferMagnetUrlHelpText": "Hakupalvelu käyttää kaappaukseen ensisijaisesti magnet-linkkejä ja varmistuksena torrent-linkkejä.", "IndexerTorrentSyndikatSettingsApiKeyHelpText": "Sivuston rajapinnan avain", "IndexerSettingsPreferMagnetUrl": "Suosi magnet-URL:eja", "IndexerPassThePopcornSettingsGoldenPopcornOnly": "Vain \"Golden Popcorn\"", From 3b83a00eaff4c14ae0b64f7be825cb69db491eea Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 6 Jan 2025 22:06:22 +0200 Subject: [PATCH 042/127] Fixed: (AnimeBytes) Improve M2TS and ISO titles for BR-DISK detection --- .../Indexers/Definitions/AnimeBytes.cs | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs index 780278854..ed29a958f 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs @@ -301,6 +301,8 @@ namespace NzbDrone.Core.Indexers.Definitions }; private static readonly HashSet ExcludedFileExtensions = new (StringComparer.OrdinalIgnoreCase) { ".mka", ".mds", ".md5", ".nfo", ".sfv", ".ass", ".mks", ".srt", ".ssa", ".sup", ".jpeg", ".jpg", ".png", ".otf", ".ttf" }; + private static readonly string[] PropertiesSeparator = { " | ", " / " }; + private readonly AnimeBytesSettings _settings; public AnimeBytesParser(AnimeBytesSettings settings) @@ -398,33 +400,43 @@ namespace NzbDrone.Core.Indexers.Definitions var minimumSeedTime = 259200 + (int)(size / (int)Math.Pow(1024, 3) * 18000); var propertyList = WebUtility.HtmlDecode(torrent.Property) - .Split(new[] { " | ", " / " }, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) + .Split(PropertiesSeparator, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) .ToList(); propertyList.RemoveAll(p => ExcludedProperties.Any(p.ContainsIgnoreCase)); var properties = propertyList.ToHashSet(); - if (torrent.Files.Any(f => f.FileName.ContainsIgnoreCase("Remux"))) - { - var resolutionProperty = properties.FirstOrDefault(RemuxResolutions.ContainsIgnoreCase); - - if (resolutionProperty.IsNotNullOrWhiteSpace()) - { - properties.Add($"{resolutionProperty} Remux"); - } - } - - if (properties.Any(p => p.StartsWithIgnoreCase("M2TS"))) + if (properties.Any(p => p.ContainsIgnoreCase("M2TS"))) { properties.Add("BR-DISK"); } - if (_settings.ExcludeRaw && - properties.Any(p => p.StartsWithIgnoreCase("RAW") || p.Contains("BR-DISK"))) + var isBluRayDisk = properties.Any(p => p.ContainsIgnoreCase("RAW") || p.ContainsIgnoreCase("M2TS") || p.ContainsIgnoreCase("ISO")); + + if (_settings.ExcludeRaw && isBluRayDisk) { continue; } + properties = properties + .Select(property => + { + if (isBluRayDisk) + { + property = Regex.Replace(property, @"\b(H\.?265)\b", "HEVC", RegexOptions.Compiled | RegexOptions.IgnoreCase); + property = Regex.Replace(property, @"\b(H\.?264)\b", "AVC", RegexOptions.Compiled | RegexOptions.IgnoreCase); + } + + if (torrent.Files.Any(f => f.FileName.ContainsIgnoreCase("Remux")) + && RemuxResolutions.ContainsIgnoreCase(property)) + { + property += " Remux"; + } + + return property; + }) + .ToHashSet(); + int? season = null; int? episode = null; From 8c2d5a404d4658d7252418c4a233244c08029b86 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 15 Jan 2025 01:56:32 +0200 Subject: [PATCH 043/127] Fixed BR-DISK detection for AnimeBytes --- src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs index ed29a958f..cde688637 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs @@ -406,12 +406,12 @@ namespace NzbDrone.Core.Indexers.Definitions propertyList.RemoveAll(p => ExcludedProperties.Any(p.ContainsIgnoreCase)); var properties = propertyList.ToHashSet(); - if (properties.Any(p => p.ContainsIgnoreCase("M2TS"))) + if (properties.Any(p => p.StartsWith("M2TS", StringComparison.Ordinal))) { properties.Add("BR-DISK"); } - var isBluRayDisk = properties.Any(p => p.ContainsIgnoreCase("RAW") || p.ContainsIgnoreCase("M2TS") || p.ContainsIgnoreCase("ISO")); + var isBluRayDisk = properties.Any(p => p.Equals("RAW", StringComparison.Ordinal) || p.StartsWith("M2TS", StringComparison.Ordinal) || p.StartsWith("ISO", StringComparison.Ordinal)); if (_settings.ExcludeRaw && isBluRayDisk) { From 6eb21a02a1caff10e583b64bfaa6b3125be11eb2 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 15 Jan 2025 23:21:28 +0200 Subject: [PATCH 044/127] Bump NLog, Polly, System.Memory and AngleSharp --- src/NzbDrone.Common/Prowlarr.Common.csproj | 4 ++-- src/NzbDrone.Core/Prowlarr.Core.csproj | 8 ++++---- src/NzbDrone.Host/Prowlarr.Host.csproj | 2 +- src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj | 2 +- src/NzbDrone.Update/Prowlarr.Update.csproj | 2 +- src/NzbDrone.Windows/Prowlarr.Windows.csproj | 2 +- src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj | 2 +- src/Prowlarr.Http/Prowlarr.Http.csproj | 4 ++-- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/NzbDrone.Common/Prowlarr.Common.csproj b/src/NzbDrone.Common/Prowlarr.Common.csproj index fa811ec39..359fa8820 100644 --- a/src/NzbDrone.Common/Prowlarr.Common.csproj +++ b/src/NzbDrone.Common/Prowlarr.Common.csproj @@ -9,9 +9,9 @@ - + - + diff --git a/src/NzbDrone.Core/Prowlarr.Core.csproj b/src/NzbDrone.Core/Prowlarr.Core.csproj index 1cd59cfd4..5cfd16a41 100644 --- a/src/NzbDrone.Core/Prowlarr.Core.csproj +++ b/src/NzbDrone.Core/Prowlarr.Core.csproj @@ -12,20 +12,20 @@ - + - + - + - + diff --git a/src/NzbDrone.Host/Prowlarr.Host.csproj b/src/NzbDrone.Host/Prowlarr.Host.csproj index 28343d318..07fed755c 100644 --- a/src/NzbDrone.Host/Prowlarr.Host.csproj +++ b/src/NzbDrone.Host/Prowlarr.Host.csproj @@ -4,7 +4,7 @@ Library - + diff --git a/src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj b/src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj index a580baf44..d37b95690 100644 --- a/src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj +++ b/src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/NzbDrone.Update/Prowlarr.Update.csproj b/src/NzbDrone.Update/Prowlarr.Update.csproj index be34014e7..5570a6f1b 100644 --- a/src/NzbDrone.Update/Prowlarr.Update.csproj +++ b/src/NzbDrone.Update/Prowlarr.Update.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/NzbDrone.Windows/Prowlarr.Windows.csproj b/src/NzbDrone.Windows/Prowlarr.Windows.csproj index 5ce332f73..f3baa19dc 100644 --- a/src/NzbDrone.Windows/Prowlarr.Windows.csproj +++ b/src/NzbDrone.Windows/Prowlarr.Windows.csproj @@ -4,7 +4,7 @@ true - + diff --git a/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj b/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj index 3c52ecc40..aac0b246f 100644 --- a/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj +++ b/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj @@ -4,7 +4,7 @@ - + diff --git a/src/Prowlarr.Http/Prowlarr.Http.csproj b/src/Prowlarr.Http/Prowlarr.Http.csproj index 0a78a2391..938b722a4 100644 --- a/src/Prowlarr.Http/Prowlarr.Http.csproj +++ b/src/Prowlarr.Http/Prowlarr.Http.csproj @@ -4,8 +4,8 @@ - - + + From 26e4dcad655138e5c456532a7a75b4dd6d9a0de5 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 19 Jan 2025 17:14:44 +0200 Subject: [PATCH 045/127] Bump version to 1.30.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 53c0783f8..d4a2ec0b4 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.30.1' + majorVersion: '1.30.2' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From ed5120811677961e273c7ad81eb79e70a02f3083 Mon Sep 17 00:00:00 2001 From: Steel City Phantom Date: Wed, 9 Oct 2024 19:41:07 -0400 Subject: [PATCH 046/127] Auto-detect building on macOS ARM (cherry picked from commit 64122b4cfb3bf53bdbf5c924baee5e1b0814501a) --- src/Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index e161b9952..ce3672c38 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -221,7 +221,7 @@ <_UsingDefaultRuntimeIdentifier>true - osx-x64 + osx-$(Architecture) From 37610eec4069720e55c5783b67630eba1ea887f5 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 22 Jan 2025 19:44:49 +0200 Subject: [PATCH 047/127] Fixed: (TorrentDay) Improved error message for expired cookies --- .../Indexers/Definitions/TorrentDay.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/TorrentDay.cs b/src/NzbDrone.Core/Indexers/Definitions/TorrentDay.cs index 9371c8aa0..aa02c4578 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/TorrentDay.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/TorrentDay.cs @@ -7,6 +7,7 @@ using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Core.Annotations; using NzbDrone.Core.Configuration; +using NzbDrone.Core.Indexers.Exceptions; using NzbDrone.Core.Indexers.Settings; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Messaging.Events; @@ -52,7 +53,7 @@ namespace NzbDrone.Core.Indexers.Definitions public override IParseIndexerResponse GetParser() { - return new TorrentDayParser(Settings, Capabilities.Categories); + return new TorrentDayParser(Settings, Capabilities.Categories, _logger); } protected override IDictionary GetCookies() @@ -228,15 +229,29 @@ namespace NzbDrone.Core.Indexers.Definitions { private readonly TorrentDaySettings _settings; private readonly IndexerCapabilitiesCategories _categories; + private readonly Logger _logger; - public TorrentDayParser(TorrentDaySettings settings, IndexerCapabilitiesCategories categories) + public TorrentDayParser(TorrentDaySettings settings, IndexerCapabilitiesCategories categories, Logger logger) { _settings = settings; _categories = categories; + _logger = logger; } public IList ParseResponse(IndexerResponse indexerResponse) { + if (indexerResponse.HttpResponse.HasHttpRedirect) + { + _logger.Warn("Redirected to {0} from indexer request", indexerResponse.HttpResponse.RedirectUrl); + + if (indexerResponse.HttpResponse.RedirectUrl.ContainsIgnoreCase("/login.php")) + { + throw new IndexerException(indexerResponse, "We are being redirected to the login page. Most likely your session expired or was killed. Recheck your cookie and try testing the indexer."); + } + + throw new IndexerException(indexerResponse, "Redirected to {0} from indexer request", indexerResponse.HttpResponse.RedirectUrl); + } + var torrentInfos = new List(); var rows = JsonConvert.DeserializeObject(indexerResponse.Content); From 6d2d49f7bd1c3a30a4b5b1e192ab323426b819bc Mon Sep 17 00:00:00 2001 From: bakerboy448 <55419169+bakerboy448@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:36:03 -0600 Subject: [PATCH 048/127] Fixed: (PTP) Filtering non-freeleech releases when using Freeleech Only Co-authored-by: Bogdan --- .../PassThePopcorn/PassThePopcornParser.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcornParser.cs b/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcornParser.cs index 997ba97e0..e08536162 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcornParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcornParser.cs @@ -56,6 +56,19 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn { foreach (var torrent in result.Torrents) { + // skip non-freeleech results when freeleech only is set + var downloadVolumeFactor = torrent.FreeleechType?.ToUpperInvariant() switch + { + "FREELEECH" => 0, + "HALF LEECH" => 0.5, + _ => 1 + }; + + if (_settings.FreeleechOnly && downloadVolumeFactor != 0.0) + { + continue; + } + var id = torrent.Id; var title = torrent.ReleaseName; @@ -94,12 +107,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn ImdbId = result.ImdbId.IsNotNullOrWhiteSpace() ? int.Parse(result.ImdbId) : 0, Scene = torrent.Scene, IndexerFlags = flags, - DownloadVolumeFactor = torrent.FreeleechType?.ToUpperInvariant() switch - { - "FREELEECH" => 0, - "HALF LEECH" => 0.5, - _ => 1 - }, + DownloadVolumeFactor = downloadVolumeFactor, UploadVolumeFactor = 1, MinimumRatio = 1, MinimumSeedTime = 345600, From d8354408a4ef98d271cecdf5e0c5fc65cc9b5255 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 23 Jan 2025 15:17:21 +0200 Subject: [PATCH 049/127] Update categories for AnimeTorrents Co-authored-by: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com> --- src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs index 7ba07ab80..120fd690d 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs @@ -119,6 +119,7 @@ namespace NzbDrone.Core.Indexers.Definitions caps.Categories.AddCategoryMapping(17, NewznabStandardCategory.BooksComics, "Doujinshi"); caps.Categories.AddCategoryMapping(18, NewznabStandardCategory.BooksComics, "Doujinshi 18+"); caps.Categories.AddCategoryMapping(19, NewznabStandardCategory.Audio, "OST"); + caps.Categories.AddCategoryMapping(20, NewznabStandardCategory.AudioAudiobook, "Audiobooks"); return caps; } From e15e57329e1b2449ed25cbf0bc91bdd666ea5fbc Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 23 Jan 2025 15:19:10 +0200 Subject: [PATCH 050/127] Update categories for XSpeeds Co-authored-by: Garfield69 --- src/NzbDrone.Core/Indexers/Definitions/XSpeeds.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/XSpeeds.cs b/src/NzbDrone.Core/Indexers/Definitions/XSpeeds.cs index 381441434..72d4f1c2b 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/XSpeeds.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/XSpeeds.cs @@ -121,8 +121,15 @@ public class XSpeeds : TorrentIndexerBase caps.Categories.AddCategoryMapping(112, NewznabStandardCategory.MoviesOther, "Anime Movies"); caps.Categories.AddCategoryMapping(111, NewznabStandardCategory.MoviesOther, "Anime TV"); caps.Categories.AddCategoryMapping(150, NewznabStandardCategory.PC, "Apps"); - caps.Categories.AddCategoryMapping(80, NewznabStandardCategory.AudioAudiobook, "Audiobooks"); - caps.Categories.AddCategoryMapping(48, NewznabStandardCategory.Books, "Books Magazines"); + caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.TV, "AV1"); + caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.Movies, "AV1"); + caps.Categories.AddCategoryMapping(159, NewznabStandardCategory.Movies, "Movie Boxsets AV1"); + caps.Categories.AddCategoryMapping(158, NewznabStandardCategory.Movies, "Movies AV1"); + caps.Categories.AddCategoryMapping(157, NewznabStandardCategory.TV, "TV AV1"); + caps.Categories.AddCategoryMapping(160, NewznabStandardCategory.TV, "TV Boxsets AV1"); + caps.Categories.AddCategoryMapping(153, NewznabStandardCategory.Books, "Books"); + caps.Categories.AddCategoryMapping(154, NewznabStandardCategory.AudioAudiobook, "Audiobooks"); + caps.Categories.AddCategoryMapping(155, NewznabStandardCategory.Books, "Books & Magazines"); caps.Categories.AddCategoryMapping(68, NewznabStandardCategory.MoviesOther, "Cams/TS"); caps.Categories.AddCategoryMapping(140, NewznabStandardCategory.TVDocumentary, "Documentary"); caps.Categories.AddCategoryMapping(10, NewznabStandardCategory.MoviesDVD, "DVDR"); @@ -154,6 +161,7 @@ public class XSpeeds : TorrentIndexerBase caps.Categories.AddCategoryMapping(146, NewznabStandardCategory.MoviesSD, "Movies SD"); caps.Categories.AddCategoryMapping(13, NewznabStandardCategory.Audio, "Music"); caps.Categories.AddCategoryMapping(135, NewznabStandardCategory.AudioLossless, "Music/FLAC"); + caps.Categories.AddCategoryMapping(151, NewznabStandardCategory.Audio, "Karaoke"); caps.Categories.AddCategoryMapping(136, NewznabStandardCategory.Audio, "Music Boxset"); caps.Categories.AddCategoryMapping(148, NewznabStandardCategory.AudioVideo, "Music Videos"); caps.Categories.AddCategoryMapping(9, NewznabStandardCategory.Other, "Other"); From b463a3f54be2416ef88831364d02cd298573dcfc Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 23 Jan 2025 15:22:36 +0200 Subject: [PATCH 051/127] Update categories for RuTracker Co-authored-by: Garfield69 --- src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs b/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs index 26a5a42de..79244b6b2 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs @@ -933,6 +933,8 @@ namespace NzbDrone.Core.Indexers.Definitions caps.Categories.AddCategoryMapping(1224, NewznabStandardCategory.AudioLossless, "|- Авторская песня (lossless)"); caps.Categories.AddCategoryMapping(1225, NewznabStandardCategory.AudioMP3, "|- Авторская песня (lossy)"); caps.Categories.AddCategoryMapping(1226, NewznabStandardCategory.Audio, "|- Менестрели и ролевики (lossy и lossless)"); + caps.Categories.AddCategoryMapping(782, NewznabStandardCategory.Audio, "Лейбл- и сцен-паки. Неофициальные сборники и ремастеринги. AI-музыка"); + caps.Categories.AddCategoryMapping(577, NewznabStandardCategory.Audio, "|- AI-Music - музыка ИИ, нейросетей (lossy и lossless)"); caps.Categories.AddCategoryMapping(1842, NewznabStandardCategory.AudioLossless, "Label Packs (lossless)"); caps.Categories.AddCategoryMapping(1648, NewznabStandardCategory.AudioMP3, "Label packs, Scene packs (lossy)"); caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.AudioLossless, "|- Неофициальные сборники и ремастеринги (lossless)"); From 8ac68240adf67acb0fee53abe168e4ad57a30f6f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 23 Jan 2025 16:42:41 +0200 Subject: [PATCH 052/127] Revert "Improve error message on non-JSON responses for Nebulance" This reverts commit 2c3621d25e1f4e67abeed6fefa160f114e5096a3. --- src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs b/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs index 731c96bb5..dcc26338e 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Nebulance.cs @@ -240,6 +240,8 @@ namespace NzbDrone.Core.Indexers.Definitions public IList ParseResponse(IndexerResponse indexerResponse) { + var torrentInfos = new List(); + if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK) { STJson.TryDeserialize>(indexerResponse.HttpResponse.Content, out var errorResponse); @@ -247,13 +249,6 @@ namespace NzbDrone.Core.Indexers.Definitions throw new IndexerException(indexerResponse, "Unexpected response status '{0}' code from indexer request: {1}", indexerResponse.HttpResponse.StatusCode, errorResponse?.Result?.Error?.Message ?? "Check the logs for more information."); } - if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value)) - { - throw new IndexerException(indexerResponse, "Unexpected response header {0} from indexer request, expected {1}", indexerResponse.HttpResponse.Headers.ContentType, HttpAccept.Json.Value); - } - - var torrentInfos = new List(); - JsonRpcResponse jsonResponse; try From 1f7ac7d7d608959126b2ec5441638ed37ebb48e3 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 24 Jan 2025 11:18:24 +0000 Subject: [PATCH 053/127] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: HanaO00 Co-authored-by: Lizandra Candido da Silva Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt_BR/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/fi.json | 44 +++++++++---------- src/NzbDrone.Core/Localization/Core/fr.json | 2 +- .../Localization/Core/pt_BR.json | 20 ++++----- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 74a5e7a50..0f63479f7 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -25,7 +25,7 @@ "SettingsTimeFormat": "Kellonajan esitys", "Message": "Viesti", "Seeders": "Jakajat", - "TestAll": "Kaikkien testaus", + "TestAll": "Koesta kaikki", "AddDownloadClient": "Lisää latauspalvelu", "CustomFilters": "Omat suodattimet", "DeleteTag": "Poista tunniste", @@ -122,7 +122,7 @@ "TagsSettingsSummary": "Täältä näet kaikki tunnisteet käyttökohteineen ja voit poistaa käyttämättömät tunnisteet.", "Tasks": "Tehtävät", "Test": "Testaa", - "TestAllClients": "Koesta latauspalvelut", + "TestAllClients": "Koesta palvelut", "Time": "Aika", "Title": "Nimike", "Tomorrow": "Huomenna", @@ -130,11 +130,11 @@ "Torrents": "Torrentit", "Type": "Tyyppi", "UILanguage": "Käyttöliittymän kieli", - "UnableToAddANewApplicationPleaseTryAgain": "Uuden sovelluksen lisäys epäonnistui. Yritä uudelleen.", + "UnableToAddANewApplicationPleaseTryAgain": "Virhe lisättäessä sovellusta. Yritä uudelleen.", "UnableToAddANewIndexerPleaseTryAgain": "Uuden hakupalvelun lisääminen epäonnistui. Yritä uudelleen.", - "UnableToAddANewIndexerProxyPleaseTryAgain": "Uuden tiedonhaun välityspalvelimen lisäys epäonnistui. Yritä uudelleen.", - "BackupsLoadError": "Varmuuskopioinnin lataus epäonnistui", - "DownloadClientsLoadError": "Latauspalveluiden lataus epäonnistui", + "UnableToAddANewIndexerProxyPleaseTryAgain": "Virhe lisättäessä tiedonhaun välityspalvelinta. Yritä uudelleen.", + "BackupsLoadError": "Virhe ladattaessa varmuuskopioita.", + "DownloadClientsLoadError": "Virhe ladattaessa latauspalveluita.", "UnableToLoadGeneralSettings": "Yleisasetusten lataus epäonnistui", "UpdateAutomaticallyHelpText": "Lataa ja asenna päivitykset automaattisesti. Voit myös edelleen suorittaa asennuksen järjestelmäasetusten päivitykset-osiosta.", "Added": "Lisäysaika", @@ -168,10 +168,10 @@ "Sort": "Järjestys", "UnableToAddANewDownloadClientPleaseTryAgain": "Latauspalvelun lisääminen epäonnistui. Yritä uudelleen.", "AppDataLocationHealthCheckMessage": "Päivityksiä ei sallita, jotta AppData-kansion poistaminen päivityksen yhteydessä voidaan estää", - "UnableToLoadHistory": "Historian lataus epäonnistui", - "UnableToLoadNotifications": "Ilmoituspalveluiden lataus epäonnistui", - "UnableToLoadTags": "Tunnisteiden lataus epäonnistui", - "UnableToLoadUISettings": "Käyttöliittymäasetusten lataus epäonnistui", + "UnableToLoadHistory": "Virhe ladattaessa historiaa.", + "UnableToLoadNotifications": "Virhe ladattaessa ilmoituspalveluita.", + "UnableToLoadTags": "Virhe ladattaessa tunnisteita.", + "UnableToLoadUISettings": "Virhe ladattaessa käyttöliittymäasetuksia.", "UnsavedChanges": "Muutoksia ei ole tallennettu", "Yesterday": "Eilen", "ConnectionLost": "Yhteys menetettiin", @@ -209,7 +209,7 @@ "TableOptions": "Taulukkonäkymän asetukset", "TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys", "TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille hakupalveluille.", - "UnableToAddANewAppProfilePleaseTryAgain": "Uuden sovellusprofiilin lisäys epäonnistui. Yritä uudelleen.", + "UnableToAddANewAppProfilePleaseTryAgain": "Virhe lisättäessä sovellusprofiilia. Yritä uudelleen.", "UnableToAddANewNotificationPleaseTryAgain": "Ilmoituspalvelun lisääminen epäonnistui. Yritä uudelleen.", "Version": "Versio", "View": "Näkymä", @@ -232,7 +232,7 @@ "Cancel": "Peruuta", "CancelPendingTask": "Haluatko varmasti perua odottavan tehtävän?", "CertificateValidation": "Varmenteen vahvistus", - "CertificateValidationHelpText": "Muuta HTTPS-varmennevahvistuksen tarkkuutta. Älä muuta, jollet ymmärrä tähän liittyviä riskejä.", + "CertificateValidationHelpText": "Määritä HTTPS-varmennevahvistuksen tiukkuus. Älä muuta, jos et ymmärrä riskejä.", "ChangeHasNotBeenSavedYet": "Muutosta ei ole vielä tallennettu", "Clear": "Tyhjennä", "CloneProfile": "Monista profiili", @@ -324,7 +324,7 @@ "UISettingsSummary": "Kalenterin, päiväyksen ja kellonajan sekä kielen ja heikentyneelle värinäölle sopivan tilan asetukset.", "SettingsIndexerLoggingHelpText": "Kirjaa tarkempia tietoja hakupalveluiden toiminnasta, mukaanlukien vastaukset", "IndexerTagsHelpText": "Tunnisteilla voit kohdistaa tiedonhaun välityspalvelimia ja määrittää mihin sovelluksiin ne synkronoidaan.", - "UnableToLoadAppProfiles": "Sovellusprofiilien lataus epäonnistui", + "UnableToLoadAppProfiles": "Virhe ladattaessa sovellusprofiileja.", "AppProfileSelectHelpText": "Sovellusprofiilieilla määritetään hakupalvelulle sovellussynkronoinnin yhteydessä aktivoitavat hakutavat (RSS/automaatti/manuaali).", "IndexerQuery": "Hakupalvelukysely", "IndexerRss": "Hakupalvelun RSS", @@ -338,8 +338,8 @@ "SyncLevel": "Synkronoinnin laajuus", "SyncLevelAddRemove": "Vain lisäys/poisto: Kun {appName}in hakupalveluita lisätään tai poistetaan, päivittyy myös tämä etäsovellus.", "SyncAppIndexers": "Synkronoi sovelluksiin", - "TestAllApps": "Testaa kaikki sovellukset", - "UnableToLoadIndexerProxies": "Tiedonhaun välityspalvelinten lataus epäonnistui", + "TestAllApps": "Koesta sovellukset", + "UnableToLoadIndexerProxies": "Virhe ladattaessa tiedonhaun välityspalvelimia.", "AddedToDownloadClient": "Julkaisu lisättiin latauspalveluun", "AddNewIndexer": "Lisää uusi hakupalvelu", "AddToDownloadClient": "Lisää julkaisu latauspalveluun", @@ -374,7 +374,7 @@ "Notifications": "Ilmoituspalvelut", "NotificationTriggersHelpText": "Valitse ilmoituksen laukaisevat tapahtumat.", "Stats": "Tilastot", - "UnableToLoadDevelopmentSettings": "Kehittäjäasetusten lataus epäonnistui", + "UnableToLoadDevelopmentSettings": "Virhe ladattaessa kehittäjäasetuksia.", "AppSettingsSummary": "Sovellukset ja asetukset, joilla määritetään miten {appName} viestii PVR-sovellustesi kanssa.", "Privacy": "Yksityisyys", "NetCore": ".NET", @@ -389,7 +389,7 @@ "OnHealthIssue": "Vakausongelmat", "HistoryCleanupDaysHelpText": "Poista automaattinen tyhjennys käytöstä asettamalla arvoksi 0.", "HistoryCleanupDaysHelpTextWarning": "Tässä määritettyä aikaa vanhemmat tiedostot poistetaan automaattisesti roskakorista pysyvästi.", - "TestAllIndexers": "Koesta hakupalvelut", + "TestAllIndexers": "Koesta palvelut", "UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti rajapinnan kanssa viestinyt sovellus.", "Categories": "Kategoriat", "Database": "Tietokanta", @@ -402,7 +402,7 @@ "Proxies": "Välityspalvelimet", "Public": "Julkinen", "SemiPrivate": "Osittain yksityinen", - "ApplicationsLoadError": "Sovelluslistan lataus epäonnistui", + "ApplicationsLoadError": "Virhe ladattaessa sovelluslistaa.", "Url": "URL", "Website": "Verkkosivusto", "IndexerNoDefinitionCheckHealthCheckMessage": "Hakupalveluiden määritykset puuttuvat, eivätkä ne toimi: {indexerNames}. Poista tai lisää ne {appName}iin uudelleen.", @@ -412,7 +412,7 @@ "GrabReleases": "Kaappaa julkaisu(t)", "Link": "Linkki", "SearchTypes": "Etsittävät tyypit", - "UnableToLoadIndexers": "Hakupalveluiden lataus epäonnistui", + "UnableToLoadIndexers": "Virhe ladattaessa hakupalveluita.", "Yes": "Kyllä", "MappedDrivesRunningAsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja UKK:sta.", "No": "Ei", @@ -501,7 +501,7 @@ "TotalIndexerSuccessfulGrabs": "Onnistuneiden hakupalvelukaappausten kokonaismäärä", "AppUpdated": "{appName} on päivitetty", "AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on käynnistettävä uudelleen.", - "IndexerDownloadClientHelpText": "Määritä {appName}issa tästä hakupalvelusta tehdyille kaappauksille käytettävä latauspalvelu.", + "IndexerDownloadClientHelpText": "Määritä {appName}in käyttöliittymässä tästä hakupalvelusta kaapattaessa käytettävä latauspalvelu.", "AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt tunnistautumisen käyttöönoton. Paikallisilta osoitteilta se voidaan valinnaisesti poistaa käytöstä.", "TotalGrabs": "Kaappausten kokonaismäärä", "AddDownloadClientImplementation": "Lisätään latauspalvelua – {implementationName}", @@ -556,7 +556,7 @@ "Implementation": "Toteutus", "IndexerCategories": "Hakupalvelukategoriat", "IndexerStatus": "Hakupalvelun tila", - "ManageApplications": "Hallitse sovelluksia", + "ManageApplications": "Sovellusten hallinta", "NewznabUrl": "Newznab URL", "PackSeedTime": "Paketin jakoaika", "PackSeedTimeHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.", @@ -668,7 +668,7 @@ "DownloadClientFreeboxSettingsPortHelpText": "Freebox-liittymän portti. Oletus on {port}.", "DownloadClientPneumaticSettingsNzbFolder": "NZB-kansio", "DownloadClientQbittorrentSettingsSequentialOrder": "Peräkkäinen järjestys", - "CustomFilter": "Mukautettu suodatin", + "CustomFilter": "Oma suodatin", "DownloadClientFreeboxSettingsAppIdHelpText": "Freebox-rajapinnan käyttöoikeutta määritettäessä käytettävä App ID -sovellustunniste.", "DownloadClientFreeboxSettingsAppToken": "Sovellustietue", "DownloadClientNzbgetSettingsAddPausedHelpText": "Tämä vaatii vähintään NzbGetin version 16.0.", diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index b156ce10a..34fb107a9 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -384,7 +384,7 @@ "HistoryCleanupDaysHelpTextWarning": "Les fichiers dans la corbeille plus anciens que le nombre de jours sélectionné seront nettoyés automatiquement", "OnGrab": "Récupéré à la sortie", "OnHealthIssue": "Lors de problème de santé", - "TestAllIndexers": "Testez tous les indexeurs", + "TestAllIndexers": "Tester tous les indexeurs", "UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent fourni par l'application qui a appelé l'API", "Database": "Base de données", "HistoryCleanup": "Nettoyage de l'historique", diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 25d1187a4..5ba6e6764 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -126,7 +126,7 @@ "DownloadClientStatusAllClientHealthCheckMessage": "Todos os clientes de download estão indisponíveis devido a falhas", "DownloadClientStatusSingleClientHealthCheckMessage": "Clientes de download indisponíveis devido a falhas: {downloadClientNames}", "DownloadClients": "Clientes de download", - "DownloadClientsSettingsSummary": "Configuração de clientes de download para integração com a pesquisa da interface do usuário do {appName}", + "DownloadClientsSettingsSummary": "Configuração de clientes de download para integração com a pesquisa da interface do {appName}", "Duration": "Duração", "Edit": "Editar", "EditIndexer": "Editar Indexador", @@ -204,7 +204,7 @@ "IndexerNoDefinitionCheckHealthCheckMessage": "Os indexadores não têm definição e não funcionarão: {indexerNames}. Remova e (ou) adicione novamente ao {appName}.", "IndexerObsoleteCheckMessage": "Os seguintes indexadores são obsoletos ou foram atualizados: {0}. Remova-os e/ou adicione-os novamente ao {appName}", "IndexerPriority": "Prioridade do indexador", - "IndexerPriorityHelpText": "Prioridade do Indexador de 1 (mais alta) a 50 (mais baixa). Padrão: 25.", + "IndexerPriorityHelpText": "Prioridade do indexador, de 1 (mais alta) a 50 (mais baixa). Padrão: 25.", "IndexerProxies": "Proxies do Indexador", "IndexerProxy": "Proxy do Indexador", "IndexerProxyStatusAllUnavailableHealthCheckMessage": "Todos os proxies estão indisponíveis devido a falhas", @@ -248,7 +248,7 @@ "MassEditor": "Editor em Massa", "Mechanism": "Mecanismo", "Message": "Mensagem", - "MinimumSeeders": "Mínimo de Seeders", + "MinimumSeeders": "Mínimo de semeadores", "MinimumSeedersHelpText": "Semeadores mínimos exigidos pelo aplicativo para o indexador baixar", "Mode": "Modo", "More": "Mais", @@ -513,7 +513,7 @@ "DeleteSelectedDownloadClients": "Excluir cliente(s) de download", "DeleteSelectedDownloadClientsMessageText": "Tem certeza de que deseja excluir o(s) {count} cliente(s) de download selecionado(s)?", "DeleteSelectedIndexersMessageText": "Tem certeza de que deseja excluir o(s) {count} indexador(es) selecionado(s)?", - "DownloadClientPriorityHelpText": "Priorizar vários clientes de download. Usamos um rodízio para clientes com a mesma prioridade.", + "DownloadClientPriorityHelpText": "Priorizar vários clientes de download. Usamos uma distribuição equilibrada para clientes com a mesma prioridade.", "EditSelectedDownloadClients": "Editar clientes de download selecionados", "EditSelectedIndexers": "Editar indexadores selecionados", "ManageDownloadClients": "Gerenciar clientes de download", @@ -538,10 +538,10 @@ "PackSeedTime": "Tempo de Semente do Pacote", "PackSeedTimeHelpText": "A hora em que um torrent de pacote (temporada ou discografia) deve ser propagado antes de parar, vazio é o padrão do aplicativo", "QueryType": "Tipo de consulta", - "SeedTime": "Tempo de Semeação", + "SeedTime": "Tempo de semeadura", "SearchAllIndexers": "Pesquisar todos os indexadores", "SearchCountIndexers": "Pesquisar {count} indexador(es)", - "SeedRatio": "Proporção de sementes", + "SeedRatio": "Proporção de semeadura", "SeedRatioHelpText": "A proporção que um torrent deve atingir antes de parar, vazio é o padrão do aplicativo", "SeedTimeHelpText": "O tempo que um torrent deve ser propagado antes de parar, vazio é o padrão do aplicativo", "SelectedCountOfCountReleases": "{selectedCount} de {itemCount} lançamentos selecionados", @@ -611,7 +611,7 @@ "NotificationsEmailSettingsUseEncryptionHelpText": "Se preferir usar criptografia se configurado no servidor, usar sempre criptografia via SSL (somente porta 465) ou StartTLS (qualquer outra porta) ou nunca usar criptografia", "NotificationsEmailSettingsUseEncryption": "Usar Criptografia", "IndexerHDBitsSettingsPasskeyHelpText": "Chave de Acesso dos Detalhes do Usuário", - "IndexerSettingsPasskey": "Chave de Acesso", + "IndexerSettingsPasskey": "Chave de acesso", "IndexerAlphaRatioSettingsExcludeSceneHelpText": "Excluir lançamentos SCENE dos resultados", "IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Pesquisar lançamentos freeleech somente", "IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Pesquisar lançamentos freeleech somente", @@ -632,7 +632,7 @@ "IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Pesquisar lançamentos por nomes de grupos", "IndexerHDBitsSettingsCodecs": "Codecs", "IndexerHDBitsSettingsMediumsHelpText": "se não for especificado, todas as opções serão usadas.", - "IndexerHDBitsSettingsOriginsHelpText": "se não for especificado, todas as opções serão usadas.", + "IndexerHDBitsSettingsOriginsHelpText": "Se não for especificado, todas as opções serão usadas.", "IndexerHDBitsSettingsUseFilenames": "Usar nomes de arquivos", "IndexerHDBitsSettingsUsernameHelpText": "Nome de Usuário do Site", "IndexerHDBitsSettingsMediums": "Meios", @@ -652,7 +652,7 @@ "IndexerSettingsApiUser": "Usuário da API", "IndexerSettingsBaseUrl": "URL Base", "IndexerSettingsCookie": "Cookie", - "IndexerSettingsCookieHelpText": "Cookie do Site", + "IndexerSettingsCookieHelpText": "Cookie do site", "IndexerSettingsFreeleechOnly": "Só Freeleech", "IndexerSettingsGrabLimit": "Limite de Captura", "IndexerSettingsGrabLimitHelpText": "O número máximo de capturas conforme especificado pela respectiva unidade que {appName} permitirá ao site", @@ -744,7 +744,7 @@ "Mixed": "Misturado", "Donate": "Doar", "ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Sincronizar Lista de Bloqueio de Hashes de Torrents Rejeitados Enquanto Baixando", - "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Se um torrent for bloqueado por hash, pode não ser rejeitado corretamente durante o RSS/Pesquisa de alguns indexadores. Ativar isso permitirá que ele seja rejeitado após o torrent ser capturado, mas antes de ser enviado ao cliente.", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Se um torrent for bloqueado por hash, pode não ser rejeitado corretamente durante a Sincronização RSS/Pesquisa em alguns indexadores. Ativar isso permitirá que ele seja rejeitado após obter o torrent, mas antes de enviar ao cliente.", "ClickToChangeQueryOptions": "Clique para alterar as opções de consulta", "IndexerMTeamTpSettingsApiKeyHelpText": "Chave API do Site (Encontrada no Painel de Controle do Usuário => Segurança => Laboratório)", "IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Pesquise apenas lançamentos freeleech", From f0540a5f8b95a6fac68166947aeb6c07214870e7 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 24 Jan 2025 17:33:38 +0200 Subject: [PATCH 054/127] Bump version to 1.31.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d4a2ec0b4..9113e9dea 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.30.2' + majorVersion: '1.31.0' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 22834a852a4643b00fe98b7ee1550d129a03f710 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 29 Jan 2025 18:39:22 +0200 Subject: [PATCH 055/127] Fixed: TV search with tmdbid for Newznab and Torznab --- .../Indexers/Definitions/Newznab/NewznabRequestGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRequestGenerator.cs b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRequestGenerator.cs index f9ab56128..ad3f48b07 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRequestGenerator.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRequestGenerator.cs @@ -128,7 +128,7 @@ namespace NzbDrone.Core.Indexers.Newznab parameters.Set("tvdbid", searchCriteria.TvdbId.Value.ToString()); } - if (searchCriteria.TmdbId.HasValue && capabilities.TvSearchTvdbAvailable) + if (searchCriteria.TmdbId.HasValue && capabilities.TvSearchTmdbAvailable) { parameters.Set("tmdbid", searchCriteria.TmdbId.Value.ToString()); } From 979db70e6851e1a3501394193722a97d2367d46a Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 2 Feb 2025 12:47:52 +0200 Subject: [PATCH 056/127] Bump version to 1.31.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9113e9dea..15e63d064 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.31.0' + majorVersion: '1.31.1' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 08b4eddbc53c8ae0a3025cfe41072031c44874c5 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 2 Feb 2025 08:33:23 +0000 Subject: [PATCH 057/127] Multiple Translations updated by Weblate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ignore-downstream Co-authored-by: Mailme Dashite Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Co-authored-by: marapavelka Co-authored-by: 宿命 <331874545@qq.com> Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/de/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_CN/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/cs.json | 103 ++++++++++-- src/NzbDrone.Core/Localization/Core/de.json | 158 ++++++++++++++++-- src/NzbDrone.Core/Localization/Core/fi.json | 6 +- .../Localization/Core/zh_CN.json | 15 +- 4 files changed, 251 insertions(+), 31 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 48fb9848c..2ac6af341 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -23,7 +23,7 @@ "ProxyType": "Typ serveru proxy", "Reddit": "Reddit", "ErrorLoadingContents": "Chyba při načítání obsahu", - "IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Všechny indexery nejsou k dispozici z důvodu selhání po dobu delší než 6 hodin", + "IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Všechny indexery jsou nedostupné z důvodu selhání déle než 6 hodin", "RemovedFromTaskQueue": "Odebráno z fronty úkolů", "ResetAPIKey": "Resetovat klíč API", "SSLCertPassword": "Heslo SSL Cert", @@ -52,10 +52,10 @@ "IncludeHealthWarningsHelpText": "Včetně varování ohledně zdraví", "Indexer": "Indexer", "IndexerFlags": "Příznaky indexeru", - "IndexerPriority": "Priorita indexování", - "IndexerPriorityHelpText": "Priorita indexování od 1 (nejvyšší) do 50 (nejnižší). Výchozí: 25.", + "IndexerPriority": "Priorita indexeru", + "IndexerPriorityHelpText": "Priorita indexeru od 1 (Nejvyšší) do 50 (Nejnižší). Výchozí: 25.", "Indexers": "Indexery", - "IndexerStatusAllUnavailableHealthCheckMessage": "Všechny indexery nejsou k dispozici z důvodu selhání", + "IndexerStatusAllUnavailableHealthCheckMessage": "Všechny indexery jsou nedostupné z důvodu selhání", "LastWriteTime": "Čas posledního zápisu", "Level": "Úroveň", "LogLevel": "Úroveň protokolu", @@ -73,8 +73,8 @@ "ApiKey": "Klíč API", "AppDataDirectory": "Adresář AppData", "AppDataLocationHealthCheckMessage": "Aktualizace nebude možná, aby se zabránilo odstranění AppData při aktualizaci", - "ApplicationStatusCheckAllClientMessage": "Všechny aplikace jsou nedostupné z důvodu poruch", - "ApplicationStatusCheckSingleClientMessage": "Aplikace nedostupné z důvodu poruch: {0}", + "ApplicationStatusCheckAllClientMessage": "Všechny aplikace jsou nedostupné z důvodu selhání", + "ApplicationStatusCheckSingleClientMessage": "Aplikace nedostupné z důvodu selhání: {0}", "Apply": "Použít", "Branch": "Větev", "BranchUpdate": "Větev použitá k aktualizaci {appName}u", @@ -105,7 +105,7 @@ "Tasks": "Úkoly", "Test": "Test", "UnableToLoadTags": "Značky nelze načíst", - "IndexerProxyStatusAllUnavailableHealthCheckMessage": "Všechny indexery nejsou k dispozici z důvodu selhání", + "IndexerProxyStatusAllUnavailableHealthCheckMessage": "Všechny proxy indexerů jsou nedostupné z důvodu selhání", "ApplyTags": "Použít štítky", "MoreInfo": "Více informací", "System": "Systém", @@ -183,7 +183,7 @@ "BypassProxyForLocalAddresses": "Obcházení proxy serveru pro místní adresy", "DeleteIndexerProxyMessageText": "Opravdu chcete odstranit proxy indexeru ‚{name}‘?", "DeleteTag": "Odstranit štítek", - "IndexerProxyStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání: {indexerProxyNames}", + "IndexerProxyStatusUnavailableHealthCheckMessage": "Proxy indexerů nedostupné z důvodu selhání: {indexerProxyNames}", "Name": "název", "New": "Nový", "Protocol": "Protokol", @@ -265,7 +265,7 @@ "Exception": "Výjimka", "ExistingTag": "Stávající štítek", "IllRestartLater": "Restartuji později", - "IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání po dobu delší než 6 hodin: {indexerNames}", + "IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání déle než 6 hodin: {indexerNames}", "IndexerStatusUnavailableHealthCheckMessage": "Indexery nedostupné z důvodu selhání: {indexerNames}", "SettingsTimeFormat": "Časový formát", "ShowAdvanced": "Zobrazit pokročilé", @@ -320,8 +320,8 @@ "UnableToLoadIndexers": "Nelze načíst indexery", "Yes": "Ano", "GrabReleases": "Získat vydání", - "ApplicationLongTermStatusCheckSingleClientMessage": "Aplikace nedostupné z důvodu poruchy po dobu delší než 6 hodin: {0}", - "ApplicationLongTermStatusCheckAllClientMessage": "Všechny aplikace jsou z důvodu poruchy nedostupné déle než 6 hodin", + "ApplicationLongTermStatusCheckSingleClientMessage": "Aplikace nedostupné z důvodu selhání déle než 6 hodin: {0}", + "ApplicationLongTermStatusCheckAllClientMessage": "Všechny aplikace jsou nedostupné z důvodu selhání déle než 6 hodin", "Ended": "Ukončeno", "LastDuration": "lastDuration", "LastExecution": "Poslední poprava", @@ -370,8 +370,8 @@ "Artist": "Umělec", "EditIndexerImplementation": "Upravit indexer - {implementationName}", "Episode": "Epizoda", - "NotificationStatusAllClientHealthCheckMessage": "Všechny seznamy nejsou k dispozici z důvodu selhání", - "NotificationStatusSingleClientHealthCheckMessage": "Seznamy nejsou k dispozici z důvodu selhání: {notificationNames}", + "NotificationStatusAllClientHealthCheckMessage": "Všechna oznámení jsou nedostupná z důvodu selhání", + "NotificationStatusSingleClientHealthCheckMessage": "Oznámení nedostupná z důvodu selhání: {notificationNames}", "Application": "Aplikace", "AppUpdatedVersion": "{appName} byl aktualizován na verzi `{version}`, abyste získali nejnovější změny, musíte znovu načíst {appName}", "Encoding": "Kódování", @@ -409,7 +409,7 @@ "days": "dnů", "Id": "ID", "CountApplicationsSelected": "{count} vybraných aplikací", - "IndexerHDBitsSettingsCodecs": "Kodek", + "IndexerHDBitsSettingsCodecs": "Kodeky", "IndexerHDBitsSettingsMediums": "Střední", "Directory": "Adresář", "CustomFilter": "Vlastní filtr", @@ -558,5 +558,78 @@ "IndexerSettingsAppsMinimumSeeders": "Minimální počet seederů aplikací", "UsenetBlackholeNzbFolder": "Složka Nzb", "SearchIndexers": "Hledat indexery", - "IndexerSettingsAppsMinimumSeedersHelpText": "Minimální počet seederů požadovaných aplikacemi pro indexer, výchozí hodnota synchronizačního profilu je prázdná" + "IndexerSettingsAppsMinimumSeedersHelpText": "Minimální počet seederů požadovaných aplikacemi pro indexer, výchozí hodnota synchronizačního profilu je prázdná", + "IndexerProxy": "Proxy indexeru", + "IndexerBeyondHDSettingsRssKeyHelpText": "Klíč RSS ze stránky (Naleznete v Moje zabezpečení => Klíč RSS)", + "IndexerHDBitsSettingsCodecsHelpText": "Pokud není zadáno, použijí se všechny možnosti.", + "IndexerHDBitsSettingsUsernameHelpText": "Uživatelské jméno stránky", + "IndexerAvistazSettingsUsernameHelpTextWarning": "Rozhraní API v tomto indexeru mohou používat pouze hodnosti člen a vyšší.", + "IndexerBeyondHDSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Moje zabezpečení => Klíč API)", + "IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", + "IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", + "IndexerProxies": "Proxy indexeru", + "IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", + "IndexerHistoryLoadError": "Chyba při načítání historie indexeru", + "IndexerId": "ID indexeru", + "IndexerNoDefinitionCheckHealthCheckMessage": "Indexery nemají žádnou definici a nebudou fungovat: {indexerNames}. Odeberte je a (nebo) znovu přidejte do {appName}.", + "IndexerAlphaRatioSettingsExcludeSceneHelpText": "Vyloučit vydání SCENE z výsledků", + "IndexerAlreadySetup": "Alespoň jedna instance indexeru je již nastavena", + "IndexerAvistazSettingsPasswordHelpText": "Heslo stránky", + "IndexerAvistazSettingsPidHelpText": "PID ze stránky Můj účet nebo Můj profil", + "IndexerAvistazSettingsUsernameHelpText": "Uživatelské jméno stránky", + "IndexerBeyondHDSettingsLimitedOnly": "Pouze omezené", + "IndexerBeyondHDSettingsLimitedOnlyHelpText": "Hledat pouze freeleech (Omezené nahrávání)", + "IndexerCategories": "Kategorie indexeru", + "IndexerDisabled": "Indexer zakázán", + "IndexerDownloadClientHealthCheckMessage": "Indexery s neplatnými klienty pro stahování: {indexerNames}.", + "IndexerDownloadClientHelpText": "Určete, který klient pro stahování se použije pro grabování v rámci {appName} z tohoto indexeru", + "IndexerFailureRate": "Míra selhání indexeru", + "IndexerFileListSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", + "IndexerFileListSettingsPasskeyHelpText": "Přístupový klíč stránky (Jedná se o alfanumerický řetězec v url adrese trackeru zobrazené v klientovi pro stahování)", + "IndexerGazelleGamesSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Nastavení => Nastavení přístupu)", + "IndexerGazelleGamesSettingsSearchGroupNames": "Hledat názvy skupin", + "IndexerHDBitsSettingsFreeleechOnlyHelpText": "Zobrazit pouze freeleech vydání", + "IndexerHDBitsSettingsOriginsHelpText": "Pokud není zadáno, použijí se všechny možnosti.", + "IndexerHDBitsSettingsUseFilenames": "Použít názvy souborů", + "IndexerHealthCheckNoIndexers": "Nejsou povoleny žádné indexery, {appName} nevrátí výsledky vyhledávání", + "IndexerIPTorrentsSettingsCookieUserAgent": "Uživatelský agent cookie", + "IndexerIPTorrentsSettingsCookieUserAgentHelpText": "Uživatelský agent přidružený cookie použitý z prohlížeče", + "IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", + "IndexerNebulanceSettingsApiKeyHelpText": "Klíč API z Nastavení uživatele > Klíče API. Klíč musí mít oprávnění Seznam a Stáhnout", + "IndexerNewznabSettingsAdditionalParametersHelpText": "Dodatečné parametry Newznab", + "IndexerNewznabSettingsApiKeyHelpText": "Klíč API stránky", + "IndexerObsoleteCheckMessage": "Indexery jsou zastaralé nebo byly aktualizovány: {0}. Odeberte je a (nebo) znovu přidejte do {appName}", + "IndexerOrpheusSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Nastavení => Nastavení přístupu)", + "IndexerPassThePopcornSettingsApiUserHelpText": "Tato nastavení naleznete v nastavení zabezpečení PassThePopcorn (Upravit profil > Zabezpečení).", + "IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", + "IndexerRedactedSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Nastavení => Nastavení přístupu)", + "IndexerRss": "RSS indexeru", + "LastFailure": "Poslední selhání", + "IndexerSettingsAdditionalParameters": "Dodatečné parametry", + "IndexerSettingsApiPath": "Cesta k API", + "IndexerSettingsApiUser": "Uživatel API", + "IndexerAuth": "Ověření indexeru", + "IndexerInfo": "Informace o indexeru", + "IndexerName": "Název indexeru", + "IndexerDetails": "Podrobnosti indexeru", + "IndexerHDBitsSettingsPasskeyHelpText": "Přístupový klíč z Podrobnosti o uživateli", + "IndexerQuery": "Dotaz na indexer", + "IndexerAlphaRatioSettingsExcludeScene": "Vyloučit SCENE", + "IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", + "IndexerBeyondHDSettingsSearchTypes": "Hledat typy", + "IndexerBeyondHDSettingsSearchTypesHelpText": "Vyberte typy vydání, které vás zajímají. Pokud není vybrán žádný, použijí se všechny možnosti.", + "IndexerFileListSettingsUsernameHelpText": "Uživatelské jméno stránky", + "IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Musí mít oprávnění Uživatel a Torrenty", + "IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Hledat vydání podle názvů skupin", + "IndexerHDBitsSettingsMediumsHelpText": "Pokud není zadáno, použijí se všechny možnosti.", + "IndexerHDBitsSettingsUseFilenamesHelpText": "Zaškrtněte tuto možnost, pokud chcete používat názvy souborů torrentů jako názvy vydání", + "IndexerNewznabSettingsVipExpirationHelpText": "Zadejte datum (rrrr-mm-dd) pro vypršení VIP nebo prázdné, {appName} bude upozorňovat 1 týden před vypršením VIP", + "IndexerNzbIndexSettingsApiKeyHelpText": "Klíč API stránky", + "IndexerPassThePopcornSettingsApiKeyHelpText": "Klíč API stránky", + "IndexerMTeamTpSettingsApiKeyHelpText": "Klíč API ze stránky (Naleznete v Uživatelský ovládací panel => Zabezpečení => Laboratoř)", + "IndexerPassThePopcornSettingsGoldenPopcornOnly": "Pouze Golden Popcorn", + "IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Hledat pouze vydání Golden Popcorn", + "IndexerSettingsApiPathHelpText": "Cesta k api, obvykle {url}", + "IndexerAvistazSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", + "InitialFailure": "Úvodní selhání" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index 1e2c052f2..b07ede40b 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -87,13 +87,13 @@ "Delete": "Löschen", "DeleteAppProfile": "App-Profil löschen", "DeleteApplication": "Applikation löschen", - "DeleteApplicationMessageText": "Wirklich die Applikation '{0}' löschen?", + "DeleteApplicationMessageText": "Bist du sicher, dass du die Anwendung „{name}“ löschen möchtest?", "DeleteBackup": "Sicherung löschen", "DeleteBackupMessageText": "Soll das Backup '{name}' wirklich gelöscht werden?", "DeleteDownloadClient": "Download-Client löschen", "DeleteDownloadClientMessageText": "Bist du sicher, dass du den Download Client '{name}' wirklich löschen willst?", "DeleteIndexerProxy": "Indexer Proxy löschen", - "DeleteIndexerProxyMessageText": "Tag '{0}' wirklich löschen?", + "DeleteIndexerProxyMessageText": "Bist du sicher, dass du den Indexer-Proxy „{name}“ löschen möchtest?", "DeleteNotification": "Benachrichtigung löschen", "DeleteNotificationMessageText": "Bist du sicher, dass du die Benachrichtigung '{name}' wirklich löschen willst?", "DeleteTag": "Tag löschen", @@ -165,7 +165,7 @@ "HomePage": "Hauptseite", "Host": "Host", "Hostname": "Hostname", - "Id": "Id", + "Id": "ID", "IgnoredAddresses": "Ignorierte Adressen", "IllRestartLater": "Später neustarten", "IncludeHealthWarningsHelpText": "Zustandswarnung", @@ -193,7 +193,7 @@ "IndexerSite": "Indexer-Seite", "IndexerStatusAllUnavailableHealthCheckMessage": "Alle Indexer sind aufgrund von Fehlern nicht verfügbar", "IndexerStatusUnavailableHealthCheckMessage": "Indexer nicht verfügbar aufgrund von Fehlern: {indexerNames}", - "IndexerTagsHelpText": "Benutze Tags, um Indexer-Proxies zu spezifizieren, mit welchen Apps der Indexer synchronisiert oder um Indexer zu organisieren.", + "IndexerTagsHelpText": "Verwende Tags, um Indexer-Proxys oder die Apps, mit denen der Indexer synchronisiert wird, anzugeben.", "IndexerVipExpiredHealthCheckMessage": "Die VIP Indexer Vorteile sind abgelaufen: {indexerNames}", "IndexerVipExpiringHealthCheckMessage": "Die Indexer VIP Vorteile verfallen bald: {indexerNames}", "Indexers": "Indexer", @@ -254,7 +254,7 @@ "Ok": "Ok", "OnApplicationUpdate": "Bei Anwendungsaktualisierung", "OnApplicationUpdateHelpText": "Bei Anwendungsaktualisierung", - "OnGrab": "Bei Erfassung", + "OnGrab": "Bei Release-Grabs", "OnHealthIssue": "Bei Gesundheitsproblem", "OnHealthIssueHelpText": "Zustandsproblem", "OpenBrowserOnStart": "Browser beim Start öffnen", @@ -276,7 +276,7 @@ "Privacy": "Privatsphäre", "Private": "Privat", "Protocol": "Protokoll", - "ProwlarrSupportsAnyDownloadClient": "Jeder Downloader der den Newznab-Standard verwendet oder unten aufgelistet ist wird untertützt.", + "ProwlarrSupportsAnyDownloadClient": "{appName} unterstützt jeden der unten aufgeführten Download-Clients.", "ProwlarrSupportsAnyIndexer": "{appName} unterstützt alle Indexer, welcher den Newznab/Torznab Standard implementiert (verwende 'Generic Newznab' (für Usenet) oder 'Generic Torznab' (für Torrents)) und darüber hinaus viele weitere Indexer. Wählen Sie im Folgenden Ihren Indexer aus der Liste.", "Proxies": "Proxies", "Proxy": "Proxy", @@ -395,7 +395,7 @@ "TestAllClients": "Prüfe alle Clients", "TestAllIndexers": "Prüfe alle Indexer", "OnLatestVersion": "Die neueste Version von {appName} ist bereits installiert", - "ThemeHelpText": "Ändere das UI-Theme der Anwendung. Das 'Auto'-Theme verwendet dein Betriebssystem-Theme, um den hellen oder dunklen Modus einzustellen. Inspiriert von {0}", + "ThemeHelpText": "Ändere das UI-Design der Anwendung, das 'Auto'-Design verwendet das Betriebssystem-Design, um den Hell- oder Dunkelmodus festzulegen. Inspiriert von {inspiredBy}.", "Time": "Zeit", "Title": "Titel", "Today": "Heute", @@ -406,7 +406,7 @@ "Type": "Typ", "UI": "Oberfläche", "UILanguage": "Oberflächen Sprache ( UI Language )", - "UILanguageHelpText": "Sprache für die gesamte Oberfläche", + "UILanguageHelpText": "Sprache, die {appName} für die Benutzeroberfläche verwenden wird", "UILanguageHelpTextWarning": "Webseite muss neu geladen werden", "UISettings": "Benutzeroberflächen Einstellungen", "UISettingsSummary": "Optionen für Datum, Sprache und Farbbeinträchtigungen", @@ -461,7 +461,7 @@ "ApplyChanges": "Änderungen anwenden", "CountIndexersSelected": "{count} Indexer ausgewählt", "DeleteSelectedDownloadClients": "Lösche Download Client(s)", - "DeleteSelectedApplicationsMessageText": "Indexer '{0}' wirklich löschen?", + "DeleteSelectedApplicationsMessageText": "Bist du sicher, dass du {count} ausgewählte Anwendung(en) löschen möchtest?", "DeleteSelectedDownloadClientsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Download-Clients löschen möchten?", "DeleteSelectedIndexersMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte(n) Indexer löschen möchten?", "EditSelectedDownloadClients": "Ausgewählte Download Clienten bearbeiten", @@ -518,7 +518,7 @@ "ActiveApps": "Aktive Apps", "ActiveIndexers": "Aktive Indexer", "AppsMinimumSeeders": "Apps Mindestanzahl von Seedern", - "ApplicationTagsHelpText": "Synchronisiere Indexer für diese Anwendung die keine passenden Tags oder mindestens 1 passendes Tag haben", + "ApplicationTagsHelpText": "Indexer mit dieser Anwendung synchronisieren, die mindestens einen übereinstimmenden Tag haben. Wenn hier keine Tags aufgeführt sind, wird kein Indexer aufgrund seiner Tags von der Synchronisierung ausgeschlossen.", "ApplicationTagsHelpTextWarning": "Tags sollten mit Vorsicht verwendet werden, da sie ungewollte Effekte haben können. Eine Anwendung mit einem Tag synchronisiert nur Indexer die den Gleichen Tag haben.", "AddApplicationImplementation": "Anwendung hinzufügen - {implementationName}", "AddConnectionImplementation": "Verbindung hinzufügen - {implementationName}", @@ -670,5 +670,141 @@ "SeedRatio": "Seed-Verhältnis", "SeedTime": "Seed-Zeit", "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Wenn ein Torrent durch einen Hash blockiert wird, wird er möglicherweise nicht korrekt abgelehnt während RSS/Recherche für einige Indexer. Diese Option aktiviert die Ablehnung des Torrents nach dem Abrufen, aber bevor er an den Client gesendet wird.", - "IndexerHDBitsSettingsOriginsHelpText": "Wenn nicht angegeben, werden alle Optionen verwendet." + "IndexerHDBitsSettingsOriginsHelpText": "Wenn nicht angegeben, werden alle Optionen verwendet.", + "IndexerSettingsGrabLimit": "Grab-Limit", + "IndexerBeyondHDSettingsLimitedOnlyHelpText": "Nur nach Freeleech suchen (Begrenztes UL)", + "IndexerFileListSettingsPasskeyHelpText": "Site Passkey (Dies ist die alphanumerische Zeichenfolge in der Tracker-URL, die in deinem Download-Client angezeigt wird)", + "IndexerIPTorrentsSettingsCookieUserAgent": "Cookie-Benutzer-Agent", + "DownloadClientSettingsDefaultCategorySubFolderHelpText": "Standard-Fallback-Kategorie, wenn für eine Veröffentlichung keine zugeordnete Kategorie existiert. Das Hinzufügen einer für {appName} spezifischen Kategorie vermeidet Konflikte mit nicht verwandten {appName}-Downloads. Die Verwendung einer Kategorie ist optional, aber dringend empfohlen. Eine [Kategorie]-Unterverzeichnis wird im Ausgabeverzeichnis erstellt.", + "IndexerBeyondHDSettingsRssKeyHelpText": "RSS-Schlüssel von der Website (zu finden unter Mein Sicherheitsbereich => RSS-Schlüssel)", + "IndexerHDBitsSettingsUseFilenamesHelpText": "Aktiviere diese Option, wenn du Torrent-Dateinamen als Releasetitel verwenden möchtest", + "IndexerSettingsAppsMinimumSeedersHelpText": "Minimale benötigte Seeder von den Anwendungen, damit der Indexer greifen kann; leer ist die Standardeinstellung des Sync-Profils", + "IndexerGazelleGamesSettingsApiKeyHelpText": "API-Schlüssel von der Seite (Zu finden unter Einstellungen => Zugriffseinstellungen)", + "IndexerPassThePopcornSettingsApiUserHelpText": "Diese Einstellungen findest du in deinen PassThePopcorn-Sicherheitseinstellungen (Profil bearbeiten > Sicherheit).", + "IndexerSettingsQueryLimitHelpText": "Die maximale Anzahl an Queries, die {appName} der Seite gemäß der jeweiligen Einheit erlauben wird", + "IndexerRedactedSettingsApiKeyHelpText": "API-Schlüssel von der Seite (Zu finden unter Einstellungen => Zugriffseinstellungen)", + "IndexerSettingsQueryLimit": "Query Limit", + "PackSeedTimeHelpText": "Die Zeit, die ein Pack (Season oder Diskographie)-Torrent gesät werden soll, bevor er gestoppt wird. Leer ist die Standardeinstellung der App", + "TotalIndexerSuccessfulGrabs": "Gesamtanzahl erfolgreicher Indexer-Suchanfragen", + "ProwlarrDownloadClientsInAppOnlyAlert": "Download-Clients sind nur für In-App-Suchen in {appName} und synchronisieren sich nicht mit Apps. Es sind keine Pläne vorgesehen, eine solche Funktionalität hinzuzufügen.", + "TotalUserAgentGrabs": "Gesamtanzahl der User-Agent-Grabs", + "DefaultCategory": "Standardkategorie", + "IndexerDownloadClientHelpText": "Gib an, welcher Download-Client für Grab-Vorgänge, die innerhalb von {appName} von diesem Indexer durchgeführt werden, verwendet wird", + "IndexerHistoryLoadError": "Fehler beim Laden der Indexer-Historie", + "IndexerNzbIndexSettingsApiKeyHelpText": "Website-API-Key", + "IndexerPassThePopcornSettingsApiKeyHelpText": "Website-API-Key", + "IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Sucher nur Golden Popcorn Releases", + "IndexerSettingsCookieHelpText": "Website Cookie", + "IndexerSettingsPackSeedTimeIndexerHelpText": "Die Zeit, die ein Pack (Season oder Diskographie)-Torrent gesät werden soll, bevor er gestoppt wird. Leer ist die Standardeinstellung der App", + "SearchAllIndexers": "Alle Indexer durchsuchen", + "SearchCountIndexers": "Suche {count} Indexer(s)", + "SeedTimeHelpText": "Die Zeit, die ein Torrent gesät werden soll, bevor er gestoppt wird. Leer ist die Standardeinstellung der App", + "IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases", + "IndexerNewznabSettingsVipExpirationHelpText": "Gib das Datum (yyyy-mm-dd) für das VIP-Ablaufdatum ein oder lasse es leer, {appName} benachrichtigt eine Woche vor Ablauf des VIP", + "ProxyValidationUnableToConnect": "Kann nicht mit dem Proxy verbunden werden: {exceptionMessage}. Überprüfe das Protokoll rund um diesen Fehler für Details", + "IndexerId": "Indexer ID", + "OnGrabHelpText": "Bei Release Grab", + "AuthQueries": "Authentifizierungsanfragen", + "PackSeedTime": "Pack-Seed-Zeit", + "DeleteSelectedApplications": "Ausgewählte Anwendungen löschen", + "DownloadClientSettingsDefaultCategoryHelpText": "Standard-Fallback-Kategorie, wenn für eine Veröffentlichung keine zugeordnete Kategorie existiert. Das Hinzufügen einer für {appName} spezifischen Kategorie vermeidet Konflikte mit nicht verwandten {appName}-Downloads. Die Verwendung einer Kategorie ist optional, aber dringend empfohlen.", + "FoundCountReleases": "{itemCount} Veröffentlichungen gefunden", + "IncludeManualGrabsHelpText": "Manuelle Abrufe, die innerhalb von {appName} gemacht wurden, einbeziehen", + "IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Nur nach Freeleech-Veröffentlichungen suchen", + "IndexerBeyondHDSettingsApiKeyHelpText": "API-Schlüssel von der Website (zu finden in „Meine Sicherheit“ => „API-Schlüssel“)", + "IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Nur nach Freeleech-Releases suchen", + "IndexerBeyondHDSettingsRefundOnlyHelpText": "Nur nach Rückerstattungen suchen", + "IndexerDisabled": "Indexer deaktiviert", + "IndexerFileListSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases", + "IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Suche Veröffentlichungen nach Gruppennamen", + "IndexerNebulanceSettingsApiKeyHelpText": "API-Schlüssel aus den Benutzereinstellungen > API-Schlüssel. Der Schlüssel muss List- und Download-Berechtigungen haben", + "IndexerSettingsGrabLimitHelpText": "Die maximale Anzahl an Grabs, die {appName} der Seite erlauben wird, wie von der jeweiligen Einheit festgelegt", + "IndexerSettingsLimitsUnit": "Limits-Einheit", + "IndexerSettingsLimitsUnitHelpText": "Die Zeiteinheit zur Berechnung der Limits pro Indexer", + "IndexerStatus": "Indexer Status", + "LastFailure": "Letzter Fehler", + "ManageApplications": "Applikationen verwalten", + "NoApplicationsFound": "Keine Applikationen gefunden", + "NoIndexerCategories": "Keine Kategorien für diesen Indexer gefunden", + "NoIndexerHistory": "Keine Historie für diesen Indexer gefunden", + "Open": "Offen", + "OverrideAndAddToDownloadClient": "Überschreiben und zum Download-Client hinzufügen", + "PreferMagnetUrl": "Magnet URL bevorzugen", + "PreferMagnetUrlHelpText": "Wenn aktiviert, wird dieser Indexer die Verwendung von Magnet-URLs für Grabs bevorzugen, mit Rückfall auf Torrent-Links", + "RssQueries": "RSS Anfragen", + "TotalHostGrabs": "Gesamtanzahl der Host-Grabs", + "TotalHostQueries": "Gesamtanzahl der Host-Suchanfragen", + "SeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen sollte, bevor er gestoppt wird. Leer ist die Standardeinstellung der App", + "AverageGrabs": "Durchschnittliche Abrufe", + "AverageQueries": "Durchschnittliche Anfragen", + "SelectedCountOfCountReleases": "Ausgewählt {selectedCount} von {itemCount} Releases", + "NewznabUrl": "Newznab Url", + "QueryType": "Abfragetyp", + "DisabledUntil": "Deaktiviert bis", + "MappedCategories": "Zuordnete Kategorien", + "AreYouSureYouWantToDeleteIndexer": "Bist du sicher, dass du „{name}“ aus {appName} löschen möchtest?", + "TotalIndexerQueries": "Gesamtanzahl der Indexer-Suchanfragen", + "ProwlarrDownloadClientsAlert": "Wenn du beabsichtigst, direkt innerhalb von {appName} zu suchen, musst du Download-Clients hinzufügen. Andernfalls musst du sie hier nicht hinzufügen. Für Suchen aus deinen Apps werden stattdessen die dort konfigurierten Download-Clients verwendet.", + "AppsMinimumSeedersHelpText": "Mindestanzahl an Seedern, die von der Anwendung für den Indexer erforderlich ist, um herunterzuladen. Leer bedeutet, dass das Standardprofil der Synchronisierung verwendet wird", + "CountIndexersAvailable": "{count} Indexer verfügbar", + "DeleteClientCategory": "Download-Client-Kategorie löschen", + "DeleteSelectedIndexer": "Ausgewählten Indexer löschen", + "TotalGrabs": "Gesamtanzahl der Grabs", + "DownloadClientCategory": "Download-Client-Kategorie", + "EditCategory": "Kategorie bearbeiten", + "IndexerSettingsApiUser": "API Benutzer", + "RssFeed": "RSS Feed", + "InitialFailure": "Initialer Fehler", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Blockierte Torrent-Hashes beim Abrufen synchron ablehnen", + "DeleteSelectedIndexers": "Ausgewählte Indexer löschen", + "IndexerHDBitsSettingsPasskeyHelpText": "Passkey aus den Benutzerdetails", + "IndexerSettingsPasskey": "Pass Key", + "ClickToChangeQueryOptions": "Klicken, um Abfrageoptionen zu ändern", + "IndexerCategories": "Indexer-Kategorien", + "SearchQueries": "Suchanfragen", + "IndexerAlphaRatioSettingsExcludeScene": "SCENE ausschließen", + "IndexerAlphaRatioSettingsExcludeSceneHelpText": "SCENE-Veröffentlichungen aus den Ergebnissen ausschließen", + "IndexerBeyondHDSettingsRefundOnly": "Nur Rückerstattung", + "IndexerFileListSettingsUsernameHelpText": "Website-Benutzername", + "IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Muss Benutzer- und Torrents-Berechtigungen haben", + "IndexerHDBitsSettingsFreeleechOnlyHelpText": "Zeige nur Freeleech-Releases", + "IndexerHDBitsSettingsUsernameHelpText": "Webseite-Benutzername", + "IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases", + "IndexerNewznabSettingsApiKeyHelpText": "Website API Key", + "IndexerOrpheusSettingsApiKeyHelpText": "API-Schlüssel von der Seite (Zu finden unter Einstellungen => Zugriffseinstellungen)", + "IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases", + "IndexerTorrentSyndikatSettingsApiKeyHelpText": "Website-API-Schlüssel", + "AreYouSureYouWantToDeleteCategory": "Bist du sicher, dass du die zugeordnete Kategorie löschen möchtest?", + "DownloadClientSettingsPriorityItemHelpText": "Priorität, die beim Abrufen von Elementen verwendet werden soll", + "GoToApplication": "Zur Anwendung gehen", + "HistoryDetails": "Historie-Details", + "IndexerBeyondHDSettingsLimitedOnly": "Nur begrenzt", + "IndexerHDBitsSettingsOrigins": "Ursprünge", + "IndexerHDBitsSettingsUseFilenames": "Verwende Dateinamen", + "IndexerIPTorrentsSettingsCookieUserAgentHelpText": "User-Agent, der mit dem Cookie aus dem Browser verwendet wird", + "IndexerNewznabSettingsAdditionalParametersHelpText": "Zusätzliche Newznab-Parameter", + "IndexerSettingsPackSeedTime": "Pack-Seed-Zeit", + "IndexerSettingsRssKey": "RSS Schlüssel", + "IndexerMTeamTpSettingsApiKeyHelpText": "API-Schlüssel von der Seite (Zu finden im Benutzersteuerungsfeld => Sicherheit => Labor)", + "IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Suche nur Freeleech-Releases", + "IndexerSettingsFreeleechOnly": "Nur Freeleech", + "IndexerSettingsPreferMagnetUrl": "Magnet-URL bevorzugen", + "IndexerSettingsPreferMagnetUrlHelpText": "Wenn aktiviert, bevorzugt dieser Indexer die Verwendung von Magnet-URLs für Grabs mit Rückfall auf Torrent-Links", + "TorznabUrl": "Torznab Url", + "IndexerPassThePopcornSettingsGoldenPopcornOnly": "Nur Golden Popcorn", + "IndexerSettingsBaseUrl": "Basis Url", + "IndexerAvistazSettingsFreeleechOnlyHelpText": "Nur nach Freeleech-Veröffentlichungen suchen", + "IndexerAvistazSettingsPasswordHelpText": "Website-Passwort", + "IndexerAvistazSettingsPidHelpText": "PID aus der „Mein Konto“- oder „Mein Profil“-Seite", + "IndexerAvistazSettingsUsernameHelpText": "Website-Benutzername", + "IndexerAvistazSettingsUsernameHelpTextWarning": "Nur Mitglieder mit Rang „Mitglied“ und höher können die API auf diesem Indexer nutzen.", + "IndexerBeyondHDSettingsRewindOnly": "Nur zurückspulen", + "IndexerBeyondHDSettingsRewindOnlyHelpText": "Nur Rückwärtssuche", + "IndexerBeyondHDSettingsSearchTypesHelpText": "Wähle die Arten von Veröffentlichungen aus, die dich interessieren. Wenn keine ausgewählt sind, werden alle Optionen verwendet.", + "IndexerFailureRate": "Indexer-Fehlerrate", + "IndexerGazelleGamesSettingsSearchGroupNames": "Suche Gruppennamen", + "IndexerSettingsBaseUrlHelpText": "Wähle die Basis-Url aus, die {appName} für Anfragen an die Seite verwenden soll", + "RepeatSearch": "Suche wiederholen", + "AverageResponseTimesMs": "Durchschnittliche Indexer-Antwortzeiten (ms)", + "BasicSearch": "Einfache Suche" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 0f63479f7..27730aeee 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -88,7 +88,7 @@ "Logs": "Lokitiedot", "Mechanism": "Mekanismi", "Name": "Nimi", - "NoLinks": "Ei linkkejä", + "NoLinks": "Kytköksiä ei ole", "Peers": "Vertaiset", "Presets": "Esiasetukset", "Priority": "Painotus", @@ -121,7 +121,7 @@ "TagIsNotUsedAndCanBeDeleted": "Tunniste ei ole käytössä ja voidaan poistaa.", "TagsSettingsSummary": "Täältä näet kaikki tunnisteet käyttökohteineen ja voit poistaa käyttämättömät tunnisteet.", "Tasks": "Tehtävät", - "Test": "Testaa", + "Test": "Koesta", "TestAllClients": "Koesta palvelut", "Time": "Aika", "Title": "Nimike", @@ -369,7 +369,7 @@ "EnableRssHelpText": "Käytä hakupalvelulle RSS-syötettä.", "DeleteApplication": "Poista sovellus", "DeleteAppProfile": "Poista sovellusprofiili", - "IndexerProxies": "Tiedonhaun välityspalvelimet", + "IndexerProxies": "Hakupalveluiden välityspalvelimet", "IndexerAuth": "Hakupalvelun todennus", "Notifications": "Ilmoituspalvelut", "NotificationTriggersHelpText": "Valitse ilmoituksen laukaisevat tapahtumat.", diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 8e67403f0..9400b9b04 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -16,7 +16,7 @@ "Added": "添加日期", "AddedToDownloadClient": "发布已添加档案到客户端", "AddingTag": "添加标签", - "Age": "年龄", + "Age": "寿命", "All": "全部", "AllIndexersHiddenDueToFilter": "由于应用了筛选器,所有索引器都被隐藏。", "Analytics": "分析", @@ -735,5 +735,16 @@ "PreviouslyInstalled": "上次安装", "FailedToFetchSettings": "设置同步失败", "DownloadClientSettingsPriorityItemHelpText": "抓取内容时优先使用", - "IndexerAlphaRatioSettingsExcludeScene": "排除场景" + "IndexerAlphaRatioSettingsExcludeScene": "排除场景", + "IndexerAlphaRatioSettingsExcludeSceneHelpText": "从结果中排除场景版本", + "IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "只搜索免费发布", + "IndexerBeyondHDSettingsFreeleechOnlyHelpText": "只搜索免费发布", + "IndexerBeyondHDSettingsLimitedOnly": "仅限", + "IndexerBeyondHDSettingsApiKeyHelpText": "来自网站的API密钥(在我的安全 => API密钥)", + "IndexerAvistazSettingsFreeleechOnlyHelpText": "只搜索免费发布", + "IndexerAvistazSettingsPasswordHelpText": "网站密码", + "IndexerAvistazSettingsPidHelpText": "我的帐户或个人资料页的PID", + "IndexerAvistazSettingsUsernameHelpText": "网站用户名", + "IndexerAvistazSettingsUsernameHelpTextWarning": "只有成员级别及以上才能使用此索引器上的API。", + "IndexerBeyondHDSettingsLimitedOnlyHelpText": "仅限免费搜索(有限UL)" } From e6901506a0fb1a9de0422bdeb8d6c43e631e303c Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 2 Feb 2025 17:44:31 +0200 Subject: [PATCH 058/127] Fixed: (IPTorrents) Cleanup languages between brackets when possible --- src/NzbDrone.Core/Indexers/Definitions/IPTorrents.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/IPTorrents.cs b/src/NzbDrone.Core/Indexers/Definitions/IPTorrents.cs index d000c8206..d77c26935 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/IPTorrents.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/IPTorrents.cs @@ -403,10 +403,13 @@ namespace NzbDrone.Core.Indexers.Definitions private static string CleanTitle(string title) { - // drop invalid chars that seems to have cropped up in some titles. #6582 + // Drop invalid chars that seems to have cropped up in some titles. #6582 title = Regex.Replace(title, @"[\u0000-\u0008\u000A-\u001F\u0100-\uFFFF]", string.Empty, RegexOptions.Compiled); title = Regex.Replace(title, @"[\(\[\{]REQ(UEST(ED)?)?[\)\]\}]", string.Empty, RegexOptions.Compiled | RegexOptions.IgnoreCase); + // Drop languages between brackets conflicting with anime release group parsing + title = Regex.Replace(title, @"^\[[a-z0-9 ._-]+\][-._ ](?.*-[a-z0-9]+)$", "${title}", RegexOptions.Compiled | RegexOptions.IgnoreCase); + return title.Trim(' ', '-', ':'); } } From d1846fde615f939a2bb41e2445a5aea6174997bc Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:21:34 +0300 Subject: [PATCH 059/127] New: (Myanonamouse) Prevent downloads without FL tokens Co-authored-by: Kalon Shannon-Innes <mav@hotmail.com.au> --- ...42_myanonamouse_freeleech_wedge_options.cs | 60 +++++++++++++ .../Indexers/Definitions/MyAnonamouse.cs | 85 +++++++++++++------ 2 files changed, 121 insertions(+), 24 deletions(-) create mode 100644 src/NzbDrone.Core/Datastore/Migration/042_myanonamouse_freeleech_wedge_options.cs diff --git a/src/NzbDrone.Core/Datastore/Migration/042_myanonamouse_freeleech_wedge_options.cs b/src/NzbDrone.Core/Datastore/Migration/042_myanonamouse_freeleech_wedge_options.cs new file mode 100644 index 000000000..5a93488d5 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/042_myanonamouse_freeleech_wedge_options.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using System.Data; +using Dapper; +using FluentMigrator; +using Newtonsoft.Json.Linq; +using NzbDrone.Common.Serializer; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(042)] + public class myanonamouse_freeleech_wedge_options : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + Execute.WithConnection(MigrateIndexersToWedgeOptions); + } + + private void MigrateIndexersToWedgeOptions(IDbConnection conn, IDbTransaction tran) + { + var updated = new List<object>(); + + using (var cmd = conn.CreateCommand()) + { + cmd.Transaction = tran; + cmd.CommandText = "SELECT \"Id\", \"Settings\" FROM \"Indexers\" WHERE \"Implementation\" = 'MyAnonamouse'"; + + using (var reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + var id = reader.GetInt32(0); + var settings = Json.Deserialize<JObject>(reader.GetString(1)); + + if (settings.ContainsKey("freeleech") && settings.Value<JToken>("freeleech").Type == JTokenType.Boolean) + { + var optionValue = settings.Value<bool>("freeleech") switch + { + true => 2, // Required + _ => 0 // Never + }; + + settings.Remove("freeleech"); + settings.Add("useFreeleechWedge", optionValue); + } + + updated.Add(new + { + Id = id, + Settings = settings.ToJson() + }); + } + } + } + + var updateSql = "UPDATE \"Indexers\" SET \"Settings\" = @Settings WHERE \"Id\" = @Id"; + conn.Execute(updateSql, updated, transaction: tran); + } + } +} diff --git a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs index d2b2f8d1a..9b9dde8b3 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs @@ -16,6 +16,7 @@ using NzbDrone.Common.Http; using NzbDrone.Common.Serializer; using NzbDrone.Core.Annotations; using NzbDrone.Core.Configuration; +using NzbDrone.Core.Exceptions; using NzbDrone.Core.Indexers.Exceptions; using NzbDrone.Core.Indexers.Settings; using NzbDrone.Core.IndexerSearch.Definitions; @@ -36,8 +37,8 @@ namespace NzbDrone.Core.Indexers.Definitions public override bool SupportsPagination => true; public override int PageSize => 100; public override IndexerCapabilities Capabilities => SetCapabilities(); + private readonly ICacheManager _cacheManager; - private static readonly Regex TorrentIdRegex = new Regex(@"tor/download.php\?tid=(?<id>\d+)$"); public MyAnonamouse(IIndexerHttpClient httpClient, IEventAggregator eventAggregator, IIndexerStatusService indexerStatusService, IConfigService configService, Logger logger, ICacheManager cacheManager) : base(httpClient, eventAggregator, indexerStatusService, configService, logger) @@ -59,39 +60,62 @@ namespace NzbDrone.Core.Indexers.Definitions { var downloadLink = link.RemoveQueryParam("canUseToken"); - if (Settings.Freeleech && bool.TryParse(link.GetQueryParam("canUseToken"), out var canUseToken) && canUseToken) + if (Settings.UseFreeleechWedge is (int)MyAnonamouseFreeleechWedgeAction.Preferred or (int)MyAnonamouseFreeleechWedgeAction.Required && + bool.TryParse(link.GetQueryParam("canUseToken"), out var canUseToken) && canUseToken) { - _logger.Debug("Attempting to use freeleech token for {0}", downloadLink.AbsoluteUri); + _logger.Debug("Attempting to use freeleech wedge for {0}", downloadLink.AbsoluteUri); - var idMatch = TorrentIdRegex.Match(downloadLink.AbsoluteUri); - if (idMatch.Success) + if (int.TryParse(link.GetQueryParam("tid"), out var torrentId) && torrentId > 0) { - var id = int.Parse(idMatch.Groups["id"].Value); var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); var freeleechUrl = Settings.BaseUrl + $"json/bonusBuy.php/{timestamp}"; - var freeleechRequest = new HttpRequestBuilder(freeleechUrl) + var freeleechRequestBuilder = new HttpRequestBuilder(freeleechUrl) + .Accept(HttpAccept.Json) .AddQueryParam("spendtype", "personalFL") - .AddQueryParam("torrentid", id) - .AddQueryParam("timestamp", timestamp.ToString()) - .Build(); + .AddQueryParam("torrentid", torrentId) + .AddQueryParam("timestamp", timestamp.ToString()); - var indexerReq = new IndexerRequest(freeleechRequest); - var response = await FetchIndexerResponse(indexerReq).ConfigureAwait(false); - var resource = Json.Deserialize<MyAnonamouseBuyPersonalFreeleechResponse>(response.Content); + freeleechRequestBuilder.LogResponseContent = true; + + var cookies = GetCookies(); + + if (cookies != null && cookies.Any()) + { + freeleechRequestBuilder.SetCookies(Cookies); + } + + var freeleechRequest = freeleechRequestBuilder.Build(); + + var freeleechResponse = await _httpClient.ExecuteProxiedAsync(freeleechRequest, Definition).ConfigureAwait(false); + + var resource = Json.Deserialize<MyAnonamouseBuyPersonalFreeleechResponse>(freeleechResponse.Content); if (resource.Success) { - _logger.Debug("Successfully to used freeleech token for torrentid {0}", id); + _logger.Debug("Successfully used freeleech wedge for torrentid {0}.", torrentId); + } + else if (resource.Error.IsNotNullOrWhiteSpace() && resource.Error.ContainsIgnoreCase("This is already a personal freeleech")) + { + _logger.Debug("{0} is already a personal freeleech, continuing downloading: {1}", torrentId, resource.Error); } else { - _logger.Debug("Failed to use freeleech token: {0}", resource.Error); + _logger.Warn("Failed to purchase freeleech wedge for {0}: {1}", torrentId, resource.Error); + + if (Settings.UseFreeleechWedge == (int)MyAnonamouseFreeleechWedgeAction.Preferred) + { + _logger.Debug("'Use Freeleech Wedge' option set to preferred, continuing downloading: '{0}'", downloadLink.AbsoluteUri); + } + else + { + throw new ReleaseUnavailableException($"Failed to buy freeleech wedge and 'Use Freeleech Wedge' is set to required, aborting download: '{downloadLink.AbsoluteUri}'"); + } } } else { - _logger.Debug("Could not get torrent id from link {0}, skipping freeleech", downloadLink.AbsoluteUri); + _logger.Warn("Could not get torrent id from link {0}, skipping use of freeleech wedge.", downloadLink.AbsoluteUri); } } @@ -535,7 +559,7 @@ namespace NzbDrone.Core.Indexers.Definitions .CombinePath("/tor/download.php") .AddQueryParam("tid", torrentId); - if (_settings.Freeleech && canUseToken) + if (_settings.UseFreeleechWedge is (int)MyAnonamouseFreeleechWedgeAction.Preferred or (int)MyAnonamouseFreeleechWedgeAction.Required && canUseToken) { url = url.AddQueryParam("canUseToken", "true"); } @@ -592,6 +616,7 @@ namespace NzbDrone.Core.Indexers.Definitions SearchInSeries = false; SearchInFilenames = false; SearchLanguages = Array.Empty<int>(); + UseFreeleechWedge = (int)MyAnonamouseFreeleechWedgeAction.Never; } [FieldDefinition(2, Type = FieldType.Textbox, Label = "Mam Id", HelpText = "Mam Session Id (Created Under Preferences -> Security)")] @@ -600,21 +625,21 @@ namespace NzbDrone.Core.Indexers.Definitions [FieldDefinition(3, Type = FieldType.Select, Label = "Search Type", SelectOptions = typeof(MyAnonamouseSearchType), HelpText = "Specify the desired search type")] public int SearchType { get; set; } - [FieldDefinition(4, Type = FieldType.Checkbox, Label = "Use Freeleech Wedges", HelpText = "Use freeleech wedges to make grabbed torrents personal freeleech")] - public bool Freeleech { get; set; } - - [FieldDefinition(5, Type = FieldType.Checkbox, Label = "Search in description", HelpText = "Search text in the description")] + [FieldDefinition(4, Type = FieldType.Checkbox, Label = "Search in description", HelpText = "Search text in the description")] public bool SearchInDescription { get; set; } - [FieldDefinition(6, Type = FieldType.Checkbox, Label = "Search in series", HelpText = "Search text in the series")] + [FieldDefinition(5, Type = FieldType.Checkbox, Label = "Search in series", HelpText = "Search text in the series")] public bool SearchInSeries { get; set; } - [FieldDefinition(7, Type = FieldType.Checkbox, Label = "Search in filenames", HelpText = "Search text in the filenames")] + [FieldDefinition(6, Type = FieldType.Checkbox, Label = "Search in filenames", HelpText = "Search text in the filenames")] public bool SearchInFilenames { get; set; } - [FieldDefinition(8, Type = FieldType.Select, Label = "Search Languages", SelectOptions = typeof(MyAnonamouseSearchLanguages), HelpText = "Specify the desired languages. If unspecified, all options are used.")] + [FieldDefinition(7, Type = FieldType.Select, Label = "Search Languages", SelectOptions = typeof(MyAnonamouseSearchLanguages), HelpText = "Specify the desired languages. If unspecified, all options are used.")] public IEnumerable<int> SearchLanguages { get; set; } + [FieldDefinition(8, Type = FieldType.Select, Label = "Use Freeleech Wedges", SelectOptions = typeof(MyAnonamouseFreeleechWedgeAction), HelpText = "Use freeleech wedges to make grabbed torrents personal freeleech")] + public int UseFreeleechWedge { get; set; } + public override NzbDroneValidationResult Validate() { return new NzbDroneValidationResult(Validator.Validate(this)); @@ -834,6 +859,18 @@ namespace NzbDrone.Core.Indexers.Definitions Other = 47, } + public enum MyAnonamouseFreeleechWedgeAction + { + [FieldOption(Label = "Never", Hint = "Do not buy as freeleech")] + Never = 0, + + [FieldOption(Label = "Preferred", Hint = "Buy and use wedge if possible")] + Preferred = 1, + + [FieldOption(Label = "Required", Hint = "Abort download if unable to buy wedge")] + Required = 2, + } + public class MyAnonamouseTorrent { public int Id { get; set; } From 0d3d27e46ff74bfc4ca244c254580f523fbdb900 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Fri, 24 Jan 2025 23:50:06 +0200 Subject: [PATCH 060/127] Fixed: (HDB) Use release name for full discs and XXX content --- src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsParser.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsParser.cs b/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsParser.cs index b157aaf9b..ff6692407 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsParser.cs @@ -102,7 +102,8 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits private string GetTitle(TorrentQueryResponse item) { - return _settings.UseFilenames && item.FileName.IsNotNullOrWhiteSpace() + // Use release name for XXX content and full discs + return item.TypeCategory != 7 && item.TypeMedium != 1 && _settings.UseFilenames && item.FileName.IsNotNullOrWhiteSpace() ? item.FileName.Replace(".torrent", "", StringComparison.InvariantCultureIgnoreCase) : item.Name; } From 12ff612775605de1b9fa33f62b89887819d08e82 Mon Sep 17 00:00:00 2001 From: zodihax <gerund-frugal-0m@icloud.com> Date: Mon, 3 Feb 2025 17:03:40 +0100 Subject: [PATCH 061/127] Fixed: (NorBits) Added main categories to avoid invalid releases (#2337) NorBits also has these main categories in addition to the already configured sub-categories. This PR adds these main categories. Prowlarr often return 0 query results even when there are query results, this is probably caused by all the results only having a main category (for instance "TV") and no sub-categories. `|Warn|NorBits|Invalid Release: '<redacted>' from indexer: NorBits. No categories provided.` --- src/NzbDrone.Core/Indexers/Definitions/NorBits.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs index 096199880..4e61110ca 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs @@ -129,16 +129,19 @@ public class NorBits : TorrentIndexerBase<NorBitsSettings> } }; + caps.Categories.AddCategoryMapping("main_cat[]=1", NewznabStandardCategory.Movies, "Filmer"); caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=49", NewznabStandardCategory.MoviesUHD, "Filmer - UHD-2160p"); caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=19", NewznabStandardCategory.MoviesHD, "Filmer - HD-1080p/i"); caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=20", NewznabStandardCategory.MoviesHD, "Filmer - HD-720p"); caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=22", NewznabStandardCategory.MoviesSD, "Filmer - SD"); + caps.Categories.AddCategoryMapping("main_cat[]=2", NewznabStandardCategory.TV, "TV"); caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=49", NewznabStandardCategory.TVUHD, "TV - UHD-2160p"); caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=19", NewznabStandardCategory.TVHD, "TV - HD-1080p/i"); caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=20", NewznabStandardCategory.TVHD, "TV - HD-720p"); caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=22", NewznabStandardCategory.TVSD, "TV - SD"); caps.Categories.AddCategoryMapping("main_cat[]=3", NewznabStandardCategory.PC, "Programmer"); caps.Categories.AddCategoryMapping("main_cat[]=4", NewznabStandardCategory.Console, "Spill"); + caps.Categories.AddCategoryMapping("main_cat[]=5", NewznabStandardCategory.Audio, "Musikk"); caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=42", NewznabStandardCategory.AudioMP3, "Musikk - 192"); caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=43", NewznabStandardCategory.AudioMP3, "Musikk - 256"); caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=44", NewznabStandardCategory.AudioMP3, "Musikk - 320"); @@ -146,6 +149,7 @@ public class NorBits : TorrentIndexerBase<NorBitsSettings> caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=46", NewznabStandardCategory.AudioLossless, "Musikk - Lossless"); caps.Categories.AddCategoryMapping("main_cat[]=6", NewznabStandardCategory.Books, "Tidsskrift"); caps.Categories.AddCategoryMapping("main_cat[]=7", NewznabStandardCategory.AudioAudiobook, "Lydbøker"); + caps.Categories.AddCategoryMapping("main_cat[]=8", NewznabStandardCategory.AudioVideo, "Musikkvideoer"); caps.Categories.AddCategoryMapping("main_cat[]=8&sub2_cat[]=19", NewznabStandardCategory.AudioVideo, "Musikkvideoer - HD-1080p/i"); caps.Categories.AddCategoryMapping("main_cat[]=8&sub2_cat[]=20", NewznabStandardCategory.AudioVideo, "Musikkvideoer - HD-720p"); caps.Categories.AddCategoryMapping("main_cat[]=8&sub2_cat[]=22", NewznabStandardCategory.AudioVideo, "Musikkvideoer - SD"); From 887c262589769e5408ee2dc4fd044d5d3c63ec9e Mon Sep 17 00:00:00 2001 From: zodihax <gerund-frugal-0m@icloud.com> Date: Wed, 5 Feb 2025 11:55:53 +0100 Subject: [PATCH 062/127] Update release category selector for NorBits (#2338) --- src/NzbDrone.Core/Indexers/Definitions/NorBits.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs index 4e61110ca..067f94077 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs @@ -287,8 +287,8 @@ public class NorBitsParser : IParseIndexerResponse var title = qDetails?.GetAttribute("title").Trim(); var details = _settings.BaseUrl + qDetails?.GetAttribute("href").TrimStart('/'); - var mainCategory = row.QuerySelector("td:nth-of-type(1) > div > a[href*=\"main_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); - var secondCategory = row.QuerySelector("td:nth-of-type(1) > div > a[href*=\"sub2_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); + var mainCategory = row.QuerySelector("td:nth-of-type(1) > a[href*=\"main_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); + var secondCategory = row.QuerySelector("td:nth-of-type(1) > a[href*=\"sub2_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); var categoryList = new[] { mainCategory, secondCategory }; var cat = string.Join("&", categoryList.Where(c => !string.IsNullOrWhiteSpace(c))); From 56b9da16cfb67cf45b346e810097cd305c3e80f5 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:24:36 +0200 Subject: [PATCH 063/127] Fix release category selector on all themes for NorBits Co-authored-by: Garfield69 <garfield69@outlook.com> --- src/NzbDrone.Core/Indexers/Definitions/NorBits.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs index 067f94077..4287f515f 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs @@ -287,8 +287,8 @@ public class NorBitsParser : IParseIndexerResponse var title = qDetails?.GetAttribute("title").Trim(); var details = _settings.BaseUrl + qDetails?.GetAttribute("href").TrimStart('/'); - var mainCategory = row.QuerySelector("td:nth-of-type(1) > a[href*=\"main_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); - var secondCategory = row.QuerySelector("td:nth-of-type(1) > a[href*=\"sub2_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); + var mainCategory = row.QuerySelector("td:nth-of-type(1) a[href*=\"main_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); + var secondCategory = row.QuerySelector("td:nth-of-type(1) a[href*=\"sub2_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); var categoryList = new[] { mainCategory, secondCategory }; var cat = string.Join("&", categoryList.Where(c => !string.IsNullOrWhiteSpace(c))); From a036e0fc37e633176a2aef3c389bca81d8425ec6 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:42:32 +0200 Subject: [PATCH 064/127] Fixed: (MAM) Updated property name for user class --- src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs index 9b9dde8b3..b045b16a8 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs @@ -584,8 +584,11 @@ namespace NzbDrone.Core.Indexers.Definitions _logger.Debug("Fetching user data: {0}", request.Url.FullUri); var response = _httpClient.ExecuteProxied(request, _definition); + var jsonResponse = JsonConvert.DeserializeObject<MyAnonamouseUserDataResponse>(response.Content); + _logger.Trace("Current user class: '{0}'", jsonResponse.UserClass); + return jsonResponse.UserClass?.Trim(); }, TimeSpan.FromHours(1)); @@ -912,7 +915,7 @@ namespace NzbDrone.Core.Indexers.Definitions public class MyAnonamouseUserDataResponse { - [JsonProperty(PropertyName = "class")] + [JsonProperty(PropertyName = "classname")] public string UserClass { get; set; } } } From 43c988d9514b360cd169fba20441bf8e6b375348 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:49:41 +0200 Subject: [PATCH 065/127] Fixed: (MAM) Use the latest cookies on release download --- src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs index b045b16a8..e8ab9980b 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs @@ -82,7 +82,7 @@ namespace NzbDrone.Core.Indexers.Definitions if (cookies != null && cookies.Any()) { - freeleechRequestBuilder.SetCookies(Cookies); + freeleechRequestBuilder.SetCookies(cookies); } var freeleechRequest = freeleechRequestBuilder.Build(); From 3a4de9cca12f1c8432391cd151ca25c71c40c0f1 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:59:48 +0200 Subject: [PATCH 066/127] Fixed: (MAM) Continue downloading if attempting to buy personal FL for VIP release --- src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs index e8ab9980b..dad8fe8e8 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs @@ -95,6 +95,10 @@ namespace NzbDrone.Core.Indexers.Definitions { _logger.Debug("Successfully used freeleech wedge for torrentid {0}.", torrentId); } + else if (resource.Error.IsNotNullOrWhiteSpace() && resource.Error.ContainsIgnoreCase("This Torrent is VIP")) + { + _logger.Debug("{0} is already VIP, continuing downloading: {1}", torrentId, resource.Error); + } else if (resource.Error.IsNotNullOrWhiteSpace() && resource.Error.ContainsIgnoreCase("This is already a personal freeleech")) { _logger.Debug("{0} is already a personal freeleech, continuing downloading: {1}", torrentId, resource.Error); From a12381fb1d07ab81d8af4c0ed02aba5763bace52 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 5 Feb 2025 20:06:51 +0200 Subject: [PATCH 067/127] Cleanse "rsskey" from logs --- .../InstrumentationTests/CleanseLogMessageFixture.cs | 1 + src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs b/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs index 857834d3f..9e2b31d87 100644 --- a/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs +++ b/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs @@ -30,6 +30,7 @@ namespace NzbDrone.Common.Test.InstrumentationTests [TestCase(@"https://anthelion.me/api.php?api_key=2b51db35e1910123321025a12b9933d2&o=json&t=movie&q=&tmdb=&imdb=&cat=&limit=100&offset=0")] [TestCase(@"https://avistaz.to/api/v1/jackett/auth: username=mySecret&password=mySecret&pid=mySecret")] [TestCase(@"https://www.sharewood.tv/api/2b51db35e1910123321025a12b9933d2/last-torrents")] + [TestCase(@"https://example.org/rss/torrents?rsskey=2b51db35e1910123321025a12b9933d2&search=")] // Indexer and Download Client Responses diff --git a/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs b/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs index e4b4384b2..393d6613a 100644 --- a/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs +++ b/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs @@ -10,7 +10,7 @@ namespace NzbDrone.Common.Instrumentation private static readonly Regex[] CleansingRules = { // Url - new (@"(?<=[?&: ;])(apikey|api_key|(?:(?:access|api)[-_]?)?token|pass(?:key|wd)?|auth|authkey|user|u?id|api|[a-z_]*apikey|account|pid|pwd)=(?<secret>[^&=""]+?)(?=[ ""&=]|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), + new (@"(?<=[?&: ;])(apikey|api_key|(?:(?:access|api)[-_]?)?token|pass(?:key|wd)?|auth|authkey|rsskey|user|u?id|api|[a-z_]*apikey|account|pid|pwd)=(?<secret>[^&=""]+?)(?=[ ""&=]|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new (@"(?<=[?& ;])[^=]*?(_?(?<!use|get_)token|username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$|;)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new (@"rss(24h)?\.torrentleech\.org/(?!rss)(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new (@"torrentleech\.org/rss/download/[0-9]+/(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase), From 147e732c9ca7a4c289d4f6386f1277650e11f15b Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Thu, 6 Feb 2025 00:36:13 +0200 Subject: [PATCH 068/127] Building docs on ARM Co-authored-by: Mark McDowall <mark@mcdowall.ca> --- docs.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs.sh b/docs.sh index ccfde87a7..ab084b61b 100755 --- a/docs.sh +++ b/docs.sh @@ -3,15 +3,16 @@ set -e FRAMEWORK="net6.0" PLATFORM=$1 +ARCHITECTURE="${2:-x64}" if [ "$PLATFORM" = "Windows" ]; then - RUNTIME="win-x64" + RUNTIME="win-$ARCHITECTURE" elif [ "$PLATFORM" = "Linux" ]; then - RUNTIME="linux-x64" + RUNTIME="linux-$ARCHITECTURE" elif [ "$PLATFORM" = "Mac" ]; then - RUNTIME="osx-x64" + RUNTIME="osx-$ARCHITECTURE" else - echo "Platform must be provided as first arguement: Windows, Linux or Mac" + echo "Platform must be provided as first argument: Windows, Linux or Mac" exit 1 fi From e101129cff942dd7156657627347b6a00b1c1579 Mon Sep 17 00:00:00 2001 From: Weblate <noreply@weblate.org> Date: Fri, 7 Feb 2025 06:33:24 +0000 Subject: [PATCH 069/127] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Marius Nechifor <flm.marius@gmail.com> Co-authored-by: Weblate <noreply-mt-weblate@weblate.org> Co-authored-by: Weblate <noreply@weblate.org> Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fa/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ro/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_CN/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/bg.json | 13 ++++++++++++- src/NzbDrone.Core/Localization/Core/ca.json | 3 ++- src/NzbDrone.Core/Localization/Core/cs.json | 4 +++- src/NzbDrone.Core/Localization/Core/fa.json | 5 ++++- src/NzbDrone.Core/Localization/Core/ko.json | 6 +++++- src/NzbDrone.Core/Localization/Core/ro.json | 12 ++++++++++-- src/NzbDrone.Core/Localization/Core/zh_CN.json | 9 ++++++++- 7 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index b1a0d993f..35327a3a9 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -376,5 +376,16 @@ "ActiveIndexers": "Активни индиксатори", "AddApplication": "добави приложение", "Season": "Причина", - "CurrentlyInstalled": "Понастоящем инсталиран" + "CurrentlyInstalled": "Понастоящем инсталиран", + "DownloadClientSettingsAddPaused": "Добави на пауза", + "Encoding": "Кодиране", + "Episode": "епизод", + "Applications": "Приложения", + "Publisher": "Издател", + "Id": "ИН", + "Theme": "Тема", + "Label": "Етикет", + "Categories": "Категории", + "Album": "албум", + "Artist": "изпълнител" } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 608973a41..342411047 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -500,5 +500,6 @@ "UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,", "WouldYouLikeToRestoreBackup": "Voleu restaurar la còpia de seguretat '{name}'?", "InstallLatest": "Instal·la l'últim", - "CurrentlyInstalled": "Instal·lat actualment" + "CurrentlyInstalled": "Instal·lat actualment", + "DownloadClientSettingsAddPaused": "Afegeix pausats" } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 2ac6af341..89f8d9fd1 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -631,5 +631,7 @@ "IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Hledat pouze vydání Golden Popcorn", "IndexerSettingsApiPathHelpText": "Cesta k api, obvykle {url}", "IndexerAvistazSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", - "InitialFailure": "Úvodní selhání" + "InitialFailure": "Úvodní selhání", + "IndexerTorrentSyndikatSettingsApiKeyHelpText": "Klíč API stránky", + "SearchTypes": "Hledat typy" } diff --git a/src/NzbDrone.Core/Localization/Core/fa.json b/src/NzbDrone.Core/Localization/Core/fa.json index 0967ef424..2839af8c0 100644 --- a/src/NzbDrone.Core/Localization/Core/fa.json +++ b/src/NzbDrone.Core/Localization/Core/fa.json @@ -1 +1,4 @@ -{} +{ + "ApiKey": "کلید API", + "NetCore": ".NET" +} diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 7bbae2162..bb90922eb 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -417,5 +417,9 @@ "UsenetBlackholeNzbFolder": "Nzb 폴더", "UseSsl": "SSL 사용", "TorrentBlackholeTorrentFolder": "토렌트 폴더", - "DownloadClientPneumaticSettingsNzbFolder": "Nzb 폴더" + "DownloadClientPneumaticSettingsNzbFolder": "Nzb 폴더", + "UserAgentProvidedByTheAppThatCalledTheAPI": "API를 호출한 앱에서 제공하는 사용자 에이전트", + "days": "일", + "minutes": "분", + "Author": "저작자" } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 928835b58..2385c5ddf 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -444,7 +444,7 @@ "DisabledForLocalAddresses": "Dezactivat pentru adresele locale", "None": "Nici unul", "ResetAPIKeyMessageText": "Sigur doriți să vă resetați cheia API?", - "AddApplicationImplementation": "Adăugați aplicație - {implementareName}", + "AddApplicationImplementation": "Adăugați aplicație - {implementationName}", "AddCategory": "Adăugați categorie", "AddConnection": "Adăugați conexiune", "AddConnectionImplementation": "Adăugați conexiune - {implementationName}", @@ -491,5 +491,13 @@ "Stats": "Status", "CurrentlyInstalled": "În prezent instalat", "Mixed": "Fix", - "Season": "Motiv" + "Season": "Motiv", + "ActiveIndexers": "Indexatorii activi", + "Any": "Oricare", + "AdvancedSettingsShownClickToHide": "Setări avansate afișate, click pentru a le ascunde", + "AdvancedSettingsHiddenClickToShow": "Setări avansate ascunse, click pentru afișare", + "ApiKeyValidationHealthCheckMessage": "Te rugăm să actualizezi cheia API astfel încât să aibă cel puțin {length} caractere. Poți face acest lucru din setări sau din fișierul de configurare", + "AddToDownloadClient": "Adaugă versiunea în clientul de descărcare", + "AddSyncProfile": "Adaugă profil de sincronizare", + "AddedToDownloadClient": "Versiune adăugată în client" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 9400b9b04..830cdbda6 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -746,5 +746,12 @@ "IndexerAvistazSettingsPidHelpText": "我的帐户或个人资料页的PID", "IndexerAvistazSettingsUsernameHelpText": "网站用户名", "IndexerAvistazSettingsUsernameHelpTextWarning": "只有成员级别及以上才能使用此索引器上的API。", - "IndexerBeyondHDSettingsLimitedOnlyHelpText": "仅限免费搜索(有限UL)" + "IndexerBeyondHDSettingsLimitedOnlyHelpText": "仅限免费搜索(有限UL)", + "IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "只搜索免费发布", + "IndexerMTeamTpSettingsFreeleechOnlyHelpText": "只搜索免费发布", + "IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "只搜索免费发布", + "IndexerHDBitsSettingsUsernameHelpText": "网站用户名", + "IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "只搜索免费发布", + "IndexerFileListSettingsFreeleechOnlyHelpText": "只搜索免费发布", + "IndexerFileListSettingsUsernameHelpText": "网站用户名" } From 4df8fc02f1720cac683bc747b244360f0cf2dc2b Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 9 Feb 2025 17:51:35 +0200 Subject: [PATCH 070/127] Bump version to 1.31.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 15e63d064..a0efed9a7 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.31.1' + majorVersion: '1.31.2' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 44bdff8b8fdb2fbdb07788ee884650b71f53e378 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:50:29 +0200 Subject: [PATCH 071/127] Minor cleanup for AnimeTorrents --- .../Indexers/Definitions/AnimeTorrents.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs index 120fd690d..9ce2eb525 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs @@ -292,7 +292,7 @@ namespace NzbDrone.Core.Indexers.Definitions var qTitleLink = row.QuerySelector("td:nth-of-type(2) a:nth-of-type(1)"); var title = qTitleLink?.TextContent.Trim(); - // If we search an get no results, we still get a table just with no info. + // If we search and get no results, we still get a table just with no info. if (title.IsNullOrWhiteSpace()) { break; @@ -307,6 +307,8 @@ namespace NzbDrone.Core.Indexers.Definitions var connections = row.QuerySelector("td:nth-of-type(8)").TextContent.Trim().Split('/', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); var seeders = ParseUtil.CoerceInt(connections[0]); + var leechers = ParseUtil.CoerceInt(connections[1]); + var grabs = ParseUtil.CoerceInt(connections[2]); var categoryLink = row.QuerySelector("td:nth-of-type(1) a")?.GetAttribute("href") ?? string.Empty; var categoryId = ParseUtil.GetArgumentFromQueryString(categoryLink, "cat"); @@ -328,17 +330,17 @@ namespace NzbDrone.Core.Indexers.Definitions PublishDate = publishedDate, Size = ParseUtil.GetBytes(row.QuerySelector("td:nth-of-type(6)").TextContent.Trim()), Seeders = seeders, - Peers = ParseUtil.CoerceInt(connections[1]) + seeders, - Grabs = ParseUtil.CoerceInt(connections[2]), + Peers = leechers + seeders, + Grabs = grabs, DownloadVolumeFactor = downloadVolumeFactor, UploadVolumeFactor = 1, Genres = row.QuerySelectorAll("td:nth-of-type(2) a.tortags").Select(t => t.TextContent.Trim()).ToList() }; - var uLFactorImg = row.QuerySelector("img[alt*=\"x Multiplier Torrent\"]"); - if (uLFactorImg != null) + var uploadFactor = row.QuerySelector("img[alt*=\"x Multiplier Torrent\"]")?.GetAttribute("alt"); + if (uploadFactor != null) { - release.UploadVolumeFactor = ParseUtil.CoerceDouble(uLFactorImg.GetAttribute("alt").Split('x')[0]); + release.UploadVolumeFactor = ParseUtil.CoerceDouble(uploadFactor.Split('x')[0]); } releaseInfos.Add(release); @@ -361,7 +363,7 @@ namespace NzbDrone.Core.Indexers.Definitions [FieldDefinition(4, Label = "Freeleech Only", Type = FieldType.Checkbox, HelpText = "Show freeleech torrents only")] public bool FreeleechOnly { get; set; } - [FieldDefinition(5, Label = "Downloadable Only", Type = FieldType.Checkbox, HelpText = "Search downloadable torrents only (enable this only if your account class is Newbie)")] + [FieldDefinition(5, Label = "Downloadable Only", Type = FieldType.Checkbox, HelpText = "Search downloadable torrents only (enable this only if your account class is Newbie)", Advanced = true)] public bool DownloadableOnly { get; set; } } } From 8672129d5a98cac9b591535aa0a63ac64df2766e Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:51:48 +0200 Subject: [PATCH 072/127] Fixed: (AnimeTorrents) Switched to cookies login --- .../Indexers/Definitions/AnimeTorrents.cs | 52 +++++-------------- 1 file changed, 12 insertions(+), 40 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs index 9ce2eb525..14b64979b 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text.RegularExpressions; -using System.Threading.Tasks; using AngleSharp.Html.Parser; using NLog; using NzbDrone.Common.Extensions; @@ -44,46 +43,19 @@ namespace NzbDrone.Core.Indexers.Definitions return new AnimeTorrentsParser(Settings, Capabilities.Categories); } - protected override async Task DoLogin() - { - UpdateCookies(null, null); - - var loginUrl = Settings.BaseUrl + "login.php"; - - var loginPage = await ExecuteAuth(new HttpRequest(loginUrl)); - - var requestBuilder = new HttpRequestBuilder(loginUrl) - { - LogResponseContent = true, - AllowAutoRedirect = true - }; - - var authLoginRequest = requestBuilder - .Post() - .SetCookies(loginPage.GetCookies()) - .AddFormParameter("username", Settings.Username) - .AddFormParameter("password", Settings.Password) - .AddFormParameter("form", "login") - .AddFormParameter("rememberme[]", "1") - .SetHeader("Content-Type", "application/x-www-form-urlencoded") - .SetHeader("Referer", loginUrl) - .Build(); - - var response = await ExecuteAuth(authLoginRequest); - - if (response.Content == null || !response.Content.Contains("logout.php")) - { - throw new IndexerAuthException("AnimeTorrents authentication failed"); - } - - UpdateCookies(response.GetCookies(), DateTime.Now.AddDays(30)); - - _logger.Debug("AnimeTorrents authentication succeeded"); - } - protected override bool CheckIfLoginNeeded(HttpResponse httpResponse) { - return httpResponse.Content.Contains("Access Denied!") || httpResponse.Content.Contains("login.php"); + if (httpResponse.Content.Contains("Access Denied!") || httpResponse.Content.Contains("login.php")) + { + throw new IndexerAuthException("AnimeTorrents authentication with cookies failed."); + } + + return false; + } + + protected override IDictionary<string, string> GetCookies() + { + return CookieUtil.CookieHeaderToDictionary(Settings.Cookie); } private IndexerCapabilities SetCapabilities() @@ -352,7 +324,7 @@ namespace NzbDrone.Core.Indexers.Definitions public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; } } - public class AnimeTorrentsSettings : UserPassTorrentBaseSettings + public class AnimeTorrentsSettings : CookieTorrentBaseSettings { public AnimeTorrentsSettings() { From d6e8d89be4daa73fb9d43bcd969622dc66d918e8 Mon Sep 17 00:00:00 2001 From: zodihax <gerund-frugal-0m@icloud.com> Date: Wed, 12 Feb 2025 18:27:09 +0100 Subject: [PATCH 073/127] Fixed: (NorBits) Update release category parsing (#2342) Co-authored-by: Bogdan <mynameisbogdan@users.noreply.github.com> --- .../Indexers/Definitions/NorBits.cs | 35 +++++-------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs index 4287f515f..990cf3d68 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs @@ -130,29 +130,13 @@ public class NorBits : TorrentIndexerBase<NorBitsSettings> }; caps.Categories.AddCategoryMapping("main_cat[]=1", NewznabStandardCategory.Movies, "Filmer"); - caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=49", NewznabStandardCategory.MoviesUHD, "Filmer - UHD-2160p"); - caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=19", NewznabStandardCategory.MoviesHD, "Filmer - HD-1080p/i"); - caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=20", NewznabStandardCategory.MoviesHD, "Filmer - HD-720p"); - caps.Categories.AddCategoryMapping("main_cat[]=1&sub2_cat[]=22", NewznabStandardCategory.MoviesSD, "Filmer - SD"); caps.Categories.AddCategoryMapping("main_cat[]=2", NewznabStandardCategory.TV, "TV"); - caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=49", NewznabStandardCategory.TVUHD, "TV - UHD-2160p"); - caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=19", NewznabStandardCategory.TVHD, "TV - HD-1080p/i"); - caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=20", NewznabStandardCategory.TVHD, "TV - HD-720p"); - caps.Categories.AddCategoryMapping("main_cat[]=2&sub2_cat[]=22", NewznabStandardCategory.TVSD, "TV - SD"); caps.Categories.AddCategoryMapping("main_cat[]=3", NewznabStandardCategory.PC, "Programmer"); caps.Categories.AddCategoryMapping("main_cat[]=4", NewznabStandardCategory.Console, "Spill"); caps.Categories.AddCategoryMapping("main_cat[]=5", NewznabStandardCategory.Audio, "Musikk"); - caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=42", NewznabStandardCategory.AudioMP3, "Musikk - 192"); - caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=43", NewznabStandardCategory.AudioMP3, "Musikk - 256"); - caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=44", NewznabStandardCategory.AudioMP3, "Musikk - 320"); - caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=45", NewznabStandardCategory.AudioMP3, "Musikk - VBR"); - caps.Categories.AddCategoryMapping("main_cat[]=5&sub2_cat[]=46", NewznabStandardCategory.AudioLossless, "Musikk - Lossless"); caps.Categories.AddCategoryMapping("main_cat[]=6", NewznabStandardCategory.Books, "Tidsskrift"); caps.Categories.AddCategoryMapping("main_cat[]=7", NewznabStandardCategory.AudioAudiobook, "Lydbøker"); caps.Categories.AddCategoryMapping("main_cat[]=8", NewznabStandardCategory.AudioVideo, "Musikkvideoer"); - caps.Categories.AddCategoryMapping("main_cat[]=8&sub2_cat[]=19", NewznabStandardCategory.AudioVideo, "Musikkvideoer - HD-1080p/i"); - caps.Categories.AddCategoryMapping("main_cat[]=8&sub2_cat[]=20", NewznabStandardCategory.AudioVideo, "Musikkvideoer - HD-720p"); - caps.Categories.AddCategoryMapping("main_cat[]=8&sub2_cat[]=22", NewznabStandardCategory.AudioVideo, "Musikkvideoer - SD"); caps.Categories.AddCategoryMapping("main_cat[]=40", NewznabStandardCategory.AudioOther, "Podcasts"); return caps; @@ -281,20 +265,17 @@ public class NorBitsParser : IParseIndexerResponse foreach (var row in rows) { - var link = _settings.BaseUrl + row.QuerySelector("td:nth-of-type(2) > a[href*=\"download.php?id=\"]")?.GetAttribute("href").TrimStart('/'); + var link = _settings.BaseUrl + row.QuerySelector("td:nth-of-type(2) > a[href*=\"download.php?id=\"]")?.GetAttribute("href")?.TrimStart('/'); var qDetails = row.QuerySelector("td:nth-of-type(2) > a[href*=\"details.php?id=\"]"); - var title = qDetails?.GetAttribute("title").Trim(); - var details = _settings.BaseUrl + qDetails?.GetAttribute("href").TrimStart('/'); + var title = qDetails?.GetAttribute("title")?.Trim(); + var details = _settings.BaseUrl + qDetails?.GetAttribute("href")?.TrimStart('/'); - var mainCategory = row.QuerySelector("td:nth-of-type(1) a[href*=\"main_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); - var secondCategory = row.QuerySelector("td:nth-of-type(1) a[href*=\"sub2_cat[]\"]")?.GetAttribute("href")?.Split('?').Last(); + var catQuery = row.QuerySelector("td:nth-of-type(1) a[href*=\"main_cat[]\"]")?.GetAttribute("href")?.Split('?').Last().Split('&', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + var category = catQuery?.FirstOrDefault(x => x.StartsWith("main_cat[]=", StringComparison.OrdinalIgnoreCase)); - var categoryList = new[] { mainCategory, secondCategory }; - var cat = string.Join("&", categoryList.Where(c => !string.IsNullOrWhiteSpace(c))); - - var seeders = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(9)").TextContent); - var leechers = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(10)").TextContent); + var seeders = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(9)")?.TextContent); + var leechers = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(10)")?.TextContent); var release = new TorrentInfo { @@ -302,7 +283,7 @@ public class NorBitsParser : IParseIndexerResponse InfoUrl = details, DownloadUrl = link, Title = title, - Categories = _categories.MapTrackerCatToNewznab(cat), + Categories = _categories.MapTrackerCatToNewznab(category), Size = ParseUtil.GetBytes(row.QuerySelector("td:nth-of-type(7)")?.TextContent), Files = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(3) > a")?.TextContent.Trim()), Grabs = ParseUtil.CoerceInt(row.QuerySelector("td:nth-of-type(8)")?.FirstChild?.TextContent.Trim()), From 0f1d647cd7510bb48be01354aeea8edcf88b257d Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 16 Feb 2025 11:50:48 +0200 Subject: [PATCH 074/127] Fixed: (FileList) Download links when passkey contains spaces --- .../Indexers/Definitions/FileList/FileListParser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/FileList/FileListParser.cs b/src/NzbDrone.Core/Indexers/Definitions/FileList/FileListParser.cs index a15751ab7..b45ddf19b 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/FileList/FileListParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/FileList/FileListParser.cs @@ -101,7 +101,7 @@ public class FileListParser : IParseIndexerResponse var url = new HttpUri(_settings.BaseUrl) .CombinePath("/download.php") .AddQueryParam("id", torrentId.ToString()) - .AddQueryParam("passkey", _settings.Passkey); + .AddQueryParam("passkey", _settings.Passkey.Trim()); return url.FullUri; } From 2d584f7eb64eeddb292b60a7cf1cfbf433debc99 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Tue, 18 Feb 2025 02:11:57 +0200 Subject: [PATCH 075/127] New: Support for exclusive indexer flag Co-authored-by: zakkarry <zak@ary.dev> --- .../IndexerTests/HDBitsTests/HDBitsFixture.cs | 8 ++--- .../Indexers/Definitions/BeyondHD.cs | 33 ++++++++++++------ .../Indexers/Definitions/HDBits/HDBits.cs | 7 +++- .../Indexers/Definitions/HDBits/HDBitsApi.cs | 3 ++ .../Indexers/Definitions/HDBits/HDBitsInfo.cs | 9 ----- .../Definitions/HDBits/HDBitsParser.cs | 34 ++++++++++++------- src/NzbDrone.Core/Indexers/IndexerFlag.cs | 1 + 7 files changed, 58 insertions(+), 37 deletions(-) delete mode 100644 src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsInfo.cs diff --git a/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs index 39d628d79..06326d162 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs @@ -26,15 +26,15 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests [SetUp] public void Setup() { - Subject.Definition = new IndexerDefinition() + Subject.Definition = new IndexerDefinition { Name = "HdBits", - Settings = new HDBitsSettings() { ApiKey = "fakekey" } + Settings = new HDBitsSettings { ApiKey = "fakekey" } }; _movieSearchCriteria = new MovieSearchCriteria { - Categories = new int[] { 2000, 2010 }, + Categories = new[] { 2000, 2010 }, ImdbId = "0076759" }; } @@ -52,7 +52,7 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests var torrents = (await Subject.Fetch(_movieSearchCriteria)).Releases; torrents.Should().HaveCount(2); - torrents.First().Should().BeOfType<HDBitsInfo>(); + torrents.First().Should().BeOfType<TorrentInfo>(); var first = torrents.First() as TorrentInfo; diff --git a/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs b/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs index f9194f00a..efa1a667d 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs @@ -55,7 +55,7 @@ namespace NzbDrone.Core.Indexers.Definitions return FilterReleasesByQuery(cleanReleases, searchCriteria).ToList(); } - private IndexerCapabilities SetCapabilities() + private static IndexerCapabilities SetCapabilities() { var caps = new IndexerCapabilities { @@ -69,7 +69,8 @@ namespace NzbDrone.Core.Indexers.Definitions }, Flags = new List<IndexerFlag> { - IndexerFlag.Internal + IndexerFlag.Internal, + IndexerFlag.Exclusive, } }; @@ -275,13 +276,6 @@ namespace NzbDrone.Core.Indexers.Definitions var details = row.InfoUrl; var link = row.DownloadLink; - var flags = new HashSet<IndexerFlag>(); - - if (row.Internal) - { - flags.Add(IndexerFlag.Internal); - } - var release = new TorrentInfo { Title = row.Name, @@ -291,7 +285,7 @@ namespace NzbDrone.Core.Indexers.Definitions Guid = details, Categories = _categories.MapTrackerCatDescToNewznab(row.Category), PublishDate = DateTime.Parse(row.CreatedAt, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal), - IndexerFlags = flags, + IndexerFlags = GetIndexerFlags(row), Size = row.Size, Grabs = row.Grabs, Seeders = row.Seeders, @@ -319,6 +313,23 @@ namespace NzbDrone.Core.Indexers.Definitions .ToArray(); } + private static HashSet<IndexerFlag> GetIndexerFlags(BeyondHDTorrent item) + { + var flags = new HashSet<IndexerFlag>(); + + if (item.Internal) + { + flags.Add(IndexerFlag.Internal); + } + + if (item.Exclusive) + { + flags.Add(IndexerFlag.Exclusive); + } + + return flags; + } + public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; } } @@ -478,6 +489,8 @@ namespace NzbDrone.Core.Indexers.Definitions public bool Limited { get; set; } + public bool Exclusive { get; set; } + public bool Internal { get; set; } } } diff --git a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBits.cs b/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBits.cs index 84ea1be25..b4d924511 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBits.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBits.cs @@ -32,7 +32,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits return new HDBitsParser(Settings, Capabilities.Categories); } - private IndexerCapabilities SetCapabilities() + private static IndexerCapabilities SetCapabilities() { var caps = new IndexerCapabilities { @@ -43,6 +43,11 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits MovieSearchParams = new List<MovieSearchParam> { MovieSearchParam.Q, MovieSearchParam.ImdbId + }, + Flags = new List<IndexerFlag> + { + IndexerFlag.Internal, + IndexerFlag.Exclusive, } }; diff --git a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsApi.cs b/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsApi.cs index c66c6213e..5f8b947ae 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsApi.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsApi.cs @@ -85,6 +85,9 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits [JsonProperty(PropertyName = "type_origin")] public int TypeOrigin { get; set; } + [JsonProperty(PropertyName = "type_exclusive")] + public int TypeExclusive { get; set; } + [JsonProperty(PropertyName = "imdb")] public ImdbInfo ImdbInfo { get; set; } diff --git a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsInfo.cs b/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsInfo.cs deleted file mode 100644 index 412295abf..000000000 --- a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsInfo.cs +++ /dev/null @@ -1,9 +0,0 @@ -using NzbDrone.Core.Parser.Model; - -namespace NzbDrone.Core.Indexers.Definitions.HDBits -{ - public class HDBitsInfo : TorrentInfo - { - public bool? Internal { get; set; } - } -} diff --git a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsParser.cs b/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsParser.cs index ff6692407..8b0b55319 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/HDBits/HDBitsParser.cs @@ -62,16 +62,8 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits } var id = result.Id; - var internalRelease = result.TypeOrigin == 1; - var flags = new HashSet<IndexerFlag>(); - - if (internalRelease) - { - flags.Add(IndexerFlag.Internal); - } - - releaseInfos.Add(new HDBitsInfo + releaseInfos.Add(new TorrentInfo { Guid = $"HDBits-{id}", Title = GetTitle(result), @@ -85,21 +77,18 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits Files = (int)result.NumFiles, Peers = result.Leechers + result.Seeders, PublishDate = result.Added.ToUniversalTime(), - Internal = internalRelease, Year = result.ImdbInfo?.Year ?? 0, ImdbId = result.ImdbInfo?.Id ?? 0, TvdbId = result.TvdbInfo?.Id ?? 0, DownloadVolumeFactor = GetDownloadVolumeFactor(result), UploadVolumeFactor = GetUploadVolumeFactor(result), - IndexerFlags = flags + IndexerFlags = GetIndexerFlags(result) }); } return releaseInfos.ToArray(); } - public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; } - private string GetTitle(TorrentQueryResponse item) { // Use release name for XXX content and full discs @@ -108,6 +97,23 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits : item.Name; } + private static HashSet<IndexerFlag> GetIndexerFlags(TorrentQueryResponse item) + { + var flags = new HashSet<IndexerFlag>(); + + if (item.TypeOrigin == 1) + { + flags.Add(IndexerFlag.Internal); + } + + if (item.TypeExclusive == 1) + { + flags.Add(IndexerFlag.Exclusive); + } + + return flags; + } + private double GetDownloadVolumeFactor(TorrentQueryResponse item) { if (item.FreeLeech == "yes") @@ -154,5 +160,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits return url.FullUri; } + + public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; } } } diff --git a/src/NzbDrone.Core/Indexers/IndexerFlag.cs b/src/NzbDrone.Core/Indexers/IndexerFlag.cs index 26a65e96c..cfa3d35de 100644 --- a/src/NzbDrone.Core/Indexers/IndexerFlag.cs +++ b/src/NzbDrone.Core/Indexers/IndexerFlag.cs @@ -63,6 +63,7 @@ namespace NzbDrone.Core.Indexers } public static IndexerFlag Internal => new ("internal", "Uploader is an internal release group"); + public static IndexerFlag Exclusive => new ("exclusive", "An exclusive release that must not be uploaded anywhere else"); public static IndexerFlag FreeLeech => new ("freeleech", "Download doesn't count toward ratio"); public static IndexerFlag NeutralLeech => new ("neutralleech", "Download and upload doesn't count toward ratio"); public static IndexerFlag HalfLeech => new ("halfleech", "Release counts 50% to ratio"); From d5b12cf51a7adf48d4ef5455014c61443a8a01ef Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Tue, 18 Feb 2025 04:00:24 +0200 Subject: [PATCH 076/127] Fixed release guid for SpeedApp --- src/NzbDrone.Core/Indexers/Definitions/SpeedApp/SpeedAppBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/SpeedApp/SpeedAppBase.cs b/src/NzbDrone.Core/Indexers/Definitions/SpeedApp/SpeedAppBase.cs index f0170d868..244a9c286 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/SpeedApp/SpeedAppBase.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/SpeedApp/SpeedAppBase.cs @@ -262,7 +262,7 @@ namespace NzbDrone.Core.Indexers.Definitions return jsonResponse.Resource.Select(torrent => new TorrentInfo { - Guid = torrent.Id.ToString(), + Guid = torrent.Url, Title = CleanTitle(torrent.Name), Description = torrent.ShortDescription, Size = torrent.Size, From 59b5d2fc786f5a0fca37d1a191772522f17debcd Mon Sep 17 00:00:00 2001 From: Mark McDowall <mark@mcdowall.ca> Date: Wed, 29 Jan 2025 18:46:19 -0800 Subject: [PATCH 077/127] Fixed: Drop downs flickering in some cases (cherry picked from commit 3b024443c5447b7638a69a99809bf44b2419261f) --- .../src/Components/Form/EnhancedSelectInput.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/frontend/src/Components/Form/EnhancedSelectInput.js b/frontend/src/Components/Form/EnhancedSelectInput.js index 732e10f37..79b1c999c 100644 --- a/frontend/src/Components/Form/EnhancedSelectInput.js +++ b/frontend/src/Components/Form/EnhancedSelectInput.js @@ -20,6 +20,8 @@ import HintedSelectInputSelectedValue from './HintedSelectInputSelectedValue'; import TextInput from './TextInput'; import styles from './EnhancedSelectInput.css'; +const MINIMUM_DISTANCE_FROM_EDGE = 10; + function isArrowKey(keyCode) { return keyCode === keyCodes.UP_ARROW || keyCode === keyCodes.DOWN_ARROW; } @@ -137,18 +139,9 @@ class EnhancedSelectInput extends Component { // Listeners onComputeMaxHeight = (data) => { - const { - top, - bottom - } = data.offsets.reference; - const windowHeight = window.innerHeight; - if ((/^botton/).test(data.placement)) { - data.styles.maxHeight = windowHeight - bottom; - } else { - data.styles.maxHeight = top; - } + data.styles.maxHeight = windowHeight - MINIMUM_DISTANCE_FROM_EDGE; return data; }; @@ -460,6 +453,10 @@ class EnhancedSelectInput extends Component { order: 851, enabled: true, fn: this.onComputeMaxHeight + }, + preventOverflow: { + enabled: true, + boundariesElement: 'viewport' } }} > From 790feed5ab6b26ba25e50a6db81e0504e7823d17 Mon Sep 17 00:00:00 2001 From: Stevie Robinson <stevie.robinson@gmail.com> Date: Wed, 19 Feb 2025 04:23:43 +0100 Subject: [PATCH 078/127] Fixed: Fallback to Instance Name for Discord notifications (cherry picked from commit b99e06acc0a3ecae2857d9225b35424c82c67a2b) --- .../Notifications/Discord/Discord.cs | 154 ++++++++---------- 1 file changed, 67 insertions(+), 87 deletions(-) diff --git a/src/NzbDrone.Core/Notifications/Discord/Discord.cs b/src/NzbDrone.Core/Notifications/Discord/Discord.cs index 9eb41e989..48b93f35d 100644 --- a/src/NzbDrone.Core/Notifications/Discord/Discord.cs +++ b/src/NzbDrone.Core/Notifications/Discord/Discord.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using FluentValidation.Results; using NzbDrone.Common.Extensions; +using NzbDrone.Core.Configuration; using NzbDrone.Core.Notifications.Discord.Payloads; using NzbDrone.Core.Validation; @@ -10,10 +11,12 @@ namespace NzbDrone.Core.Notifications.Discord public class Discord : NotificationBase<DiscordSettings> { private readonly IDiscordProxy _proxy; + private readonly IConfigFileProvider _configFileProvider; - public Discord(IDiscordProxy proxy) + public Discord(IDiscordProxy proxy, IConfigFileProvider configFileProvider) { _proxy = proxy; + _configFileProvider = configFileProvider; } public override string Name => "Discord"; @@ -22,18 +25,18 @@ namespace NzbDrone.Core.Notifications.Discord public override void OnGrab(GrabMessage message) { var embed = new Embed - { - Author = new DiscordAuthor - { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, - IconUrl = "https://raw.githubusercontent.com/Prowlarr/Prowlarr/develop/Logo/256.png" - }, - Title = RELEASE_GRABBED_TITLE, - Description = message.Message, - Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), - Color = message.Successful ? (int)DiscordColors.Success : (int)DiscordColors.Danger, - Fields = new List<DiscordField>() - }; + { + Author = new DiscordAuthor + { + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, + IconUrl = "https://raw.githubusercontent.com/Prowlarr/Prowlarr/develop/Logo/256.png" + }, + Title = RELEASE_GRABBED_TITLE, + Description = message.Message, + Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), + Color = message.Successful ? (int)DiscordColors.Success : (int)DiscordColors.Danger, + Fields = new List<DiscordField>() + }; foreach (var field in Settings.GrabFields) { @@ -80,81 +83,72 @@ namespace NzbDrone.Core.Notifications.Discord public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { - var attachments = new List<Embed> - { - new Embed - { - Author = new DiscordAuthor - { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, - IconUrl = "https://raw.githubusercontent.com/Prowlarr/Prowlarr/develop/Logo/256.png" - }, - Title = healthCheck.Source.Name, - Description = healthCheck.Message, - Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), - Color = healthCheck.Type == HealthCheck.HealthCheckResult.Warning ? (int)DiscordColors.Warning : (int)DiscordColors.Danger - } - }; + var embed = new Embed + { + Author = new DiscordAuthor + { + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, + IconUrl = "https://raw.githubusercontent.com/Prowlarr/Prowlarr/develop/Logo/256.png" + }, + Title = healthCheck.Source.Name, + Description = healthCheck.Message, + Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), + Color = healthCheck.Type == HealthCheck.HealthCheckResult.Warning ? (int)DiscordColors.Warning : (int)DiscordColors.Danger + }; - var payload = CreatePayload(null, attachments); + var payload = CreatePayload(null, new List<Embed> { embed }); _proxy.SendPayload(payload, Settings); } public override void OnHealthRestored(HealthCheck.HealthCheck previousCheck) { - var attachments = new List<Embed> - { - new Embed - { - Author = new DiscordAuthor - { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, - IconUrl = "https://raw.githubusercontent.com/Prowlarr/Prowlarr/develop/Logo/256.png" - }, - Title = "Health Issue Resolved: " + previousCheck.Source.Name, - Description = $"The following issue is now resolved: {previousCheck.Message}", - Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), - Color = (int)DiscordColors.Success - } - }; + var embed = new Embed + { + Author = new DiscordAuthor + { + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, + IconUrl = "https://raw.githubusercontent.com/Prowlarr/Prowlarr/develop/Logo/256.png" + }, + Title = "Health Issue Resolved: " + previousCheck.Source.Name, + Description = $"The following issue is now resolved: {previousCheck.Message}", + Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), + Color = (int)DiscordColors.Success + }; - var payload = CreatePayload(null, attachments); + var payload = CreatePayload(null, new List<Embed> { embed }); _proxy.SendPayload(payload, Settings); } public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage) { - var attachments = new List<Embed> - { - new Embed - { - Author = new DiscordAuthor - { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, - IconUrl = "https://raw.githubusercontent.com/Prowlarr/Prowlarr/develop/Logo/256.png" - }, - Title = APPLICATION_UPDATE_TITLE, - Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), - Color = (int)DiscordColors.Standard, - Fields = new List<DiscordField>() - { - new DiscordField() - { - Name = "Previous Version", - Value = updateMessage.PreviousVersion.ToString() - }, - new DiscordField() - { - Name = "New Version", - Value = updateMessage.NewVersion.ToString() - } - }, - } - }; + var embed = new Embed + { + Author = new DiscordAuthor + { + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, + IconUrl = "https://raw.githubusercontent.com/Prowlarr/Prowlarr/develop/Logo/256.png" + }, + Title = APPLICATION_UPDATE_TITLE, + Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), + Color = (int)DiscordColors.Standard, + Fields = new List<DiscordField> + { + new () + { + Name = "Previous Version", + Value = updateMessage.PreviousVersion.ToString() + }, + new () + { + Name = "New Version", + Value = updateMessage.NewVersion.ToString() + } + }, + }; - var payload = CreatePayload(null, attachments); + var payload = CreatePayload(null, new List<Embed> { embed }); _proxy.SendPayload(payload, Settings); } @@ -208,19 +202,5 @@ namespace NzbDrone.Core.Notifications.Discord return payload; } - - private static string BytesToString(long byteCount) - { - string[] suf = { "B", "KB", "MB", "GB", "TB", "PB", "EB" }; //Longs run out around EB - if (byteCount == 0) - { - return "0 " + suf[0]; - } - - var bytes = Math.Abs(byteCount); - var place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024))); - var num = Math.Round(bytes / Math.Pow(1024, place), 1); - return string.Format("{0} {1}", (Math.Sign(byteCount) * num).ToString(), suf[place]); - } } } From 635e76526a38dd1c28d659c5a71f877e794ac700 Mon Sep 17 00:00:00 2001 From: Mark McDowall <mark@mcdowall.ca> Date: Sun, 16 Feb 2025 19:15:27 -0800 Subject: [PATCH 079/127] Cleanse console log messages (cherry picked from commit 609e964794e17343f63e1ecff3fef323e3d284ff) --- .../Instrumentation/CleansingClefLogLayout.cs | 21 +++++++++++++ .../CleansingConsoleLogLayout.cs | 26 ++++++++++++++++ ...neFileTarget.cs => CleansingFileTarget.cs} | 2 +- .../Instrumentation/NzbDroneLogger.cs | 30 +++++++++++-------- .../Instrumentation/ReconfigureLogging.cs | 8 ++--- 5 files changed, 68 insertions(+), 19 deletions(-) create mode 100644 src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs create mode 100644 src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs rename src/NzbDrone.Common/Instrumentation/{NzbDroneFileTarget.cs => CleansingFileTarget.cs} (87%) diff --git a/src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs b/src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs new file mode 100644 index 000000000..f110b96ac --- /dev/null +++ b/src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs @@ -0,0 +1,21 @@ +using System.Text; +using NLog; +using NLog.Layouts.ClefJsonLayout; +using NzbDrone.Common.EnvironmentInfo; + +namespace NzbDrone.Common.Instrumentation; + +public class CleansingClefLogLayout : CompactJsonLayout +{ + protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target) + { + base.RenderFormattedMessage(logEvent, target); + + if (RuntimeInfo.IsProduction) + { + var result = CleanseLogMessage.Cleanse(target.ToString()); + target.Clear(); + target.Append(result); + } + } +} diff --git a/src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs b/src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs new file mode 100644 index 000000000..f894a4df5 --- /dev/null +++ b/src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs @@ -0,0 +1,26 @@ +using System.Text; +using NLog; +using NLog.Layouts; +using NzbDrone.Common.EnvironmentInfo; + +namespace NzbDrone.Common.Instrumentation; + +public class CleansingConsoleLogLayout : SimpleLayout +{ + public CleansingConsoleLogLayout(string format) + : base(format) + { + } + + protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target) + { + base.RenderFormattedMessage(logEvent, target); + + if (RuntimeInfo.IsProduction) + { + var result = CleanseLogMessage.Cleanse(target.ToString()); + target.Clear(); + target.Append(result); + } + } +} diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs b/src/NzbDrone.Common/Instrumentation/CleansingFileTarget.cs similarity index 87% rename from src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs rename to src/NzbDrone.Common/Instrumentation/CleansingFileTarget.cs index 84658cf74..f74d1fca4 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs +++ b/src/NzbDrone.Common/Instrumentation/CleansingFileTarget.cs @@ -4,7 +4,7 @@ using NLog.Targets; namespace NzbDrone.Common.Instrumentation { - public class NzbDroneFileTarget : FileTarget + public class CleansingFileTarget : FileTarget { protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target) { diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs index 80793e812..d9fdd5b25 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs +++ b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs @@ -3,7 +3,6 @@ using System.Diagnostics; using System.IO; using NLog; using NLog.Config; -using NLog.Layouts.ClefJsonLayout; using NLog.Targets; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; @@ -13,9 +12,11 @@ namespace NzbDrone.Common.Instrumentation { public static class NzbDroneLogger { - private const string FILE_LOG_LAYOUT = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; - public const string ConsoleLogLayout = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; - public static CompactJsonLayout ClefLogLayout = new CompactJsonLayout(); + private const string FileLogLayout = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; + private const string ConsoleFormat = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; + + private static readonly CleansingConsoleLogLayout CleansingConsoleLayout = new (ConsoleFormat); + private static readonly CleansingClefLogLayout ClefLogLayout = new (); private static bool _isConfigured; @@ -119,11 +120,7 @@ namespace NzbDrone.Common.Instrumentation ? formatEnumValue : ConsoleLogFormat.Standard; - coloredConsoleTarget.Layout = logFormat switch - { - ConsoleLogFormat.Clef => ClefLogLayout, - _ => ConsoleLogLayout - }; + ConfigureConsoleLayout(coloredConsoleTarget, logFormat); var loggingRule = new LoggingRule("*", level, coloredConsoleTarget); @@ -140,7 +137,7 @@ namespace NzbDrone.Common.Instrumentation private static void RegisterAppFile(IAppFolderInfo appFolderInfo, string name, string fileName, int maxArchiveFiles, LogLevel minLogLevel) { - var fileTarget = new NzbDroneFileTarget(); + var fileTarget = new CleansingFileTarget(); fileTarget.Name = name; fileTarget.FileName = Path.Combine(appFolderInfo.GetLogFolder(), fileName); @@ -153,7 +150,7 @@ namespace NzbDrone.Common.Instrumentation fileTarget.MaxArchiveFiles = maxArchiveFiles; fileTarget.EnableFileDelete = true; fileTarget.ArchiveNumbering = ArchiveNumberingMode.Rolling; - fileTarget.Layout = FILE_LOG_LAYOUT; + fileTarget.Layout = FileLogLayout; var loggingRule = new LoggingRule("*", minLogLevel, fileTarget); @@ -172,7 +169,7 @@ namespace NzbDrone.Common.Instrumentation fileTarget.ConcurrentWrites = false; fileTarget.ConcurrentWriteAttemptDelay = 50; fileTarget.ConcurrentWriteAttempts = 100; - fileTarget.Layout = FILE_LOG_LAYOUT; + fileTarget.Layout = FileLogLayout; var loggingRule = new LoggingRule("*", LogLevel.Trace, fileTarget); @@ -217,6 +214,15 @@ namespace NzbDrone.Common.Instrumentation { return GetLogger(obj.GetType()); } + + public static void ConfigureConsoleLayout(ColoredConsoleTarget target, ConsoleLogFormat format) + { + target.Layout = format switch + { + ConsoleLogFormat.Clef => NzbDroneLogger.ClefLogLayout, + _ => NzbDroneLogger.CleansingConsoleLayout + }; + } } public enum ConsoleLogFormat diff --git a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs index 346b6acf1..ac0cd085b 100644 --- a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs +++ b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs @@ -95,7 +95,7 @@ namespace NzbDrone.Core.Instrumentation private void ReconfigureFile() { - foreach (var target in LogManager.Configuration.AllTargets.OfType<NzbDroneFileTarget>()) + foreach (var target in LogManager.Configuration.AllTargets.OfType<CleansingFileTarget>()) { target.MaxArchiveFiles = _configFileProvider.LogRotate; target.ArchiveAboveSize = _configFileProvider.LogSizeLimit.Megabytes(); @@ -120,11 +120,7 @@ namespace NzbDrone.Core.Instrumentation { var format = _configFileProvider.ConsoleLogFormat; - consoleTarget.Layout = format switch - { - ConsoleLogFormat.Clef => NzbDroneLogger.ClefLogLayout, - _ => NzbDroneLogger.ConsoleLogLayout - }; + NzbDroneLogger.ConfigureConsoleLayout(consoleTarget, format); } } From 328f3c0423511447eb0dac94ba602b009cd54fd0 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 22 Feb 2025 12:55:30 +0200 Subject: [PATCH 080/127] Bump version to 1.32.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a0efed9a7..a7dad740e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.31.2' + majorVersion: '1.32.0' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From b09d4927cc67593518c12ed0d45cff927f1b6c73 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 26 Feb 2025 03:59:22 +0200 Subject: [PATCH 081/127] Check instance name must contain application name with culture-insensitive --- src/NzbDrone.Core/Configuration/ConfigFileProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index b9f4f23d2..f4715b203 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -274,7 +274,7 @@ namespace NzbDrone.Core.Configuration { var instanceName = _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName); - if (instanceName.ContainsIgnoreCase(BuildInfo.AppName)) + if (instanceName.Contains(BuildInfo.AppName, StringComparison.OrdinalIgnoreCase)) { return instanceName; } From 53bc97b3be93c5c74da341b56472a6813d2c12c5 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 1 Mar 2025 17:34:58 +0200 Subject: [PATCH 082/127] Fixed: (BeyondHd) Search daily episodes using year-month-day format --- .../Indexers/Definitions/BeyondHD.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs b/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs index efa1a667d..33a80f43a 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs @@ -92,7 +92,7 @@ namespace NzbDrone.Core.Indexers.Definitions _capabilities = capabilities; } - private IEnumerable<IndexerRequest> GetPagedRequests(SearchCriteriaBase searchCriteria, string term, string imdbId = null, int tmdbId = 0) + private IEnumerable<IndexerRequest> GetPagedRequests(SearchCriteriaBase searchCriteria, string searchTerm, string imdbId = null, int tmdbId = 0) { var body = new Dictionary<string, object> { @@ -129,9 +129,9 @@ namespace NzbDrone.Core.Indexers.Definitions body.Add("tmdb_id", tmdbId); } - if (term.IsNotNullOrWhiteSpace()) + if (searchTerm.IsNotNullOrWhiteSpace()) { - body.Add("search", term); + body.Add("search", searchTerm.Trim()); } var cats = _capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories); @@ -199,7 +199,16 @@ namespace NzbDrone.Core.Indexers.Definitions { var pageableRequests = new IndexerPageableRequestChain(); - pageableRequests.Add(GetPagedRequests(searchCriteria, searchCriteria.SanitizedTvSearchString, searchCriteria.FullImdbId)); + var searchTerm = searchCriteria.SanitizedTvSearchString; + + if (searchCriteria.Season is > 0 && + searchCriteria.Episode.IsNotNullOrWhiteSpace() && + DateTime.TryParseExact($"{searchCriteria.Season} {searchCriteria.Episode}", "yyyy MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var showDate)) + { + searchTerm = $"{searchCriteria.SanitizedSearchTerm} {showDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}"; + } + + pageableRequests.Add(GetPagedRequests(searchCriteria, searchTerm, searchCriteria.FullImdbId)); return pageableRequests; } From 46b6124b978e3ecb3a2cd948d4750f08cedc5390 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 2 Mar 2025 12:17:40 +0200 Subject: [PATCH 083/127] Bump version to 1.32.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a7dad740e..7480d2763 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.32.0' + majorVersion: '1.32.1' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From f02a6f3e2cdb64763d3e03e5203169c842dbaece Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:16:59 +0200 Subject: [PATCH 084/127] Update timezone offset for AvistaZ trackers --- src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs | 2 +- .../Indexers/Definitions/Avistaz/AvistazParserBase.cs | 2 +- src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs b/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs index 7d9ba3b51..4e1899651 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs @@ -84,6 +84,6 @@ namespace NzbDrone.Core.Indexers.Definitions public class AvistaZParser : AvistazParserBase { - protected override string TimezoneOffset => "+02:00"; + protected override string TimezoneOffset => "+01:00"; } } diff --git a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazParserBase.cs b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazParserBase.cs index 56cc7a3fe..84e36cf7e 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazParserBase.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazParserBase.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz { public class AvistazParserBase : IParseIndexerResponse { - protected virtual string TimezoneOffset => "-04:00"; // Avistaz does not specify a timezone & returns server time + protected virtual string TimezoneOffset => "-05:00"; // Avistaz does not specify a timezone & returns server time private readonly HashSet<string> _hdResolutions = new () { "1080p", "1080i", "720p" }; public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; } diff --git a/src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs b/src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs index 0933ea6a2..784cc56e4 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs @@ -54,7 +54,7 @@ namespace NzbDrone.Core.Indexers.Definitions { private readonly IndexerCapabilitiesCategories _categories; - protected override string TimezoneOffset => "+02:00"; + protected override string TimezoneOffset => "+01:00"; public ExoticaZParser(IndexerCapabilitiesCategories categories) { From 49268f3b8d0c57775db282445ff1096a0fc22096 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Tue, 4 Mar 2025 13:15:44 +0200 Subject: [PATCH 085/127] Fix timezone offset tests for AvistaZ trackers --- .../IndexerTests/AvistazTests/AvistazFixture.cs | 2 +- .../IndexerTests/AvistazTests/ExoticazFixture.cs | 2 +- .../IndexerTests/AvistazTests/PrivateHDFixture.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/AvistazFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/AvistazFixture.cs index dcabb4dbf..b8f7951d2 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/AvistazFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/AvistazFixture.cs @@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests torrentInfo.InfoUrl.Should().Be("https://avistaz.to/torrent/187240-japan-sinks-people-of-hope-2021-s01e05-720p-nf-web-dl-ddp20-x264-seikel"); torrentInfo.CommentUrl.Should().BeNullOrEmpty(); torrentInfo.Indexer.Should().Be(Subject.Definition.Name); - torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-11-14 21:26:21")); + torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-11-14 22:26:21")); torrentInfo.Size.Should().Be(935127615); torrentInfo.InfoHash.Should().Be("a879261d4e6e792402f92401141a21de70d51bf2"); torrentInfo.MagnetUrl.Should().Be(null); diff --git a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/ExoticazFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/ExoticazFixture.cs index fe4ada593..4c4f9f38e 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/ExoticazFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/ExoticazFixture.cs @@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests torrentInfo.InfoUrl.Should().Be("https://exoticaz.to/torrent/64040-ssis-419-my-first-experience-is-yua-mikami-from-the-day-i-lost-my-virginity-i-was-devoted-to-sex"); torrentInfo.CommentUrl.Should().BeNullOrEmpty(); torrentInfo.Indexer.Should().Be(Subject.Definition.Name); - torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-06-11 09:04:50")); + torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-06-11 10:04:50")); torrentInfo.Size.Should().Be(7085405541); torrentInfo.InfoHash.Should().Be("asdjfiasdf54asd7f4a2sdf544asdf"); torrentInfo.MagnetUrl.Should().Be(null); diff --git a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/PrivateHDFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/PrivateHDFixture.cs index f0531e9ec..e841659fd 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/PrivateHDFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/PrivateHDFixture.cs @@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests torrentInfo.InfoUrl.Should().Be("https://privatehd.to/torrent/78506-godzilla-2014-2160p-uhd-bluray-remux-hdr-hevc-atmos-triton"); torrentInfo.CommentUrl.Should().BeNullOrEmpty(); torrentInfo.Indexer.Should().Be(Subject.Definition.Name); - torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-03-21 04:24:49")); + torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-03-21 05:24:49")); torrentInfo.Size.Should().Be(69914591044); torrentInfo.InfoHash.Should().Be("a879261d4e6e792402f92401141a21de70d51bf2"); torrentInfo.MagnetUrl.Should().Be(null); From 015db4a916865447674fdf356ba9c56cf5361b9c Mon Sep 17 00:00:00 2001 From: Servarr <32001786+ServarrAdmin@users.noreply.github.com> Date: Fri, 7 Mar 2025 03:38:29 -0500 Subject: [PATCH 086/127] Translations update from Servarr Weblate (#2351) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Multiple Translations updated by Weblate ignore-downstream Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_CN/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_Hans/ Translation: Servarr/Prowlarr Co-authored-by: Weblate <noreply@weblate.org> Co-authored-by: Fixer <ygj59783@zslsz.com> Co-authored-by: Oskari Lavinto <olavinto@protonmail.com> Co-authored-by: Weblate <noreply-mt-weblate@weblate.org> Co-authored-by: wangdj1314 <wangdj@risenenergy.com> Co-authored-by: 葛磊磊 <geleilei198117@163.com> --- src/NzbDrone.Core/Localization/Core/fi.json | 8 ++++---- src/NzbDrone.Core/Localization/Core/ko.json | 4 +++- src/NzbDrone.Core/Localization/Core/zh_CN.json | 3 ++- src/NzbDrone.Core/Localization/Core/zh_Hans.json | 3 ++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 27730aeee..2db696a8a 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -312,7 +312,7 @@ "FullSync": "Täysi synkronointi", "SyncLevelFull": "Täysi synkronointi: Pitää sovelluksen hakupalvelut täysin synkronoituna. Hakupalveluihin {appName}issa tehdyt muutokset synkronoidaan etäsovelluksen kanssa ja kaikki etäsovelluksessa tehdyt muutokset korvataan seuraavan synkronoinnin yhteydessä.", "EnableIndexer": "Ota hakupalvelu käyttöön", - "FilterPlaceHolder": "Suodata hakupalveluita", + "FilterPlaceHolder": "Suodata palveluita", "IndexerHealthCheckNoIndexers": "Yhtään hakupalvelua ei ole käytössä, eikä {appName} tämän vuoksi löydä tuloksia.", "IndexerObsoleteCheckMessage": "Hakupalvelut ovat poistuneet tai ne ovat muuttuneet: {0}. Poista tai lisää ne {appName}iin uudelleen.", "IndexerProxy": "Tiedonhaun välityspalvelin", @@ -507,7 +507,7 @@ "AddDownloadClientImplementation": "Lisätään latauspalvelua – {implementationName}", "AddIndexerImplementation": "Lisätään hakupalvelua – {implementationName}", "OnGrabHelpText": "Kun julkaisu kaapataan", - "ManageDownloadClients": "Hallitse latauspalveluita", + "ManageDownloadClients": "Hallitse palveluita", "NoDownloadClientsFound": "Latauspalveluita ei löytynyt", "CountDownloadClientsSelected": "{count} latauspalvelu(a) on valittu", "EditSelectedDownloadClients": "Muokkaa valittuja latauspalveluita", @@ -519,7 +519,7 @@ "ApplyChanges": "Toteuta muutokset", "EditSelectedIndexers": "Muokkaa valittuja sisältölähteitä", "NoHistoryFound": "Historiaa ei löytynyt", - "NoIndexersFound": "Hakupalveluita ei löytynyt", + "NoIndexersFound": "Palveluita ei löytynyt", "StopSelecting": "Lopeta valitseminen", "EditConnectionImplementation": "Muokataan ilmoituspalvelua – {implementationName}", "AddConnectionImplementation": "Lisätään ilmoituspavelua – {implementationName}", @@ -556,7 +556,7 @@ "Implementation": "Toteutus", "IndexerCategories": "Hakupalvelukategoriat", "IndexerStatus": "Hakupalvelun tila", - "ManageApplications": "Sovellusten hallinta", + "ManageApplications": "Hallitse sovelluksia", "NewznabUrl": "Newznab URL", "PackSeedTime": "Paketin jakoaika", "PackSeedTimeHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.", diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index bb90922eb..17cd81637 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -421,5 +421,7 @@ "UserAgentProvidedByTheAppThatCalledTheAPI": "API를 호출한 앱에서 제공하는 사용자 에이전트", "days": "일", "minutes": "분", - "Author": "저작자" + "Author": "저작자", + "Categories": "카테고리", + "SeedRatio": "종자 비율" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 830cdbda6..41f815655 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -753,5 +753,6 @@ "IndexerHDBitsSettingsUsernameHelpText": "网站用户名", "IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "只搜索免费发布", "IndexerFileListSettingsFreeleechOnlyHelpText": "只搜索免费发布", - "IndexerFileListSettingsUsernameHelpText": "网站用户名" + "IndexerFileListSettingsUsernameHelpText": "网站用户名", + "IndexerBeyondHDSettingsRefundOnlyHelpText": "Search refund only" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_Hans.json b/src/NzbDrone.Core/Localization/Core/zh_Hans.json index 1617e57fb..54e88a350 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_Hans.json +++ b/src/NzbDrone.Core/Localization/Core/zh_Hans.json @@ -2,5 +2,6 @@ "About": "关于", "Add": "添加", "Analytics": "分析", - "Username": "用户名" + "Username": "用户名", + "AcceptConfirmationModal": "中文" } From 32634540412a2efcd6092a042ff0a59319fc27cc Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 9 Mar 2025 11:50:31 +0200 Subject: [PATCH 087/127] Bump version to 1.32.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7480d2763..5af617e05 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.32.1' + majorVersion: '1.32.2' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 2c1b4647158ea964d90be1083c3130ce21b512b0 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 8 Mar 2025 22:32:52 +0200 Subject: [PATCH 088/127] New: Recommend against using uTorrent (cherry picked from commit 6d8c3f15b343a24fc31a212463af8ed2b5792508) --- src/NzbDrone.Core/Download/Clients/Aria2/Aria2.cs | 4 +++- .../Download/Clients/Blackhole/TorrentBlackhole.cs | 4 +++- .../Download/Clients/Blackhole/UsenetBlackhole.cs | 4 +++- src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs | 4 +++- .../Clients/DownloadStation/TorrentDownloadStation.cs | 4 +++- .../Clients/DownloadStation/UsenetDownloadStation.cs | 4 +++- src/NzbDrone.Core/Download/Clients/Flood/Flood.cs | 4 +++- .../Clients/FreeboxDownload/TorrentFreeboxDownload.cs | 4 +++- src/NzbDrone.Core/Download/Clients/Hadouken/Hadouken.cs | 4 +++- src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortex.cs | 4 +++- src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs | 6 +++--- src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs | 4 +++- .../Download/Clients/QBittorrent/QBittorrent.cs | 4 +++- src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs | 4 +++- .../Download/Clients/Transmission/Transmission.cs | 4 +++- .../Download/Clients/Transmission/TransmissionBase.cs | 4 +++- src/NzbDrone.Core/Download/Clients/Vuze/Vuze.cs | 4 +++- src/NzbDrone.Core/Download/Clients/rTorrent/RTorrent.cs | 4 +++- src/NzbDrone.Core/Download/Clients/uTorrent/UTorrent.cs | 8 +++++++- src/NzbDrone.Core/Download/DownloadClientBase.cs | 4 ++++ src/NzbDrone.Core/Download/TorrentClientBase.cs | 4 +++- src/NzbDrone.Core/Download/UsenetClientBase.cs | 4 +++- src/NzbDrone.Core/Localization/Core/en.json | 1 + 23 files changed, 72 insertions(+), 23 deletions(-) diff --git a/src/NzbDrone.Core/Download/Clients/Aria2/Aria2.cs b/src/NzbDrone.Core/Download/Clients/Aria2/Aria2.cs index ae076c14b..3085dbf63 100644 --- a/src/NzbDrone.Core/Download/Clients/Aria2/Aria2.cs +++ b/src/NzbDrone.Core/Download/Clients/Aria2/Aria2.cs @@ -7,6 +7,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Validation; @@ -25,8 +26,9 @@ namespace NzbDrone.Core.Download.Clients.Aria2 ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Download/Clients/Blackhole/TorrentBlackhole.cs b/src/NzbDrone.Core/Download/Clients/Blackhole/TorrentBlackhole.cs index f8fd44e97..9e22a7460 100644 --- a/src/NzbDrone.Core/Download/Clients/Blackhole/TorrentBlackhole.cs +++ b/src/NzbDrone.Core/Download/Clients/Blackhole/TorrentBlackhole.cs @@ -8,6 +8,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.Download.Clients.Blackhole @@ -20,8 +21,9 @@ namespace NzbDrone.Core.Download.Clients.Blackhole ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { } diff --git a/src/NzbDrone.Core/Download/Clients/Blackhole/UsenetBlackhole.cs b/src/NzbDrone.Core/Download/Clients/Blackhole/UsenetBlackhole.cs index 0f0364e61..0b64150ee 100644 --- a/src/NzbDrone.Core/Download/Clients/Blackhole/UsenetBlackhole.cs +++ b/src/NzbDrone.Core/Download/Clients/Blackhole/UsenetBlackhole.cs @@ -7,6 +7,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.Download.Clients.Blackhole @@ -16,8 +17,9 @@ namespace NzbDrone.Core.Download.Clients.Blackhole public UsenetBlackhole(IHttpClient httpClient, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(httpClient, configService, diskProvider, logger) + : base(httpClient, configService, diskProvider, localizationService, logger) { } diff --git a/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs b/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs index ca63ba0e7..90bd6ba1f 100644 --- a/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs +++ b/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs @@ -9,6 +9,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Validation; @@ -23,8 +24,9 @@ namespace NzbDrone.Core.Download.Clients.Deluge ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Download/Clients/DownloadStation/TorrentDownloadStation.cs b/src/NzbDrone.Core/Download/Clients/DownloadStation/TorrentDownloadStation.cs index 482e86e30..97afe9480 100644 --- a/src/NzbDrone.Core/Download/Clients/DownloadStation/TorrentDownloadStation.cs +++ b/src/NzbDrone.Core/Download/Clients/DownloadStation/TorrentDownloadStation.cs @@ -10,6 +10,7 @@ using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download.Clients.DownloadStation.Proxies; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Validation; @@ -33,8 +34,9 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _dsInfoProxy = dsInfoProxy; _dsTaskProxySelector = dsTaskProxySelector; diff --git a/src/NzbDrone.Core/Download/Clients/DownloadStation/UsenetDownloadStation.cs b/src/NzbDrone.Core/Download/Clients/DownloadStation/UsenetDownloadStation.cs index 4661c6518..e78f5f5d2 100644 --- a/src/NzbDrone.Core/Download/Clients/DownloadStation/UsenetDownloadStation.cs +++ b/src/NzbDrone.Core/Download/Clients/DownloadStation/UsenetDownloadStation.cs @@ -9,6 +9,7 @@ using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download.Clients.DownloadStation.Proxies; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Validation; @@ -31,8 +32,9 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation IHttpClient httpClient, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(httpClient, configService, diskProvider, logger) + : base(httpClient, configService, diskProvider, localizationService, logger) { _dsInfoProxy = dsInfoProxy; _dsTaskProxySelector = dsTaskProxySelector; diff --git a/src/NzbDrone.Core/Download/Clients/Flood/Flood.cs b/src/NzbDrone.Core/Download/Clients/Flood/Flood.cs index 845b4fa1c..5d39d7b5f 100644 --- a/src/NzbDrone.Core/Download/Clients/Flood/Flood.cs +++ b/src/NzbDrone.Core/Download/Clients/Flood/Flood.cs @@ -8,6 +8,7 @@ using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download.Clients.Flood.Models; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.ThingiProvider; @@ -22,8 +23,9 @@ namespace NzbDrone.Core.Download.Clients.Flood ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Download/Clients/FreeboxDownload/TorrentFreeboxDownload.cs b/src/NzbDrone.Core/Download/Clients/FreeboxDownload/TorrentFreeboxDownload.cs index cec808592..00e7e06b4 100644 --- a/src/NzbDrone.Core/Download/Clients/FreeboxDownload/TorrentFreeboxDownload.cs +++ b/src/NzbDrone.Core/Download/Clients/FreeboxDownload/TorrentFreeboxDownload.cs @@ -6,6 +6,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.Download.Clients.FreeboxDownload @@ -19,8 +20,9 @@ namespace NzbDrone.Core.Download.Clients.FreeboxDownload ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Download/Clients/Hadouken/Hadouken.cs b/src/NzbDrone.Core/Download/Clients/Hadouken/Hadouken.cs index b5aa1eb06..560c40eb3 100644 --- a/src/NzbDrone.Core/Download/Clients/Hadouken/Hadouken.cs +++ b/src/NzbDrone.Core/Download/Clients/Hadouken/Hadouken.cs @@ -6,6 +6,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Validation; @@ -20,8 +21,9 @@ namespace NzbDrone.Core.Download.Clients.Hadouken ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortex.cs b/src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortex.cs index e1088780d..a87460d71 100644 --- a/src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortex.cs +++ b/src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortex.cs @@ -7,6 +7,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Validation; @@ -20,8 +21,9 @@ namespace NzbDrone.Core.Download.Clients.NzbVortex IHttpClient httpClient, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(httpClient, configService, diskProvider, logger) + : base(httpClient, configService, diskProvider, localizationService, logger) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs index b286bf922..49ada68e6 100644 --- a/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs +++ b/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs @@ -10,6 +10,7 @@ using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; using NzbDrone.Core.Exceptions; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Validation; @@ -18,15 +19,14 @@ namespace NzbDrone.Core.Download.Clients.Nzbget public class Nzbget : UsenetClientBase<NzbgetSettings> { private readonly INzbgetProxy _proxy; - private readonly string[] _successStatus = { "SUCCESS", "NONE" }; - private readonly string[] _deleteFailedStatus = { "HEALTH", "DUPE", "SCAN", "COPY", "BAD" }; public Nzbget(INzbgetProxy proxy, IHttpClient httpClient, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(httpClient, configService, diskProvider, logger) + : base(httpClient, configService, diskProvider, localizationService, logger) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs b/src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs index a0b1e85fd..99f80ab22 100644 --- a/src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs +++ b/src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs @@ -8,6 +8,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; @@ -17,8 +18,9 @@ namespace NzbDrone.Core.Download.Clients.Pneumatic { public Pneumatic(IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(configService, diskProvider, logger) + : base(configService, diskProvider, localizationService, logger) { } diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs index 6555ce6cc..3d1863784 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs @@ -8,6 +8,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Validation; @@ -30,8 +31,9 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent IConfigService configService, IDiskProvider diskProvider, ICacheManager cacheManager, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _proxySelector = proxySelector; diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs index 584e392b2..246262527 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs @@ -9,6 +9,7 @@ using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; using NzbDrone.Core.Exceptions; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Validation; @@ -22,8 +23,9 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd IHttpClient httpClient, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(httpClient, configService, diskProvider, logger) + : base(httpClient, configService, diskProvider, localizationService, logger) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/Transmission.cs b/src/NzbDrone.Core/Download/Clients/Transmission/Transmission.cs index c62a1f6ff..ad14de894 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/Transmission.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/Transmission.cs @@ -5,6 +5,7 @@ using NLog; using NzbDrone.Common.Disk; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; namespace NzbDrone.Core.Download.Clients.Transmission { @@ -15,8 +16,9 @@ namespace NzbDrone.Core.Download.Clients.Transmission ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(proxy, torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(proxy, torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { } diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionBase.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionBase.cs index f5cf1fed9..977e3bfee 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionBase.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionBase.cs @@ -6,6 +6,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Validation; @@ -20,8 +21,9 @@ namespace NzbDrone.Core.Download.Clients.Transmission ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Download/Clients/Vuze/Vuze.cs b/src/NzbDrone.Core/Download/Clients/Vuze/Vuze.cs index 79f5df0e4..3b87962bb 100644 --- a/src/NzbDrone.Core/Download/Clients/Vuze/Vuze.cs +++ b/src/NzbDrone.Core/Download/Clients/Vuze/Vuze.cs @@ -4,6 +4,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download.Clients.Transmission; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; namespace NzbDrone.Core.Download.Clients.Vuze { @@ -16,8 +17,9 @@ namespace NzbDrone.Core.Download.Clients.Vuze ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(proxy, torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(proxy, torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { } diff --git a/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrent.cs b/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrent.cs index 5218f9ebe..628ebdf52 100644 --- a/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrent.cs @@ -10,6 +10,7 @@ using NzbDrone.Core.Configuration; using NzbDrone.Core.Download.Clients.rTorrent; using NzbDrone.Core.Exceptions; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Validation; @@ -27,8 +28,9 @@ namespace NzbDrone.Core.Download.Clients.RTorrent IConfigService configService, IDiskProvider diskProvider, IRTorrentDirectoryValidator rTorrentDirectoryValidator, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _proxy = proxy; _rTorrentDirectoryValidator = rTorrentDirectoryValidator; diff --git a/src/NzbDrone.Core/Download/Clients/uTorrent/UTorrent.cs b/src/NzbDrone.Core/Download/Clients/uTorrent/UTorrent.cs index ef12042fb..98ad41eec 100644 --- a/src/NzbDrone.Core/Download/Clients/uTorrent/UTorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/uTorrent/UTorrent.cs @@ -7,7 +7,9 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; +using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Validation; namespace NzbDrone.Core.Download.Clients.UTorrent @@ -21,8 +23,9 @@ namespace NzbDrone.Core.Download.Clients.UTorrent ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger) + : base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger) { _proxy = proxy; } @@ -72,6 +75,9 @@ namespace NzbDrone.Core.Download.Clients.UTorrent } public override string Name => "uTorrent"; + + public override ProviderMessage Message => new (_localizationService.GetLocalizedString("DownloadClientUTorrentProviderMessage"), ProviderMessageType.Warning); + public override bool SupportsCategories => true; protected override void Test(List<ValidationFailure> failures) diff --git a/src/NzbDrone.Core/Download/DownloadClientBase.cs b/src/NzbDrone.Core/Download/DownloadClientBase.cs index 7659c32a6..9a7da6fd6 100644 --- a/src/NzbDrone.Core/Download/DownloadClientBase.cs +++ b/src/NzbDrone.Core/Download/DownloadClientBase.cs @@ -8,6 +8,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Validation; @@ -19,6 +20,7 @@ namespace NzbDrone.Core.Download { protected readonly IConfigService _configService; protected readonly IDiskProvider _diskProvider; + protected readonly ILocalizationService _localizationService; protected readonly Logger _logger; public abstract string Name { get; } @@ -40,10 +42,12 @@ namespace NzbDrone.Core.Download protected DownloadClientBase(IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) { _configService = configService; _diskProvider = diskProvider; + _localizationService = localizationService; _logger = logger; } diff --git a/src/NzbDrone.Core/Download/TorrentClientBase.cs b/src/NzbDrone.Core/Download/TorrentClientBase.cs index 322cc206b..217e70a31 100644 --- a/src/NzbDrone.Core/Download/TorrentClientBase.cs +++ b/src/NzbDrone.Core/Download/TorrentClientBase.cs @@ -8,6 +8,7 @@ using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Exceptions; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.ThingiProvider; @@ -24,8 +25,9 @@ namespace NzbDrone.Core.Download ISeedConfigProvider seedConfigProvider, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(configService, diskProvider, logger) + : base(configService, diskProvider, localizationService, logger) { _torrentFileInfoReader = torrentFileInfoReader; _seedConfigProvider = seedConfigProvider; diff --git a/src/NzbDrone.Core/Download/UsenetClientBase.cs b/src/NzbDrone.Core/Download/UsenetClientBase.cs index ac62359aa..1e85ffbb9 100644 --- a/src/NzbDrone.Core/Download/UsenetClientBase.cs +++ b/src/NzbDrone.Core/Download/UsenetClientBase.cs @@ -5,6 +5,7 @@ using NzbDrone.Common.Disk; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; +using NzbDrone.Core.Localization; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.ThingiProvider; @@ -19,8 +20,9 @@ namespace NzbDrone.Core.Download protected UsenetClientBase(IHttpClient httpClient, IConfigService configService, IDiskProvider diskProvider, + ILocalizationService localizationService, Logger logger) - : base(configService, diskProvider, logger) + : base(configService, diskProvider, localizationService, logger) { _httpClient = httpClient; } diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 5e74f61d0..2565fdf01 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -241,6 +241,7 @@ "DownloadClientStatusSingleClientHealthCheckMessage": "Download clients unavailable due to failures: {downloadClientNames}", "DownloadClientTransmissionSettingsDirectoryHelpText": "Optional location to put downloads in, leave blank to use the default Transmission location", "DownloadClientTransmissionSettingsUrlBaseHelpText": "Adds a prefix to the {clientName} rpc url, eg {url}, defaults to '{defaultUrl}'", + "DownloadClientUTorrentProviderMessage": "uTorrent has a history of including cryptominers, malware and ads, we strongly encourage you to choose a different client.", "DownloadClients": "Download Clients", "DownloadClientsLoadError": "Unable to load download clients", "DownloadClientsSettingsSummary": "Download clients configuration for integration into {appName} UI search", From 10ea6cd753ae2bdb48cd47063d0f388cc61a72b8 Mon Sep 17 00:00:00 2001 From: Mark McDowall <mark@mcdowall.ca> Date: Sun, 2 Mar 2025 12:32:44 -0800 Subject: [PATCH 089/127] Improve wrapping of text in sidebar (cherry picked from commit f58dfc5605738ebccdd6adc6f1ca2a7843c086b2) --- frontend/src/Components/Page/Sidebar/PageSidebarItem.css | 5 +---- .../src/Components/Page/Sidebar/PageSidebarItem.css.d.ts | 1 - frontend/src/Components/Page/Sidebar/PageSidebarItem.js | 4 +--- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/frontend/src/Components/Page/Sidebar/PageSidebarItem.css b/frontend/src/Components/Page/Sidebar/PageSidebarItem.css index 5e3e3b52c..409062f97 100644 --- a/frontend/src/Components/Page/Sidebar/PageSidebarItem.css +++ b/frontend/src/Components/Page/Sidebar/PageSidebarItem.css @@ -24,6 +24,7 @@ composes: link; padding: 10px 24px; + padding-left: 35px; } .isActiveLink { @@ -41,10 +42,6 @@ text-align: center; } -.noIcon { - margin-left: 25px; -} - .status { float: right; } diff --git a/frontend/src/Components/Page/Sidebar/PageSidebarItem.css.d.ts b/frontend/src/Components/Page/Sidebar/PageSidebarItem.css.d.ts index 77e23c767..5bf0eb815 100644 --- a/frontend/src/Components/Page/Sidebar/PageSidebarItem.css.d.ts +++ b/frontend/src/Components/Page/Sidebar/PageSidebarItem.css.d.ts @@ -8,7 +8,6 @@ interface CssExports { 'isActiveParentLink': string; 'item': string; 'link': string; - 'noIcon': string; 'status': string; } export const cssExports: CssExports; diff --git a/frontend/src/Components/Page/Sidebar/PageSidebarItem.js b/frontend/src/Components/Page/Sidebar/PageSidebarItem.js index 754071c79..8d0e4e790 100644 --- a/frontend/src/Components/Page/Sidebar/PageSidebarItem.js +++ b/frontend/src/Components/Page/Sidebar/PageSidebarItem.js @@ -63,9 +63,7 @@ class PageSidebarItem extends Component { </span> } - <span className={isChildItem ? styles.noIcon : null}> - {typeof title === 'function' ? title() : title} - </span> + {typeof title === 'function' ? title() : title} { !!StatusComponent && From a19b8ea997053e54c9e758b6d8ece06aeaffd9d5 Mon Sep 17 00:00:00 2001 From: Mark McDowall <mark@mcdowall.ca> Date: Sun, 2 Mar 2025 12:35:04 -0800 Subject: [PATCH 090/127] New: Truncate button text Fixes #2352 (cherry picked from commit 093ee5b88db0470426f6132e66a5893e5cf89bab) --- frontend/src/Components/Page/Toolbar/PageToolbarButton.css | 3 +++ frontend/src/Components/Page/Toolbar/PageToolbarButton.js | 1 + 2 files changed, 4 insertions(+) diff --git a/frontend/src/Components/Page/Toolbar/PageToolbarButton.css b/frontend/src/Components/Page/Toolbar/PageToolbarButton.css index 0b6918296..e9a1b666d 100644 --- a/frontend/src/Components/Page/Toolbar/PageToolbarButton.css +++ b/frontend/src/Components/Page/Toolbar/PageToolbarButton.css @@ -22,11 +22,14 @@ display: flex; align-items: center; justify-content: center; + overflow: hidden; height: 24px; } .label { padding: 0 3px; + max-width: 100%; + max-height: 100%; color: var(--toolbarLabelColor); font-size: $extraSmallFontSize; line-height: calc($extraSmallFontSize + 1px); diff --git a/frontend/src/Components/Page/Toolbar/PageToolbarButton.js b/frontend/src/Components/Page/Toolbar/PageToolbarButton.js index c93603aa9..675bdfd02 100644 --- a/frontend/src/Components/Page/Toolbar/PageToolbarButton.js +++ b/frontend/src/Components/Page/Toolbar/PageToolbarButton.js @@ -23,6 +23,7 @@ function PageToolbarButton(props) { isDisabled && styles.isDisabled )} isDisabled={isDisabled || isSpinning} + title={label} {...otherProps} > <Icon From 8a1787bdb6c8e733e79d5a0999230d99f7ac2a79 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 16 Mar 2025 11:42:07 +0200 Subject: [PATCH 091/127] Bump version to 1.33.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5af617e05..863747dc0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.32.2' + majorVersion: '1.33.0' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From d20b2cc9c01b9d98f8a6b77fbb617e0e74901cc9 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 16 Mar 2025 12:04:49 +0200 Subject: [PATCH 092/127] Bump NLog and Polly --- src/NzbDrone.Common/Prowlarr.Common.csproj | 6 +++--- src/NzbDrone.Core/Prowlarr.Core.csproj | 4 ++-- src/NzbDrone.Host/Prowlarr.Host.csproj | 2 +- src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj | 2 +- src/NzbDrone.Update/Prowlarr.Update.csproj | 2 +- src/NzbDrone.Windows/Prowlarr.Windows.csproj | 2 +- src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj | 2 +- src/Prowlarr.Http/Prowlarr.Http.csproj | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/NzbDrone.Common/Prowlarr.Common.csproj b/src/NzbDrone.Common/Prowlarr.Common.csproj index 359fa8820..b26b024bc 100644 --- a/src/NzbDrone.Common/Prowlarr.Common.csproj +++ b/src/NzbDrone.Common/Prowlarr.Common.csproj @@ -9,9 +9,9 @@ <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" /> <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> - <PackageReference Include="NLog" Version="5.3.4" /> - <PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.0" /> - <PackageReference Include="NLog.Extensions.Logging" Version="5.3.15" /> + <PackageReference Include="NLog" Version="5.4.0" /> + <PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.3" /> + <PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" /> <PackageReference Include="Npgsql" Version="7.0.9" /> <PackageReference Include="Sentry" Version="4.0.2" /> <PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" /> diff --git a/src/NzbDrone.Core/Prowlarr.Core.csproj b/src/NzbDrone.Core/Prowlarr.Core.csproj index 5cfd16a41..4b8138cb4 100644 --- a/src/NzbDrone.Core/Prowlarr.Core.csproj +++ b/src/NzbDrone.Core/Prowlarr.Core.csproj @@ -12,7 +12,7 @@ <PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.7" /> <PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" /> <PackageReference Include="Npgsql" Version="7.0.9" /> - <PackageReference Include="Polly" Version="8.5.1" /> + <PackageReference Include="Polly" Version="8.5.2" /> <PackageReference Include="Servarr.FluentMigrator.Runner" Version="3.3.2.9" /> <PackageReference Include="Servarr.FluentMigrator.Runner.Postgres" Version="3.3.2.9" /> <PackageReference Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" /> @@ -20,7 +20,7 @@ <PackageReference Include="System.ServiceModel.Syndication" Version="6.0.0" /> <PackageReference Include="FluentValidation" Version="9.5.4" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> - <PackageReference Include="NLog" Version="5.3.4" /> + <PackageReference Include="NLog" Version="5.4.0" /> <PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" /> <PackageReference Include="System.Text.Json" Version="6.0.10" /> <PackageReference Include="MonoTorrent" Version="2.0.7" /> diff --git a/src/NzbDrone.Host/Prowlarr.Host.csproj b/src/NzbDrone.Host/Prowlarr.Host.csproj index 07fed755c..8dd6d8e61 100644 --- a/src/NzbDrone.Host/Prowlarr.Host.csproj +++ b/src/NzbDrone.Host/Prowlarr.Host.csproj @@ -4,7 +4,7 @@ <OutputType>Library</OutputType> </PropertyGroup> <ItemGroup> - <PackageReference Include="NLog.Extensions.Logging" Version="5.3.15" /> + <PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" /> <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" /> diff --git a/src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj b/src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj index d37b95690..b9ccacd9e 100644 --- a/src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj +++ b/src/NzbDrone.Test.Common/Prowlarr.Test.Common.csproj @@ -6,7 +6,7 @@ <PackageReference Include="FluentAssertions" Version="6.11.0" /> <PackageReference Include="FluentValidation" Version="9.5.4" /> <PackageReference Include="Moq" Version="4.17.2" /> - <PackageReference Include="NLog" Version="5.3.4" /> + <PackageReference Include="NLog" Version="5.4.0" /> <PackageReference Include="NUnit" Version="3.14.0" /> <PackageReference Include="RestSharp" Version="106.15.0" /> <PackageReference Include="RestSharp.Serializers.SystemTextJson" Version="106.15.0" /> diff --git a/src/NzbDrone.Update/Prowlarr.Update.csproj b/src/NzbDrone.Update/Prowlarr.Update.csproj index 5570a6f1b..09b95e2f8 100644 --- a/src/NzbDrone.Update/Prowlarr.Update.csproj +++ b/src/NzbDrone.Update/Prowlarr.Update.csproj @@ -6,7 +6,7 @@ <ItemGroup> <PackageReference Include="DryIoc.dll" Version="5.4.3" /> <PackageReference Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" /> - <PackageReference Include="NLog" Version="5.3.4" /> + <PackageReference Include="NLog" Version="5.4.0" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\NzbDrone.Common\Prowlarr.Common.csproj" /> diff --git a/src/NzbDrone.Windows/Prowlarr.Windows.csproj b/src/NzbDrone.Windows/Prowlarr.Windows.csproj index f3baa19dc..4a9f864e5 100644 --- a/src/NzbDrone.Windows/Prowlarr.Windows.csproj +++ b/src/NzbDrone.Windows/Prowlarr.Windows.csproj @@ -4,7 +4,7 @@ <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> </PropertyGroup> <ItemGroup> - <PackageReference Include="NLog" Version="5.3.4" /> + <PackageReference Include="NLog" Version="5.4.0" /> <PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" /> </ItemGroup> <ItemGroup> diff --git a/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj b/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj index aac0b246f..4371487f2 100644 --- a/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj +++ b/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj @@ -4,7 +4,7 @@ </PropertyGroup> <ItemGroup> <PackageReference Include="FluentValidation" Version="9.5.4" /> - <PackageReference Include="NLog" Version="5.3.4" /> + <PackageReference Include="NLog" Version="5.4.0" /> <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" /> </ItemGroup> <ItemGroup> diff --git a/src/Prowlarr.Http/Prowlarr.Http.csproj b/src/Prowlarr.Http/Prowlarr.Http.csproj index 938b722a4..e326e5ed3 100644 --- a/src/Prowlarr.Http/Prowlarr.Http.csproj +++ b/src/Prowlarr.Http/Prowlarr.Http.csproj @@ -5,7 +5,7 @@ <ItemGroup> <PackageReference Include="FluentValidation" Version="9.5.4" /> <PackageReference Include="ImpromptuInterface" Version="7.0.1" /> - <PackageReference Include="NLog" Version="5.3.4" /> + <PackageReference Include="NLog" Version="5.4.0" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\NzbDrone.Core\Prowlarr.Core.csproj" /> From b99e8d0d65217e5085db1b0e6a539d6ae6e54af9 Mon Sep 17 00:00:00 2001 From: Mark McDowall <mark@mcdowall.ca> Date: Tue, 11 Mar 2025 08:41:48 -0700 Subject: [PATCH 093/127] Improve logging when login fails due to CryptographicException (cherry picked from commit 1449941471cbb8885e9298317b9a30f2576d7941) --- .../AuthenticationController.cs | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Prowlarr.Http/Authentication/AuthenticationController.cs b/src/Prowlarr.Http/Authentication/AuthenticationController.cs index 8bfec4318..05b058895 100644 --- a/src/Prowlarr.Http/Authentication/AuthenticationController.cs +++ b/src/Prowlarr.Http/Authentication/AuthenticationController.cs @@ -1,9 +1,14 @@ using System.Collections.Generic; +using System.IO; using System.Security.Claims; +using System.Security.Cryptography; using System.Threading.Tasks; +using System.Xml; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using NLog; +using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; using NzbDrone.Core.Authentication; using NzbDrone.Core.Configuration; @@ -16,11 +21,15 @@ namespace Prowlarr.Http.Authentication { private readonly IAuthenticationService _authService; private readonly IConfigFileProvider _configFileProvider; + private readonly IAppFolderInfo _appFolderInfo; + private readonly Logger _logger; - public AuthenticationController(IAuthenticationService authService, IConfigFileProvider configFileProvider) + public AuthenticationController(IAuthenticationService authService, IConfigFileProvider configFileProvider, IAppFolderInfo appFolderInfo, Logger logger) { _authService = authService; _configFileProvider = configFileProvider; + _appFolderInfo = appFolderInfo; + _logger = logger; } [HttpPost("login")] @@ -45,7 +54,23 @@ namespace Prowlarr.Http.Authentication IsPersistent = resource.RememberMe == "on" }; - await HttpContext.SignInAsync(AuthenticationType.Forms.ToString(), new ClaimsPrincipal(new ClaimsIdentity(claims, "Cookies", "user", "identifier")), authProperties); + try + { + await HttpContext.SignInAsync(AuthenticationType.Forms.ToString(), new ClaimsPrincipal(new ClaimsIdentity(claims, "Cookies", "user", "identifier")), authProperties); + } + catch (CryptographicException e) + { + if (e.InnerException is XmlException) + { + _logger.Error(e, "Failed to authenticate user due to corrupt XML. Please remove all XML files from {0} and restart Prowlarr", Path.Combine(_appFolderInfo.AppDataFolder, "asp")); + } + else + { + _logger.Error(e, "Failed to authenticate user. {0}", e.Message); + } + + return Unauthorized(); + } if (returnUrl.IsNullOrWhiteSpace()) { From 5125f256fb8c20b902adafe16530c4792a580d87 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Thu, 20 Mar 2025 20:38:13 +0200 Subject: [PATCH 094/127] Fixed: Priority validation for indexers and download clients --- src/Prowlarr.Api.V1/DownloadClient/DownloadClientController.cs | 2 ++ src/Prowlarr.Api.V1/Indexers/IndexerController.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/src/Prowlarr.Api.V1/DownloadClient/DownloadClientController.cs b/src/Prowlarr.Api.V1/DownloadClient/DownloadClientController.cs index dfaf24a9e..347c7e9c6 100644 --- a/src/Prowlarr.Api.V1/DownloadClient/DownloadClientController.cs +++ b/src/Prowlarr.Api.V1/DownloadClient/DownloadClientController.cs @@ -1,3 +1,4 @@ +using FluentValidation; using NzbDrone.Core.Download; using NzbDrone.SignalR; using Prowlarr.Http; @@ -13,6 +14,7 @@ namespace Prowlarr.Api.V1.DownloadClient public DownloadClientController(IBroadcastSignalRMessage signalRBroadcaster, IDownloadClientFactory downloadClientFactory) : base(signalRBroadcaster, downloadClientFactory, "downloadclient", ResourceMapper, BulkResourceMapper) { + SharedValidator.RuleFor(c => c.Priority).InclusiveBetween(1, 50); } } } diff --git a/src/Prowlarr.Api.V1/Indexers/IndexerController.cs b/src/Prowlarr.Api.V1/Indexers/IndexerController.cs index 6f360a574..07955299d 100644 --- a/src/Prowlarr.Api.V1/Indexers/IndexerController.cs +++ b/src/Prowlarr.Api.V1/Indexers/IndexerController.cs @@ -21,6 +21,7 @@ namespace Prowlarr.Api.V1.Indexers .ValidId() .SetValidator(appProfileExistsValidator); + SharedValidator.RuleFor(c => c.Priority).InclusiveBetween(1, 50); SharedValidator.RuleFor(c => c.DownloadClientId).SetValidator(downloadClientExistsValidator); } } From 27fbd7ef7e7ad8876a744a8bf147549549182a6e Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 22 Mar 2025 12:45:10 +0200 Subject: [PATCH 095/127] Fixed: (RuTracker.org) Improve subtitles removal --- src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs b/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs index 79244b6b2..44f6bae38 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs @@ -30,7 +30,7 @@ namespace NzbDrone.Core.Indexers.Definitions "https://rutracker.net/", "https://rutracker.nl/" }; - public override string Description => "RuTracker.org is a Semi-Private Russian torrent site with a thriving file-sharing community"; + public override string Description => "RuTracker.org is a RUSSIAN Semi-Private site with a thriving file-sharing community"; public override string Language => "ru-RU"; public override Encoding Encoding => Encoding.GetEncoding("windows-1251"); public override IndexerPrivacy Privacy => IndexerPrivacy.SemiPrivate; @@ -144,6 +144,7 @@ namespace NzbDrone.Core.Indexers.Definitions SupportsRawSearch = true }; + // Note: When refreshing the categories use the tracker.php page and NOT the search.php page! caps.Categories.AddCategoryMapping(22, NewznabStandardCategory.Movies, "Наше кино"); caps.Categories.AddCategoryMapping(941, NewznabStandardCategory.Movies, "|- Кино СССР"); caps.Categories.AddCategoryMapping(1666, NewznabStandardCategory.Movies, "|- Детские отечественные фильмы"); @@ -1751,7 +1752,7 @@ namespace NzbDrone.Core.Indexers.Definitions title = Regex.Replace(title, @"(\([\p{IsCyrillic}\W]+)\s/\s(.+?)\)", string.Empty, RegexOptions.Compiled | RegexOptions.IgnoreCase); // Remove VO, MVO and DVO from titles - var vo = new Regex(@".VO\s\(.+?\)"); + var vo = new Regex(@"((?:\dx\s)?(?:[A-Z])?VO\s\(.+?\))"); title = vo.Replace(title, string.Empty); // Remove R5 and (R5) from release names @@ -1759,7 +1760,7 @@ namespace NzbDrone.Core.Indexers.Definitions title = r5.Replace(title, "$1"); // Remove Sub languages from release names - title = Regex.Replace(title, @"(\bSub\b.*$|\b[\+]*Sub[\+]*\b)", string.Empty); + title = Regex.Replace(title, @"(\bSub\b[^+]*\b|\b[\+]*Sub[\+]*\b)", string.Empty); } // language fix: all rutracker releases contains russian track From 73ee69563372dc57ed7eba8bb7c05f338319d1f3 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 22 Mar 2025 20:38:58 +0200 Subject: [PATCH 096/127] New: (BeyondHD) Parsing audio and subtitles languages --- src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs b/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs index 33a80f43a..3fc4a3328 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs @@ -304,6 +304,8 @@ namespace NzbDrone.Core.Indexers.Definitions UploadVolumeFactor = 1, MinimumRatio = 1, MinimumSeedTime = 172800, // 120 hours + Languages = row.Audios?.Split(",", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries).ToList() ?? new List<string>(), + Subs = row.Subtitles?.Split(",", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries).ToList() ?? new List<string>(), }; // BHD can return crazy values for tmdb @@ -470,9 +472,13 @@ namespace NzbDrone.Core.Indexers.Definitions [JsonPropertyName("times_completed")] public int Grabs { get; set; } + public int Seeders { get; set; } public int Leechers { get; set; } + public string Audios { get; set; } + public string Subtitles { get; set; } + [JsonPropertyName("created_at")] public string CreatedAt { get; set; } From 758dddd4ad8261a9c948303d4d5811676496e1e6 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 23 Mar 2025 09:45:33 +0200 Subject: [PATCH 097/127] Bump version to 1.33.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 863747dc0..b9f35e204 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.33.0' + majorVersion: '1.33.1' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From f4f1b38324e9351c8c96cf231333203579694b30 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:23:12 +0200 Subject: [PATCH 098/127] New: On Grab notifications for CustomScript --- .../CustomScript/CustomScript.cs | 32 +++++++++++++++---- src/NzbDrone.Core/Parser/Model/ReleaseInfo.cs | 1 + 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs index 7ca1dc8fc..04bac39f0 100755 --- a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs +++ b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; +using System.Linq; using FluentValidation.Results; using NLog; using NzbDrone.Common.Disk; @@ -38,7 +39,31 @@ namespace NzbDrone.Core.Notifications.CustomScript public override string Link => "https://wiki.servarr.com/prowlarr/settings#connections"; - public override ProviderMessage Message => new ProviderMessage("Testing will execute the script with the EventType set to Test, ensure your script handles this correctly", ProviderMessageType.Warning); + public override ProviderMessage Message => new ("Testing will execute the script with the EventType set to Test, ensure your script handles this correctly", ProviderMessageType.Warning); + + public override void OnGrab(GrabMessage message) + { + var environmentVariables = new StringDictionary(); + + environmentVariables.Add("Prowlarr_EventType", "Grab"); + environmentVariables.Add("Prowlarr_InstanceName", _configFileProvider.InstanceName); + environmentVariables.Add("Prowlarr_ApplicationUrl", _configService.ApplicationUrl); + environmentVariables.Add("Prowlarr_Release_Title", message.Release.Title); + environmentVariables.Add("Prowlarr_Release_Indexer", message.Release.Indexer ?? string.Empty); + environmentVariables.Add("Prowlarr_Release_Size", message.Release.Size.ToString()); + environmentVariables.Add("Prowlarr_Release_Genres", string.Join("|", message.Release.Genres)); + environmentVariables.Add("Prowlarr_Release_Categories", string.Join("|", message.Release.Categories.Select(f => f.Name))); + environmentVariables.Add("Prowlarr_Release_IndexerFlags", string.Join("|", message.Release.IndexerFlags.Select(f => f.Name))); + environmentVariables.Add("Prowlarr_Release_PublishDate", message.Release.PublishDate.ToUniversalTime().ToString("s") + "Z"); + environmentVariables.Add("Prowlarr_Download_Client", message.DownloadClientName ?? string.Empty); + environmentVariables.Add("Prowlarr_Download_Client_Type", message.DownloadClientType ?? string.Empty); + environmentVariables.Add("Prowlarr_Download_Id", message.DownloadId ?? string.Empty); + environmentVariables.Add("Prowlarr_Source", message.Source ?? string.Empty); + environmentVariables.Add("Prowlarr_Host", message.Host ?? string.Empty); + environmentVariables.Add("Prowlarr_Redirect", message.Redirect.ToString()); + + ExecuteScript(environmentVariables); + } public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { @@ -130,10 +155,5 @@ namespace NzbDrone.Core.Notifications.CustomScript return processOutput; } - - private bool ValidatePathParent(string possibleParent, string path) - { - return possibleParent.IsParentPath(path); - } } } diff --git a/src/NzbDrone.Core/Parser/Model/ReleaseInfo.cs b/src/NzbDrone.Core/Parser/Model/ReleaseInfo.cs index 7d8c83d50..6f0788607 100644 --- a/src/NzbDrone.Core/Parser/Model/ReleaseInfo.cs +++ b/src/NzbDrone.Core/Parser/Model/ReleaseInfo.cs @@ -9,6 +9,7 @@ namespace NzbDrone.Core.Parser.Model { public ReleaseInfo() { + Genres = new List<string>(); IndexerFlags = new HashSet<IndexerFlag>(); Categories = new List<IndexerCategory>(); Languages = new List<string>(); From 5cbacc01eb83531eaf0aa19b0a665b1b6d73eb0c Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:50:17 +0200 Subject: [PATCH 099/127] Fixed: Publish dates timezone in history details for grabbed releases --- src/NzbDrone.Core/History/HistoryService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/History/HistoryService.cs b/src/NzbDrone.Core/History/HistoryService.cs index 144258272..e78e5d229 100644 --- a/src/NzbDrone.Core/History/HistoryService.cs +++ b/src/NzbDrone.Core/History/HistoryService.cs @@ -224,7 +224,7 @@ namespace NzbDrone.Core.History if (message.Release.PublishDate != DateTime.MinValue) { - history.Data.Add("PublishedDate", message.Release.PublishDate.ToString("s") + "Z"); + history.Data.Add("PublishedDate", message.Release.PublishDate.ToUniversalTime().ToString("s") + "Z"); } _historyRepository.Insert(history); From 5bc5f0e6b8218b6dd3da2ddb342e8a5e7370a52e Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:57:39 +0200 Subject: [PATCH 100/127] New: Categories, genres, indexer flags and publish dates for webhook releases --- .../Notifications/Webhook/WebhookRelease.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookRelease.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookRelease.cs index 295d62986..ad98e5440 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookRelease.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookRelease.cs @@ -1,3 +1,6 @@ +using System; +using System.Collections.Generic; +using System.Linq; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.Notifications.Webhook @@ -13,10 +16,18 @@ namespace NzbDrone.Core.Notifications.Webhook ReleaseTitle = release.Title; Indexer = release.Indexer; Size = release.Size; + Categories = release.Categories.Select(f => f.Name).ToList(); + Genres = release.Genres.ToList(); + IndexerFlags = release.IndexerFlags.Select(f => f.Name).ToHashSet(); + PublishDate = release.PublishDate; } public string ReleaseTitle { get; set; } public string Indexer { get; set; } public long? Size { get; set; } + public List<string> Categories { get; set; } + public List<string> Genres { get; set; } + public HashSet<string> IndexerFlags { get; set; } + public DateTime? PublishDate { get; set; } } } From 023eec0ec062a0e1fac3c45907fdcf1e2222125e Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Tue, 25 Mar 2025 13:04:07 +0200 Subject: [PATCH 101/127] Update timezone offset for PrivateHD and CinemaZ --- .../IndexerTests/AvistazTests/PrivateHDFixture.cs | 2 +- .../Indexers/Definitions/Avistaz/AvistazParserBase.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/PrivateHDFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/PrivateHDFixture.cs index e841659fd..f0531e9ec 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/PrivateHDFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/PrivateHDFixture.cs @@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests torrentInfo.InfoUrl.Should().Be("https://privatehd.to/torrent/78506-godzilla-2014-2160p-uhd-bluray-remux-hdr-hevc-atmos-triton"); torrentInfo.CommentUrl.Should().BeNullOrEmpty(); torrentInfo.Indexer.Should().Be(Subject.Definition.Name); - torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-03-21 05:24:49")); + torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-03-21 04:24:49")); torrentInfo.Size.Should().Be(69914591044); torrentInfo.InfoHash.Should().Be("a879261d4e6e792402f92401141a21de70d51bf2"); torrentInfo.MagnetUrl.Should().Be(null); diff --git a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazParserBase.cs b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazParserBase.cs index 84e36cf7e..56cc7a3fe 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazParserBase.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazParserBase.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz { public class AvistazParserBase : IParseIndexerResponse { - protected virtual string TimezoneOffset => "-05:00"; // Avistaz does not specify a timezone & returns server time + protected virtual string TimezoneOffset => "-04:00"; // Avistaz does not specify a timezone & returns server time private readonly HashSet<string> _hdResolutions = new () { "1080p", "1080i", "720p" }; public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; } From 5c5a163151e6c3c69c9466df5792e6c072c3b457 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Fri, 28 Mar 2025 13:39:19 +0200 Subject: [PATCH 102/127] Fixed: (AnimeBytes) Allow season searching for ONA --- src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs index cde688637..f45ff4173 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeBytes.cs @@ -232,7 +232,7 @@ namespace NzbDrone.Core.Indexers.Definitions if (queryCats.Any() && searchCriteria is TvSearchCriteria { Season: > 0 }) { // Avoid searching for specials if it's a non-zero season search - queryCats.RemoveAll(cat => cat is "anime[tv_special]" or "anime[ova]" or "anime[ona]" or "anime[dvd_special]" or "anime[bd_special]"); + queryCats.RemoveAll(cat => cat is "anime[tv_special]" or "anime[ova]" or "anime[dvd_special]" or "anime[bd_special]"); } if (queryCats.Any()) From e63ee13d236d2931fa9ded36cb0e3c2e7374a0e4 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 30 Mar 2025 10:30:03 +0300 Subject: [PATCH 103/127] Bump version to 1.33.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b9f35e204..de880295f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.33.1' + majorVersion: '1.33.2' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 2b16d93095844ad6a867cfa69042f7398c9f442c Mon Sep 17 00:00:00 2001 From: Weblate <noreply@weblate.org> Date: Tue, 25 Mar 2025 11:04:28 +0000 Subject: [PATCH 104/127] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Alex Mills <alex@alexmills.uk> Co-authored-by: Lizandra Candido da Silva <lizandra.c.s@gmail.com> Co-authored-by: Oskari Lavinto <olavinto@protonmail.com> Co-authored-by: Weblate <noreply-mt-weblate@weblate.org> Co-authored-by: Weblate <noreply@weblate.org> Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fa/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nb_NO/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/bg.json | 32 ++++++- src/NzbDrone.Core/Localization/Core/ca.json | 8 +- src/NzbDrone.Core/Localization/Core/cs.json | 7 +- src/NzbDrone.Core/Localization/Core/es.json | 3 +- src/NzbDrone.Core/Localization/Core/fa.json | 11 ++- src/NzbDrone.Core/Localization/Core/fi.json | 8 +- src/NzbDrone.Core/Localization/Core/ko.json | 85 ++++++++++++++++++- .../Localization/Core/nb_NO.json | 3 +- .../Localization/Core/pt_BR.json | 3 +- src/NzbDrone.Core/Localization/Core/tr.json | 3 +- 10 files changed, 150 insertions(+), 13 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index 35327a3a9..913275a68 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -387,5 +387,35 @@ "Label": "Етикет", "Categories": "Категории", "Album": "албум", - "Artist": "изпълнител" + "Artist": "изпълнител", + "AddConnection": "Добави връзка", + "AddConnectionImplementation": "Добави връзка - {implementationName}", + "AddDownloadClientImplementation": "Добави клиент за изтегляне - {implementationName}", + "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Потвърдете новата парола", + "Default": "Подразбиране", + "Any": "Всеки", + "ApplicationUrlHelpText": "Външният URL адрес на това приложение, включително http(s)://, порт и основно URL", + "Database": "База данни", + "Destination": "Дестинация", + "DownloadClientAriaSettingsDirectoryHelpText": "Незадължително локация за изтеглянията, оставете празно, за да използвате локацията по подразбиране на Aria2", + "DownloadClientDelugeSettingsUrlBaseHelpText": "Добавя префикс към url адреса на deluge json, вижте {url}", + "Directory": "Директория", + "AddIndexerImplementation": "Добави индексатор - {implementationName}", + "AuthenticationRequiredHelpText": "Променете за кои заявки се изисква удостоверяване. Не променяйте, освен ако не разбирате рисковете.", + "AuthenticationRequiredPasswordHelpTextWarning": "Въведете нова парола", + "DownloadClientDownloadStationSettingsDirectoryHelpText": "Незадължителна споделена папка, в която да се поставят изтеглянията, оставете празно, за да използвате местоположението по подразбиране на Download Station", + "DownloadClientFloodSettingsAdditionalTags": "Допълнителни тагове", + "DownloadClientFloodSettingsAdditionalTagsHelpText": "Добавя свойствата на медията като тагове. Напътствията са примери.", + "DownloadClientFloodSettingsTagsHelpText": "Първоначални тагове на изтегляне. За да бъде разпознато едно изтегляне, то трябва да има всички начални тагове. По този начин се избягват конфликти с необвързани с приложение изтегляния.", + "ApplicationURL": "URL адрес на приложението", + "AuthenticationRequired": "Изисква се удостоверяване", + "ApplyChanges": "Прилагане на промените", + "ApiKeyValidationHealthCheckMessage": "Моля, актуализирайте API ключа си така, че да съдържа поне {length} знака. Можете да направите това чрез настройките или конфигурационния файл", + "AppUpdated": "{appName} Актуализиран", + "AppUpdatedVersion": "{appName} е актуализиранa до версия `{version}`, за да получите най-новите промени, ще трябва да презаредите {appName}", + "Donate": "Дарете", + "AddCustomFilter": "Добави персонализиран филтър", + "AuthenticationMethod": "Метод за удостоверяване", + "AuthenticationMethodHelpTextWarning": "Моля, изберете валиден метод за удостоверяване", + "BlackholeFolderHelpText": "Папка, в която {appName} ще съхранява файла {extension}" } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 342411047..3ff222098 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -501,5 +501,11 @@ "WouldYouLikeToRestoreBackup": "Voleu restaurar la còpia de seguretat '{name}'?", "InstallLatest": "Instal·la l'últim", "CurrentlyInstalled": "Instal·lat actualment", - "DownloadClientSettingsAddPaused": "Afegeix pausats" + "DownloadClientSettingsAddPaused": "Afegeix pausats", + "Install": "Instal·la", + "DownloadClientFloodSettingsAdditionalTags": "Etiquetes addicionals", + "DownloadClientFreeboxSettingsApiUrl": "URL de l'API", + "DownloadClientFreeboxSettingsAppId": "Identificador de l'aplicació", + "PreviouslyInstalled": "Instal·lat anteriorment", + "PasswordConfirmation": "Confirmeu la contrasenya" } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 89f8d9fd1..64f4be31d 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -633,5 +633,10 @@ "IndexerAvistazSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání", "InitialFailure": "Úvodní selhání", "IndexerTorrentSyndikatSettingsApiKeyHelpText": "Klíč API stránky", - "SearchTypes": "Hledat typy" + "SearchTypes": "Hledat typy", + "NotificationTriggersHelpText": "Vyber, které události mají vyvolat toto upozornění", + "IndexerSettingsBaseUrl": "Základní URL", + "DownloadClientUTorrentProviderMessage": "uTorrent má historii zahrnování kryptoměnových těžařů, malwaru a reklam, důrazně vám doporučujeme zvolit jiného klienta.", + "IndexerSettingsBaseUrlHelpText": "Vyberte, jakou základní URL bude {appName} používat pro požadavky na web", + "IndexerSettingsPackSeedTimeIndexerHelpText": "Doba, po kterou by měl být balíček (sezóna nebo diskografie) torrentu seedován před zastavením, prázdné pole znamená výchozí nastavení aplikace" } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 919dd5353..e7981a69e 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -806,5 +806,6 @@ "InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información.", "FailedToFetchSettings": "Error al recuperar la configuración", "CurrentlyInstalled": "Actualmente instalado", - "PreviouslyInstalled": "Previamente instalado" + "PreviouslyInstalled": "Previamente instalado", + "DownloadClientUTorrentProviderMessage": "uTorrent tiene un amplio historial de incluir criptomineros, malware y publicidad, por lo que recomendamos encarecidamente que elijas un cliente diferente." } diff --git a/src/NzbDrone.Core/Localization/Core/fa.json b/src/NzbDrone.Core/Localization/Core/fa.json index 2839af8c0..c0f9f6513 100644 --- a/src/NzbDrone.Core/Localization/Core/fa.json +++ b/src/NzbDrone.Core/Localization/Core/fa.json @@ -1,4 +1,13 @@ { "ApiKey": "کلید API", - "NetCore": ".NET" + "NetCore": ".NET", + "Add": "افزودن", + "About": "درباره", + "Actions": "اقدامات", + "Docker": "Docker", + "AddConnection": "افزودن پیوند", + "AddConnectionImplementation": "افزودن پیوند - {implementationName}", + "AddDownloadClientImplementation": "افزودن کلاینت دانلود - {implementationName}", + "Torrents": "تورنت ها", + "Usenet": "Usenet" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 2db696a8a..ab235f518 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -34,7 +34,7 @@ "Fixed": "Korjattu", "FocusSearchBox": "Kohdista hakukenttä", "ForMoreInformationOnTheIndividualDownloadClients": "Saat lisätietoja yksittäisistä latauspalveluista painamalla niiden ohessa olevia lisätietopainikkeita.", - "HideAdvanced": "Piilota lisäasetukset", + "HideAdvanced": "Laajenna asetukset", "History": "Historia", "MIA": "Puuttuu", "New": "Uutta", @@ -161,7 +161,7 @@ "SendAnonymousUsageData": "Lähetä nimettömiä käyttötietoja", "SetTags": "Tunnisteiden määritys", "SettingsEnableColorImpairedMode": "Heikentyneen värinäön tila", - "ShowAdvanced": "Näytä lisäasetukset", + "ShowAdvanced": "Supista asetukset", "ShowSearchHelpText": "Näytä hakupainike osoitettaessa.", "Shutdown": "Sammuta", "Size": "Koko", @@ -715,8 +715,8 @@ "UpdaterLogFiles": "Päivittäjän lokitiedostot", "WouldYouLikeToRestoreBackup": "Haluatko palauttaa varmuuskopion \"{name}\"?", "InstallLatest": "Asenna uusin", - "CurrentlyInstalled": "Nyt asennettu", - "PreviouslyInstalled": "Aiemmin asennettu", + "CurrentlyInstalled": "Käytössä oleva versio", + "PreviouslyInstalled": "Aiemmin käytössä ollut versio", "Mixed": "Sekoitettu", "IndexerSettingsAppsMinimumSeeders": "Jakajien vähimmäismäärä", "FailedToFetchSettings": "Asetusten nouto epäonnistui", diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 17cd81637..5a30e0f08 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -423,5 +423,88 @@ "minutes": "분", "Author": "저작자", "Categories": "카테고리", - "SeedRatio": "종자 비율" + "SeedRatio": "종자 비율", + "AuthenticationRequiredHelpText": "필수 인증을 요청하는 변경 사항. 위험을 이해하지 못한다면 변경하지 마세요.", + "DownloadClientFloodSettingsAdditionalTagsHelpText": "미디어의 속성을 태그로 추가합니다. 힌트는 예시입니다.", + "DownloadClientRTorrentSettingsAddStoppedHelpText": "활성화하면 rTorrent에 정지된 상태에서 토런트와 마그넷이 추가됩니다. 마그넷 파일이 손상될 수 있습니다.", + "HealthMessagesInfoBox": "행 끝에 있는 위키 링크(책 아이콘)를 클릭하거나 [로그]({link})를 확인하면 이러한 상태 점검 메시지의 원인에 대한 상세 정보를 찾을 수 있습니다. 이러한 메시지를 해석하는 데 어려움이 있는 경우 아래 링크에서 지원팀에 문의할 수 있습니다.", + "DownloadClientSettingsDestinationHelpText": "다운로드 대상을 수동으로 지정하고 기본값을 사용하려면 비워두세요.", + "DownloadClientSettingsInitialStateHelpText": "{clientName}에 추가된 토런트의 초기 상태", + "IndexerSettingsAdditionalParameters": "매개 변수 추가", + "NoEventsFound": "이벤트가 없음", + "BlackholeFolderHelpText": "{appName}가 {extension} 파일을 저장할 폴더", + "DownloadClientSettingsUrlBaseHelpText": "{clientName} url에 {url}과 같은 접두사를 추가합니다.", + "DownloadClientQbittorrentSettingsContentLayout": "콘텐츠 레이아웃", + "Install": "설치", + "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "새 비밀번호 확인", + "FailedToFetchSettings": "설정을 가져오는데 실패함", + "Default": "기본값", + "Episode": "에피소드", + "AuthenticationMethod": "인증 방법", + "IndexerSettingsSeedRatio": "시드 비율", + "Destination": "대상", + "DownloadClientFreeboxSettingsAppToken": "앱 토큰", + "Logout": "로그아웃", + "DownloadClientFreeboxSettingsApiUrl": "API 주소", + "IndexerHDBitsSettingsCodecs": "코덱", + "WhatsNew": "새로운 소식?", + "DownloadClientFreeboxSettingsPortHelpText": "Freebox 인터페이스에 액세스하는 데 사용되는 포트, 기본값은 '{port}'", + "DownloadClientPneumaticSettingsStrmFolderHelpText": "이 폴더의 .strm 파일은 드론으로 가져옵니다.", + "DownloadClientQbittorrentSettingsInitialStateHelpText": "qBittorrent에 추가된 토렌트의 초기 상태입니다. 강제 토렌트는 시드 제한을 따르지 않는다는 점에 유의하세요.", + "DownloadClientRTorrentSettingsDirectoryHelpText": "다운로드를 넣을 선택 위치, 기본 rTorrent 위치를 사용하려면 비워두세요.", + "DownloadClientSettingsUseSslHelpText": "{clientName}에 연결할 때 보안 연결을 사용", + "DownloadClientTransmissionSettingsUrlBaseHelpText": "{clientName} rpc URL에 접두사를 추가합니다(예: {url}, 기본값은 '{defaultUrl}')", + "InstallMajorVersionUpdateMessageLink": "상세 내용은 [{domain}]({url})을 확인하세요.", + "ApplicationUrlHelpText": "이 애플리케이션의 외부 URL - http(s)://, port 및 URL 기반 포함", + "Theme": "테마", + "ApplicationURL": "애플리케이션 URL", + "Directory": "디렉토리", + "DownloadClientDownloadStationSettingsDirectoryHelpText": "다운로드를 넣을 공유 폴더(선택 사항). 기본 다운로드 스테이션 위치를 사용하려면 비워두세요.", + "DownloadClientFloodSettingsAdditionalTags": "추가 태그", + "DownloadClientFloodSettingsUrlBaseHelpText": "{url}와 같은 Flood API에 접두사를 추가합니다", + "DownloadClientFreeboxSettingsApiUrlHelpText": "API 버전을 사용하여 Freebox API 기본 URL을 정의하세요, 예를 들어 '{url}', 기본값은 '{defaultApiUrl}')", + "DownloadClientFreeboxSettingsAppId": "앱 ID", + "DownloadClientNzbgetSettingsAddPausedHelpText": "이 옵션을 사용하려면 최소한 NzbGet 버전 16.0이 필요합니다", + "DownloadClientPneumaticSettingsNzbFolderHelpText": "이 폴더는 XBMC에서 접근할 수 있어야 합니다.", + "DownloadClientRTorrentSettingsAddStopped": "중지됨 추가", + "Category": "카테고리", + "DownloadClientTransmissionSettingsDirectoryHelpText": "다운로드를 넣을 위치 (선택 사항), 기본 전송 위치를 사용하려면 비워두세요", + "External": "외부", + "IndexerSettingsSeedRatioHelpText": "토렌드가 멈추기 전에 도달해야 하는 비율, 비어 있을 경우 다운로드 클라이언트의 기본값을 사용합니다. 비율은 최소 1.0이어야 하며 인덱서 규칙을 따라야 합니다", + "IndexerSettingsSeedTimeHelpText": "토렌드가 중지되기 전에 시드되어야 하는 시간, 비어 있을 경우 다운로드 클라이언트의 기본값을 사용합니다", + "InvalidUILanguage": "UI가 잘못된 언어로 설정되어 있습니다, 수정하고 설정을 저장하세요", + "AuthenticationRequired": "인증 필요", + "NotificationsTelegramSettingsIncludeAppNameHelpText": "다른 애플리케이션의 알림을 구분하기 위해 메시지 제목 앞에 {appName}를 접두사로 사용 (선택 사항)", + "PackageVersionInfo": "{packageVersion} by {packageAuthor}", + "Duration": "기간", + "Script": "스크립트", + "SelectDownloadClientModalTitle": "{modalTitle} - 다운로드 클라이언트 선택", + "TheLogLevelDefault": "로그 수준의 기본값은 '정보'이며 [일반 설정](/settings/general)에서 변경할 수 있습니다", + "UpdaterLogFiles": "업데이트 도구 로그 파일", + "CountDownloadClientsSelected": "{count}개의 다운로드 클라이언트를 선택함", + "DefaultNameCopiedProfile": "{name} - 복사", + "DownloadClientDelugeSettingsUrlBaseHelpText": "deluge json url에 접두사를 추가합니다. {url}을(를) 참조하세요", + "FailedToFetchUpdates": "업데이트를 가져오는데 실패함", + "ApplyChanges": "변경 사항 적용", + "Started": "시작됨", + "Database": "데이터베이스", + "PasswordConfirmation": "비밀번호 확인", + "TorrentBlackholeSaveMagnetFiles": "마그넷 파일 저장", + "TorrentBlackholeSaveMagnetFilesExtension": "마그넷 파일 확장자 저장", + "TorrentBlackholeSaveMagnetFilesExtensionHelpText": "마그넷 링크에 사용할 확장자, 기본값은 '.magnet'입니다", + "TorrentBlackholeSaveMagnetFilesHelpText": ".torrent 파일을 사용할 수 없는 경우 마그넷 링크를 저장합니다 (다운로드 클라이언트가 파일에 저장된 마그넷을 지원하는 경우에만 유용함)", + "AuthenticationMethodHelpTextWarning": "유효한 인증 방법을 선택해주세요", + "AuthenticationRequiredPasswordHelpTextWarning": "새로운 비밀번호를 입력하세요", + "AuthenticationRequiredUsernameHelpTextWarning": "새로운 사용자이름을 입력하세요", + "AuthenticationRequiredWarning": "인증 없이 원격 액세스를 방지하기 위해 {appName}은(는) 이제 인증을 활성화해야 합니다. 선택적으로 로컬 주소에서 인증을 비활성화할 수 있습니다.", + "CountIndexersSelected": "{count}개의 인덱서를 선택함", + "Label": "라벨", + "More": "더 보기", + "Donate": "기부하기", + "Menu": "메뉴", + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "qBittorrent의 구성된 콘텐츠 레이아웃을 사용할지, 토런트의 원래 레이아웃을 사용할지, 항상 하위 폴더를 생성할지(qBittorrent 4.3.2+)", + "DownloadClientSettingsAddPaused": "일시 중지 추가", + "SecretToken": "비밀 토큰", + "NoDownloadClientsFound": "다운로드 클라이언트를 찾을 수 없음", + "PrioritySettings": "우선 순위: {0}" } diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index a01858498..12e1c4557 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -160,5 +160,6 @@ "AptUpdater": "Bruk apt til å installere oppdateringen", "Discord": "Discord", "AddCustomFilter": "Legg til eget filter", - "Clone": "Lukk" + "Clone": "Lukk", + "AddDownloadClientImplementation": "Ny Nedlastingsklient - {implementationName}" } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 5ba6e6764..43c1f2932 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -806,5 +806,6 @@ "InstallMajorVersionUpdateMessageLink": "Verifique [{domain}]({url}) para obter mais informações.", "FailedToFetchSettings": "Falha ao obter configurações", "CurrentlyInstalled": "Atualmente instalado", - "PreviouslyInstalled": "Instalado anteriormente" + "PreviouslyInstalled": "Instalado anteriormente", + "DownloadClientUTorrentProviderMessage": "O uTorrent tem um histórico de incluir criptomineradores, malware e anúncios, recomendamos que você escolha outro cliente de download." } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index b9a2525f7..0d4af37ac 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -806,5 +806,6 @@ "IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Kullanıcı ve Torrent izinlerine sahip olmalısınız", "IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Grup adlarına göre sürüm ara", "IndexerHealthCheckNoIndexers": "Hiçbir indeksleyici etkinleştirilmedi, {appName} arama sonuçlarını döndürmeyecek", - "QueryType": "Sorgu Türü" + "QueryType": "Sorgu Türü", + "DownloadClientUTorrentProviderMessage": "uTorrent'in kripto para madenciliği, kötü amaçlı yazılım ve reklam içerme geçmişi vardır, bu nedenle farklı bir istemci seçmenizi önemle tavsiye ederiz." } From f6f2a3b00d0c3986f11078deb804e89480f812ff Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 2 Apr 2025 00:10:40 +0300 Subject: [PATCH 105/127] Bump linux agent to ubuntu-22.04 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index de880295f..1242e4eed 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -19,7 +19,7 @@ variables: nodeVersion: '20.X' innoVersion: '6.2.2' windowsImage: 'windows-2022' - linuxImage: 'ubuntu-20.04' + linuxImage: 'ubuntu-22.04' macImage: 'macOS-13' trigger: From 700862635823004f5abce0845931cfa3068b7a46 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Fri, 4 Apr 2025 21:33:47 +0300 Subject: [PATCH 106/127] Fixed: (PassThePopcorn) Parse volume factors for neutral leech releases --- .../Definitions/PassThePopcorn/PassThePopcornParser.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcornParser.cs b/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcornParser.cs index e08536162..7b6fe586e 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcornParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/PassThePopcorn/PassThePopcornParser.cs @@ -59,7 +59,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn // skip non-freeleech results when freeleech only is set var downloadVolumeFactor = torrent.FreeleechType?.ToUpperInvariant() switch { - "FREELEECH" => 0, + "FREELEECH" or "NEUTRAL LEECH" => 0, "HALF LEECH" => 0.5, _ => 1 }; @@ -91,6 +91,12 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn categories.Add(NewznabStandardCategory.TV); } + var uploadVolumeFactor = torrent.FreeleechType?.ToUpperInvariant() switch + { + "NEUTRAL LEECH" => 0, + _ => 1 + }; + torrentInfos.Add(new TorrentInfo { Guid = $"PassThePopcorn-{id}", @@ -108,7 +114,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn Scene = torrent.Scene, IndexerFlags = flags, DownloadVolumeFactor = downloadVolumeFactor, - UploadVolumeFactor = 1, + UploadVolumeFactor = uploadVolumeFactor, MinimumRatio = 1, MinimumSeedTime = 345600, Genres = result.Tags ?? new List<string>(), From 548dedad5c285a407c4bfe79c2f3e4d2f3496606 Mon Sep 17 00:00:00 2001 From: Weblate <noreply@weblate.org> Date: Sun, 6 Apr 2025 09:22:41 +0000 Subject: [PATCH 107/127] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Ste <stefanucciu@gmail.com> Co-authored-by: Weblate <noreply-mt-weblate@weblate.org> Co-authored-by: Weblate <noreply@weblate.org> Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/uk/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/ca.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/cs.json | 3 ++- src/NzbDrone.Core/Localization/Core/fr.json | 3 ++- src/NzbDrone.Core/Localization/Core/ru.json | 3 ++- src/NzbDrone.Core/Localization/Core/uk.json | 10 +++++++++- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 3ff222098..76350e36a 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -507,5 +507,10 @@ "DownloadClientFreeboxSettingsApiUrl": "URL de l'API", "DownloadClientFreeboxSettingsAppId": "Identificador de l'aplicació", "PreviouslyInstalled": "Instal·lat anteriorment", - "PasswordConfirmation": "Confirmeu la contrasenya" + "PasswordConfirmation": "Confirmeu la contrasenya", + "IndexerHDBitsSettingsOriginsHelpText": "Si no s'especifica, s'utilitzen totes les opcions.", + "MinimumSeeders": "Seeders mínims", + "SeedRatio": "Ràtio de la llavor", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Si un torrent està bloquejat per un hash, pot ser que no es rebutgi correctament durant el RSS/Search per a alguns indexadors, habilitant això permetrà que es rebutgi després que s'agafi el torrent, però abans que s'enviï al client.", + "SeedTime": "Temps de la llavor" } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 64f4be31d..21975a02e 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -638,5 +638,6 @@ "IndexerSettingsBaseUrl": "Základní URL", "DownloadClientUTorrentProviderMessage": "uTorrent má historii zahrnování kryptoměnových těžařů, malwaru a reklam, důrazně vám doporučujeme zvolit jiného klienta.", "IndexerSettingsBaseUrlHelpText": "Vyberte, jakou základní URL bude {appName} používat pro požadavky na web", - "IndexerSettingsPackSeedTimeIndexerHelpText": "Doba, po kterou by měl být balíček (sezóna nebo diskografie) torrentu seedován před zastavením, prázdné pole znamená výchozí nastavení aplikace" + "IndexerSettingsPackSeedTimeIndexerHelpText": "Doba, po kterou by měl být balíček (sezóna nebo diskografie) torrentu seedován před zastavením, prázdné pole znamená výchozí nastavení aplikace", + "PackSeedTimeHelpText": "Doba, po kterou by měl být balíček (sezóna nebo diskografie) torrentu seedován před zastavením, prázdné pole znamená výchozí nastavení aplikace" } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 34fb107a9..8768f9c50 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -806,5 +806,6 @@ "IndexerSettingsPreferMagnetUrl": "URL de préférence Magnet", "IndexerPassThePopcornSettingsGoldenPopcornOnly": "Popcorn doré uniquement", "IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Rechercher uniquement les versions Golden Popcorn", - "IndexerAvistazSettingsUsernameHelpTextWarning": "Seuls les membres de rang et supérieur peuvent utiliser l'API sur cet indexeur." + "IndexerAvistazSettingsUsernameHelpTextWarning": "Seuls les membres de rang et supérieur peuvent utiliser l'API sur cet indexeur.", + "DownloadClientUTorrentProviderMessage": "uTorrent a un historique d'inclusion de cryptomineurs, de logiciels malveillants et de publicités. Nous vous recommandons fortement de choisir un autre client." } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index d396b076e..f31829160 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -806,5 +806,6 @@ "InstallMajorVersionUpdateMessage": "Это обновление установит новую версию, которая может не поддерживаться вашей системой. Вы уверены, что хотите установить это обновление?", "FailedToFetchSettings": "Не удалось загрузить настройки", "CurrentlyInstalled": "Установлено", - "PreviouslyInstalled": "Ранее установленный" + "PreviouslyInstalled": "Ранее установленный", + "DownloadClientUTorrentProviderMessage": "Мы настоятельно советуем не использовать uTorrent, т.к. он известен как программа-шифровальщик и в целом вредоносное ПО." } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index f6390540a..f42bd890b 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -441,5 +441,13 @@ "CurrentlyInstalled": "В даний час встановлено", "Season": "Причина", "Stats": "Статус", - "CountIndexersSelected": "{count} індексер(-и) обрано" + "CountIndexersSelected": "{count} індексер(-и) обрано", + "SeedRatio": "Коефіцієнт роздачі", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Якщо торрент заблоковано хешем, він може не бути належним чином відхилений під час RSS/пошуку для деяких індексаторів. Увімкнення цього параметра дозволить відхилити його після захоплення торента, але до його відправки клієнту.", + "MinimumSeeders": "Мінімум сидерів (роздаючих)", + "SeedTime": "Час сидіння", + "Author": "Автор", + "OnHealthRestoredHelpText": "При відновленні стану", + "IndexerHDBitsSettingsOriginsHelpText": "Якщо не вказано, використовуються всі параметри.", + "days": "дні(в)" } From 7cb70716d040e1e5d00c060f05adb416805bae62 Mon Sep 17 00:00:00 2001 From: MrE12345 <78666580+MrE12345@users.noreply.github.com> Date: Sun, 6 Apr 2025 11:43:24 +0200 Subject: [PATCH 108/127] Fixed: (NorBits) Change encoding to UTF8 (#2367) --- src/NzbDrone.Core/Indexers/Definitions/NorBits.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs index 990cf3d68..e989a5c6a 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/NorBits.cs @@ -27,7 +27,7 @@ public class NorBits : TorrentIndexerBase<NorBitsSettings> public override string[] IndexerUrls => new[] { "https://norbits.net/" }; public override string Description => "NorBits is a Norwegian Private site for MOVIES / TV / GENERAL"; public override string Language => "nb-NO"; - public override Encoding Encoding => Encoding.GetEncoding("iso-8859-1"); + public override Encoding Encoding => Encoding.UTF8; public override IndexerPrivacy Privacy => IndexerPrivacy.Private; public override IndexerCapabilities Capabilities => SetCapabilities(); From 07711da4e090887eb6540d77d05bc3d3d9d2bc29 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 6 Apr 2025 15:44:25 +0300 Subject: [PATCH 109/127] Bump version to 1.33.3 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1242e4eed..78b955e67 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.33.2' + majorVersion: '1.33.3' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From de099c6770ae96b12eadd48c1329b05d26568c77 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Mon, 7 Apr 2025 15:58:01 +0300 Subject: [PATCH 110/127] Log delete statements only once --- src/NzbDrone.Core/Datastore/BasicRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Datastore/BasicRepository.cs b/src/NzbDrone.Core/Datastore/BasicRepository.cs index dc76a5a31..796e277b7 100644 --- a/src/NzbDrone.Core/Datastore/BasicRepository.cs +++ b/src/NzbDrone.Core/Datastore/BasicRepository.cs @@ -254,7 +254,7 @@ namespace NzbDrone.Core.Datastore protected void Delete(SqlBuilder builder) { - var sql = builder.AddDeleteTemplate(typeof(TModel)).LogQuery(); + var sql = builder.AddDeleteTemplate(typeof(TModel)); using (var conn = _database.OpenConnection()) { From 8a9518c9c164f0c803b7f7bde6483bf12555f380 Mon Sep 17 00:00:00 2001 From: Mark McDowall <mark@mcdowall.ca> Date: Mon, 31 Mar 2025 19:26:14 -0700 Subject: [PATCH 111/127] Update WikiUrl type in API docs (cherry picked from commit 9bd619ccfe074abe396bbf043a36a5be18a7ba4b) --- src/Prowlarr.Api.V1/Health/HealthResource.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Prowlarr.Api.V1/Health/HealthResource.cs b/src/Prowlarr.Api.V1/Health/HealthResource.cs index 1e2c8ffa5..3f357285d 100644 --- a/src/Prowlarr.Api.V1/Health/HealthResource.cs +++ b/src/Prowlarr.Api.V1/Health/HealthResource.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Linq; -using NzbDrone.Common.Http; using NzbDrone.Core.HealthCheck; using Prowlarr.Http.REST; @@ -11,7 +10,7 @@ namespace Prowlarr.Api.V1.Health public string Source { get; set; } public HealthCheckResult Type { get; set; } public string Message { get; set; } - public HttpUri WikiUrl { get; set; } + public string WikiUrl { get; set; } } public static class HealthResourceMapper @@ -29,7 +28,7 @@ namespace Prowlarr.Api.V1.Health Source = model.Source.Name, Type = model.Type, Message = model.Message, - WikiUrl = model.WikiUrl + WikiUrl = model.WikiUrl.FullUri }; } From 48301055eae8f7efd24dbfdcd1a2b20637f1a506 Mon Sep 17 00:00:00 2001 From: Mark McDowall <mark@mcdowall.ca> Date: Mon, 24 Mar 2025 20:07:15 -0700 Subject: [PATCH 112/127] Fixed: Set output encoding to UTF-8 when running external processes (cherry picked from commit f8e57b09856278a6d0c65f18704e96a33459687d) --- src/NzbDrone.Common/Processes/ProcessProvider.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Common/Processes/ProcessProvider.cs b/src/NzbDrone.Common/Processes/ProcessProvider.cs index 4947e7080..c68207a09 100644 --- a/src/NzbDrone.Common/Processes/ProcessProvider.cs +++ b/src/NzbDrone.Common/Processes/ProcessProvider.cs @@ -6,6 +6,7 @@ using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; +using System.Text; using NLog; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Model; @@ -117,7 +118,9 @@ namespace NzbDrone.Common.Processes UseShellExecute = false, RedirectStandardError = true, RedirectStandardOutput = true, - RedirectStandardInput = true + RedirectStandardInput = true, + StandardOutputEncoding = Encoding.UTF8, + StandardErrorEncoding = Encoding.UTF8 }; if (environmentVariables != null) From fc9dfb0cf7e41a029a92a1f60e2ca109bb2bff3a Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Mon, 7 Apr 2025 15:54:06 +0300 Subject: [PATCH 113/127] Fixed: Disallow tags creation with empty label --- src/Prowlarr.Api.V1/Tags/TagController.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Prowlarr.Api.V1/Tags/TagController.cs b/src/Prowlarr.Api.V1/Tags/TagController.cs index ed3aeebb9..83e9825c9 100644 --- a/src/Prowlarr.Api.V1/Tags/TagController.cs +++ b/src/Prowlarr.Api.V1/Tags/TagController.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using FluentValidation; using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.Messaging.Events; @@ -20,6 +21,8 @@ namespace Prowlarr.Api.V1.Tags : base(signalRBroadcaster) { _tagService = tagService; + + SharedValidator.RuleFor(c => c.Label).NotEmpty(); } public override TagResource GetResourceById(int id) From 1339373e4344c0d6988f85fd1fb683eabfb0a58e Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Tue, 8 Apr 2025 11:42:21 +0300 Subject: [PATCH 114/127] Bump Selenium.WebDriver.ChromeDriver --- src/NzbDrone.Automation.Test/Prowlarr.Automation.Test.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Automation.Test/Prowlarr.Automation.Test.csproj b/src/NzbDrone.Automation.Test/Prowlarr.Automation.Test.csproj index bb0b5fcc4..78c8b7d0f 100644 --- a/src/NzbDrone.Automation.Test/Prowlarr.Automation.Test.csproj +++ b/src/NzbDrone.Automation.Test/Prowlarr.Automation.Test.csproj @@ -4,7 +4,7 @@ </PropertyGroup> <ItemGroup> <PackageReference Include="Selenium.Support" Version="4.1.0" /> - <PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="99.0.4844.5100" /> + <PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="134.0.6998.16500" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\NzbDrone.Test.Common\Prowlarr.Test.Common.csproj" /> From 6be4203b4134f4c47d08659110cf11e83c85c945 Mon Sep 17 00:00:00 2001 From: Servarr <development@lidarr.audio> Date: Tue, 8 Apr 2025 10:37:59 +0000 Subject: [PATCH 115/127] Automated API Docs update --- src/Prowlarr.Api.V1/openapi.json | 45 ++------------------------------ 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/src/Prowlarr.Api.V1/openapi.json b/src/Prowlarr.Api.V1/openapi.json index c7fa206e8..35cb7d6a0 100644 --- a/src/Prowlarr.Api.V1/openapi.json +++ b/src/Prowlarr.Api.V1/openapi.json @@ -4739,7 +4739,8 @@ "nullable": true }, "wikiUrl": { - "$ref": "#/components/schemas/HttpUri" + "type": "string", + "nullable": true } }, "additionalProperties": false @@ -4991,48 +4992,6 @@ }, "additionalProperties": false }, - "HttpUri": { - "type": "object", - "properties": { - "fullUri": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "scheme": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "host": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "port": { - "type": "integer", - "format": "int32", - "nullable": true, - "readOnly": true - }, - "path": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "query": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "fragment": { - "type": "string", - "nullable": true, - "readOnly": true - } - }, - "additionalProperties": false - }, "IActionResult": { "type": "object", "additionalProperties": false From c8370c9e00a545ab6b713dae486fd8e1721aaa28 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Wed, 9 Apr 2025 20:59:15 +0300 Subject: [PATCH 116/127] Bump version to 1.34.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 78b955e67..7871f712d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.33.3' + majorVersion: '1.34.0' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 6aefd46cd45544c7509c221b7395bb569fc2720a Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 12 Apr 2025 14:31:29 +0300 Subject: [PATCH 117/127] Fixed: (SecretCinema) Edition not being decoded --- src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs b/src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs index ab63387e6..e8d8b1584 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/SecretCinema.cs @@ -20,7 +20,7 @@ public class SecretCinema : GazelleBase<GazelleSettings> { public override string Name => "Secret Cinema"; public override string[] IndexerUrls => new[] { "https://secret-cinema.pw/" }; - public override string Description => "A tracker for rare movies."; + public override string Description => "Secret Cinema is a Private ratioless site for rare MOVIES."; public override IndexerPrivacy Privacy => IndexerPrivacy.Private; public override IndexerCapabilities Capabilities => SetCapabilities(); @@ -151,7 +151,7 @@ public class SecretCinemaParser : IParseIndexerResponse if (torrent.RemasterTitle.IsNotNullOrWhiteSpace()) { - release.Title += $" [{torrent.RemasterTitle.Trim()}]"; + release.Title += $" [{WebUtility.HtmlDecode(torrent.RemasterTitle).Trim()}]"; } // Replace media formats with standards From 71937fa44c71d51a7262edaf92ad7e76f85638c4 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 12 Apr 2025 14:33:30 +0300 Subject: [PATCH 118/127] Update timezone offset for FL --- .../IndexerTests/FileListTests/FileListFixture.cs | 2 +- .../Indexers/Definitions/FileList/FileListParser.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs index 3699a9d0c..b6f06d180 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs @@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.IndexerTests.FileListTests torrentInfo.InfoUrl.Should().Be("https://filelist.io/details.php?id=665873"); torrentInfo.CommentUrl.Should().BeNullOrEmpty(); torrentInfo.Indexer.Should().Be(Subject.Definition.Name); - torrentInfo.PublishDate.Should().Be(DateTime.Parse("2020-01-25 20:20:19")); + torrentInfo.PublishDate.Should().Be(DateTime.Parse("2020-01-25 19:20:19")); torrentInfo.Size.Should().Be(8300512414); torrentInfo.InfoHash.Should().Be(null); torrentInfo.MagnetUrl.Should().Be(null); diff --git a/src/NzbDrone.Core/Indexers/Definitions/FileList/FileListParser.cs b/src/NzbDrone.Core/Indexers/Definitions/FileList/FileListParser.cs index b45ddf19b..6d91d930d 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/FileList/FileListParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/FileList/FileListParser.cs @@ -77,7 +77,7 @@ public class FileListParser : IParseIndexerResponse InfoUrl = GetInfoUrl(id), Seeders = row.Seeders, Peers = row.Leechers + row.Seeders, - PublishDate = DateTime.Parse(row.UploadDate + " +0200", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal), + PublishDate = DateTime.Parse(row.UploadDate + " +0300", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal), Description = row.SmallDescription, Genres = row.SmallDescription.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries).ToList(), ImdbId = imdbId, From 3287d45661bdbb392777c53f5395a45c8cb28ef9 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 12 Apr 2025 14:42:25 +0300 Subject: [PATCH 119/127] Update timezone offset for AvistaZ trackers --- .../IndexerTests/AvistazTests/AvistazFixture.cs | 2 +- .../IndexerTests/AvistazTests/ExoticazFixture.cs | 2 +- src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs | 2 +- src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/AvistazFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/AvistazFixture.cs index b8f7951d2..dcabb4dbf 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/AvistazFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/AvistazFixture.cs @@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests torrentInfo.InfoUrl.Should().Be("https://avistaz.to/torrent/187240-japan-sinks-people-of-hope-2021-s01e05-720p-nf-web-dl-ddp20-x264-seikel"); torrentInfo.CommentUrl.Should().BeNullOrEmpty(); torrentInfo.Indexer.Should().Be(Subject.Definition.Name); - torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-11-14 22:26:21")); + torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-11-14 21:26:21")); torrentInfo.Size.Should().Be(935127615); torrentInfo.InfoHash.Should().Be("a879261d4e6e792402f92401141a21de70d51bf2"); torrentInfo.MagnetUrl.Should().Be(null); diff --git a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/ExoticazFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/ExoticazFixture.cs index 4c4f9f38e..fe4ada593 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/ExoticazFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/AvistazTests/ExoticazFixture.cs @@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests torrentInfo.InfoUrl.Should().Be("https://exoticaz.to/torrent/64040-ssis-419-my-first-experience-is-yua-mikami-from-the-day-i-lost-my-virginity-i-was-devoted-to-sex"); torrentInfo.CommentUrl.Should().BeNullOrEmpty(); torrentInfo.Indexer.Should().Be(Subject.Definition.Name); - torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-06-11 10:04:50")); + torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-06-11 09:04:50")); torrentInfo.Size.Should().Be(7085405541); torrentInfo.InfoHash.Should().Be("asdjfiasdf54asd7f4a2sdf544asdf"); torrentInfo.MagnetUrl.Should().Be(null); diff --git a/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs b/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs index 4e1899651..7d9ba3b51 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs @@ -84,6 +84,6 @@ namespace NzbDrone.Core.Indexers.Definitions public class AvistaZParser : AvistazParserBase { - protected override string TimezoneOffset => "+01:00"; + protected override string TimezoneOffset => "+02:00"; } } diff --git a/src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs b/src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs index 784cc56e4..0933ea6a2 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/ExoticaZ.cs @@ -54,7 +54,7 @@ namespace NzbDrone.Core.Indexers.Definitions { private readonly IndexerCapabilitiesCategories _categories; - protected override string TimezoneOffset => "+01:00"; + protected override string TimezoneOffset => "+02:00"; public ExoticaZParser(IndexerCapabilitiesCategories categories) { From 46f73c51bb4402094d31d8c71c0a964252e2bedf Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 12 Apr 2025 14:54:01 +0300 Subject: [PATCH 120/127] Bump IPAddressRange, Npgsql, System.Text.Json --- src/NzbDrone.Common/Prowlarr.Common.csproj | 14 +++++++------- src/NzbDrone.Core/Prowlarr.Core.csproj | 8 ++++---- src/NzbDrone.Host/Prowlarr.Host.csproj | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/NzbDrone.Common/Prowlarr.Common.csproj b/src/NzbDrone.Common/Prowlarr.Common.csproj index b26b024bc..106890399 100644 --- a/src/NzbDrone.Common/Prowlarr.Common.csproj +++ b/src/NzbDrone.Common/Prowlarr.Common.csproj @@ -5,21 +5,21 @@ </PropertyGroup> <ItemGroup> <PackageReference Include="DryIoc.dll" Version="5.4.3" /> - <PackageReference Include="IPAddressRange" Version="6.1.0" /> - <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" /> - <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" /> + <PackageReference Include="IPAddressRange" Version="6.2.0" /> + <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.2" /> + <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="NLog" Version="5.4.0" /> <PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.3" /> <PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" /> - <PackageReference Include="Npgsql" Version="7.0.9" /> + <PackageReference Include="Npgsql" Version="7.0.10" /> <PackageReference Include="Sentry" Version="4.0.2" /> <PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" /> <PackageReference Include="SharpZipLib" Version="1.4.2" /> - <PackageReference Include="System.Text.Json" Version="6.0.10" /> - <PackageReference Include="System.ValueTuple" Version="4.5.0" /> + <PackageReference Include="System.Text.Json" Version="6.0.11" /> + <PackageReference Include="System.ValueTuple" Version="4.6.1" /> <PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" /> - <PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.1" /> + <PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.2" /> <PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" /> <PackageReference Include="System.Runtime.Loader" Version="4.3.0" /> <PackageReference Include="System.ServiceProcess.ServiceController" Version="6.0.1" /> diff --git a/src/NzbDrone.Core/Prowlarr.Core.csproj b/src/NzbDrone.Core/Prowlarr.Core.csproj index 4b8138cb4..d3f7656be 100644 --- a/src/NzbDrone.Core/Prowlarr.Core.csproj +++ b/src/NzbDrone.Core/Prowlarr.Core.csproj @@ -8,21 +8,21 @@ <PackageReference Include="Diacritical.Net" Version="1.0.4" /> <PackageReference Include="MailKit" Version="4.8.0" /> <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="6.0.35" /> - <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" /> + <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.3.0" /> <PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.7" /> <PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" /> - <PackageReference Include="Npgsql" Version="7.0.9" /> + <PackageReference Include="Npgsql" Version="7.0.10" /> <PackageReference Include="Polly" Version="8.5.2" /> <PackageReference Include="Servarr.FluentMigrator.Runner" Version="3.3.2.9" /> <PackageReference Include="Servarr.FluentMigrator.Runner.Postgres" Version="3.3.2.9" /> <PackageReference Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" /> - <PackageReference Include="System.Memory" Version="4.6.0" /> + <PackageReference Include="System.Memory" Version="4.6.3" /> <PackageReference Include="System.ServiceModel.Syndication" Version="6.0.0" /> <PackageReference Include="FluentValidation" Version="9.5.4" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="NLog" Version="5.4.0" /> <PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" /> - <PackageReference Include="System.Text.Json" Version="6.0.10" /> + <PackageReference Include="System.Text.Json" Version="6.0.11" /> <PackageReference Include="MonoTorrent" Version="2.0.7" /> <PackageReference Include="YamlDotNet" Version="13.1.1" /> <PackageReference Include="AngleSharp" Version="1.2.0" /> diff --git a/src/NzbDrone.Host/Prowlarr.Host.csproj b/src/NzbDrone.Host/Prowlarr.Host.csproj index 8dd6d8e61..f302e9cbe 100644 --- a/src/NzbDrone.Host/Prowlarr.Host.csproj +++ b/src/NzbDrone.Host/Prowlarr.Host.csproj @@ -5,8 +5,8 @@ </PropertyGroup> <ItemGroup> <PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" /> - <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" /> - <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" /> + <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.1" /> + <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.3" /> <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" /> <PackageReference Include="DryIoc.dll" Version="5.4.3" /> <PackageReference Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" /> From 4ba72ea7f3e00cd63e1265e1e35ffc25b7d8f3dc Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 12 Apr 2025 14:54:56 +0300 Subject: [PATCH 121/127] Bump Swashbuckle to 7.3.2 --- docs.sh | 2 +- src/NzbDrone.Host/Prowlarr.Host.csproj | 2 +- src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs.sh b/docs.sh index ab084b61b..38b0e0fbc 100755 --- a/docs.sh +++ b/docs.sh @@ -38,7 +38,7 @@ dotnet clean $slnFile -c Release dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p:RuntimeIdentifiers=$RUNTIME -t:PublishAllRids dotnet new tool-manifest -dotnet tool install --version 6.6.2 Swashbuckle.AspNetCore.Cli +dotnet tool install --version 7.3.2 Swashbuckle.AspNetCore.Cli dotnet tool run swagger tofile --output ./src/Prowlarr.Api.V1/openapi.json "$outputFolder/$FRAMEWORK/$RUNTIME/$application" v1 & diff --git a/src/NzbDrone.Host/Prowlarr.Host.csproj b/src/NzbDrone.Host/Prowlarr.Host.csproj index f302e9cbe..12bd5168e 100644 --- a/src/NzbDrone.Host/Prowlarr.Host.csproj +++ b/src/NzbDrone.Host/Prowlarr.Host.csproj @@ -7,7 +7,7 @@ <PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.1" /> <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.3" /> - <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" /> + <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="7.3.2" /> <PackageReference Include="DryIoc.dll" Version="5.4.3" /> <PackageReference Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" /> </ItemGroup> diff --git a/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj b/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj index 4371487f2..15684b0fe 100644 --- a/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj +++ b/src/Prowlarr.Api.V1/Prowlarr.Api.V1.csproj @@ -5,7 +5,7 @@ <ItemGroup> <PackageReference Include="FluentValidation" Version="9.5.4" /> <PackageReference Include="NLog" Version="5.4.0" /> - <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" /> + <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="7.3.2" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\NzbDrone.Core\Prowlarr.Core.csproj" /> From 075fd24f96b7759b6459529a1c252f2e62aa5132 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sat, 12 Apr 2025 16:17:13 +0300 Subject: [PATCH 122/127] Downgrade Microsoft.AspNetCore.WebUtilities --- src/NzbDrone.Core/Prowlarr.Core.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Prowlarr.Core.csproj b/src/NzbDrone.Core/Prowlarr.Core.csproj index d3f7656be..3f70dd577 100644 --- a/src/NzbDrone.Core/Prowlarr.Core.csproj +++ b/src/NzbDrone.Core/Prowlarr.Core.csproj @@ -8,7 +8,7 @@ <PackageReference Include="Diacritical.Net" Version="1.0.4" /> <PackageReference Include="MailKit" Version="4.8.0" /> <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="6.0.35" /> - <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.3.0" /> + <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" /> <PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.7" /> <PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" /> <PackageReference Include="Npgsql" Version="7.0.10" /> From 362f3fe22382220ec1478c8f2eef4c6a0e847d63 Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 13 Apr 2025 09:48:04 +0300 Subject: [PATCH 123/127] Bump version to 1.34.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7871f712d..1f79a65ec 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.34.0' + majorVersion: '1.34.1' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 0322d70d6342af8437257986e5c2666564625e6c Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 20 Apr 2025 11:08:04 +0300 Subject: [PATCH 124/127] Fixed: Handle 307 and 308 redirects for indexer download requests --- src/NzbDrone.Core/Indexers/HttpIndexerBase.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs b/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs index fde23c691..4a8014c63 100644 --- a/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs +++ b/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs @@ -250,7 +250,11 @@ namespace NzbDrone.Core.Indexers { var response = await _httpClient.ExecuteProxiedAsync(request, Definition); - if (response.StatusCode is HttpStatusCode.MovedPermanently or HttpStatusCode.Found or HttpStatusCode.SeeOther) + if (response.StatusCode is HttpStatusCode.MovedPermanently + or HttpStatusCode.Found + or HttpStatusCode.SeeOther + or HttpStatusCode.TemporaryRedirect + or HttpStatusCode.PermanentRedirect) { var autoRedirectChain = new List<string> { request.Url.ToString() }; From 356d07ef3405aab357f9216d5abe30f7819c854e Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Sun, 20 Apr 2025 22:30:15 +0300 Subject: [PATCH 125/127] Bump version to 1.35.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1f79a65ec..dc667e803 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '1.34.1' + majorVersion: '1.35.0' minorVersion: $[counter('minorVersion', 1)] prowlarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' From 0b3a5c9bc41f5fa550bb487e9ac661496aa64b63 Mon Sep 17 00:00:00 2001 From: Weblate <noreply@weblate.org> Date: Tue, 8 Apr 2025 09:33:29 +0000 Subject: [PATCH 126/127] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Hugoren Martinako <aumpfbahn@gmail.com> Co-authored-by: Oskari Lavinto <olavinto@protonmail.com> Co-authored-by: Weblate <noreply@weblate.org> Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/ Translation: Servarr/Prowlarr --- src/NzbDrone.Core/Localization/Core/ca.json | 232 +++++++++++++++++++- src/NzbDrone.Core/Localization/Core/fi.json | 4 +- 2 files changed, 232 insertions(+), 4 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 76350e36a..83a720b51 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -484,7 +484,7 @@ "InfoUrl": "URL d'informació", "PublishedDate": "Data de publicació", "Redirected": "Redirecció", - "AllSearchResultsHiddenByFilter": "Tots els resultats estan ocults pel filtre aplicat", + "AllSearchResultsHiddenByFilter": "Tots els resultats estan ocults pel filtre aplicat.", "HealthMessagesInfoBox": "Podeu trobar més informació sobre la causa d'aquests missatges de comprovació de salut fent clic a l'enllaç wiki (icona del llibre) al final de la fila o consultant els vostres [registres]({link}). Si teniu problemes per a interpretar aquests missatges, podeu posar-vos en contacte amb el nostre suport als enllaços següents.", "AptUpdater": "Utilitzeu apt per a instal·lar l'actualització", "DockerUpdater": "actualitzeu el contenidor Docker per a rebre l'actualització", @@ -512,5 +512,233 @@ "MinimumSeeders": "Seeders mínims", "SeedRatio": "Ràtio de la llavor", "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Si un torrent està bloquejat per un hash, pot ser que no es rebutgi correctament durant el RSS/Search per a alguns indexadors, habilitant això permetrà que es rebutgi després que s'agafi el torrent, però abans que s'enviï al client.", - "SeedTime": "Temps de la llavor" + "SeedTime": "Temps de la llavor", + "DefaultCategory": "Categoria predeterminada", + "IndexerVipExpiredHealthCheckMessage": "Els beneficis VIP de l'indexador han caducat: {indexerNames}", + "MassEditor": "Editor de masses", + "NoSearchResultsFound": "No s'han trobat resultats de cerca, proveu de realitzar una nova cerca a continuació.", + "NotSupported": "No suportat", + "OverrideAndAddToDownloadClient": "Sobreescriu i afegeix al client de baixada", + "PackSeedTime": "Temps de la llavor del paquet", + "SearchAllIndexers": "Cerca tots els indexadors", + "SearchIndexers": "Cerca indexadors", + "SeedTimeHelpText": "L'hora en què un torrent s'ha de sembrar abans d'aturar-se, buit és el predeterminat de l'aplicació", + "SettingsIndexerLogging": "Registre de l'indexador millorat", + "TotalIndexerSuccessfulGrabs": "Indexador total correcte", + "BookSearch": "Cerca de llibres", + "ClearHistoryMessageText": "Esteu segur que voleu netejar tot l'historial de {appName}?", + "IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech", + "ClearHistory": "Neteja l'historial", + "IndexerTorrentSyndikatSettingsApiKeyHelpText": "Clau de l'API del lloc", + "IndexerGazelleGamesSettingsApiKeyHelpText": "Clau API del lloc (trobada a Configuració => Accés)", + "IndexerBeyondHDSettingsRssKeyHelpText": "Clau RSS del lloc (trobada a Seguretat => Clau RSS)", + "ApplicationsLoadError": "No s'ha pogut carregar la llista d'aplicacions", + "BookSearchTypes": "Tipus de cerca de llibres", + "DownloadClientCategory": "Baixa la categoria del client", + "IndexerAuth": "Autor de l'indexador", + "IndexerBeyondHDSettingsLimitedOnly": "Només limitat", + "IndexerBeyondHDSettingsRefundOnly": "Només el reemborsament", + "IndexerBeyondHDSettingsRefundOnlyHelpText": "Cerca només el reemborsament", + "IndexerBeyondHDSettingsRewindOnlyHelpText": "Cerca només el rebobinat", + "IndexerBeyondHDSettingsSearchTypes": "Tipus de cerca", + "IndexerBeyondHDSettingsSearchTypesHelpText": "Seleccioneu els tipus de llançaments que us interessin. Si no hi ha cap seleccionat, s'utilitzen totes les opcions.", + "IndexerDownloadClientHelpText": "Especifiqueu quin client de baixada s'utilitza per a les captures fetes a {appName} des d'aquest indexador", + "IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Ha de tenir permisos d'usuari i torrents", + "IndexerGazelleGamesSettingsSearchGroupNames": "Cerca noms de grup", + "IndexerHDBitsSettingsFreeleechOnlyHelpText": "Mostra només els llançaments de freeleech", + "IndexerHDBitsSettingsUseFilenames": "Utilitza els noms de fitxer", + "IndexerHDBitsSettingsUseFilenamesHelpText": "Marqueu aquesta opció si voleu utilitzar noms de fitxer torrent com a títols de llançament", + "IndexerHDBitsSettingsUsernameHelpText": "Nom d'usuari del lloc", + "IndexerHealthCheckNoIndexers": "No hi ha indexadors activats, {appName} no retornarà els resultats de la cerca", + "IndexerHistoryLoadError": "Error en carregar l'historial de l'indexador", + "IndexerIPTorrentsSettingsCookieUserAgent": "Agent d'usuari de la galeta", + "IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech", + "IndexerInfo": "Informació de l'indexador", + "IndexerNebulanceSettingsApiKeyHelpText": "Clau API de la Configuració de l'usuari . Claus Api. La clau ha de tenir permisos de llista i baixada", + "IndexerNewznabSettingsVipExpirationHelpText": "Data d'entrada (yyyy-mm-dd) per a la caducitat VIP o en blanc, {appName} notificarà 1 setmana des de la caducitat de VIP", + "IndexerNoDefinitionCheckHealthCheckMessage": "Els indexadors no tenen definició i no funcionaran: {indexerNames}. Suprimiu i (o torneu a afegir) a {appName}.", + "IndexerObsoleteCheckMessage": "Els indexadors estan obsolets o s'han actualitzat: {0}. Suprimiu i (o torneu a afegir) a {appName}", + "IndexerPassThePopcornSettingsApiKeyHelpText": "Clau de l'API del lloc", + "IndexerRss": "Indexador RSS", + "IndexerSettingsGrabLimitHelpText": "El nombre màxim de captures especificat per la unitat respectiva que {appName} permetrà al lloc", + "IndexerSettingsPackSeedTimeIndexerHelpText": "L'hora en què un paquet (temporada o discografia) s'ha de sembrar el torrent abans d'aturar-se, buit és el valor predeterminat de l'aplicació", + "IndexerSettingsPreferMagnetUrl": "Prefereix l'URL de l'imant", + "IndexerSettingsPreferMagnetUrlHelpText": "Quan està activat, aquest indexador preferirà l'ús d'URLs magnet per a les captures amb enllaços de reserva a torrents", + "IndexerSettingsQueryLimitHelpText": "El nombre màxim de consultes especificat per la unitat respectiva que {appName} permetrà al lloc", + "InitialFailure": "Fallada inicial", + "NoIndexerCategories": "No s'ha trobat cap categoria per a aquest indexador", + "RepeatSearch": "Cerca repetida", + "SettingsLogRotateHelpText": "Nombre màxim de fitxers de registre a mantenir desats a la carpeta de registres", + "SyncProfile": "Perfil de sincronització", + "TotalUserAgentGrabs": "Total d'agents d'usuari", + "UnableToLoadAppProfiles": "No s'han pogut carregar els perfils de l'aplicació", + "VipExpiration": "Caducitat VIP", + "IndexerOrpheusSettingsApiKeyHelpText": "Clau API del lloc (trobada a Configuració => Accés)", + "IndexerRedactedSettingsApiKeyHelpText": "Clau API del lloc (trobada a Configuració => Accés)", + "ProwlarrSupportsAnyIndexer": "{appName} admet molts indexadors, a més de qualsevol indexador que utilitzi l'estàndard Newznab/Torznab utilitzant 'Generic Newznab' (per usenet) o 'Generic Torznab' (per torrents). Cerca i selecciona el teu indexador des de sota.", + "DownloadClientSettingsDefaultCategorySubFolderHelpText": "Categoria alternativa predeterminada si no hi ha cap categoria assignada per a un llançament. Afegir una categoria específica a {appName} evita conflictes amb baixades no relacionades amb {appName}. L'ús d'una categoria és opcional, però molt recomanable.", + "AppProfileSelectHelpText": "Els perfils d'aplicació s'utilitzen per controlar RSS, la cerca automàtica i la configuració de cerca interactiva en sincronitzar aplicacions", + "AudioSearch": "Cerca d'àudio", + "IndexerSettingsAppsMinimumSeeders": "Aplicacions de cercadors mínims", + "DeleteApplication": "Suprimeix l'aplicació", + "DownloadClientSettingsPriorityItemHelpText": "Prioritat a usar en capturar elements", + "DownloadClientSettingsDefaultCategoryHelpText": "Categoria alternativa predeterminada si no hi ha cap categoria assignada per a un llançament. Afegir una categoria específica a {appName} evita conflictes amb baixades no relacionades amb {appName}. L'ús d'una categoria és opcional, però molt recomanable.", + "EditCategory": "Edita la categoria", + "IndexerQuery": "Consulta de l'indexador", + "IndexerSettingsBaseUrl": "Url base", + "IndexerSettingsCookieHelpText": "Cookie del lloc", + "IndexerSettingsLimitsUnitHelpText": "La unitat de temps per comptar els límits per indexador", + "IndexerSettingsPackSeedTime": "Temps de la llavor del paquet", + "IndexerSite": "Lloc indexador", + "IndexerTagsHelpTextWarning": "Les etiquetes s'han d'utilitzar amb precaució, poden tenir efectes no desitjats. Un indexador amb una etiqueta només sincronitzarà amb aplicacions amb la mateixa etiqueta.", + "IndexerSettingsSummary": "Configura diversos paràmetres globals de l'indexador.", + "ManageApplications": "Gestiona les aplicacions", + "PackSeedTimeHelpText": "L'hora en què un paquet (temporada o discografia) s'ha de sembrar el torrent abans d'aturar-se, buit és el valor predeterminat de l'aplicació", + "PreferMagnetUrl": "Prefereix l'URL de l'imant", + "PreferMagnetUrlHelpText": "Quan està activat, aquest indexador preferirà l'ús d'URLs magnet per a les captures amb enllaços de reserva a torrents", + "ProwlarrDownloadClientsInAppOnlyAlert": "Els clients de baixada només són per a les cerques a l'aplicació {appName} i no sincronitzen amb les aplicacions. No hi ha plans per afegir aquesta funcionalitat.", + "IndexerBeyondHDSettingsRewindOnly": "Només rebobina", + "ProxyValidationUnableToConnect": "No s'ha pogut connectar al servidor intermediari: {exceptionMessage}. Comprova els detalls del registre que envolta aquest error", + "QueryOptions": "Opcions de la consulta", + "TestAllApps": "Prova totes les aplicacions", + "TotalHostQueries": "Total de consultes de l'amfitrió", + "AverageGrabs": "Mitjana d'herba", + "AverageQueries": "Mitjana de consultes", + "FilterPlaceHolder": "Cerca indexadors", + "IndexerBeyondHDSettingsLimitedOnlyHelpText": "Cerca només freeleech (Limited UL)", + "IndexerBeyondHDSettingsApiKeyHelpText": "Clau API del lloc (trobada a Seguretat => Clau API)", + "IndexerSettingsVipExpiration": "Caducitat VIP", + "IndexerVipExpiringHealthCheckMessage": "Els beneficis VIP de l'indexador expiraran aviat: {indexerNames}", + "LastFailure": "Darrera fallada", + "MovieSearch": "Cerca de pel·lícules", + "MovieSearchTypes": "Tipus de cerca de pel·lícules", + "MusicSearchTypes": "Tipus de cerca de música", + "QueryType": "Tipus de consulta", + "RssQueries": "Consultes RSS", + "SyncLevelFull": "Sincronització completa: mantindrà els indexadors d'aquesta aplicació completament sincronitzats. Els canvis fets als indexadors a {appName} se sincronitzen amb aquesta aplicació. Qualsevol canvi fet a indexadors remotament dins d'aquesta aplicació serà anul·lat per {appName} en la següent sincronització.", + "TotalHostGrabs": "Total d'amfitrions", + "TotalQueries": "Total de consultes", + "NoApplicationsFound": "No s'ha trobat cap aplicació", + "SyncProfiles": "Sincronitza els perfils", + "TorznabUrl": "Url Torznab", + "TvSearch": "Cerca de TV", + "DeleteIndexerProxy": "Suprimeix el servidor intermediari de l'indexador", + "DisabledUntil": "Desactivat fins", + "GrabTitle": "Captura el títol", + "SettingsIndexerLoggingHelpText": "Registra dades addicionals de l'indexador", + "SyncLevel": "Nivell de sincronització", + "AdvancedSettingsHiddenClickToShow": "Configuració avançada oculta, feu clic per mostrar", + "AdvancedSettingsShownClickToHide": "Configuració avançada mostrada, feu clic per amagar", + "AppsMinimumSeeders": "Aplicacions de cercadors mínims", + "AppsMinimumSeedersHelpText": "«Mínims filtradors requerits per les Aplicacions perquè l'indexador s'agafi", + "CountIndexersAvailable": "{count} indexador(s) disponible", + "HistoryCleanup": "Neteja de l'historial", + "HistoryDetails": "Detalls de l'historial", + "SettingsFilterSentryEventsHelpText": "Filtra els esdeveniments d'error d'usuari coneguts perquè s'enviïn com a Analytics", + "MappedCategories": "Categories assignades", + "AppSettingsSummary": "Aplicacions i paràmetres per configurar com {appName} interactua amb els vostres programes PVR", + "ConnectSettingsSummary": "Notificacions i scripts personalitzats", + "DeleteClientCategory": "Suprimeix la categoria del client de baixada", + "FullSync": "Sincronització completa", + "IndexerAlreadySetup": "Almenys una instància de l'indexador ja està configurada", + "RawSearchSupported": "S'admet la cerca RAW", + "RssFeed": "Canal RSS", + "SearchTypes": "Tipus de cerca", + "SeedRatioHelpText": "La relació a la qual ha d'arribar un torrent abans d'aturar-se, buida és la predeterminada de l'aplicació", + "SemiPrivate": "Semi-Privada", + "TotalIndexerQueries": "Total de consultes de l'indexador", + "TotalUserAgentQueries": "Total de consultes d'agents d'usuari", + "GoToApplication": "Ves a l'aplicació", + "Url": "Url", + "AreYouSureYouWantToDeleteIndexer": "Esteu segur que voleu suprimir '{name}' de {appName}?", + "AverageResponseTimesMs": "Temps mitjà de resposta de l'indexador (ms)", + "FoundCountReleases": "S'han trobat {itemCount} versions", + "AuthQueries": "Consultes d'Autorització", + "BasicSearch": "Cerca bàsica", + "IndexerName": "Nom de l'indexador", + "IndexerStatus": "Estat de l'indexador", + "IndexerTagsHelpText": "Utilitzeu etiquetes per especificar els intermediaris de l'indexador o a quines aplicacions se sincronitza l'indexador.", + "NewznabUrl": "Url Newznab", + "SearchCountIndexers": "Cerca {count} indexador", + "UnableToLoadDevelopmentSettings": "No s'han pogut carregar els paràmetres de desenvolupament", + "SettingsFilterSentryEvents": "Filtra els esdeveniments d'anàlisi", + "ApplicationTagsHelpText": "Sincronitza els indexadors d'aquesta aplicació que tenen una o més etiquetes coincidents. Si no es llisten etiquetes aquí, llavors no s'impedirà la sincronització d'indexadors a causa de les seves etiquetes.", + "ApplicationTagsHelpTextWarning": "Les etiquetes s'han d'utilitzar amb precaució, poden tenir efectes no desitjats. Una aplicació amb una etiqueta només sincronitzarà amb els indexadors que tinguin la mateixa etiqueta.", + "DeleteSelectedApplications": "Suprimeix les aplicacions seleccionades", + "DownloadClientsSettingsSummary": "Baixa la configuració dels clients per a la integració a la cerca de la interfície d'usuari {appName}", + "ElapsedTime": "Temps transcorregut", + "EnableIndexer": "Habilita l'indexador", + "EnableRssHelpText": "Habilita el canal RSS per a l'indexador", + "IncludeManualGrabsHelpText": "Inclou les notes manuals fetes a {appName}", + "IndexerFailureRate": "Taxa de fallada de l'indexador", + "ProwlarrSupportsAnyDownloadClient": "{appName} admet qualsevol dels clients de baixada que es llisten a continuació.", + "TotalGrabs": "Grabs totals", + "IndexerDetails": "Detalls de l'indexador", + "IndexerPriorityHelpText": "Prioritat de l'indexador des de l'1 (el més alt) fins al 50 (el més oest). Per defecte: 25.", + "IndexerProxy": "Servidor intermediari de l'indexador", + "UISettingsSummary": "Opcions de data, idioma i color defectuoses", + "IndexerCategories": "Categories de l'indexador", + "IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech", + "SearchCapabilities": "Capacitats de cerca", + "SearchType": "Tipus de cerca", + "SettingsLogSql": "Registre Sql", + "SyncLevelAddRemove": "Afegeix i elimina només: quan s'afegeixen o s'eliminen els indexadors de {appName}, s'actualitzarà aquesta aplicació remota.", + "IndexerProxies": "Propis de l'indexador", + "ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Sincronitza les fulles del torrent de la llista de blocs en bloc mentre s'agafa", + "CertificateValidationHelpText": "Canvia l'estricta validació de la certificació HTTPS", + "IndexerDisabled": "Indexador desactivat", + "IndexerFileListSettingsPasskeyHelpText": "Contrasenya del lloc (Aquesta és la cadena alfanumèrica a l'URL del seguidor que es mostra al client de baixada)", + "IndexerSettingsQueryLimit": "Límit de consulta", + "IndexerHDBitsSettingsPasskeyHelpText": "Contrasenya dels detalls de l'usuari", + "IndexerSettingsPasskey": "Clau de pas", + "ClickToChangeQueryOptions": "Feu clic per a canviar les opcions de consulta", + "EnabledRedirected": "Activat, redirigit", + "Parameters": "Paràmetres", + "QueryResults": "Resultats de la consulta", + "RedirectHelpText": "Redirigeix la sol·licitud de baixada entrant per a l'indexador i passa la captura directament en lloc de intermediaris a través de {appName}", + "UnableToLoadIndexerProxies": "No s'han pogut carregar els intermediaris de l'indexador", + "IndexerId": "ID de l'indexador", + "IndexerAlphaRatioSettingsExcludeScene": "Exclou l'escena", + "IndexerAlphaRatioSettingsExcludeSceneHelpText": "Exclou els llançaments d'escenes dels resultats", + "IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech", + "IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech", + "IndexerFileListSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech", + "IndexerFileListSettingsUsernameHelpText": "Nom d'usuari del lloc", + "IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Cerca publicacions per noms de grup", + "IndexerHDBitsSettingsOrigins": "Orígens", + "IndexerIPTorrentsSettingsCookieUserAgentHelpText": "Agent d'usuari associat a la cookie utilitzada des del navegador", + "IndexerNewznabSettingsApiKeyHelpText": "Clau de l'API del lloc", + "IndexerNzbIndexSettingsApiKeyHelpText": "Clau de l'API del lloc", + "IndexerSettingsAppsMinimumSeedersHelpText": "«Mínims filtradors requerits per les Aplicacions perquè l'indexador s'agafi", + "IndexerSettingsFreeleechOnly": "Només Freeleech", + "IndexerSettingsGrabLimit": "Límit de captura", + "IndexerSettingsLimitsUnit": "Unitats de límits", + "IndexerSettingsRssKey": "Clau RSS", + "SelectIndexers": "Selecciona els indexadors", + "SettingsSqlLoggingHelpText": "Registra totes les consultes SQL de {appName}", + "SyncAppIndexers": "Sincronitza els indexadors d'aplicacions", + "AppProfileInUse": "Perfil d'aplicació en ús", + "DeleteAppProfile": "Suprimeix el perfil de l'aplicació", + "TVSearchTypes": "Tipus de cerca de TV", + "IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech", + "IndexerMTeamTpSettingsApiKeyHelpText": "Clau API del Lloc (trobada a Tauler de control de l'usuari => Seguretat => Laboratori)", + "MinimumSeedersHelpText": "Visors mínims requerits per l'aplicació perquè l'indexador s'agafi", + "NoIndexerHistory": "No s'ha trobat cap historial per a aquest indexador", + "SearchQueries": "Cerca consultes", + "SettingsConsoleLogLevel": "Nivell de registre de la consola", + "IndexerPassThePopcornSettingsGoldenPopcornOnly": "Només blat de moro daurat", + "IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Cerca només els llançaments Golden Popcorn", + "Open": "Obre", + "ProwlarrDownloadClientsAlert": "Si voleu fer cerques directament dins de {appName}, heu d'afegir Clients de Baixades. En cas contrari, no cal afegir-les aquí. Per a les cerques des de les teves Apps, els clients de descàrrega configurats s'utilitzen en el seu lloc.", + "Website": "Lloc web", + "DownloadClientQbittorrentSettingsUseSslHelpText": "Utilitza una connexió segura. Vegeu Opcions -> Interfície web -> 'Utilitza HTTPS en comptes d'HTTP' a qBittorrent.", + "IndexerAvistazSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech", + "IndexerAvistazSettingsPasswordHelpText": "Contrasenya del lloc", + "IndexerAvistazSettingsPidHelpText": "PID de la pàgina del meu compte o del meu perfil", + "IndexerAvistazSettingsUsernameHelpText": "Nom d'usuari del lloc", + "IndexerAvistazSettingsUsernameHelpTextWarning": "Només el rang de membre i superior pot utilitzar l'API en aquest indexador.", + "SelectedCountOfCountReleases": "S'han seleccionat {selectedCount} de les versions {itemCount}", + "SettingsLogRotate": "Rotació del registre", + "AreYouSureYouWantToDeleteCategory": "Esteu segur que voleu suprimir la categoria assignada?", + "Book": "Llibre" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index ab235f518..0236ce555 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -207,7 +207,7 @@ "StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta", "StartupDirectory": "Käynnistyskansio", "TableOptions": "Taulukkonäkymän asetukset", - "TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys", + "TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys.", "TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille hakupalveluille.", "UnableToAddANewAppProfilePleaseTryAgain": "Virhe lisättäessä sovellusprofiilia. Yritä uudelleen.", "UnableToAddANewNotificationPleaseTryAgain": "Ilmoituspalvelun lisääminen epäonnistui. Yritä uudelleen.", @@ -805,6 +805,6 @@ "IndexerPassThePopcornSettingsGoldenPopcornOnly": "Vain \"Golden Popcorn\"", "IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Etsi vain ns. kultaisella pocornilla merkittyjä julkaisuja.", "IndexerSettingsFreeleechOnly": "Vain \"Freeleech\"", - "IndexerSettingsCookieHelpText": "Jos sivusto vaatii kirjautumisevästeen, se on noudettava selaimen kautta.", + "IndexerSettingsCookieHelpText": "Jos sivusto vaatii kirjautumisevästeen, on se noudettava selaimen avulla.", "IndexerAvistazSettingsPasswordHelpText": "Sivuston salasana" } From 48a658571bdecda1d6a94b77876afb84346bdf5e Mon Sep 17 00:00:00 2001 From: Bogdan <mynameisbogdan@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:36:35 +0300 Subject: [PATCH 127/127] Improve error messaging for not finding JSON selectors in Cardigann --- .../Indexers/Definitions/Cardigann/CardigannBase.cs | 13 +++++++------ .../Definitions/Cardigann/CardigannParser.cs | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannBase.cs b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannBase.cs index 6abdd710e..9e2c6e06b 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannBase.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannBase.cs @@ -8,6 +8,7 @@ using System.Text; using System.Text.RegularExpressions; using AngleSharp.Dom; using Microsoft.AspNetCore.WebUtilities; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NLog; using NzbDrone.Common.Extensions; @@ -214,19 +215,19 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann if (selector.Selector != null) { var selectorSelector = ApplyGoTemplateText(selector.Selector.TrimStart('.'), variables); - selectorSelector = JsonParseFieldSelector(parentObj, selectorSelector); + var fieldSelector = JsonParseFieldSelector(parentObj, selectorSelector); JToken selection = null; - if (selectorSelector != null) + if (fieldSelector != null) { - selection = parentObj.SelectToken(selectorSelector); + selection = parentObj.SelectToken(fieldSelector); } if (selection == null) { if (required) { - throw new Exception(string.Format("Selector \"{0}\" didn't match {1}", selectorSelector, parentObj.ToString())); + throw new Exception($"Selector \"{selectorSelector}\" didn't match {parentObj.ToString(Formatting.None)}"); } return null; @@ -234,7 +235,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann if (selection.Type is JTokenType.Array) { - // turn this json array into a comma delimited string + // turn this json array into a comma-delimited string var valueArray = selection.Value<JArray>(); value = string.Join(",", valueArray); } @@ -259,7 +260,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann { if (required) { - throw new Exception($"None of the case selectors \"{string.Join(",", selector.Case)}\" matched {parentObj}"); + throw new Exception($"None of the case selectors \"{string.Join(",", selector.Case)}\" matched {parentObj.ToString(Formatting.None)}"); } return null; diff --git a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannParser.cs b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannParser.cs index 28be1c3e5..4b96e25ed 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannParser.cs @@ -105,7 +105,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann } catch (Exception ex) { - _logger.Trace(ex, "Failed to parse JSON rows count."); + _logger.Debug(ex, "Failed to parse JSON rows count."); } }