Compare commits

..

41 Commits

Author SHA1 Message Date
bakerboy448
b9b28c2a19 Improve UX of indexer urls error logging 2025-08-23 15:44:47 -05:00
bakerboy448
bfac2b81f0 New: Improve Indexer Connection Failure Messaging (#2473) 2025-08-23 15:44:47 -05:00
Weblate
65397c1f03 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Jeremi Florczyk <j.m.florczyk@gmail.com>
Co-authored-by: Marcin <ml.cichy@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pl/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
ilike2burnthing
416a00340c Fixed:(toloka) improve episode regex & trim (#2471)
toloka: improve episode regex & trim
2025-08-23 15:44:47 -05:00
Eugene Shatilo
4553ffe08b Fixed:(RuTracker) corrected regexp for director’s name in the title to cover cases for Russian directors (#2470)
Corrected regexp for rutracker director's name in the title to cover cases for russian directors
2025-08-23 15:44:47 -05:00
bakerboy448
4350b6ce70 Fixed: Mobile add indexer modal layout (#2464)
* New: Add Indexer Filters are Collapsible

fixes #2431

* Fixed: Rename onToggleFilters to handleToggleFilters

* fix css lint
2025-08-23 15:44:47 -05:00
bakerboy448
04a6bba76b Bump to 2.0.5 2025-08-23 15:44:47 -05:00
Mark McDowall
6a09998cd2 New: Move auth success logging to debug
Closes #7978
2025-08-23 15:44:47 -05:00
Mark McDowall
044558b7f8 Don't log debug messages for API key validation
(cherry picked from commit 78ca30d1f81361a2dabaddd0036b764859b858af)
2025-08-23 15:44:47 -05:00
Weblate
2d20a08782 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Tim81 <tvdham@hotmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nl/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
bakerboy448
d0572fecdc Bump version to 2.0.4 2025-08-23 15:44:47 -05:00
Robin Dadswell
dadfb8d008 Fixed: Saving Newznab indexer when redirect was true 2025-08-23 15:44:47 -05:00
Weblate
063666a7c9 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: ArLab1 <arnaud.laberge@hotmail.com>
Co-authored-by: Oleksii Ilienko <assada.ua@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/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/uk/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
Robin Dadswell
aba69901c9 New: Force all usenet indexers to use Redirection 2025-08-23 15:44:47 -05:00
Robin Dadswell
cbfec3df3c New: Updated all newznab indexers to be redirect 2025-08-23 15:44:47 -05:00
Mike Miller
448140fa9d Fixed: (Xpseeds) Update categories (#2458)
Sync with Jackett
2025-08-23 15:44:47 -05:00
bakerboy448
eb7ff5479b Bump version to 2.0.3 2025-08-23 15:44:47 -05:00
bakerboy448
e3012ab218 New: (Avistaz Sites) Use created_at_iso for release create date (#2437)
* New: (Avistaz Sites) Use created_at_iso for release create date

no longer have timezone headaches
all Staz sites except animetorrents support this new field.

* fix tests

* Remove AvistaZ TimezoneOffset
2025-08-23 15:44:47 -05:00
bakerboy448
070d522bd7 Bump version to 2.0.2 2025-08-23 15:44:47 -05:00
Weblate
fc855cdb8c Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: averyv86 <averyv86@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
bakerboy448
93a1fd0759 Sync UiAuthorizationPolicyProvider with upstream
* Revert "Fixed: Fallback to Forms for removed Basic auth method"

This reverts commit fe198352a3.

* AuthPolicy Var fixes
2025-08-23 15:44:47 -05:00
Mark McDowall
83754ff349 Change authentication to Forms if set to Basic
(cherry picked from commit 8e08b0cc3df904d39da5be38bc345cc701412a9d)
2025-08-23 15:44:47 -05:00
Bogdan
fa5a9b22c8 Bump version to 2.0.1 2025-08-23 15:44:47 -05:00
Bogdan
32793a1d05 Bump Polly to 8.6.0 2025-08-23 15:44:47 -05:00
Bogdan
99184b5596 Fixed: Fallback to Forms for removed Basic auth method 2025-08-23 15:44:47 -05:00
Bogdan
8fc116cab6 Fixed: (AnimeTosho) Mapping of Subcategory as Parent 2025-08-23 15:44:47 -05:00
Bogdan
ef04db854e Fix various typos 2025-08-23 15:44:47 -05:00
Bogdan
bee3e61f53 Fixed: Redirect loop for removed basic auth method 2025-08-23 15:44:47 -05:00
Bogdan
47a7b15161 Fix fullscreen automation screenshots 2025-08-23 15:44:47 -05:00
Mark McDowall
11e38ca570 New: Add exception to SSL Certificate validation message
(cherry picked from commit d84c4500949a530fac92d73f7f2f8e8462b37244)
2025-08-23 15:44:47 -05:00
Servarr
cb0d0bcdbe Automated API Docs update 2025-08-23 15:44:47 -05:00
Mark McDowall
57b4a9eb7b New: Remove Basic Auth
(cherry picked from commit 0f9e063e2146812f6e963363eee70a524612f354)
2025-08-23 15:44:47 -05:00
Bogdan
3aed39dd52 Fixed: Validation for tags label 2025-08-23 15:44:47 -05:00
Bogdan
cd680a47b5 Upgrade StyleCop.Analyzers to Unstable 1.2.0.556 2025-08-23 15:44:47 -05:00
Bogdan
cbcefa41ab Bump Swashbuckle to 8.1.4 2025-08-23 15:44:47 -05:00
Bogdan
5716094758 Bump version to 2.0.0 2025-08-23 15:44:47 -05:00
Bogdan
d25f974778 New: Support removed for linux-x86 2025-08-23 15:44:47 -05:00
Bogdan
d48fd4b8eb New: Migrate appdata folder for .NET 8 on OSX 2025-08-23 15:44:47 -05:00
Bogdan
86fb118d84 New: Bump to .NET 8 2025-08-23 15:44:47 -05:00
Weblate
0d53609607 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Ilbebino <tommasobellandi08@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/it/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_CN/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
Bogdan
e2c6f2fc57 Bump version to 1.38.0 2025-08-23 15:44:47 -05:00
21 changed files with 972 additions and 124 deletions

View File

@@ -9,7 +9,7 @@ variables:
testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
majorVersion: '2.0.2'
majorVersion: '2.0.5'
minorVersion: $[counter('minorVersion', 1)]
prowlarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'

View File

@@ -33,6 +33,7 @@
.scroller {
flex: 1 1 auto;
min-height: 400px;
}
.filterRow {
@@ -57,29 +58,68 @@
font-weight: bold;
}
.filtersToggle {
display: none;
align-items: center;
margin-bottom: 10px;
padding: 8px 12px;
border: 1px solid var(--borderColor);
border-radius: 4px;
background: transparent;
color: var(--textColor);
font-size: 14px;
cursor: pointer;
gap: 8px;
}
.filtersToggle:hover {
background-color: var(--hoverBackgroundColor);
}
.filterRowCollapsed {
display: none !important;
}
@media only screen and (max-width: $breakpointSmall) {
.filterInput {
margin-bottom: 5px;
margin-bottom: 8px;
}
.alert {
.notice {
display: none;
}
.filtersToggle {
display: flex;
}
.filterRow {
display: block;
margin-bottom: 10px;
padding: 10px;
border: 1px solid var(--borderColor);
border-radius: 4px;
background-color: var(--cardBackgroundColor);
}
.filterContainer {
margin-right: 0;
margin-bottom: 5px;
margin-bottom: 8px;
}
.filterContainer:last-child {
margin-bottom: 0;
}
.scroller {
margin-right: -30px;
margin-bottom: -30px;
margin-left: -30px;
margin-right: -15px;
margin-bottom: -15px;
margin-left: -15px;
min-height: 300px;
}
.modalBody {
padding: 15px;
}
}

View File

@@ -7,6 +7,8 @@ interface CssExports {
'filterInput': string;
'filterLabel': string;
'filterRow': string;
'filterRowCollapsed': string;
'filtersToggle': string;
'indexers': string;
'modalBody': string;
'modalFooter': string;

View File

@@ -1,3 +1,4 @@
import classNames from 'classnames';
import { some } from 'lodash';
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
@@ -7,6 +8,7 @@ import Alert from 'Components/Alert';
import EnhancedSelectInput from 'Components/Form/EnhancedSelectInput';
import NewznabCategorySelectInputConnector from 'Components/Form/NewznabCategorySelectInputConnector';
import TextInput from 'Components/Form/TextInput';
import Icon from 'Components/Icon';
import Button from 'Components/Link/Button';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import ModalBody from 'Components/Modal/ModalBody';
@@ -16,7 +18,7 @@ import ModalHeader from 'Components/Modal/ModalHeader';
import Scroller from 'Components/Scroller/Scroller';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { kinds, scrollDirections } from 'Helpers/Props';
import { icons, kinds, scrollDirections } from 'Helpers/Props';
import Indexer, { IndexerCategory } from 'Indexer/Indexer';
import {
fetchIndexerSchema,
@@ -25,6 +27,7 @@ import {
} from 'Store/Actions/indexerActions';
import createAllIndexersSelector from 'Store/Selectors/createAllIndexersSelector';
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import { SortCallback } from 'typings/callbacks';
import sortByProp from 'Utilities/Array/sortByProp';
import getErrorMessage from 'Utilities/Object/getErrorMessage';
@@ -111,7 +114,8 @@ function createAddIndexersSelector() {
return createSelector(
createClientSideCollectionSelector('indexers.schema'),
createAllIndexersSelector(),
(indexers: IndexerAppState, allIndexers) => {
createDimensionsSelector(),
(indexers: IndexerAppState, allIndexers, dimensions) => {
const { isFetching, isPopulated, error, items, sortDirection, sortKey } =
indexers;
@@ -130,6 +134,7 @@ function createAddIndexersSelector() {
indexers: indexerList,
sortKey,
sortDirection,
isSmallScreen: dimensions.isSmallScreen,
};
}
);
@@ -143,8 +148,15 @@ interface AddIndexerModalContentProps {
function AddIndexerModalContent(props: AddIndexerModalContentProps) {
const { onSelectIndexer, onModalClose } = props;
const { isFetching, isPopulated, error, indexers, sortKey, sortDirection } =
useSelector(createAddIndexersSelector());
const {
isFetching,
isPopulated,
error,
indexers,
sortKey,
sortDirection,
isSmallScreen,
} = useSelector(createAddIndexersSelector());
const dispatch = useDispatch();
const [filter, setFilter] = useState('');
@@ -152,6 +164,7 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
const [filterLanguages, setFilterLanguages] = useState<string[]>([]);
const [filterPrivacyLevels, setFilterPrivacyLevels] = useState<string[]>([]);
const [filterCategories, setFilterCategories] = useState<number[]>([]);
const [isFiltersCollapsed, setIsFiltersCollapsed] = useState(isSmallScreen);
useEffect(
() => {
@@ -196,6 +209,10 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
[setFilterCategories]
);
const handleToggleFilters = useCallback(() => {
setIsFiltersCollapsed(!isFiltersCollapsed);
}, [isFiltersCollapsed]);
const onIndexerSelect = useCallback(
({
implementation,
@@ -322,7 +339,17 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
onChange={onFilterChange}
/>
<div className={styles.filterRow}>
<Button className={styles.filtersToggle} onPress={handleToggleFilters}>
<Icon name={isFiltersCollapsed ? icons.EXPAND : icons.COLLAPSE} />
{translate('Filters')}
</Button>
<div
className={classNames(
styles.filterRow,
isFiltersCollapsed && styles.filterRowCollapsed
)}
>
<div className={styles.filterContainer}>
<label className={styles.filterLabel}>
{translate('Protocol')}

View File

@@ -202,6 +202,7 @@ namespace NzbDrone.Common.Instrumentation
c.ForLogger("Microsoft.*").WriteToNil(LogLevel.Warn);
c.ForLogger("Microsoft.Hosting.Lifetime*").WriteToNil(LogLevel.Info);
c.ForLogger("Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware").WriteToNil(LogLevel.Fatal);
c.ForLogger("Prowlarr.Http.Authentication.ApiKeyAuthenticationHandler").WriteToNil(LogLevel.Info);
});
}

View File

@@ -0,0 +1,192 @@
using System;
using System.Linq;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Datastore.Migration;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Datastore.Migration
{
[TestFixture]
public class newznab_indexers_enable_redirectFixture : MigrationTest<newznab_indexers_enable_redirect>
{
[Test]
public void should_update_redirect_setting_to_true_if_false()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Indexers").Row(new
{
Id = 1,
Name = "Test",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example.com\",\"apiKey\":\"testapikey\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 1,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
});
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Newznab");
items.First().Redirect.Should().BeTrue(); // Validate Redirect is updated
}
[Test]
public void should_not_change_redirect_setting_if_already_true()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Indexers").Row(new
{
Id = 1,
Name = "Test",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example.com\",\"apiKey\":\"testapikey\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 2,
Added = System.DateTime.UtcNow,
Redirect = true,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
});
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Newznab");
items.First().Redirect.Should().BeTrue(); // Validate Redirect remains true
}
[Test]
public void should_not_affect_non_newznab_indexers()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Indexers").Row(new
{
Id = 1,
Name = "Test",
Implementation = "OtherIndexer",
Settings = "{\"baseUrl\":\"https://otherindexer.com\"}",
ConfigContract = "OtherIndexerSettings",
Enable = true,
Priority = 3,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
});
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("OtherIndexer");
items.First().Redirect.Should().BeFalse(); // Validate Redirect is not changed
}
[Test]
public void should_handle_multiple_indexers()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Indexers").Row(new
{
Id = 1,
Name = "Test 1",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example1.com\",\"apiKey\":\"testapikey1\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 4,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
c.Insert.IntoTable("Indexers").Row(new
{
Id = 2,
Name = "Test 2",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example2.com\",\"apiKey\":\"testapikey2\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 5,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
c.Insert.IntoTable("Indexers").Row(new
{
Id = 3,
Name = "Test 3",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example3.com\",\"apiKey\":\"testapikey3\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 6,
Added = System.DateTime.UtcNow,
Redirect = true,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
c.Insert.IntoTable("Indexers").Row(new
{
Id = 4,
Name = "Test 4",
Implementation = "OtherIndexer",
Settings = "{\"baseUrl\":\"https://otherindexer.com\"}",
ConfigContract = "OtherIndexerSettings",
Enable = true,
Priority = 7,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
});
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
items.Should().HaveCount(4);
items.First(i => i.Id == 1).Redirect.Should().BeTrue(); // Validate Redirect is updated
items.First(i => i.Id == 2).Redirect.Should().BeTrue(); // Validate Redirect is updated
items.First(i => i.Id == 3).Redirect.Should().BeTrue(); // Validate Redirect remains true
items.First(i => i.Id == 4).Redirect.Should().BeFalse(); // Validate Redirect is not changed
}
}
public class IndexerDefinition043
{
public int Id { get; set; }
public string Name { get; set; }
public string Implementation { get; set; }
public string Settings { get; set; }
public string ConfigContract { get; set; }
public bool Enable { get; set; }
public int Priority { get; set; }
public DateTime Added { get; set; }
public bool Redirect { get; set; }
public int AppProfileId { get; set; }
public string Tags { get; set; }
public int DownloadClientId { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
using System.Data;
using Dapper;
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(043)]
public class newznab_indexers_enable_redirect : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Execute.WithConnection(UpdateNewznabRedirectSetting);
}
private void UpdateNewznabRedirectSetting(IDbConnection conn, IDbTransaction tran)
{
var updateSql = "UPDATE \"Indexers\" SET \"Redirect\" = @Redirect WHERE \"Implementation\" = 'Newznab' AND \"Redirect\" = false";
conn.Execute(updateSql, new { Redirect = true }, transaction: tran);
}
}
}

View File

@@ -1749,7 +1749,7 @@ namespace NzbDrone.Core.Indexers.Definitions
// rutracker movies titles look like: russian name / english name (russian director / english director) other stuff
// Ирландец / The Irishman (Мартин Скорсезе / Martin Scorsese) [2019, США, криминал, драма, биография, WEB-DL 1080p] Dub (Пифагор) + MVO (Jaskier) + AVO (Юрий Сербин) + Sub Rus, Eng + Original Eng
// this part should be removed: (Мартин Скорсезе / Martin Scorsese)
title = Regex.Replace(title, @"(\([\p{IsCyrillic}\W]+)\s/\s(.+?)\)", string.Empty, RegexOptions.Compiled | RegexOptions.IgnoreCase);
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(@"((?:\dx\s)?(?:[A-Z])?VO\s\(.+?\))");

View File

@@ -448,11 +448,11 @@ namespace NzbDrone.Core.Indexers.Definitions
private readonly Regex _tvTitleMultipleSeasonsRegex = new(@"(?:Сезон|Seasons?)\s*[:]*\s+(\d+-\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleUkrSeasonEpisodeOfRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleUkrSeasonEpisodeRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleUkrSeasonEpisodeOfRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleUkrSeasonEpisodeRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleUkrSeasonRegex = new(@"Сезон\s*[:]*\s+(\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleUkrEpisodeOfRegex = new(@"(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleUkrEpisodeRegex = new(@"(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleUkrEpisodeOfRegex = new(@"(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleUkrEpisodeRegex = new(@"(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleEngSeasonEpisodeOfRegex = new(@"Season\s*[:]*\s+(\d+).+(?:Episodes?)+\s*[:]*\s+(\d+(?:-\d+)?)\s*of\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly Regex _tvTitleEngSeasonEpisodeRegex = new(@"Season\s*[:]*\s+(\d+).+(?:Episodes?)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
@@ -506,7 +506,7 @@ namespace NzbDrone.Core.Indexers.Definitions
title = Regex.Replace(title, @"[\[\(]\s*[\)\]]", "", RegexOptions.Compiled);
title = title.Trim(' ', '&', ',', '.', '!', '?', '+', '-', '_', '|', '/', '\\', ':');
title = title.Trim(' ', '&', ',', '.', '!', '?', '+', '-', '_', '|', '/', '\\', ':', ';', 'ʼ', '`');
// replace multiple spaces with a single space
title = Regex.Replace(title, @"\s+", " ");
@@ -521,7 +521,7 @@ namespace NzbDrone.Core.Indexers.Definitions
private static string MoveFirstTagsToEndOfReleaseTitle(string input)
{
var output = input;
var output = input.Trim(' ', '&', ',', '.', '!', '?', '+', '-', '_', '|', '/', '\\', ':', ';', 'ʼ', '`');
foreach (var findTagsRegex in FindTagsInTitlesRegexList)
{
var expectedIndex = 0;

View File

@@ -121,53 +121,49 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
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(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(154, NewznabStandardCategory.AudioAudiobook, "Books Audiobooks");
caps.Categories.AddCategoryMapping(155, NewznabStandardCategory.Books, "Books eBooks & Magazines");
caps.Categories.AddCategoryMapping(68, NewznabStandardCategory.MoviesOther, "Cams/TS");
caps.Categories.AddCategoryMapping(140, NewznabStandardCategory.TVDocumentary, "Documentary");
caps.Categories.AddCategoryMapping(10, NewznabStandardCategory.MoviesDVD, "DVDR");
caps.Categories.AddCategoryMapping(109, NewznabStandardCategory.MoviesBluRay, "Bluray Disc");
caps.Categories.AddCategoryMapping(109, NewznabStandardCategory.MoviesBluRay, "DVDR Bluray Disc");
caps.Categories.AddCategoryMapping(131, NewznabStandardCategory.TVSport, "Fighting");
caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.TVSport, "Fighting/Boxing");
caps.Categories.AddCategoryMapping(133, NewznabStandardCategory.TVSport, "Fighting/MMA");
caps.Categories.AddCategoryMapping(132, NewznabStandardCategory.TVSport, "Fighting/Wrestling");
caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.TVSport, "Fighting Boxing");
caps.Categories.AddCategoryMapping(133, NewznabStandardCategory.TVSport, "Fighting MMA");
caps.Categories.AddCategoryMapping(132, NewznabStandardCategory.TVSport, "Fighting Wrestling");
caps.Categories.AddCategoryMapping(72, NewznabStandardCategory.MoviesForeign, "Foreign");
caps.Categories.AddCategoryMapping(116, NewznabStandardCategory.TVForeign, "Foreign Boxsets");
caps.Categories.AddCategoryMapping(114, NewznabStandardCategory.MoviesForeign, "Foreign Movies");
caps.Categories.AddCategoryMapping(115, NewznabStandardCategory.TVForeign, "Foreign TV");
caps.Categories.AddCategoryMapping(103, NewznabStandardCategory.ConsoleOther, "Games Console");
caps.Categories.AddCategoryMapping(105, NewznabStandardCategory.ConsoleOther, "Games Console/Nintendo");
caps.Categories.AddCategoryMapping(104, NewznabStandardCategory.ConsolePS4, "Games Console/Playstation");
caps.Categories.AddCategoryMapping(106, NewznabStandardCategory.ConsoleXBox, "Games Console/XBOX");
caps.Categories.AddCategoryMapping(105, NewznabStandardCategory.ConsoleOther, "Games Console Nintendo");
caps.Categories.AddCategoryMapping(104, NewznabStandardCategory.ConsolePS4, "Games Console Playstation");
caps.Categories.AddCategoryMapping(106, NewznabStandardCategory.ConsoleXBox, "Games Console XBOX");
caps.Categories.AddCategoryMapping(6, NewznabStandardCategory.PCGames, "Games PC");
caps.Categories.AddCategoryMapping(108, NewznabStandardCategory.PC, "Games PC/Linux");
caps.Categories.AddCategoryMapping(107, NewznabStandardCategory.PCMac, "Games PC/Mac");
caps.Categories.AddCategoryMapping(108, NewznabStandardCategory.PC, "Games PC Linux");
caps.Categories.AddCategoryMapping(107, NewznabStandardCategory.PCMac, "Games PC Mac");
caps.Categories.AddCategoryMapping(11, NewznabStandardCategory.Movies, "Movie Boxsets");
caps.Categories.AddCategoryMapping(118, NewznabStandardCategory.MoviesUHD, "Movie Boxsets/Boxset 4K");
caps.Categories.AddCategoryMapping(143, NewznabStandardCategory.MoviesHD, "Movie Boxsets/Boxset HD");
caps.Categories.AddCategoryMapping(119, NewznabStandardCategory.MoviesHD, "Movie Boxsets/Boxset HEVC");
caps.Categories.AddCategoryMapping(144, NewznabStandardCategory.MoviesSD, "Movie Boxsets/Boxset SD");
caps.Categories.AddCategoryMapping(118, NewznabStandardCategory.MoviesUHD, "Movie Boxsets 4K");
caps.Categories.AddCategoryMapping(162, NewznabStandardCategory.MoviesHD, "Movie Boxsets AV1");
caps.Categories.AddCategoryMapping(143, NewznabStandardCategory.MoviesHD, "Movie Boxsets HD");
caps.Categories.AddCategoryMapping(119, NewznabStandardCategory.MoviesHD, "Movie Boxsets HEVC");
caps.Categories.AddCategoryMapping(144, NewznabStandardCategory.MoviesSD, "Movie Boxsets SD");
caps.Categories.AddCategoryMapping(12, NewznabStandardCategory.Movies, "Movies");
caps.Categories.AddCategoryMapping(117, NewznabStandardCategory.MoviesUHD, "Movies 4K");
caps.Categories.AddCategoryMapping(163, NewznabStandardCategory.MoviesHD, "Movies AV1");
caps.Categories.AddCategoryMapping(145, NewznabStandardCategory.MoviesHD, "Movies HD");
caps.Categories.AddCategoryMapping(100, NewznabStandardCategory.MoviesHD, "Movies HEVC");
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(135, NewznabStandardCategory.AudioLossless, "Music FLAC");
caps.Categories.AddCategoryMapping(151, NewznabStandardCategory.Audio, "Music Karaoke");
caps.Categories.AddCategoryMapping(136, NewznabStandardCategory.Audio, "Music Boxset");
caps.Categories.AddCategoryMapping(148, NewznabStandardCategory.AudioVideo, "Music Videos");
caps.Categories.AddCategoryMapping(9, NewznabStandardCategory.Other, "Other");
caps.Categories.AddCategoryMapping(125, NewznabStandardCategory.Other, "Other/Pictures");
caps.Categories.AddCategoryMapping(54, NewznabStandardCategory.TVOther, "Soaps");
caps.Categories.AddCategoryMapping(83, NewznabStandardCategory.TVOther, "Specials");
caps.Categories.AddCategoryMapping(125, NewznabStandardCategory.Other, "Other Pictures");
caps.Categories.AddCategoryMapping(54, NewznabStandardCategory.TVOther, "Other Soaps");
caps.Categories.AddCategoryMapping(83, NewznabStandardCategory.TVOther, "Other Specials");
caps.Categories.AddCategoryMapping(139, NewznabStandardCategory.TV, "TOTM (Freeleech)");
caps.Categories.AddCategoryMapping(138, NewznabStandardCategory.TV, "TOTW (x2 upload)");
caps.Categories.AddCategoryMapping(139, NewznabStandardCategory.Movies, "TOTM (Freeleech)");
@@ -177,16 +173,18 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
caps.Categories.AddCategoryMapping(86, NewznabStandardCategory.TVSport, "Sports/MotorSports");
caps.Categories.AddCategoryMapping(89, NewznabStandardCategory.TVSport, "Sports/Olympics");
caps.Categories.AddCategoryMapping(126, NewznabStandardCategory.TV, "TV");
caps.Categories.AddCategoryMapping(149, NewznabStandardCategory.TV, "TV Specials");
caps.Categories.AddCategoryMapping(127, NewznabStandardCategory.TVUHD, "TV 4K");
caps.Categories.AddCategoryMapping(164, NewznabStandardCategory.TVHD, "TV AV1");
caps.Categories.AddCategoryMapping(129, NewznabStandardCategory.TVHD, "TV HD");
caps.Categories.AddCategoryMapping(130, NewznabStandardCategory.TVHD, "TV HEVC");
caps.Categories.AddCategoryMapping(128, NewznabStandardCategory.TVSD, "TV SD");
caps.Categories.AddCategoryMapping(149, NewznabStandardCategory.TV, "TV Specials");
caps.Categories.AddCategoryMapping(21, NewznabStandardCategory.TVSD, "TV Boxsets");
caps.Categories.AddCategoryMapping(120, NewznabStandardCategory.TVUHD, "Boxset TV 4K");
caps.Categories.AddCategoryMapping(76, NewznabStandardCategory.TVHD, "Boxset TV HD");
caps.Categories.AddCategoryMapping(97, NewznabStandardCategory.TVHD, "Boxset TV HEVC");
caps.Categories.AddCategoryMapping(147, NewznabStandardCategory.TVSD, "Boxset TV SD");
caps.Categories.AddCategoryMapping(120, NewznabStandardCategory.TVUHD, "TV Boxset 4K");
caps.Categories.AddCategoryMapping(165, NewznabStandardCategory.TVUHD, "TV Boxset AV1");
caps.Categories.AddCategoryMapping(76, NewznabStandardCategory.TVHD, "TV Boxset HD");
caps.Categories.AddCategoryMapping(97, NewznabStandardCategory.TVHD, "TV Boxset HEVC");
caps.Categories.AddCategoryMapping(147, NewznabStandardCategory.TVSD, "TV Boxset SD");
return caps;
}

View File

@@ -503,14 +503,14 @@ namespace NzbDrone.Core.Indexers
catch (IndexerAuthException ex)
{
_indexerStatusService.RecordFailure(Definition.Id);
_logger.Warn(ex, "Invalid Credentials for {0} {1}", this, url);
_logger.Warn(ex, "Invalid Credentials for {0} [{1}]", this, url);
}
catch (CloudFlareProtectionException ex)
{
result.Queries.Add(new IndexerQueryResult { Response = ex.Response });
_indexerStatusService.RecordFailure(Definition.Id);
ex.WithData("FeedUrl", url);
_logger.Error(ex, "Cloudflare protection detected for {0}, Flaresolverr may be required.", this);
_logger.Error(ex, "Cloudflare protection detected for [{0}], Flaresolverr may be required.", this);
}
catch (IndexerException ex)
{
@@ -521,18 +521,18 @@ namespace NzbDrone.Core.Indexers
catch (HttpRequestException ex)
{
_indexerStatusService.RecordFailure(Definition.Id);
_logger.Warn(ex, "Unable to connect to indexer, please check your DNS settings and ensure IPv6 is working or disabled. {0}", url);
_logger.Warn(ex, "Unable to connect to indexer [{0}]. This is typically caused by DNS/SSL issues. Check DNS settings, ensure IPv6 is working or disabled, and consider using different DNS servers or a VPN. See: 'https://wiki.servarr.com/prowlarr/troubleshooting#dns-ssl-connection-issues'", url);
}
catch (TaskCanceledException ex)
{
_indexerStatusService.RecordFailure(Definition.Id);
_logger.Warn(ex, "Unable to connect to indexer, possibly due to a timeout. {0}", url);
_logger.Warn(ex, "Unable to connect to indexer, possibly due to a timeout. [{0}]", url);
}
catch (Exception ex)
{
_indexerStatusService.RecordFailure(Definition.Id);
ex.WithData("FeedUrl", url);
_logger.Error(ex, "An error occurred while processing indexer feed. {0}", url);
_logger.Error(ex, "An error occurred while processing indexer feed. [{0}]", url);
}
result.Releases = CleanupReleases(releases, searchCriteria);
@@ -816,7 +816,7 @@ namespace NzbDrone.Core.Indexers
{
_logger.Warn(ex, "Unable to connect to indexer");
return new NzbDroneValidationFailure(string.Empty, "Unable to connect to indexer, please check your DNS settings and ensure IPv6 is working or disabled. " + ex.Message)
return new NzbDroneValidationFailure(string.Empty, "Unable to connect to indexer. This is typically caused by DNS/SSL issues. Check DNS settings, ensure IPv6 is working or disabled, consider using different DNS servers, or try a VPN/proxy if needed. See: 'https://wiki.servarr.com/prowlarr/troubleshooting#dns-ssl-connection-issues' " + ex.Message)
{
DetailedDescription = ex.InnerException?.Message
};

View File

@@ -668,7 +668,7 @@
"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 NzbGetin version 16.0.",

View File

@@ -785,7 +785,7 @@
"Logout": "Se déconnecter",
"NoEventsFound": "Aucun événement trouvé",
"RestartReloadNote": "Remarque : {appName} redémarrera et rechargera automatiquement l'interface utilisateur pendant le processus de restauration.",
"TheLogLevelDefault": "Le niveau de journalisation est par défaut à « Information » et peut être modifié dans les [paramètres généraux](/settings/general)",
"TheLogLevelDefault": "Le niveau de journalisation est par défaut à «Debug» et peut être modifié dans les [paramètres généraux](/settings/general)",
"UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName},",
"UpdaterLogFiles": "Journaux du programme de mise à jour",
"WouldYouLikeToRestoreBackup": "Souhaitez-vous restaurer la sauvegarde « {name} » ?",

View File

@@ -88,13 +88,13 @@
"Delete": "Verwijder",
"DeleteAppProfile": "App-profiel verwijderen",
"DeleteApplication": "Applicatie verwijderen",
"DeleteApplicationMessageText": "Weet u zeker dat u de applicatie '{0}' wilt verwijderen?",
"DeleteApplicationMessageText": "Weet u zeker dat u de applicatie '{name}' wilt verwijderen?",
"DeleteBackup": "Verwijder Backup",
"DeleteBackupMessageText": "Bent u zeker dat u de veiligheidskopie '{name}' wilt verwijderen?",
"DeleteDownloadClient": "Verwijder Downloader",
"DeleteDownloadClientMessageText": "Bent u zeker dat u de downloader '{name}' wilt verwijderen?",
"DeleteIndexerProxy": "Indexeerproxy verwijderen",
"DeleteIndexerProxyMessageText": "Weet u zeker dat u de proxy '{0}' wilt verwijderen?",
"DeleteIndexerProxyMessageText": "Weet u zeker dat u de proxy '{name}' wilt verwijderen?",
"DeleteNotification": "Verwijder Notificatie",
"DeleteNotificationMessageText": "Weet je zeker dat je de notificatie {name} wil verwijderen?",
"DeleteTag": "Verwijder Tag",
@@ -123,7 +123,7 @@
"EnableInteractiveSearch": "Schakel interactief zoeken in",
"EnableInteractiveSearchHelpText": "Zal worden gebruikt wanneer interactief zoeken wordt gebruikt",
"EnableRss": "RSS inschakelen",
"EnableRssHelpText": "Rss-feed voor Indexer inschakelen",
"EnableRssHelpText": "RSS-feed voor Indexeerder inschakelen",
"EnableSSL": "Activeer SSL",
"EnableSslHelpText": " Vereist herstart als administrator om in werking te treden",
"Enabled": "Ingeschakeld",
@@ -162,7 +162,7 @@
"HomePage": "Startpagina",
"Host": "Host",
"Hostname": "Hostnaam",
"Id": "Id",
"Id": "ID",
"IgnoredAddresses": "Genegeerde Adressen",
"IllRestartLater": "Ik zal later herstarten",
"IncludeHealthWarningsHelpText": "Voeg Gezondheidswaarschuwingen Toe",
@@ -180,7 +180,7 @@
"IndexerProxyStatusAllUnavailableHealthCheckMessage": "Alle proxy's zijn niet beschikbaar vanwege storingen",
"IndexerProxyStatusUnavailableHealthCheckMessage": "Proxy's niet beschikbaar vanwege storingen: {indexerProxyNames}",
"IndexerQuery": "Indexeer zoekopdracht",
"IndexerRss": "Indexeer RSS",
"IndexerRss": "Indexeerder RSS",
"IndexerSettingsSummary": "Configureer verschillende globale Indexer-instellingen, waaronder proxy's.",
"IndexerStatusAllUnavailableHealthCheckMessage": "Alle indexeerders zijn onbeschikbaar wegens fouten",
"IndexerStatusUnavailableHealthCheckMessage": "Indexeerders onbeschikbaar wegens fouten: {indexerNames}",
@@ -426,15 +426,15 @@
"ApplyTagsHelpTextRemove": "Verwijderen: Verwijder de ingevoerde tags",
"ApplyTagsHelpTextReplace": "Vervangen: Vervang de tags met de ingevoerde tags (vul geen tags in om alle tags te wissen)",
"CountIndexersSelected": "{count} Indexer(s) Geselecteerd",
"DeleteSelectedApplicationsMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
"DeleteSelectedApplicationsMessageText": "Bent u zeker dat u de indexeerder '{count}' wilt verwijderen?",
"DeleteSelectedDownloadClients": "Verwijder Downloader",
"DeleteSelectedDownloadClientsMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
"DeleteSelectedDownloadClientsMessageText": "Bent u zeker dat u de indexeerder '{count}' wilt verwijderen?",
"Season": "Seizoen",
"SelectIndexers": "Zoek indexeerders",
"More": "Meer",
"Theme": "Thema",
"Track": "Spoor",
"DeleteSelectedIndexersMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
"DeleteSelectedIndexersMessageText": "Bent u zeker dat u de indexeerder '{count}' wilt verwijderen?",
"DownloadClientPriorityHelpText": "Geef prioriteit aan meerdere downloaders. Round-Robin wordt gebruikt voor downloaders met dezelfde prioriteit.",
"Genre": "Genres",
"Year": "Jaar",
@@ -512,5 +512,155 @@
"Download": "Downloaden",
"InstallLatest": "Installeer Nieuwste Versie",
"CurrentlyInstalled": "Momenteel Geïnstalleerd",
"Mixed": "Opgelost"
"Mixed": "Opgelost",
"AverageQueries": "Gemiddelde Queries",
"AverageGrabs": "Gemiddeld aantal downloads",
"AverageResponseTimesMs": "Gemiddelde Indexer Responsetijden (ms)",
"Book": "Boek",
"CountIndexersAvailable": "{count} indexer(s) beschikbaar",
"Donate": "Doneer",
"DownloadClientFreeboxSettingsHostHelpText": "Hostnaam of IP-adres van de Freebox, standaard '{url}' (werkt alleen als je op hetzelfde netwerk zit)",
"DownloadClientFreeboxSettingsPortHelpText": "Poort die wordt gebruikt om toegang te krijgen tot de Freebox-interface, standaard '{port}'",
"DefaultCategory": "Standaardcategorie",
"DownloadClientRTorrentSettingsUrlPathHelpText": "Pad naar het XMLRPC-eindpunt, zie {url}. Dit is meestal RPC2 of [pad naar ruTorrent]{url2} bij gebruik van ruTorrent.",
"DownloadClientSettingsAddPaused": "Toevoegen gepauzeerd",
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Doorzoek freeleech releases",
"IndexerId": "Indexeerder ID",
"EditCategory": "Categorie bewerken",
"ApplicationsLoadError": "Kan de applicatielijst niet laden",
"DownloadClientAriaSettingsDirectoryHelpText": "Optionele locatie om downloads op te slaan, leeg laten om de standaardlocatie van Aria2 te gebruiken",
"DownloadClientDelugeSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de Deluge JSON-URL, zie {url}",
"FailedToFetchSettings": "Instellingen ophalen mislukt",
"HistoryCleanup": "Geschiedenis opschonen",
"Implementation": "Implementatie",
"IndexerHDBitsSettingsOrigins": "Herkomst",
"IndexerMTeamTpSettingsApiKeyHelpText": "API-sleutel van de site (te vinden in Gebruikerspaneel => Beveiliging => Laboratorium)",
"IndexerFileListSettingsFreeleechOnlyHelpText": "Alleen freeleech-releases doorzoeken",
"Default": "Standaard",
"DownloadClientFloodSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de Flood API, zoals {url}",
"DownloadClientRTorrentSettingsAddStoppedHelpText": "Als je dit inschakelt, worden torrents en magnet-links in rTorrent in een gestopte staat toegevoegd. Dit kan magnet-bestanden laten mislukken.",
"IndexerNoDefinitionCheckHealthCheckMessage": "Indexeerders hebben geen definitie en zullen niet werken: {indexerNames}. Verwijder ze alstublieft en voeg ze opnieuw toe aan {appName}.",
"AppsMinimumSeedersHelpText": "Minimum aantal vereiste seeders door de applicaties voordat de indexer iets ophaalt. Leeg laten gebruikt de standaardwaarde van het synchronisatieprofiel",
"Author": "Auteur",
"BookSearch": "Boek zoeken",
"IndexerSettingsCookieHelpText": "Site Cookie",
"DownloadClientTransmissionSettingsDirectoryHelpText": "Optionele locatie om downloads op te slaan, laat leeg om de standaardlocatie van Transmission te gebruiken",
"DeleteSelectedIndexers": "Verwijder geselecteerde indexeerders",
"Destination": "Bestemming",
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Optionele gedeelde map om downloads in te plaatsen, leeg laten om de standaardlocatie van Download Station te gebruiken",
"DownloadClientFloodSettingsAdditionalTags": "Additionele Tags",
"DownloadClientFreeboxSettingsApiUrl": "API URL",
"DownloadClientFreeboxSettingsApiUrlHelpText": "Stel de basis-URL van de Freebox API in met API-versie, bijvoorbeeld '{url}', standaard is '{defaultApiUrl}'",
"DownloadClientFreeboxSettingsAppId": "App ID",
"DownloadClientFreeboxSettingsAppToken": "App Token",
"DownloadClientNzbgetSettingsAddPausedHelpText": "Deze optie vereist minimaal NzbGet versie 16.0",
"DownloadClientPneumaticSettingsNzbFolder": "Nzb map",
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Deze map moet bereikbaar zijn vanuit XBMC",
"DownloadClientQbittorrentSettingsContentLayout": "Inhoudsindeling",
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Download eerste en laatste stukjes eerst (qBittorrent 4.1.0+)",
"DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Download in opeenvolgende volgorde (qBittorrent 4.1.0+)",
"DownloadClientRTorrentSettingsAddStopped": "Toevoegen gestopt",
"DownloadClientRTorrentSettingsDirectoryHelpText": "Optionele locatie om downloads op te slaan, leeg laten om de standaardlocatie van rTorrent te gebruiken",
"DownloadClientRTorrentSettingsUrlPath": "Url pad",
"ElapsedTime": "Verstreken tijd",
"External": "Extern",
"FailedToFetchUpdates": "Updates ophalen mislukt",
"FoundCountReleases": "{itemCount} releases gevonden",
"IndexerAlphaRatioSettingsExcludeSceneHelpText": "SCENE-releases uitsluiten van resultaten",
"IndexerBeyondHDSettingsApiKeyHelpText": "API-sleutel van de site (te vinden onder Mijn Beveiliging => API-sleutel)",
"IndexerBeyondHDSettingsLimitedOnly": "Alleen beperkt",
"IndexerBeyondHDSettingsSearchTypesHelpText": "Selecteer de soorten releases waarin je geïnteresseerd bent. Als er geen selectie is gemaakt, worden alle opties gebruikt.",
"IndexerFileListSettingsPasskeyHelpText": "Site Passkey (Dit is de alfanumerieke reeks in de tracker-URL die in je downloadclient wordt weergegeven)",
"IndexerGazelleGamesSettingsSearchGroupNames": "Zoek groepnamen",
"IndexerIPTorrentsSettingsCookieUserAgent": "Cookie User-Agent",
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Doorzoek alleen freeleech releases",
"IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Doorzoek alleen freeleech releases",
"IndexerNewznabSettingsApiKeyHelpText": "Site API-sleutel",
"IndexerRedactedSettingsApiKeyHelpText": "API-sleutel van de site (te vinden onder Instellingen => Toegangsinstellingen)",
"IndexerSettingsFreeleechOnly": "Alleen Freeleech",
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Eerste en laatste eerst",
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de {clientName} RPC-URL, bijvoorbeeld {url}, standaard is '{defaultUrl}'",
"AreYouSureYouWantToDeleteCategory": "Weet je zeker dat je de gekoppelde categorie wilt verwijderen?",
"DownloadClientCategory": "Downloadclientcategorie",
"DeleteSelectedIndexer": "Verwijder geselecteerde indexeerder",
"EditSelectedDownloadClients": "Geselecteerde downloadclients bewerken",
"IndexerDownloadClientHelpText": "Geef aan welke downloadclient wordt gebruikt voor downloads die binnen {appName} van deze indexer worden opgehaald",
"GoToApplication": "Ga naar applicatie",
"IndexerName": "Indexeerdernaam",
"AreYouSureYouWantToDeleteIndexer": "Weet je zeker dat je '{name}' uit {appName} wilt verwijderen?",
"AuthQueries": "Autorisatiequeries",
"IndexerAlreadySetup": "Tenminste één instantie van de indexeerder is al ingesteld",
"IndexerCategories": "Indexeerdercategorieën",
"ApplicationTagsHelpText": "Sync indexers met deze applicatie die één of meer overeenkomende tags hebben. Als er hier geen tags worden opgegeven, worden er geen indexers van synchronisatie uitgesloten op basis van hun tags.",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Of de ingestelde inhoudsindeling van qBittorrent gebruikt moet worden, de originele indeling van de torrent, of altijd een submap moet worden aangemaakt (qBittorrent 4.3.2+)",
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Begintoestand voor torrents die aan qBittorrent worden toegevoegd. Let op: Gedwongen torrents houden zich niet aan seeding-beperkingen",
"DownloadClientQbittorrentSettingsSequentialOrder": "Opeenvolgende volgorde",
"DownloadClientSettingsDestinationHelpText": "Geef handmatig de downloadbestemming op, laat leeg om de standaardlocatie te gebruiken",
"DownloadClientSettingsInitialState": "Initiële staat",
"DownloadClientSettingsUseSslHelpText": "Gebruik een beveiligde verbinding bij het verbinden met {clientName}",
"EnabledRedirected": "Ingeschakeld, Omgeleid",
"HistoryDetails": "Geschiedenis details",
"IndexerHDBitsSettingsUsernameHelpText": "Site Gebruikersnaam",
"IndexerDetails": "Indexeerder details",
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Als een torrent wordt geblokkeerd op basis van de hash, kan het zijn dat deze niet correct wordt geweigerd tijdens RSS/Search bij sommige indexers. Als je deze optie inschakelt, wordt de torrent alsnog geweigerd nadat hij is opgehaald, maar voordat hij naar de client wordt gestuurd.",
"BasicSearch": "Basiszoekopdracht",
"DefaultNameCopiedProfile": "{name} - Kopie",
"DeleteClientCategory": "Categorie van downloadclient verwijderen",
"DisabledUntil": "Uitgeschakeld tot",
"DownloadClientFreeboxSettingsAppIdHelpText": "App ID die wordt gegeven bij het aanmaken van toegang tot de Freebox API (bijv. 'app_id')",
"DownloadClientPneumaticSettingsStrmFolder": "Strm Map",
"EditSelectedIndexers": "Geselecteerde indexeerders bewerken",
"GrabTitle": "Grijp Titel",
"IndexerHDBitsSettingsMediumsHelpText": "Als niet gespecificeerd, worden alle opties gebruikt.",
"IndexerHDBitsSettingsUseFilenames": "Gebruik bestandsnamen",
"IndexerHDBitsSettingsPasskeyHelpText": "Passkey vanuit gebruikerdetails",
"ClickToChangeQueryOptions": "Klik om zoekopties te wijzigen",
"DownloadClientFreeboxSettingsAppTokenHelpText": "App token dat wordt verkregen bij het aanmaken van toegang tot de Freebox API (bijv. 'app_token')",
"DownloadClientSettingsInitialStateHelpText": "Begintoestand voor torrents die aan {clientName} worden toegevoegd",
"DownloadClientSettingsPriorityItemHelpText": "Prioriteit om te gebruiken bij het ophalen van items",
"IncludeManualGrabsHelpText": "Handmatige downloads uitgevoerd binnen {appName} meenemen",
"IndexerDisabled": "Indexeerder Uitgeschakeld",
"IndexerDownloadClientHealthCheckMessage": "Indexeerders met ongeldige downloadclients: {indexerNames}.",
"IndexerFailureRate": "Faalpercentage van de indexeerder",
"IndexerFileListSettingsUsernameHelpText": "Site Gebruikersnaam",
"IndexerHDBitsSettingsUseFilenamesHelpText": "Vink deze optie aan als je torrentbestandsnamen als releasetitels wilt gebruiken",
"IndexerHistoryLoadError": "Fout bij het laden van de indexeerder-geschiedenis",
"IndexerInfo": "Indexeerder info",
"IndexerAlphaRatioSettingsExcludeScene": "SCENE uitsluiten",
"IndexerBeyondHDSettingsSearchTypes": "Zoek types",
"IndexerGazelleGamesSettingsApiKeyHelpText": "API-sleutel van de site (te vinden onder Instellingen => Toegangsinstellingen)",
"IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Moet over Gebruikers- en Torrents-machtigingen beschikken",
"IndexerHDBitsSettingsCodecsHelpText": "Als niet gespecificeerd, worden alle opties gebruikt.",
"IndexerIPTorrentsSettingsCookieUserAgentHelpText": "User-Agent die gekoppeld is aan de cookie gebruikt vanuit de browser",
"IndexerNewznabSettingsAdditionalParametersHelpText": "Aanvullende Newznab-parameters",
"IndexerNzbIndexSettingsApiKeyHelpText": "Site API-sleutel",
"IndexerPassThePopcornSettingsApiKeyHelpText": "Site API-sleutel",
"IndexerOrpheusSettingsApiKeyHelpText": "API-sleutel van de site (te vinden onder Instellingen => Toegangsinstellingen)",
"IndexerSettingsBaseUrlHelpText": "Selecteer welke basis-URL {appName} gebruikt voor verzoeken aan de site",
"IndexerSettingsApiPathHelpText": "Pad naar de API, meestal {url}",
"IndexerSettingsApiUser": "API Gebruiker",
"IndexerSettingsBaseUrl": "Basisurl",
"IndexerSettingsCookie": "Cookie",
"IndexerSettingsAdditionalParameters": "Aanvullende parameters",
"IndexerSettingsApiPath": "API pad",
"IndexerAvistazSettingsPidHelpText": "PID van de pagina Mijn Account of Mijn Profiel",
"IndexerAvistazSettingsUsernameHelpText": "Site Gebruikersnaam",
"IndexerAvistazSettingsUsernameHelpTextWarning": "Alleen leden met de rang 'member' of hoger kunnen de API van deze indexeerder gebruiken.",
"IndexerBeyondHDSettingsRssKeyHelpText": "RSS-sleutel van de site (te vinden onder Mijn Beveiliging => RSS-sleutel)",
"IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Zoek releases op groepsnaam",
"IndexerAvistazSettingsPasswordHelpText": "Site Wachtwoord",
"IndexerHDBitsSettingsOriginsHelpText": "Als niet gespecificeerd, worden alle opties gebruikt.",
"ApplicationTagsHelpTextWarning": "Gebruik tags met voorzichtigheid, ze kunnen onbedoelde effecten hebben. Een app met een tag zal alleen synchroniseren met indexers die dezelfde tag hebben.",
"DownloadClientQbittorrentSettingsUseSslHelpText": "Gebruik een beveiligde verbinding. Zie Opties -> Web UI -> 'Gebruik HTTPS in plaats van HTTP' in qBittorrent.",
"DeleteSelectedApplications": "Verwijder geselecteerde applicaties",
"DownloadClientUTorrentProviderMessage": "uTorrent heeft een geschiedenis van het bevatten van cryptominers, malware en advertenties. We raden je sterk aan om een andere client te kiezen.",
"HealthMessagesInfoBox": "Je kunt meer informatie over de oorzaak van deze gezondheidscontroleberichten vinden door op de wiki-link (boekicoon) aan het einde van de rij te klikken, of door je [logboeken]({link}) te bekijken. Als je moeite hebt met het interpreteren van deze berichten, kun je contact opnemen met onze ondersteuning via de onderstaande links",
"IndexerNebulanceSettingsApiKeyHelpText": "API-sleutel te vinden onder Gebruikersinstellingen > API-sleutels. De sleutel moet de machtigingen Lijst en Download hebben",
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Voegt eigenschappen van media toe als tags. Hints zijn voorbeelden.",
"DownloadClientPneumaticSettingsStrmFolderHelpText": ".strm-bestanden in deze map worden geïmporteerd door Drone",
"DownloadClientSettingsDefaultCategoryHelpText": "Standaard fallback-categorie als er geen gekoppelde categorie bestaat voor een release. Het toevoegen van een categorie specifiek voor {appName} voorkomt conflicten met niet-gerelateerde downloads van andere applicaties dan {appName}. Het gebruik van een categorie is optioneel, maar wordt sterk aanbevolen.",
"DownloadClientFloodSettingsTagsHelpText": "Initiële tags van een download. Om herkend te worden, moet een download alle initiële tags hebben. Dit voorkomt conflicten met niet-gerelateerde downloads.",
"IndexerNewznabSettingsVipExpirationHelpText": "Voer de datum in (jjjj-mm-dd) voor VIP-vervaldatum of laat leeg. {appName} zal 1 week voor het verstrijken van de VIP-periode een melding geven",
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "Standaard fallback-categorie als er geen gekoppelde categorie bestaat voor een release. Het toevoegen van een categorie specifiek voor {appName} voorkomt conflicten met niet-gerelateerde downloads die niet van {appName} zijn. Het gebruik van een categorie is optioneel, maar wordt sterk aanbevolen. Er wordt een [categorie]-submap aangemaakt in de uitvoermap.",
"IndexerPassThePopcornSettingsApiUserHelpText": "Deze instellingen vind je in je PassThePopcorn beveiligingsinstellingen (Profiel bewerken > Beveiliging)."
}

View File

@@ -17,15 +17,15 @@
"TableOptionsColumnsMessage": "Wybierz, które kolumny są widoczne i w jakiej kolejności się pojawiają",
"BeforeUpdate": "Przed aktualizacją",
"BindAddress": "Adres powiązania",
"BranchUpdate": "Oddział do użycia do aktualizacji {appName}",
"BranchUpdate": "Gałąź do wykorzystania w aktualizacji {appName}",
"Cancel": "Anuluj",
"Automatic": "Automatyczny",
"ApplyTags": "Zastosuj tagi",
"BackupIntervalHelpText": "Odstęp czasu między automatycznymi kopiami zapasowymi",
"Close": "Zamknij",
"CloseCurrentModal": "Zamknij bieżący tryb",
"Delete": "Usunąć",
"Discord": "Niezgoda",
"Delete": "Usuń",
"Discord": "Discord",
"Edit": "Edytować",
"EnableAutomaticSearchHelpText": "Będzie używany, gdy automatyczne wyszukiwania są wykonywane przez interfejs użytkownika lub przez {appName}",
"KeyboardShortcuts": "Skróty klawiszowe",
@@ -50,14 +50,14 @@
"TagCannotBeDeletedWhileInUse": "Nie można usunąć, gdy jest używany",
"UnselectAll": "Odznacz wszystko",
"Usenet": "Usenet",
"AllIndexersHiddenDueToFilter": "Wszystkie filmy są ukryte ze względu na zastosowany filtr.",
"AllIndexersHiddenDueToFilter": "Wszystkie indeksery są ukryte ze względu na zastosowany filtr.",
"ApiKey": "Klucz API",
"UI": "UI",
"AcceptConfirmationModal": "Zaakceptuj tryb potwierdzenia",
"AddIndexer": "Dodaj indekser",
"AddingTag": "Dodawanie tagu",
"Age": "Wiek",
"CertificateValidationHelpText": "Zmień ścisłą walidację certyfikatu HTTPS",
"CertificateValidationHelpText": "Zmień jak rygorystyczna jest walidacja certyfikatu HTTPS",
"ChangeHasNotBeenSavedYet": "Zmiana nie została jeszcze zapisana",
"DownloadClient": "Pobierz klienta",
"Exception": "Wyjątek",
@@ -68,7 +68,7 @@
"AppDataDirectory": "Katalog AppData",
"AutomaticSearch": "Automatyczne wyszukiwanie",
"Branch": "Gałąź",
"Connections": "Znajomości",
"Connections": "Połączenia",
"ConnectSettings": "Ustawienia połączenia",
"CouldNotConnectSignalR": "Nie można połączyć się z SignalR, interfejs użytkownika nie zostanie zaktualizowany",
"EnableInteractiveSearchHelpText": "Będzie używany, gdy używane jest wyszukiwanie interaktywne",
@@ -94,16 +94,16 @@
"UnableToLoadNotifications": "Nie można załadować powiadomień",
"UpdateUiNotWritableHealthCheckMessage": "Nie można zainstalować aktualizacji, ponieważ użytkownik „{userName}” nie ma prawa zapisu w folderze interfejsu użytkownika „{uiFolder}”.",
"UseProxy": "Użyj proxy",
"DeleteIndexerProxyMessageText": "Czy na pewno chcesz usunąć tag „{0}”?",
"DeleteNotificationMessageText": "Czy na pewno chcesz usunąć powiadomienie „{0}”?",
"DeleteIndexerProxyMessageText": "Czy na pewno chcesz usunąć proxy indeksera '{name}'?",
"DeleteNotificationMessageText": "Czy na pewno chcesz usunąć powiadomienie '{name}'?",
"EnableSSL": "Włącz SSL",
"Error": "Błąd",
"ErrorLoadingContents": "Błąd podczas ładowania treści",
"Events": "Wydarzenia",
"SettingsLongDateFormat": "Format długiej daty",
"AnalyticsEnabledHelpText": "Wysyłaj anonimowe informacje o użytkowaniu i błędach do serwerów {appName}. Obejmuje to informacje o Twojej przeglądarce, z których stron {appName} WebUI używasz, raportowanie błędów, a także wersję systemu operacyjnego i środowiska wykonawczego. Wykorzystamy te informacje, aby nadać priorytet funkcjom i poprawkom błędów.",
"ApplicationStatusCheckAllClientMessage": "Wszystkie listy są niedostępne z powodu błędów",
"ApplicationStatusCheckSingleClientMessage": "Listy niedostępne z powodu błędów: {0}",
"AnalyticsEnabledHelpText": "Wysyłaj anonimowe informacje o użytkowaniu i błędach do serwerów {appName}. Obejmuje to informacje o Twojej przeglądarce, których stron interfejsu webowego {appName} używasz, raportowanie błędów, a także wersję systemu operacyjnego i środowiska wykonawczego. Wykorzystamy te informacje, aby nadać priorytet funkcjom i poprawkom błędów.",
"ApplicationStatusCheckAllClientMessage": "Wszystkie aplikacje są niedostępne z powodu błędów",
"ApplicationStatusCheckSingleClientMessage": "Aplikacje niedostępne z powodu błędów: {0}",
"Apply": "Zastosuj",
"Authentication": "Autoryzacja",
"AuthenticationMethodHelpText": "Wymagaj nazwy użytkownika i hasła, aby uzyskać dostęp do {appName}",
@@ -118,18 +118,18 @@
"CloneProfile": "Klonuj profil",
"Component": "Składnik",
"ConnectionLost": "Utracono połączenie",
"Custom": "Zwyczaj",
"Custom": "Niestandardowe",
"Date": "Data",
"Dates": "Daktyle",
"Dates": "Daty",
"DatabaseMigration": "Migracja bazy danych",
"DeleteApplicationMessageText": "Czy na pewno chcesz usunąć powiadomienie „{0}”?",
"DeleteApplicationMessageText": "Czy na pewno chcesz usunąć aplikację '{name}'?",
"DeleteBackup": "Usuń kopię zapasową",
"DeleteBackupMessageText": "Czy na pewno chcesz usunąć kopię zapasową {name}?",
"DeleteBackupMessageText": "Czy na pewno chcesz usunąć kopię zapasową '{name}'?",
"DeleteDownloadClient": "Usuń klienta pobierania",
"DeleteDownloadClientMessageText": "Czy na pewno chcesz usunąć klienta pobierania {name}?",
"DeleteDownloadClientMessageText": "Czy na pewno chcesz usunąć klienta pobierania '{name}'?",
"DeleteNotification": "Usuń powiadomienie",
"Disabled": "Wyłączone",
"Docker": "Doker",
"Docker": "Docker",
"DownloadClientStatusSingleClientHealthCheckMessage": "Klienci pobierania niedostępni z powodu błędów: {downloadClientNames}",
"EditIndexer": "Edytuj indeksator",
"Enable": "Włączyć",
@@ -250,7 +250,7 @@
"Title": "Tytuł",
"Today": "Dzisiaj",
"Tomorrow": "Jutro",
"Torrent": "Torrenty",
"Torrent": "Torrent",
"Torrents": "Torrenty",
"Type": "Rodzaj",
"UILanguageHelpText": "Język, którego {appName} będzie używać w interfejsie użytkownika",
@@ -276,8 +276,8 @@
"UrlBaseHelpText": "W przypadku obsługi zwrotnego proxy wartość domyślna jest pusta",
"Username": "Nazwa Użytkownika",
"DeleteTag": "Usuń tag",
"DeleteTagMessageText": "Czy na pewno chcesz usunąć tag „{0}”?",
"Details": "Detale",
"DeleteTagMessageText": "Czy na pewno chcesz usunąć tag '{label}'?",
"Details": "Szczegóły",
"Donations": "Darowizny",
"DownloadClients": "Pobierz klientów",
"DownloadClientSettings": "Pobierz ustawienia klienta",
@@ -290,7 +290,7 @@
"Health": "Zdrowie",
"InteractiveSearch": "Wyszukiwanie interaktywne",
"Version": "Wersja",
"Warn": "Ostrzec",
"Warn": "Ostrzeż",
"Wiki": "Wiki",
"YesCancel": "Tak, anuluj",
"Yesterday": "Wczoraj",
@@ -310,7 +310,7 @@
"HistoryCleanupDaysHelpTextWarning": "Pliki w koszu starsze niż wybrana liczba dni zostaną automatycznie wyczyszczone",
"Filters": "Filtr",
"HistoryCleanupDaysHelpText": "Ustaw na 0, aby wyłączyć automatyczne czyszczenie",
"OnGrab": "Na Grab",
"OnGrab": "Zgarnięcie na premierę",
"OnHealthIssue": "W kwestii zdrowia",
"TestAllIndexers": "Przetestuj wszystkie indeksatory",
"GrabReleases": "Grab Release",
@@ -327,7 +327,7 @@
"OnApplicationUpdateHelpText": "Przy aktualizacji aplikacji",
"Database": "Baza danych",
"NotificationTriggersHelpText": "Wybierz zdarzenia, które mają uruchamiać to powiadomienie",
"ApplicationLongTermStatusCheckSingleClientMessage": "Indeksatory niedostępne z powodu błędów przez ponad 6 godzin: {0}",
"ApplicationLongTermStatusCheckSingleClientMessage": "Aplikacje niedostępne z powodu błędów przez ponad 6 godzin: {0}",
"Duration": "Czas trwania",
"Ended": "Zakończone",
"LastDuration": "Ostatni czas trwania",
@@ -336,39 +336,39 @@
"Queued": "W kolejce",
"Started": "Rozpoczęto",
"Encoding": "Kodowanie",
"Application": "Aplikacje",
"Application": "Aplikacja",
"Applications": "Aplikacje",
"ApplicationLongTermStatusCheckAllClientMessage": "Wszystkie indeksatory są niedostępne z powodu awarii przez ponad 6 godzin",
"ApplicationLongTermStatusCheckAllClientMessage": "Wszystkie aplikacje są niedostępne z powodu awarii przez ponad 6 godzin",
"Remove": "Usunąć",
"Replace": "Zastąpić",
"OnLatestVersion": "Najnowsza wersja {appName} jest już zainstalowana",
"ApplicationURL": "Link do aplikacji",
"ApplicationUrlHelpText": "Zewnętrzny URL tej aplikacji zawierający http(s)://, port i adres URL",
"ApplicationUrlHelpText": "Zewnętrzny link tej aplikacji zawierający http(s)://, port i adres URL",
"ApplyTagsHelpTextAdd": "Dodaj: dodaj tagi do istniejącej listy tagów",
"ApplyTagsHelpTextHowToApplyApplications": "Jak zastosować tagi do wybranych filmów",
"ApplyTagsHelpTextHowToApplyIndexers": "Jak zastosować tagi do wybranych indeksatorów",
"DeleteSelectedApplicationsMessageText": "Czy na pewno chcesz usunąć indeksator „{0}”?",
"DeleteSelectedDownloadClients": "Usuń klienta pobierania",
"DeleteSelectedDownloadClientsMessageText": "Czy na pewno chcesz usunąć indeksator „{0}”?",
"ApplyTagsHelpTextHowToApplyApplications": "Jak zastosować tagi do wybranych aplikacji",
"ApplyTagsHelpTextHowToApplyIndexers": "Jak zastosować tagi do wybranych indekserów",
"DeleteSelectedApplicationsMessageText": "Czy na pewno chcesz usunąć {count} wybranych aplikacji?",
"DeleteSelectedDownloadClients": "Usuń klienta/ów pobierania",
"DeleteSelectedDownloadClientsMessageText": "Czy na pewno chcesz usunąć {count} wybranych klientów pobierania?",
"Year": "Rok",
"More": "Jeszcze",
"ApplyTagsHelpTextRemove": "Usuń: usuń wprowadzone tagi",
"ApplyTagsHelpTextReplace": "Zastąp: Zastąp tagi wprowadzonymi tagami (nie wprowadzaj tagów, aby usunąć wszystkie tagi)",
"DeleteSelectedIndexersMessageText": "Czy na pewno chcesz usunąć indeksator „{0}”?",
"DownloadClientPriorityHelpText": "Nadaj priorytet wielu klientom pobierania. W przypadku klientów o tym samym priorytecie używane jest działanie okrężne.",
"DeleteSelectedIndexersMessageText": "Czy na pewno chcesz usunąć {count} wybranych indekserów?",
"DownloadClientPriorityHelpText": "Nadaj priorytet wielu klientom pobierania. W przypadku klientów o tym samym priorytecie używany jest system kołowy (\"każdy na każdego\").",
"Track": "Ślad",
"UpdateAvailableHealthCheckMessage": "Dostępna jest aktualizacja: {version}",
"Genre": "Gatunki",
"ApplyChanges": "Zastosuj zmiany",
"ApiKeyValidationHealthCheckMessage": "Zaktualizuj swój klucz API aby był długi na co najmniej {length} znaków. Możesz to zrobić poprzez ustawienia lub plik konfiguracyjny",
"DeleteAppProfileMessageText": "Czy na pewno chcesz usunąć profil jakości '{0}'?",
"ConnectionLostReconnect": "Radarr spróbuje połączyć się automatycznie lub możesz kliknąć przycisk przeładuj poniżej.",
"DeleteAppProfileMessageText": "Czy na pewno chcesz usunąć profil aplikacji '{name}'?",
"ConnectionLostReconnect": "{appName} spróbuje połączyć się automatycznie, możesz też kliknąć przycisk przeładuj poniżej.",
"RecentChanges": "Ostatnie zmiany",
"WhatsNew": "Co nowego?",
"ConnectionLostToBackend": "Radarr utracił połączenie z silnikiem programu, aby przywrócić funkcjonalność musi zostać zrestartowany.",
"ConnectionLostToBackend": "{appName} utracił połączenie z silnikiem programu, aby przywrócić funkcjonalność musi zostać zrestartowany.",
"minutes": "Minuty",
"NotificationStatusSingleClientHealthCheckMessage": "Listy niedostępne z powodu błędów: {notificationNames}",
"AddConnection": "Edytuj kolekcję",
"AddConnection": "Edytuj połączenie",
"NotificationStatusAllClientHealthCheckMessage": "Wszystkie listy są niedostępne z powodu błędów",
"AuthForm": "Formularze (strona logowania)",
"DisabledForLocalAddresses": "Wyłączone dla adresów lokalnych",
@@ -376,14 +376,14 @@
"AuthBasic": "Podstawowe (wyskakujące okienko przeglądarki)",
"ResetAPIKeyMessageText": "Czy na pewno chcesz zresetować swój klucz API?",
"RestartProwlarr": "Zrestartuj {appName}",
"AddConnectionImplementation": "Dodaj Connection - {implementationName}",
"AddConnectionImplementation": "Dodaj połączenie - {implementationName}",
"AddDownloadClientImplementation": "Dodaj klienta pobierania - {implementationName}",
"CountApplicationsSelected": "Wybrane kolekcje: {0}",
"CountApplicationsSelected": "Wybrane aplikacje: {count}",
"EditDownloadClientImplementation": "Dodaj klienta pobierania - {implementationName}",
"Id": "Identyfikator",
"AddApplicationImplementation": "Dodaj Connection - {implementationName}",
"AddIndexerImplementation": "Dodaj indeks - {implementationName}",
"AddIndexerProxyImplementation": "Dodaj condition - {implementationName}",
"AddApplicationImplementation": "Dodaj aplikację - {implementationName}",
"AddIndexerImplementation": "Dodaj indekser - {implementationName}",
"AddIndexerProxyImplementation": "Dodaj proxy indeksera - {implementationName}",
"EditConnectionImplementation": "Dodaj Connection - {implementationName}",
"EditApplicationImplementation": "Dodaj Connection - {implementationName}",
"EditIndexerImplementation": "Dodaj condition - {implementationName}",
@@ -392,26 +392,26 @@
"Directory": "Folder",
"IndexerHDBitsSettingsCodecs": "Kodek",
"ProxyValidationBadRequest": "Nie udało się przetestować serwera proxy. StatusCode: {statusCode}",
"CustomFilter": "Filtry niestandardowe",
"CustomFilter": "Filtr niestandardowy",
"GrabRelease": "Pobierz Wydanie",
"Script": "Scenariusz",
"BuiltIn": "Wbudowany",
"PublishedDate": "Data publikacji",
"AllSearchResultsHiddenByFilter": "Wszystkie wyniki są ukrywane przez zastosowany filtr",
"AllSearchResultsHiddenByFilter": "Wszystkie wyniki są ukryte przez zastosowany filtr.",
"AppUpdated": "{appName} Zaktualizowany",
"AppUpdatedVersion": "{appName} został zaktualizowany do wersji `{version}`, by uzyskać nowe zmiany należy przeładować {appName}",
"AddCustomFilter": "Dodaj niestandardowy filtr",
"AuthenticationMethodHelpTextWarning": "Wybierz prawidłową metodę autoryzacji",
"Any": "Dowolny",
"AuthenticationMethod": "Metoda Autoryzacji",
"AuthenticationRequired": "Wymagana Autoryzacja",
"AuthenticationMethod": "Metoda autoryzacji",
"AuthenticationRequired": "Wymagana autoryzacja",
"Categories": "Kategorie",
"Label": "Etykieta",
"Notification": "Powiadomienia",
"Season": "Sezon",
"Theme": "Motyw",
"Artist": "artysta",
"Album": "album",
"Artist": "Artysta",
"Album": "Album",
"Connect": "Powiadomienia",
"Episode": "odcinek",
"Notifications": "Powiadomienia",
@@ -423,10 +423,389 @@
"RestartReloadNote": "Uwaga: {appName} automatycznie uruchomi się ponownie i przeładuje interfejs użytkownika podczas procesu przywracania.",
"UpdateAppDirectlyLoadError": "Nie można bezpośrednio zaktualizować {appName},",
"AptUpdater": "Użyj apt, aby zainstalować aktualizację",
"DockerUpdater": "zaktualizuj kontener Dockera, aby otrzymać aktualizację",
"DockerUpdater": "Zaktualizuj kontener Dockera, aby otrzymać aktualizację",
"InstallLatest": "Zainstaluj najnowsze",
"Clone": "Zamknij",
"Clone": "Sklonuj",
"Stats": "Status",
"CurrentlyInstalled": "Aktualnie zainstalowane",
"Mixed": "Naprawiony"
"Mixed": "Naprawiony",
"IndexerRss": "RSS indeksera",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potwierdź nowe hasło",
"AuthenticationRequiredUsernameHelpTextWarning": "Wprowadź nową nazwę użytkownika",
"AverageQueries": "Średnie wyszukiwania",
"BasicSearch": "Podstawowe wyszukiwanie",
"BookSearchTypes": "Typy wyszukiwania książek",
"DeleteAppProfile": "Usuń profil aplikacji",
"DeleteApplication": "Usuń aplikację",
"DeleteSelectedIndexers": "Usuń wybrane indeksery",
"DownloadClientRTorrentSettingsUrlPath": "Ścieżka URL",
"HistoryCleanup": "Czyszczenie historii",
"NoIndexerCategories": "Nie znaleziono kategorii dla tego indeksera",
"Open": "Otwarty",
"PrioritySettings": "Priorytet: {priority}",
"SemiPrivate": "Półprywatny",
"MinimumSeeders": "Minimalni seederzy",
"IndexerVipExpiredHealthCheckMessage": "Przywileje indeksera VIP się wyczerpały: {indexerNames}",
"IndexerVipExpiringHealthCheckMessage": "Przywileje indeksera VIP wkrótce się wyczerpią: {indexerNames}",
"BlackholeFolderHelpText": "Folder, w którym {appName} będzie przechowywać plik {extension}",
"DefaultCategory": "Domyślna kategoria",
"DefaultNameCopiedProfile": "{name} - Kopia",
"DownloadClientDelugeSettingsUrlBaseHelpText": "Dodaj prefiks do url json deluge, sprawdź {url}",
"Destination": "Lokalizacja docelowa",
"DownloadClientFreeboxSettingsAppTokenHelpText": "Token aplikacji otrzymany podczas tworzenia dostępu do Freebox API ('app_token')",
"DownloadClientPneumaticSettingsStrmFolder": "Folder Strm",
"DownloadClientSettingsAddPaused": "Dodaj zapauzowany",
"DownloadClientSettingsDestinationHelpText": "Ręczne precyzowanie lokalizacji docelowej pobierań, zostaw puste aby korzystać z domyślnej",
"DownloadClientSettingsInitialStateHelpText": "Stan początkowy torrentów dodanych do {clientName}",
"DownloadClientSettingsPriorityItemHelpText": "Priorytet podczas zgarniania pozycji",
"IndexerBeyondHDSettingsLimitedOnly": "Tylko limitowany",
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Szukaj tylko premier freeleech",
"IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Szukaj tylko premier freeleech",
"IndexerSettingsGrabLimit": "Limit zgarnięć",
"IndexerSettingsQueryLimit": "Limit wyszukiwania",
"IndexerSettingsPasskey": "Sekretny klucz",
"TotalHostQueries": "Całkowite wyszukiwania hosta",
"Query": "Wyszukiwanie",
"TotalIndexerQueries": "Całkowite wyszukiwania indeksera",
"UnableToLoadAppProfiles": "Nie można załadować profili aplikacji",
"ActiveApps": "Aktywne aplikacje",
"ActiveIndexers": "Aktywne indeksery",
"AdvancedSettingsShownClickToHide": "Zaawansowane ustawienia widoczne, kliknij aby ukryć",
"AppSettingsSummary": "Aplikacje i ustawienia do konfiguracji jak {appName} współpracuje z Twoimi programami PVR",
"Author": "Autor",
"ApplicationsLoadError": "Nie można załadować listy aplikacji",
"DownloadClientAriaSettingsDirectoryHelpText": "Opcjonalna lokalizacja dla pobrań, pozostaw puste jeżeli chcesz używać domyślnej lokalizacji Aria2",
"EditSyncProfile": "Edytuj profil synchronizacji",
"ManageClients": "Zarządzaj klientami",
"PreferMagnetUrl": "Preferuj linki magnet",
"InstallMajorVersionUpdate": "Instaluj aktualizację",
"VipExpiration": "Wygaśnięcie VIPa",
"days": "dni",
"QueryOptions": "Opcje wyszukiwania",
"DownloadClientFloodSettingsUrlBaseHelpText": "Dodaj prefiks do Flood API, taki jak {url}",
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Pobierz pierwszy i ostatni fragment pierwszymi (qBittorrent 4.1.0+)",
"DownloadClientQbittorrentSettingsUseSslHelpText": "Używaj bezpiecznego połączenia. Sprawdź Opcje -> Interfejs webowy -> 'Używaj HTTPS zamiast HTTP' w qBittorrent.",
"DownloadClientRTorrentSettingsAddStopped": "Dodaj zatrzymany",
"IndexerNzbIndexSettingsApiKeyHelpText": "Klucz API strony",
"Redirected": "Przekierowany",
"SeedTime": "Czas seedowania",
"FailedToFetchSettings": "Nie udało się uzyskać ustawień",
"IndexerBeyondHDSettingsSearchTypes": "Rodzaje wyszukiwania",
"IndexerBeyondHDSettingsApiKeyHelpText": "Klucz API ze strony (do znalezienia w Moje Bezpieczeństwo => Klucz API)",
"IndexerSettingsAdditionalParameters": "Dodatkowe parametry",
"IndexerRedactedSettingsApiKeyHelpText": "Klucz API ze strony (do znalezienia w Ustawienia => Ustawienia Dostępu)",
"IndexerSettingsGrabLimitHelpText": "Maksymalna liczba zgarnięć zdefiniowana przez odpowiadającą jednostkę, którą {appName} dopuści do strony",
"Logout": "Wyloguj się",
"LogFilesLocation": "Logi znajdują się w: {location}",
"InstallMajorVersionUpdateMessageLink": "Więcej informacji: [{domain}]({url}).",
"LabelIsRequired": "Etykieta jest wymagana",
"NotificationsEmailSettingsUseEncryptionHelpText": "Czy: preferować korzystanie z szyfrowania jeśli jest skonfigurowane na serwerze; zawsze używać szyfrowanie przez SSL (tylko port 465) lub StartTLS (każdy inny port); nigdy nie korzystać z szyfrowania",
"OverrideGrabModalTitle": "Nadpisz i zgarnij - {title}",
"OverrideAndAddToDownloadClient": "Nadpisz i dodaj do klienta pobierania",
"Proxies": "Proxy",
"RawSearchSupported": "Wspieranie surowych wyszukiwań",
"TorznabUrl": "Link Torznab",
"TotalGrabs": "Całkowite zgarnięcia",
"TorrentBlackholeTorrentFolder": "Folder torrenta",
"TorrentBlackholeSaveMagnetFilesExtension": "Zapisz rozszerzenie plików magnet",
"UpdaterLogFiles": "Pliki logów aktualizatora",
"WouldYouLikeToRestoreBackup": "Czy chcesz przywrócić kopię zapasową '{name}'?",
"Default": "Domyślne",
"ManualGrab": "Ręczne zgarnięcie",
"IndexerNoDefinitionCheckHealthCheckMessage": "Indeksery są niezdefiniowane i nie będą działać: {indexerNames}. Usuń i/lub dodaj je ponownie do {appName}.",
"AppsMinimumSeeders": "Minimum seederów dla aplikacji",
"HistoryDetails": "Szczegóły historii",
"InfoUrl": "Info URL",
"InvalidUILanguage": "Twój interfejs użytkownika ma ustawiony nieprawidłowy język, popraw go i zapisz swoje ustawienia",
"LastFailure": "Ostatni błąd",
"AverageGrabs": "Średnie zgarnięcia",
"IndexerSettingsFreeleechOnly": "Tylko freeleech",
"UseSsl": "Używaj SSL",
"DeleteSelectedApplications": "Usuń wybrane aplikacje",
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Opcjonalny udostępniony folder dla pobrań, pozostaw puste aby korzystać z domyślnej lokalizacji stacji pobierań",
"DownloadClientFloodSettingsAdditionalTags": "Dodatkowe tagi",
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Dodaje atrybuty mediów jako tagi. Podpowiedzi są przykładami.",
"DownloadClientFreeboxSettingsApiUrl": "Link API",
"DownloadClientFreeboxSettingsAppIdHelpText": "ID aplikacji przypisane podczas tworzenia dostępu do Freebox API ('app_id')",
"DownloadClientFreeboxSettingsAppToken": "Token aplikacji",
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Ten folder musi być dostępny z XBMC",
"DownloadClientPneumaticSettingsStrmFolderHelpText": "Pliki .strm w tym folderze będą importowane przez drone",
"DownloadClientQbittorrentSettingsContentLayout": "Układ zawartości",
"DownloadClientRTorrentSettingsDirectoryHelpText": "Opcjonalna lokalizacja do umieszczenia pobierań, pozostaw puste aby używać domyślnej lokalizacji rTorrenta",
"DownloadClientSettingsUseSslHelpText": "Użyj bezpiecznego połączenia podczas łączenia się z {clientName}",
"DownloadClientSettingsUrlBaseHelpText": "Dodaje prefiks to linka {clientName}, np. {url}",
"FullSync": "Pełna synchronizacja",
"IndexerProxies": "Proxy indeksera",
"ManageApplications": "Zarządzaj aplikacjami",
"IndexerSettingsApiUser": "Użytkonik API",
"IndexerSettingsCookieHelpText": "Ciasteczko na stronie",
"IndexerSettingsRssKey": "Klucz RSS",
"IndexerSettingsLimitsUnit": "Jednostka limitów",
"IndexerNewznabSettingsAdditionalParametersHelpText": "Dodatkowe parametry Newznab",
"IndexerPassThePopcornSettingsApiKeyHelpText": "Klucz API strony",
"IndexerSettingsPackSeedTime": "Czas seedowania paczki",
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "Klucz API strony",
"IndexerHistoryLoadError": "Błąd podczas ładowania historii indekserów",
"IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Szukaj tylko premier freeleech",
"IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Szukaj premier wg nazw grup",
"IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Musisz mieć pozwolenia użytkownika i torrentów",
"IndexerHDBitsSettingsOriginsHelpText": "Jeżeli nie sprecyzowano, wszystkie opcje są wykorzystywane.",
"IndexerIPTorrentsSettingsCookieUserAgentHelpText": "User-Agent powiązany z ciasteczkiem z przeglądarki",
"IndexerPassThePopcornSettingsApiUserHelpText": "Te ustawienia znajdują się w ustawieniach bezpieczeństwa PassThePopcorn (Edit Profile => Security).",
"IndexerBeyondHDSettingsSearchTypesHelpText": "Wybierz rodzaje premier, które Cię interesują. Jeżeli żadne nie są wybrane, wszystkie opcje będą użyte.",
"IndexerSettingsPackSeedTimeIndexerHelpText": "Czas przez jaki paczka (sezon lub dyskografia) powinna być seedowana przed zatrzymaniem, puste = wartość domyślna aplikacji",
"InstallMajorVersionUpdateMessage": "Ta aktualizacja zainstaluje nową dużą wersję i może nie być kompatybilna z Twoim systemem. Jesteś pewien, że chcesz ją kontynuować?",
"NoHistoryFound": "Nie znaleziono historii",
"NoApplicationsFound": "Nie znaleziono aplikacji",
"StopSelecting": "Przestań wybierać",
"SeedRatio": "Stosunek seedów",
"SettingsIndexerLogging": "Rozszerzone logi indeksera",
"SyncAppIndexers": "Synchronizuj indeksery aplikacji",
"SettingsLogSql": "SQL logów",
"PackSeedTime": "Czas seedowania paczki",
"PackageVersionInfo": "{packageVersion} od {packageAuthor}",
"SettingsIndexerLoggingHelpText": "Zapisuj dodatkowe logi danych indekserów zawierające odpowiedzi",
"RedirectHelpText": "Przekieruj przychodzące żądania pobierania dla indeksera i przekaż zgarnięcie bezpośrednio zamiast proxowania żądania przez {appName}",
"ProwlarrDownloadClientsAlert": "Jeżeli planujesz wyszukiwać bezpośrednio w {appName}, potrzebujesz dodać klientów pobierania. W innym przypadku nie musisz tego robić. Dla wyszukiwań w Twoich aplikacjach, klienci pobierania tam skonfigurowani będą użytkowani.",
"TestAllApps": "Testuj wszystkie aplikacje",
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Jakiego rozszerzenia używać do linków magnet, domyślnie '.magnet'",
"TorrentBlackholeSaveMagnetFilesHelpText": "Zapisz link magnet jeśli plik .torrent nie jest dostępny (przydatne tylko, jeżeli klient pobierania oferuje zapisywanie magnetów jako pliku)",
"SyncLevelFull": "Pełna synchronizacja: będzie utrzymwać indeksery tej aplikacji w pełni zsynchronizowane. Zmiany na indekserach w {appName} są potem synchronizowane do tej aplikacji. Każda zmiana dokonywana zdalnie w tej aplikacji będzie nadpisana przez {appName} przy następnej synchronizacji.",
"LogSizeLimit": "Limit rozmiaru logów",
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "Domyślna kategoria zapasowa jeżeli nie ma zmapowanej kategorii dla premiery. Dodawanie kategorii wyjątkowej dla {appName} pomaga uniknąć konfliktów z niezwiązanymi pobraniami spoza {appName}. Korzystanie z kategorii jest opcjonalne, ale mocno rekomendowane.",
"AverageResponseTimesMs": "Średni czas reakcji indeksera (ms)",
"Book": "Książka",
"EnableRssHelpText": "Włącz",
"FoundCountReleases": "Znaleziono {itemCount} premier",
"AudioSearch": "Wyszukiwanie audio",
"AreYouSureYouWantToDeleteCategory": "Czy na pewno chcesz usunąć zmapowaną kategorię?",
"Category": "Kategoria",
"ClearHistory": "Wyczyść historię",
"Apps": "Aplikacje",
"AddRemoveOnly": "Tylko dodawanie i usuwanie",
"IndexerProxy": "Proxy indeksera",
"IndexerQuery": "Wyszukiwanie indekserów",
"Redirect": "Przekieruj",
"InitialFailure": "Początkowy błąd",
"AddNewIndexer": "Dodaj nowy indekser",
"AddToDownloadClient": "Dodaj premierę do klienta pobrań",
"Public": "Publiczny",
"ElapsedTime": "Upłynęło czasu",
"EnabledRedirected": "Włączony, Przekierowany",
"SyncLevel": "Poziom synchronizacji",
"DeleteIndexerProxy": "Usuń proxy indeksera",
"AdvancedSettingsHiddenClickToShow": "Zaawansowane ustawienia ukryte, kliknij aby pokazać",
"CountIndexersSelected": "Wybrane indeksery: {count}",
"DeleteSelectedIndexer": "Usuń wybrany indekser",
"FilterPlaceHolder": "Szukaj indekserów",
"ManageDownloadClients": "Zarządzaj klientami pobierania",
"NewznabUrl": "Link Newznab",
"QueryType": "Rodzaj wyszukiwania",
"SearchTypes": "Rodzaje wyszukiwania",
"SeedRatioHelpText": "Stosunek jaki torrent powinien osiągnąć przed zatrzymaniem, puste to wartość domyślna aplikacji",
"SelectedCountOfCountReleases": "Wybrano {selectedCount} z {itemCount} premier",
"IndexerSite": "Strona indeksera",
"EnableIndexer": "Włącz indekser",
"IndexerFailureRate": "Częstotliwość awarii indeksera",
"MovieSearchTypes": "Rodzaje wyszukiwań filmów",
"MovieSearch": "Wyszukiwanie filmów",
"OnHealthRestored": "Na przywrócone zdrowie",
"RssFeed": "Kanał RSS",
"SettingsConsoleLogLevel": "Poziom logów konsoli",
"AddIndexerProxy": "Dodaj proxy indeksera",
"GrabTitle": "Zgarnij tytuł",
"GoToApplication": "Idź do aplikacji",
"Implementation": "Wdrożenie",
"NoDownloadClientsFound": "Nie znaleziono klientów pobierania",
"SearchAllIndexers": "Przeszukaj wszystkie indeksery",
"MusicSearchTypes": "Rodzaje wyszukiwań muzyki",
"SettingsFilterSentryEventsHelpText": "Odfiltrowuj znane zdarzenia błędów użytkownika przed wysłaniem jako danych analitycznych",
"IndexerCategories": "Kategorie indeksera",
"SettingsLogRotate": "Rotacja logów",
"UISettingsSummary": "Data, język i opcje dla osób z zaburzeniami widzenia",
"Website": "Strona internetowa",
"AreYouSureYouWantToDeleteIndexer": "Czy na pewno chcesz usunąć '{name}' z {appName}?",
"AuthQueries": "Kwerendy autentykacji",
"RssQueries": "Wyszukiwania RSS",
"SearchQueries": "Szukaj w wyszukiwaniach",
"NotificationsTelegramSettingsIncludeAppName": "Umieść {appName} w tytule",
"SettingsSqlLoggingHelpText": "Zapisuj logi wszystkich kwerend SQL z {appName}",
"DownloadClientsSettingsSummary": "Konfiguracja klientów pobierania dla integracji z interfejsem wyszukiwania {appName}",
"IndexerInfo": "Informacje o indekserze",
"IndexerObsoleteCheckMessage": "Indeksery są przestarzałe albo zostały zaktualizowane: {0}. Usuń lub dodaj je ponownie do {appName}",
"IndexerAlreadySetup": "Co najmniej jedna instancja indeksera już działa",
"IndexerDisabled": "Indekser wyłączony",
"NoIndexersFound": "Nie znaleziono indekserów",
"TotalHostGrabs": "Całkowite zgarnięcia hosta",
"ProwlarrDownloadClientsInAppOnlyAlert": "Klienci pobierania są tylko dla wyszukiwań wewnątrz {appName} i nie synchronizują się z aplikacjami. Nie ma planów, aby dodać taką funkcjonalność.",
"QueryResults": "Wyniki wyszukiwania",
"SecretToken": "Sekretny token",
"Url": "URL",
"AddSyncProfile": "Dodaj profil synchronizacji",
"DevelopmentSettings": "Ustawienia programistyczne",
"TVSearchTypes": "Rodzaje wyszukiwań seriali",
"NotificationsEmailSettingsUseEncryption": "Używaj szyfrowania",
"OnGrabHelpText": "Zgarnij na premierę",
"SearchCapabilities": "Możliwości wyszukiwania",
"SettingsLogRotateHelpText": "Maksymalna liczba plików logów do zachowania w folderze",
"SearchCountIndexers": "Przeszukaj {count} indekserów",
"SyncLevelAddRemove": "Tylko dodawanie i usuwanie: kiedy indeksery są dodawane lub usuwane z {appName}, zaktualizuje ona tą zdalną aplikację.",
"TotalUserAgentGrabs": "Całkowite zgarnięcia User Agenta",
"SyncProfile": "Synchronizuj profil",
"IndexerDownloadClientHealthCheckMessage": "Indeksery z nieprawidłowymi klientami pobierania: {indexerNames}.",
"AuthenticationRequiredPasswordHelpTextWarning": "Wprowadź nowe hasło",
"ApplicationTagsHelpText": "Synchronizuj indeksery mające jeden lub więcej pasujących tagów do tej aplikacji. Jeżeli nie ma tu wypisanych tagów, wtedy żaden indekser nie będzie blokowany przed synchronizacją.",
"External": "Zewnętrzny",
"DownloadClientFreeboxSettingsApiUrlHelpText": "Zdefiniuj bazowy link API Freebox z wersją API, np. '{url}, domyślna wartość to '{defaultApiUrl}'",
"DownloadClientFreeboxSettingsAppId": "ID aplikacji",
"DownloadClientFreeboxSettingsPortHelpText": "Port używany przez interfejs Freeboxa, domyślnie '{port}'",
"DownloadClientNzbgetSettingsAddPausedHelpText": "Ta opcja wymaga NzbGet w wersji minimum 16.0",
"DownloadClientPneumaticSettingsNzbFolder": "Folder Nzb",
"DownloadClientQbittorrentSettingsSequentialOrder": "Porządek sekwencyjny",
"DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Pobieraj w porządku sekwencyjnym (qBittorrent 4.1.0+)",
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Dodaje prefiks przed url RPC {clientName}, np. {url} domyślnie zmienia się na '{defaultUrl}'",
"SettingsFilterSentryEvents": "Filtruj zdarzenia analityczne",
"IncludeManualGrabsHelpText": "Dołącz ręczne zgarnięcia z {appName}",
"IndexerBeyondHDSettingsRewindOnly": "Tylko przewinięcia",
"IndexerFileListSettingsUsernameHelpText": "Nazwa użytkownika na stronie",
"IndexerGazelleGamesSettingsSearchGroupNames": "Szukaj nazw grup",
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Szukaj tylko premier freeleech",
"TotalQueries": "Całkowite wyszukiwania",
"IndexerNewznabSettingsVipExpirationHelpText": "Wprowadź datę (RRRR-MM-DD) wygaśnięcia VIPa lub puste, {appName} poinformuje Cię tydzień przed jego wyczerpaniem",
"Menu": "Menu",
"MassEditor": "Masowe edytowanie",
"IndexerStatus": "Status indeksera",
"NoIndexerHistory": "Nie znaleziono historii dla tego indeksera",
"NoSearchResultsFound": "Brak wyników wyszukiwania, spróbuj wykonać nowe wyszukiwanie poniżej.",
"PackSeedTimeHelpText": "Czas przez jaki paczka (sezon lub dyskografia) powinna być seedowana przed zatrzymaniem, puste = wartość domyślna aplikacji",
"Parameters": "Parametry",
"SelectIndexers": "Wybierz indeksery",
"TotalUserAgentQueries": "Całkowite wyszukiwania User Agenta",
"AddApplication": "Dodaj aplikację",
"Privacy": "Prywatność",
"Private": "Prywatny",
"AddedToDownloadClient": "Premiera dodana do klienta",
"SyncProfiles": "Synchronizuj profile",
"DisabledUntil": "Wyłączone do",
"TorrentBlackholeSaveMagnetFiles": "Zapisz pliki magnet",
"UnableToLoadDevelopmentSettings": "Nie można załadować ustawień programistycznych",
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Odrzucaj synchronizację zablokowanych hashów torrenta podczas zgarniania",
"Auth": "Autentykacja",
"BookSearch": "Wyszukiwanie książek",
"ClearHistoryMessageText": "Czy na pewno chcesz wyczyścić całą historię {appName}?",
"DownloadClientFreeboxSettingsHostHelpText": "Nazwa lub IP hosta Freeboxa, domyślnie '{url}' (zadziała tylko w tej samej sieci)",
"EditSelectedIndexers": "Edytuj wybrane indeksery",
"IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Szukaj tylko premier freeleech",
"IndexerDetails": "Szczegóły indeksera",
"IndexerGazelleGamesSettingsApiKeyHelpText": "Klucz API ze strony (do znalezienia w Ustawienia => Ustawienia Dostępu)",
"OnHealthRestoredHelpText": "Na przywrócone zdrowie",
"TvSearch": "Wyszukiwanie seriali",
"AuthenticationRequiredHelpText": "Wymagana jest zmiana, która żąda autoryzacji. Nie zatwierdzaj jej jeśli nie jesteś świadomy ryzyka.",
"AppProfileInUse": "Używany profil aplikacji",
"ProwlarrSupportsAnyDownloadClient": "{appName} wspiera każdy z poniższych klientów pobierania.",
"AddCategory": "Dodaj kategorię",
"ClickToChangeQueryOptions": "Kliknij aby zmienić opcje wyszukiwania",
"CountDownloadClientsSelected": "Wybrani klienci pobierania: {count}",
"CountIndexersAvailable": "Dostępne indeksery: {count}",
"Description": "Opis",
"Donate": "Wesprzyj finansowo",
"DownloadClientCategory": "Kategoria klienta pobierania",
"EditCategory": "Edytuj kategorię",
"EditSelectedDownloadClients": "Edytuj wybranych klientów pobierania",
"DownloadClientTransmissionSettingsDirectoryHelpText": "Opcjonalna lokalizacja pobierań, zostaw puste aby użyć domyślnej lokalizacji Transmission",
"IndexerBeyondHDSettingsRefundOnly": "Tylko zwroty",
"IndexerBeyondHDSettingsRssKeyHelpText": "Klucz RSS ze strony (do znalezienia w Moje Bezpieczeństwo => Klucz RSS)",
"IndexerBeyondHDSettingsRewindOnlyHelpText": "Szukaj tylko przewinięć",
"IndexerFileListSettingsPasskeyHelpText": "Sekretny klucz strony (alfanumeryczny ciąg w URL trackera w kliencie pobierań)",
"IndexerDownloadClientHelpText": "Sprecyzuj jaki klient pobierania jest używany do zgarnięć wewnątrz {appName} z tego indeksera",
"IndexerHDBitsSettingsCodecsHelpText": "Jeżeli niesprecyzowano wszystkie opcje są wykorzystywane.",
"IndexerHDBitsSettingsUseFilenamesHelpText": "Zaznacz tą opcję jeżeli chcesz używać nazwy plików torrenta jako nazwy premier",
"IndexerHDBitsSettingsUsernameHelpText": "Nazwa użytkownika na stronie",
"IndexerAlphaRatioSettingsExcludeSceneHelpText": "Wyklucz premiery SCENE z wyników",
"IndexerIPTorrentsSettingsCookieUserAgent": "User-Agent ciasteczka",
"IndexerBeyondHDSettingsRefundOnlyHelpText": "Szukaj tylko zwrotów",
"IndexerAlphaRatioSettingsExcludeScene": "Wyklucz SCENE",
"IndexerHDBitsSettingsMediumsHelpText": "Jeżeli nie sprecyzowano, wszystkie opcje są wykorzystywane.",
"IndexerHDBitsSettingsOrigins": "Pochodzenie",
"IndexerSettingsApiPath": "Ścieżka API",
"IndexerSettingsSeedTime": "Czas seedowania",
"IndexerSettingsSummary": "Skonfiguruj różne ustawienia globalne indeksera włączając proxy.",
"IndexerTagsHelpText": "Użyj tagów to sprecyzowania proxy indeksera lub z jakimi aplikacjami indekser się synchronizuje.",
"IndexerSettingsPreferMagnetUrl": "Preferuj linki magnet",
"IndexerSettingsPreferMagnetUrlHelpText": "Kiedy włączone, ten indekser będzie preferował wykorzystanie linków magnet dla zgarnięć, z bezpiecznikiem linków torrent",
"IndexerSettingsVipExpiration": "Wygaśnięcie VIPa",
"IndexerSettingsAppsMinimumSeedersHelpText": "Minimalna liczba seederów wymagana przez aplikacje, żeby indekser zgarnął premierę, puste oznacza domyślną wartość profilu synchronizacji",
"IndexerSettingsApiPathHelpText": "Ścieżka do API, zwykle {url}",
"IndexerSettingsBaseUrlHelpText": "Wybierz jaki podstawowy URL {appName} będzie wykorzystywać dla żądań do strony",
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Szukaj tylko premier Złotego Popcornu",
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Tylko Złoty Popcorn",
"IndexerSettingsCookie": "Ciasteczko",
"IndexerSettingsBaseUrl": "Podstawowy URL",
"IndexerSettingsLimitsUnitHelpText": "Jednostka czasu do obliczania limitów na indekser",
"PasswordConfirmation": "Potwierdzenie hasła",
"IndexerSettingsSeedRatio": "Stosunek seedów",
"IndexerAvistazSettingsUsernameHelpText": "Nazwa użytkownika",
"IndexerOrpheusSettingsApiKeyHelpText": "Klucz API ze strony (do znalezienia w Ustawienia => Ustawienia Dostępu)",
"IndexerNewznabSettingsApiKeyHelpText": "Klucz API strony",
"IndexerAvistazSettingsPasswordHelpText": "Hasło na stronie",
"IndexerAvistazSettingsPidHelpText": "PID ze strony Moje Konto lub Mój Profil",
"IndexerAvistazSettingsFreeleechOnlyHelpText": "Szukaj tylko premier freeleech",
"IndexerAvistazSettingsUsernameHelpTextWarning": "Tylko ranga członka lub wyższa może używać API z tym indekserem",
"SearchType": "Rodzaj wyszukiwania",
"ProxyValidationUnableToConnect": "Nie można połączyć się z proxy: {exceptionMessage}. Sprawdź logi tego błędu by poznać więcej szczegółów",
"UsenetBlackholeNzbFolder": "Folder Nzb",
"XmlRpcPath": "Ścieżka RPC XML",
"AddDownloadClientToProwlarr": "Dodanie klienta pobierania pozwoli {appName} wysyłać premiery bezpośrednio z interfejsu użytkownika podczas ręcznego wyszukiwania.",
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Pierwszy i ostatni pierwszym",
"FailedToFetchUpdates": "Nie udało się uzyskać aktualizacji",
"SeedTimeHelpText": "Jak długo torrent powinien być seedowany przed zatrzymaniem, puste to wartość domyślna aplikacji",
"TheLogLevelDefault": "Wartość domyślna poziomu logów to 'Debug' i może być zmieniona w [Ogólnych ustawieniach](/settings/general)",
"AppProfileSelectHelpText": "Profile aplikacji są wykorzystywane do kontroli RSS oraz ustawień automatycznego i interaktywnego wyszukiwania podczas synchronizacji",
"IndexerMTeamTpSettingsApiKeyHelpText": "Klucz API ze strony (do znalezienia w Panel kontrolny użytkownika => Bezpieczeństwo => Laboratorium)",
"IndexerNebulanceSettingsApiKeyHelpText": "Klucz API z Ustawień użytkownika => Kluczy API. Klucz musi mieć pozwolenia listowania i pobierania",
"DownloadClientRTorrentSettingsAddStoppedHelpText": "Włączenie doda torrenty i magnety do rTorrenta w zatrzymanym stanie. To może uszkodzić pliki magnet.",
"DownloadClientRTorrentSettingsUrlPathHelpText": "Ścieżka do punktu końcowego XMLRPC, sprawdź {url}. Zwykle jest to RPC2 lub [ścieżka do ruTorrenta]{url2} podczas korzystania z ruTorrenta.",
"IndexerAuth": "Autoryzacja indeksera",
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Jeżeli torrent jest zablokowany przez hasha może zostać nieprawidłowo odrzucony podczas RSS/Szukania przez niektóre indeksery, włączenie tej opcji pozwoli na jego odrzucenie po zgarnięciu, ale przed wysłaniem do klienta.",
"ApplicationTagsHelpTextWarning": "Tagi powinny być używane ostrożnie, ponieważ mogą powodować niezamierzone efekty. Aplikacja z tagiem będzie synchronizowała się tylko z indekserem posiadającym taki sam tag.",
"IndexerId": "ID indeksera",
"IndexerHDBitsSettingsUseFilenames": "Używaj nazw plików",
"SelectDownloadClientModalTitle": "{modalTitle} - wybierz klienta pobierania",
"ProwlarrSupportsAnyIndexer": "{appName} wspiera wiele indekserów oprócz każdego indeksera, który używa standardu Newznab/Torznab korzystając z 'Generycznego Newznaba' (dla usenetu) lub 'Generycznego Torznaba' (dla torrentów). Znajdź i wybierz swój indexer poniżej.",
"DeleteClientCategory": "Usuń kategorię klienta pobierania",
"IndexerName": "Nazwa indeksera",
"RepeatSearch": "Powtórz wyszukiwanie",
"AppsMinimumSeedersHelpText": "Minimum seederów wymaganych przez Aplikacje, żeby indekser zgarnął pobieranie, puste pole oznacza domyślną wartość z profilu synchronizacji",
"ConnectSettingsSummary": "Powiadomienia i dodatkowe skrypty",
"IndexerBeyondHDSettingsLimitedOnlyHelpText": "Szukaj tylko freeleech (limitowany UL)",
"NotificationsTelegramSettingsIncludeAppNameHelpText": "Opcjonalny tytuł wiadomości poprzedzającej z {appName} by rozróżnić powiadomienia z różnych aplikacji",
"DownloadClientFloodSettingsTagsHelpText": "Początkowe tagi pobierania. Aby zostać rozpoznanym, pobieranie musi mieć wszystkie początkowe tagi. To pozwala na uniknięcie konfliktów z niepowiązanymi pobraniami.",
"Install": "Instaluj",
"PreviouslyInstalled": "Poprzednio zainstalowany",
"IndexerHDBitsSettingsFreeleechOnlyHelpText": "Pokaż tylko premiery freeleech",
"UnableToLoadIndexerProxies": "Nie można załadować proxy indekserów",
"IndexerHealthCheckNoIndexers": "Nie włączono indekserów, {appName} nie zwróci wyników wyszukiwania.",
"IndexerTagsHelpTextWarning": "Tagi powinny być używane ostrożni, ponieważ mogą powodować nieplanowane efekty. Indekser z tagiem będzie synchronizował się tylko z aplikacjami z tym samym tagiem.",
"AuthenticationRequiredWarning": "Aby zapobiec nieautoryzowanemu dostępowi zdalnemu, {appName} wymaga, aby autoryzacja była włączona. Możesz ją opcjonalnie wyłączyć dla lokalnych adresów.",
"NotSupported": "Nie wspierany",
"IndexerHDBitsSettingsPasskeyHelpText": "Tajny klucz ze szczegółów użytkownika",
"IndexerFileListSettingsFreeleechOnlyHelpText": "Szukaj tylko premier freeleech",
"IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Szukaj tylko premier freeleech",
"LogSizeLimitHelpText": "Maksymalny rozmiar pliku logów (MB) przed archiwizacją. Domyślnie 1 MB.",
"IndexerSettingsQueryLimitHelpText": "Maksymalna liczba wyszukiwań zdefiniowana przez odpowiadającą jednostkę, którą {appName} dopuści do strony",
"PreferMagnetUrlHelpText": "Kiedy włączone, ten indekser będzie preferował wykorzystanie linków magnet dla zgarnięć, z bezpiecznikiem linków torrent",
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Początkowy stan torrentów dodanych do qBittorrent. Zwróć uwagę, że wymuszone torrenty nie podlegają ograniczeniom seedowania",
"MappedCategories": "Zmapowane kategorie",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Czy używać skonfigurowanego układu zawartości qBittorrent, oryginalnego układu z torrenta czy zawsze tworzyć podfolder (qBittorrent 4.3.2+)",
"IndexerSettingsAppsMinimumSeeders": "Minimum seederów aplikacji",
"TotalIndexerSuccessfulGrabs": "Całkowite udane zgarnięcia indeksera",
"MinimumSeedersHelpText": "Minimalni seederzy wymagani przez aplikację, żeby indekser zgarnął",
"SearchIndexers": "Szukaj indekserów",
"DownloadClientSettingsInitialState": "Podstawowy stan",
"IndexerSettingsSeedRatioHelpText": "Stosunek jaki torrent powinien osiągnać przed zatrzymaniem, puste = wartość domyślna klienta pobierania. Stosunek powinien wynosić co najmniej 1.0 i podlegać zasadom indeksera",
"IndexerSettingsSeedTimeHelpText": "Czas przez jaki torrent powinien być seedowany przed zatrzymaniem, zostaw puste by używać domyślnej wartości klienta pobierania",
"DownloadClientUTorrentProviderMessage": "uTorrent ma długą historię z kopaczami krypto, malware i reklamami, bardzo mocno zachęcamy do korzystania z innego klienta.",
"ThemeHelpText": "Zmień motyw interfejsu użytkownika aplikacji, 'Auto' motyw będzie używał motywu Twojego systemu operacyjnego aby ustawić tryb Jasny lub Ciemny. Zainspirowane przez {inspiredBy}.",
"DownloadClientSettingsDefaultCategoryHelpText": "Domyślna kategoria zapasowa jeżeli nie ma zmapowanej kategorii dla premiery. Dodawanie kategorii wyjątkowej dla {appName} pomaga uniknąć konfliktów z niezwiązanymi pobraniami spoza {appName}. Korzystanie z kategorii jest opcjonalne, ale mocno rekomendowane.",
"HealthMessagesInfoBox": "Więcej informacji o tych komunikatach sprawdzania żywotności znajdziesz klikając w ikonkę książki (link do wiki) na końcu wiersza lub sprawdzając [logi]({link}). Jeżeli masz problem z interpretacją tych komunikatów, możesz zgłosić się do naszego wsparcie, pod linkami poniżej."
}

View File

@@ -547,5 +547,24 @@
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Додає префікс до URL-адреси RPC {clientName}, наприклад {url}, за замовчуванням — '{defaultUrl}'",
"IndexerSettingsSeedRatio": "Коефіцієнт роздачі",
"ManualGrab": "Захват вручну",
"StopSelecting": "Скасувати вибір"
"StopSelecting": "Скасувати вибір",
"ActiveApps": "Активні додатки",
"ActiveIndexers": "Активні індексери",
"AppSettingsSummary": "Застосунки та налаштування для конфігурації взаємодії {appName} з вашими PVR-програмами",
"AppProfileSelectHelpText": "Профілі застосунків використовуються для керування налаштуваннями RSS, автоматичного пошуку та інтерактивного пошуку під час синхронізації застосунку",
"ApplicationTagsHelpText": "Синхронізувати індексатори з цим застосунком, які мають один або кілька відповідних тегів. Якщо тут не вказано жодного тегу, жоден індексатор не буде виключено із синхронізації через свої теги.",
"ApplicationsLoadError": "Не вдалося завантажити список застосунків",
"AddToDownloadClient": "Додати реліз в клієнт завантаження",
"AdvancedSettingsHiddenClickToShow": "Розширені налаштування приховано, натисніть, щоб показати",
"AdvancedSettingsShownClickToHide": "Розширені налаштування відображено, натисніть, щоб приховати",
"AddSyncProfile": "Додати профіль синхронізації",
"AddDownloadClientToProwlarr": "Додавання клієнта завантаження дозволяє {appName} надсилати релізи безпосередньо з інтерфейсу під час ручного пошуку.",
"AddNewIndexer": "Додати новий індексер",
"AddRemoveOnly": "Лише додати та видалити",
"AddedToDownloadClient": "Реліз додано до клієнта",
"Apps": "Застосунки",
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Синхронізувати та відхиляти заблоковані за хешем торренти під час збору",
"ApplicationTagsHelpTextWarning": "Теги слід використовувати обережно, оскільки вони можуть мати непередбачувані наслідки. Застосунок із тегом буде синхронізуватися лише з індексаторами, що мають такий самий тег.",
"AddApplication": "Додати додаток",
"AddCategory": "Додати Категорію"
}

View File

@@ -51,7 +51,7 @@ namespace NzbDrone.Host
b.ClearProviders();
b.SetMinimumLevel(LogLevel.Trace);
b.AddFilter("Microsoft.AspNetCore", LogLevel.Warning);
b.AddFilter("Prowlarr.Http.Authentication", LogLevel.Information);
b.AddFilter("Prowlarr.Http.Authentication.ApiKeyAuthenticationHandler", LogLevel.Information);
b.AddFilter("Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager", LogLevel.Error);
b.AddNLog();
});

View File

@@ -1,4 +1,6 @@
using System.Collections.Generic;
using FluentValidation;
using FluentValidation.Results;
using NzbDrone.Core.Indexers;
using NzbDrone.Core.Validation;
using NzbDrone.SignalR;
@@ -24,5 +26,21 @@ namespace Prowlarr.Api.V1.Indexers
SharedValidator.RuleFor(c => c.Priority).InclusiveBetween(1, 50);
SharedValidator.RuleFor(c => c.DownloadClientId).SetValidator(downloadClientExistsValidator);
}
protected override void Validate(IndexerDefinition definition, bool includeWarnings)
{
var instance = _providerFactory.GetInstance(definition);
// Ensure Redirect is true for Usenet protocols
if (instance is { Protocol: DownloadProtocol.Usenet, SupportsRedirect: true } && definition is { Redirect: false })
{
throw new ValidationException(new List<ValidationFailure>
{
new("Redirect", "Redirect must be enabled for Usenet indexers")
});
}
base.Validate(definition, includeWarnings);
}
}
}

View File

@@ -262,8 +262,8 @@ namespace NzbDrone.Api.V1.Indexers
throw new BadRequestException("Failed to normalize provided link");
}
// If Indexer is set to download via Redirect then just redirect to the link
if (indexer.SupportsRedirect && indexerDef.Redirect)
// If Indexer is set to download via Redirect then just redirect to the link unless it's a Usenet indexer at which point it forces Redirect.
if (indexer.Protocol == DownloadProtocol.Usenet || (indexer.SupportsRedirect && indexerDef.Redirect))
{
_downloadService.RecordRedirect(unprotectedLink, id, source, host, file);
return RedirectPermanent(unprotectedLink);

View File

@@ -271,7 +271,7 @@ namespace Prowlarr.Api.V1
BroadcastResourceChange(ModelAction.Deleted, message.ProviderId);
}
private void Validate(TProviderDefinition definition, bool includeWarnings)
protected virtual void Validate(TProviderDefinition definition, bool includeWarnings)
{
var validationResult = definition.Settings.Validate();

View File

@@ -77,7 +77,7 @@ namespace Prowlarr.Http.Authentication
private void LogSuccess(HttpRequest context, string username)
{
_authLogger.Info("Auth-Success ip {0} username '{1}'", context.GetRemoteIP(), username);
_authLogger.Debug("Auth-Success ip {0} username '{1}'", context.GetRemoteIP(), username);
}
private void LogLogout(HttpRequest context, string username)