From c8370c9e00a545ab6b713dae486fd8e1721aaa28 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 9 Apr 2025 20:59:15 +0300 Subject: [PATCH 01/13] 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 Date: Sat, 12 Apr 2025 14:31:29 +0300 Subject: [PATCH 02/13] 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 { 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 Date: Sat, 12 Apr 2025 14:33:30 +0300 Subject: [PATCH 03/13] 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 Date: Sat, 12 Apr 2025 14:42:25 +0300 Subject: [PATCH 04/13] 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 Date: Sat, 12 Apr 2025 14:54:01 +0300 Subject: [PATCH 05/13] 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 @@ - - - + + + - + - - + + - + 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 @@ - + - + - + - + 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 @@ - - + + From 4ba72ea7f3e00cd63e1265e1e35ffc25b7d8f3dc Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 12 Apr 2025 14:54:56 +0300 Subject: [PATCH 06/13] 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 @@ - + 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 @@ - + From 075fd24f96b7759b6459529a1c252f2e62aa5132 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 12 Apr 2025 16:17:13 +0300 Subject: [PATCH 07/13] 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 @@ - + From 362f3fe22382220ec1478c8f2eef4c6a0e847d63 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 13 Apr 2025 09:48:04 +0300 Subject: [PATCH 08/13] 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 Date: Sun, 20 Apr 2025 11:08:04 +0300 Subject: [PATCH 09/13] 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 { request.Url.ToString() }; From 356d07ef3405aab357f9216d5abe30f7819c854e Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 20 Apr 2025 22:30:15 +0300 Subject: [PATCH 10/13] 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 Date: Tue, 8 Apr 2025 09:33:29 +0000 Subject: [PATCH 11/13] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Hugoren Martinako Co-authored-by: Oskari Lavinto Co-authored-by: Weblate 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 Date: Mon, 21 Apr 2025 14:36:35 +0300 Subject: [PATCH 12/13] 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(); 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."); } } From c85f170d4174320ae6501dc1c74b74c6643182ef Mon Sep 17 00:00:00 2001 From: blu3 Date: Tue, 22 Apr 2025 14:15:28 +0300 Subject: [PATCH 13/13] Bump license year --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e8c60546a..6d196feee 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,6 @@ Thank you to [