mirror of
https://github.com/Readarr/Readarr.git
synced 2026-03-13 15:34:06 -04:00
Compare commits
1 Commits
v0.4.9.273
...
sonarr-pul
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
17f28a10d5 |
@@ -9,7 +9,7 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '0.4.9'
|
||||
majorVersion: '0.4.4'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
readarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
|
||||
@@ -1102,19 +1102,19 @@ stages:
|
||||
vmImage: ${{ variables.windowsImage }}
|
||||
steps:
|
||||
- checkout: self # Need history for Sonar analysis
|
||||
- task: SonarCloudPrepare@3
|
||||
- task: SonarCloudPrepare@2
|
||||
env:
|
||||
SONAR_SCANNER_OPTS: ''
|
||||
inputs:
|
||||
SonarCloud: 'SonarCloud'
|
||||
organization: 'readarr'
|
||||
scannerMode: 'cli'
|
||||
scannerMode: 'CLI'
|
||||
configMode: 'manual'
|
||||
cliProjectKey: 'readarrui'
|
||||
cliProjectName: 'ReadarrUI'
|
||||
cliProjectVersion: '$(readarrVersion)'
|
||||
cliSources: './frontend'
|
||||
- task: SonarCloudAnalyze@3
|
||||
- task: SonarCloudAnalyze@2
|
||||
|
||||
- job: Api_Docs
|
||||
displayName: API Docs
|
||||
@@ -1190,12 +1190,12 @@ stages:
|
||||
submodules: true
|
||||
- powershell: Set-Service SCardSvr -StartupType Manual
|
||||
displayName: Enable Windows Test Service
|
||||
- task: SonarCloudPrepare@3
|
||||
- task: SonarCloudPrepare@2
|
||||
condition: eq(variables['System.PullRequest.IsFork'], 'False')
|
||||
inputs:
|
||||
SonarCloud: 'SonarCloud'
|
||||
organization: 'readarr'
|
||||
scannerMode: 'dotnet'
|
||||
scannerMode: 'MSBuild'
|
||||
projectKey: 'Readarr_Readarr'
|
||||
projectName: 'Readarr'
|
||||
projectVersion: '$(readarrVersion)'
|
||||
@@ -1208,10 +1208,10 @@ stages:
|
||||
./build.sh --backend -f net6.0 -r win-x64
|
||||
TEST_DIR=_tests/net6.0/win-x64/publish/ ./test.sh Windows Unit Coverage
|
||||
displayName: Coverage Unit Tests
|
||||
- task: SonarCloudAnalyze@3
|
||||
- task: SonarCloudAnalyze@2
|
||||
condition: eq(variables['System.PullRequest.IsFork'], 'False')
|
||||
displayName: Publish SonarCloud Results
|
||||
- task: reportgenerator@5.3.11
|
||||
- task: reportgenerator@5
|
||||
displayName: Generate Coverage Report
|
||||
inputs:
|
||||
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'
|
||||
|
||||
@@ -26,7 +26,6 @@ module.exports = (env) => {
|
||||
const config = {
|
||||
mode: isProduction ? 'production' : 'development',
|
||||
devtool: isProduction ? 'source-map' : 'eval-source-map',
|
||||
target: 'web',
|
||||
|
||||
stats: {
|
||||
children: false
|
||||
@@ -182,7 +181,7 @@ module.exports = (env) => {
|
||||
loose: true,
|
||||
debug: false,
|
||||
useBuiltIns: 'entry',
|
||||
corejs: '3.39'
|
||||
corejs: 3
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
22
package.json
22
package.json
@@ -25,10 +25,10 @@
|
||||
"defaults"
|
||||
],
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "6.7.1",
|
||||
"@fortawesome/fontawesome-svg-core": "6.7.1",
|
||||
"@fortawesome/free-regular-svg-icons": "6.7.1",
|
||||
"@fortawesome/free-solid-svg-icons": "6.7.1",
|
||||
"@fortawesome/fontawesome-free": "6.6.0",
|
||||
"@fortawesome/fontawesome-svg-core": "6.6.0",
|
||||
"@fortawesome/free-regular-svg-icons": "6.6.0",
|
||||
"@fortawesome/free-solid-svg-icons": "6.6.0",
|
||||
"@fortawesome/react-fontawesome": "0.2.2",
|
||||
"@microsoft/signalr": "6.0.25",
|
||||
"@sentry/browser": "7.119.1",
|
||||
@@ -86,13 +86,13 @@
|
||||
"typescript": "5.1.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.26.0",
|
||||
"@babel/eslint-parser": "7.25.9",
|
||||
"@babel/plugin-proposal-export-default-from": "7.25.9",
|
||||
"@babel/core": "7.25.8",
|
||||
"@babel/eslint-parser": "7.25.8",
|
||||
"@babel/plugin-proposal-export-default-from": "7.25.8",
|
||||
"@babel/plugin-syntax-dynamic-import": "7.8.3",
|
||||
"@babel/preset-env": "7.26.0",
|
||||
"@babel/preset-react": "7.26.3",
|
||||
"@babel/preset-typescript": "7.26.0",
|
||||
"@babel/preset-env": "7.25.8",
|
||||
"@babel/preset-react": "7.25.7",
|
||||
"@babel/preset-typescript": "7.25.7",
|
||||
"@types/lodash": "4.14.195",
|
||||
"@types/react-lazyload": "3.2.3",
|
||||
"@types/redux-actions": "2.6.5",
|
||||
@@ -102,7 +102,7 @@
|
||||
"babel-loader": "9.2.1",
|
||||
"babel-plugin-inline-classnames": "2.0.1",
|
||||
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
|
||||
"core-js": "3.39.0",
|
||||
"core-js": "3.38.1",
|
||||
"css-loader": "6.8.1",
|
||||
"css-modules-typescript-loader": "4.0.1",
|
||||
"eslint": "8.57.1",
|
||||
|
||||
@@ -99,35 +99,6 @@
|
||||
<RootNamespace Condition="'$(ReadarrProject)'=='true'">$(MSBuildProjectName.Replace('Readarr','NzbDrone'))</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TestProject)'!='true'">
|
||||
<!-- Annotates .NET assemblies with repository information including SHA -->
|
||||
<!-- Sentry uses this to link directly to GitHub at the exact version/file/line -->
|
||||
<!-- This is built-in on .NET 8 and can be removed once the project is updated -->
|
||||
<PackageReference Include="Microsoft.SourceLink.GitHub" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Sentry specific configuration: Only in Release mode -->
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||
<!-- https://docs.sentry.io/platforms/dotnet/configuration/msbuild/ -->
|
||||
<!-- OrgSlug, ProjectSlug and AuthToken are required.
|
||||
They can be set below, via argument to 'msbuild -p:' or environment variable -->
|
||||
<SentryOrg></SentryOrg>
|
||||
<SentryProject></SentryProject>
|
||||
<SentryUrl></SentryUrl> <!-- If empty, assumed to be sentry.io -->
|
||||
<SentryAuthToken></SentryAuthToken> <!-- Use env var instead: SENTRY_AUTH_TOKEN -->
|
||||
|
||||
<!-- Upload PDBs to Sentry, enabling stack traces with line numbers and file paths
|
||||
without the need to deploy the application with PDBs -->
|
||||
<SentryUploadSymbols>true</SentryUploadSymbols>
|
||||
|
||||
<!-- Source Link settings -->
|
||||
<!-- https://github.com/dotnet/sourcelink/blob/main/docs/README.md#publishrepositoryurl -->
|
||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||
<!-- Embeds all source code in the respective PDB. This can make it a bit bigger but since it'll be uploaded
|
||||
to Sentry and not distributed to run on the server, it helps debug crashes while making releases smaller -->
|
||||
<EmbedAllSources>true</EmbedAllSources>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Standard testing packages -->
|
||||
<ItemGroup Condition="'$(TestProject)'=='true'">
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" />
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<PackageVersion Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" />
|
||||
<PackageVersion Include="Equ" Version="2.3.0" />
|
||||
<PackageVersion Include="FluentAssertions" Version="5.10.3" />
|
||||
<PackageVersion Include="Polly" Version="8.5.1" />
|
||||
<PackageVersion Include="Polly" Version="8.4.2" />
|
||||
<PackageVersion Include="Servarr.FluentMigrator.Runner" Version="3.3.2.9" />
|
||||
<PackageVersion Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" />
|
||||
<PackageVersion Include="Servarr.FluentMigrator.Runner.Postgres" Version="3.3.2.9" />
|
||||
@@ -17,16 +17,14 @@
|
||||
<PackageVersion Include="Ical.Net" Version="4.3.1" />
|
||||
<PackageVersion Include="ImpromptuInterface" Version="7.0.1" />
|
||||
<PackageVersion Include="LazyCache" Version="2.4.0" />
|
||||
<PackageVersion Include="Mailkit" Version="4.8.0" />
|
||||
<PackageVersion Include="Mailkit" Version="3.6.0" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.35" />
|
||||
<PackageVersion Include="Microsoft.Data.SqlClient" Version="2.1.7" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
||||
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
|
||||
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
<PackageVersion Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr22" />
|
||||
<PackageVersion Include="Moq" Version="4.17.2" />
|
||||
@@ -36,28 +34,28 @@
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="5.2.3" />
|
||||
<PackageVersion Include="NLog" Version="5.1.4" />
|
||||
<PackageVersion Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||
<PackageVersion Include="Npgsql" Version="7.0.9" />
|
||||
<PackageVersion Include="Npgsql" Version="7.0.8" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageVersion Include="NUnit" Version="3.14.0" />
|
||||
<PackageVersion Include="NunitXml.TestLogger" Version="3.0.117" />
|
||||
<PackageVersion Include="PdfSharpCore" Version="1.3.65" />
|
||||
<PackageVersion Include="PdfSharpCore" Version="1.3.32" />
|
||||
<PackageVersion Include="RestSharp.Serializers.SystemTextJson" Version="106.15.0" />
|
||||
<PackageVersion Include="RestSharp" Version="106.15.0" />
|
||||
<PackageVersion Include="Selenium.Support" Version="3.141.0" />
|
||||
<PackageVersion Include="Selenium.WebDriver.ChromeDriver" Version="91.0.4472.10100" />
|
||||
<PackageVersion Include="Sentry" Version="4.0.2" />
|
||||
<PackageVersion Include="Sentry" Version="3.31.0" />
|
||||
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.6" />
|
||||
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.5" />
|
||||
<PackageVersion Include="StyleCop.Analyzers" Version="1.1.118" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.6.2" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" />
|
||||
<PackageVersion Include="System.Buffers" Version="4.6.0" />
|
||||
<PackageVersion Include="System.Buffers" Version="4.5.1" />
|
||||
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="6.0.1" />
|
||||
<PackageVersion Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||
<PackageVersion Include="System.IO.Abstractions.TestingHelpers" Version="17.0.24" />
|
||||
<PackageVersion Include="System.IO.Abstractions" Version="17.0.24" />
|
||||
<PackageVersion Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
|
||||
<PackageVersion Include="System.Memory" Version="4.6.0" />
|
||||
<PackageVersion Include="System.Memory" Version="4.5.5" />
|
||||
<PackageVersion Include="System.Reflection.TypeExtensions" Version="4.7.0" />
|
||||
<PackageVersion Include="System.Resources.Extensions" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Runtime.Loader" Version="4.3.0" />
|
||||
|
||||
@@ -21,28 +21,9 @@ namespace NzbDrone.Common.Test.ExtensionTests
|
||||
[TestCase("1.2.3.4")]
|
||||
[TestCase("172.55.0.1")]
|
||||
[TestCase("192.55.0.1")]
|
||||
[TestCase("100.64.0.1")]
|
||||
[TestCase("100.127.255.254")]
|
||||
public void should_return_false_for_public_ip_address(string ipAddress)
|
||||
{
|
||||
IPAddress.Parse(ipAddress).IsLocalAddress().Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("100.64.0.1")]
|
||||
[TestCase("100.127.255.254")]
|
||||
[TestCase("100.100.100.100")]
|
||||
public void should_return_true_for_cgnat_ip_address(string ipAddress)
|
||||
{
|
||||
IPAddress.Parse(ipAddress).IsCgnatIpAddress().Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("1.2.3.4")]
|
||||
[TestCase("192.168.5.1")]
|
||||
[TestCase("100.63.255.255")]
|
||||
[TestCase("100.128.0.0")]
|
||||
public void should_return_false_for_non_cgnat_ip_address(string ipAddress)
|
||||
{
|
||||
IPAddress.Parse(ipAddress).IsCgnatIpAddress().Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ using System.Linq;
|
||||
using FluentAssertions;
|
||||
using NLog;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Instrumentation.Sentry;
|
||||
using NzbDrone.Test.Common;
|
||||
|
||||
@@ -28,7 +27,7 @@ namespace NzbDrone.Common.Test.InstrumentationTests
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_subject = new SentryTarget("https://aaaaaaaaaaaaaaaaaaaaaaaaaa@sentry.io/111111", Mocker.GetMock<IAppFolderInfo>().Object);
|
||||
_subject = new SentryTarget("https://aaaaaaaaaaaaaaaaaaaaaaaaaa@sentry.io/111111");
|
||||
}
|
||||
|
||||
private LogEventInfo GivenLogEvent(LogLevel level, Exception ex, string message)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
@@ -316,5 +317,14 @@ namespace NzbDrone.Common.Test
|
||||
result[2].Should().Be(@"Music");
|
||||
result[3].Should().Be(@"Author Title");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_equal_with_different_unicode_representations()
|
||||
{
|
||||
var path1 = @"C:\Test\file.mkv".AsOsAgnostic().Normalize(NormalizationForm.FormC);
|
||||
var path2 = @"C:\Test\file.mkv".AsOsAgnostic().Normalize(NormalizationForm.FormD);
|
||||
|
||||
path1.PathEquals(path2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,18 +42,17 @@ namespace NzbDrone.Common
|
||||
|
||||
public void CreateZip(string path, IEnumerable<string> files)
|
||||
{
|
||||
_logger.Debug("Creating archive {0}", path);
|
||||
|
||||
using var zipFile = ZipFile.Create(path);
|
||||
|
||||
zipFile.BeginUpdate();
|
||||
|
||||
foreach (var file in files)
|
||||
using (var zipFile = ZipFile.Create(path))
|
||||
{
|
||||
zipFile.Add(file, Path.GetFileName(file));
|
||||
}
|
||||
zipFile.BeginUpdate();
|
||||
|
||||
zipFile.CommitUpdate();
|
||||
foreach (var file in files)
|
||||
{
|
||||
zipFile.Add(file, Path.GetFileName(file));
|
||||
}
|
||||
|
||||
zipFile.CommitUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
private void ExtractZip(string compressedFile, string destination)
|
||||
|
||||
@@ -39,24 +39,18 @@ namespace NzbDrone.Common.Extensions
|
||||
private static bool IsLocalIPv4(byte[] ipv4Bytes)
|
||||
{
|
||||
// Link local (no IP assigned by DHCP): 169.254.0.0 to 169.254.255.255 (169.254.0.0/16)
|
||||
var isLinkLocal = ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254;
|
||||
bool IsLinkLocal() => ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254;
|
||||
|
||||
// Class A private range: 10.0.0.0 – 10.255.255.255 (10.0.0.0/8)
|
||||
var isClassA = ipv4Bytes[0] == 10;
|
||||
bool IsClassA() => ipv4Bytes[0] == 10;
|
||||
|
||||
// Class B private range: 172.16.0.0 – 172.31.255.255 (172.16.0.0/12)
|
||||
var isClassB = ipv4Bytes[0] == 172 && ipv4Bytes[1] >= 16 && ipv4Bytes[1] <= 31;
|
||||
bool IsClassB() => ipv4Bytes[0] == 172 && ipv4Bytes[1] >= 16 && ipv4Bytes[1] <= 31;
|
||||
|
||||
// Class C private range: 192.168.0.0 – 192.168.255.255 (192.168.0.0/16)
|
||||
var isClassC = ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168;
|
||||
bool IsClassC() => ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168;
|
||||
|
||||
return isLinkLocal || isClassA || isClassC || isClassB;
|
||||
}
|
||||
|
||||
public static bool IsCgnatIpAddress(this IPAddress ipAddress)
|
||||
{
|
||||
var bytes = ipAddress.GetAddressBytes();
|
||||
return bytes.Length == 4 && bytes[0] == 100 && bytes[1] >= 64 && bytes[1] <= 127;
|
||||
return IsLinkLocal() || IsClassA() || IsClassC() || IsClassB();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,10 @@ namespace NzbDrone.Common.Extensions
|
||||
|
||||
public static bool PathEquals(this string firstPath, string secondPath, StringComparison? comparison = null)
|
||||
{
|
||||
// Normalize paths to ensure unicode characters are represented the same way
|
||||
firstPath = firstPath.Normalize();
|
||||
secondPath = secondPath?.Normalize();
|
||||
|
||||
if (!comparison.HasValue)
|
||||
{
|
||||
comparison = DiskProviderBase.PathStringComparison;
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
RegisterDebugger();
|
||||
}
|
||||
|
||||
RegisterSentry(updateApp, appFolderInfo);
|
||||
RegisterSentry(updateApp);
|
||||
|
||||
if (updateApp)
|
||||
{
|
||||
@@ -62,7 +62,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
LogManager.ReconfigExistingLoggers();
|
||||
}
|
||||
|
||||
private static void RegisterSentry(bool updateClient, IAppFolderInfo appFolderInfo)
|
||||
private static void RegisterSentry(bool updateClient)
|
||||
{
|
||||
string dsn;
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
: "https://31e00a6c63ea42c8b5fe70358526a30d@sentry.servarr.com/4";
|
||||
}
|
||||
|
||||
var target = new SentryTarget(dsn, appFolderInfo)
|
||||
var target = new SentryTarget(dsn)
|
||||
{
|
||||
Name = "sentryTarget",
|
||||
Layout = "${message}"
|
||||
|
||||
@@ -9,7 +9,6 @@ using NLog;
|
||||
using NLog.Common;
|
||||
using NLog.Targets;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using Sentry;
|
||||
|
||||
namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
@@ -100,7 +99,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
public bool FilterEvents { get; set; }
|
||||
public bool SentryEnabled { get; set; }
|
||||
|
||||
public SentryTarget(string dsn, IAppFolderInfo appFolderInfo)
|
||||
public SentryTarget(string dsn)
|
||||
{
|
||||
_sdk = SentrySdk.Init(o =>
|
||||
{
|
||||
@@ -108,33 +107,9 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
o.AttachStacktrace = true;
|
||||
o.MaxBreadcrumbs = 200;
|
||||
o.Release = $"{BuildInfo.AppName}@{BuildInfo.Release}";
|
||||
o.SetBeforeSend(x => SentryCleanser.CleanseEvent(x));
|
||||
o.SetBeforeBreadcrumb(x => SentryCleanser.CleanseBreadcrumb(x));
|
||||
o.BeforeSend = x => SentryCleanser.CleanseEvent(x);
|
||||
o.BeforeBreadcrumb = x => SentryCleanser.CleanseBreadcrumb(x);
|
||||
o.Environment = BuildInfo.Branch;
|
||||
|
||||
// Crash free run statistics (sends a ping for healthy and for crashes sessions)
|
||||
o.AutoSessionTracking = false;
|
||||
|
||||
// Caches files in the event device is offline
|
||||
// Sentry creates a 'sentry' sub directory, no need to concat here
|
||||
o.CacheDirectoryPath = appFolderInfo.GetAppDataPath();
|
||||
|
||||
// default environment is production
|
||||
if (!RuntimeInfo.IsProduction)
|
||||
{
|
||||
if (RuntimeInfo.IsDevelopment)
|
||||
{
|
||||
o.Environment = "development";
|
||||
}
|
||||
else if (RuntimeInfo.IsTesting)
|
||||
{
|
||||
o.Environment = "testing";
|
||||
}
|
||||
else
|
||||
{
|
||||
o.Environment = "other";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
InitializeScope();
|
||||
@@ -152,7 +127,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
{
|
||||
SentrySdk.ConfigureScope(scope =>
|
||||
{
|
||||
scope.User = new SentryUser
|
||||
scope.User = new User
|
||||
{
|
||||
Id = HashUtil.AnonymousToken()
|
||||
};
|
||||
@@ -194,7 +169,9 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
|
||||
private void OnError(Exception ex)
|
||||
{
|
||||
if (ex is WebException webException)
|
||||
var webException = ex as WebException;
|
||||
|
||||
if (webException != null)
|
||||
{
|
||||
var response = webException.Response as HttpWebResponse;
|
||||
var statusCode = response?.StatusCode;
|
||||
@@ -313,21 +290,13 @@ namespace NzbDrone.Common.Instrumentation.Sentry
|
||||
}
|
||||
}
|
||||
|
||||
var level = LoggingLevelMap[logEvent.Level];
|
||||
var sentryEvent = new SentryEvent(logEvent.Exception)
|
||||
{
|
||||
Level = level,
|
||||
Level = LoggingLevelMap[logEvent.Level],
|
||||
Logger = logEvent.LoggerName,
|
||||
Message = logEvent.FormattedMessage
|
||||
};
|
||||
|
||||
if (level is SentryLevel.Fatal && logEvent.Exception is not null)
|
||||
{
|
||||
// Usages of 'fatal' here indicates the process will crash. In Sentry this is represented with
|
||||
// the 'unhandled' exception flag
|
||||
logEvent.Exception.SetSentryMechanism("Logger.Fatal", "Logger.Fatal was called", false);
|
||||
}
|
||||
|
||||
sentryEvent.SetExtras(extras);
|
||||
sentryEvent.SetFingerprint(fingerPrint);
|
||||
|
||||
|
||||
@@ -6,5 +6,4 @@ public class AuthOptions
|
||||
public bool? Enabled { get; set; }
|
||||
public string Method { get; set; }
|
||||
public string Required { get; set; }
|
||||
public bool? TrustCgnatIpAddresses { get; set; }
|
||||
}
|
||||
|
||||
@@ -21,10 +21,10 @@ namespace NzbDrone.Common
|
||||
{
|
||||
if (OsInfo.IsWindows)
|
||||
{
|
||||
return obj.CleanFilePath().ToLower().GetHashCode();
|
||||
return obj.CleanFilePath().Normalize().ToLower().GetHashCode();
|
||||
}
|
||||
|
||||
return obj.CleanFilePath().GetHashCode();
|
||||
return obj.CleanFilePath().Normalize().GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +313,7 @@ namespace NzbDrone.Common.Processes
|
||||
processInfo = new ProcessInfo();
|
||||
processInfo.Id = process.Id;
|
||||
processInfo.Name = process.ProcessName;
|
||||
processInfo.StartPath = process.MainModule?.FileName;
|
||||
processInfo.StartPath = process.MainModule.FileName;
|
||||
|
||||
if (process.Id != GetCurrentProcessId() && process.HasExited)
|
||||
{
|
||||
|
||||
@@ -178,9 +178,8 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
VerifyWarning(item);
|
||||
}
|
||||
|
||||
[TestCase("pausedDL")]
|
||||
[TestCase("stoppedDL")]
|
||||
public void paused_item_should_have_required_properties(string state)
|
||||
[Test]
|
||||
public void paused_item_should_have_required_properties()
|
||||
{
|
||||
var torrent = new QBittorrentTorrent
|
||||
{
|
||||
@@ -189,7 +188,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 0.7,
|
||||
Eta = 8640000,
|
||||
State = state,
|
||||
State = "pausedDL",
|
||||
Label = "",
|
||||
SavePath = ""
|
||||
};
|
||||
@@ -201,7 +200,6 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
[TestCase("queuedUP")]
|
||||
[TestCase("uploading")]
|
||||
[TestCase("stalledUP")]
|
||||
@@ -399,9 +397,8 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
result.OutputPath.FullPath.Should().Be(Path.Combine(torrent.SavePath, "Droned.S01.12"));
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void api_261_should_use_content_path(string state)
|
||||
[Test]
|
||||
public void api_261_should_use_content_path()
|
||||
{
|
||||
var torrent = new QBittorrentTorrent
|
||||
{
|
||||
@@ -410,7 +407,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 0.7,
|
||||
Eta = 8640000,
|
||||
State = state,
|
||||
State = "pausedUP",
|
||||
Label = "",
|
||||
SavePath = @"C:\Torrents".AsOsAgnostic(),
|
||||
ContentPath = @"C:\Torrents\Droned.S01.12".AsOsAgnostic()
|
||||
@@ -687,96 +684,44 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_is_not_set(string state)
|
||||
[Test]
|
||||
public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_is_not_set()
|
||||
{
|
||||
GivenGlobalSeedLimits(-1);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_and_paused(string state)
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_after_rounding_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.1006066990976857f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_just_under_max_ratio_reached_after_rounding_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
GivenCompletedTorrent(state, ratio: 0.9999f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_and_paused(string state)
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f, ratioLimit: 0.8f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f, ratioLimit: 0.8f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_after_rounding_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.1006066990976857f, ratioLimit: 1.1f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_just_under_overridden_max_ratio_reached_after_rounding_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f);
|
||||
GivenCompletedTorrent(state, ratio: 0.9999f, ratioLimit: 1.0f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_if_overridden_max_ratio_not_reached_and_paused(string state)
|
||||
[Test]
|
||||
public void should_not_be_removable_if_overridden_max_ratio_not_reached_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(0.2f);
|
||||
GivenCompletedTorrent(state, ratio: 0.5f, ratioLimit: 0.8f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 0.5f, ratioLimit: 0.8f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
@@ -794,36 +739,33 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_and_paused(string state)
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 20);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_seedingtime_reached_and_paused(string state)
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_seedingtime_reached_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 40);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20, seedingTimeLimit: 10);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20, seedingTimeLimit: 10);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_if_overridden_max_seedingtime_not_reached_and_paused(string state)
|
||||
[Test]
|
||||
public void should_not_be_removable_if_overridden_max_seedingtime_not_reached_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 20);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 30, seedingTimeLimit: 40);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 30, seedingTimeLimit: 40);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
@@ -841,72 +783,66 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_and_paused(string state)
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 20);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_inactive_seedingtime_reached_and_paused(string state)
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_inactive_seedingtime_reached_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 40);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20, inactiveSeedingTimeLimit: 10, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(15)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20, inactiveSeedingTimeLimit: 10, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(15)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_if_overridden_max_inactive_seedingtime_not_reached_and_paused(string state)
|
||||
[Test]
|
||||
public void should_not_be_removable_if_overridden_max_inactive_seedingtime_not_reached_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 20);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 30, inactiveSeedingTimeLimit: 40, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(30)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 30, inactiveSeedingTimeLimit: 40, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(30)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_but_ratio_not_and_paused(string state)
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_but_ratio_not_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f, 20);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f, seedingTime: 30);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f, seedingTime: 30);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_but_ratio_not_and_paused(string state)
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_but_ratio_not_and_paused()
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f, maxInactiveSeedingTime: 20);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_fetch_details_twice(string state)
|
||||
[Test]
|
||||
public void should_not_fetch_details_twice()
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 30);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
@@ -918,9 +854,8 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
.Verify(p => p.GetTorrentProperties(It.IsAny<string>(), It.IsAny<QBittorrentSettings>()), Times.Once());
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_get_category_from_the_category_if_set(string state)
|
||||
[Test]
|
||||
public void should_get_category_from_the_category_if_set()
|
||||
{
|
||||
const string category = "music-readarr";
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
@@ -932,7 +867,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 1.0,
|
||||
Eta = 8640000,
|
||||
State = state,
|
||||
State = "pausedUP",
|
||||
Category = category,
|
||||
SavePath = "",
|
||||
Ratio = 1.0f
|
||||
@@ -944,9 +879,8 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.Category.Should().Be(category);
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_get_category_from_the_label_if_the_category_is_not_available(string state)
|
||||
[Test]
|
||||
public void should_get_category_from_the_label_if_the_category_is_not_available()
|
||||
{
|
||||
const string category = "music-readarr";
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
@@ -958,7 +892,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 1.0,
|
||||
Eta = 8640000,
|
||||
State = state,
|
||||
State = "pausedUP",
|
||||
Label = category,
|
||||
SavePath = "",
|
||||
Ratio = 1.0f
|
||||
|
||||
@@ -478,37 +478,6 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||
downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("all", 0)]
|
||||
[TestCase("days-archive", 15)]
|
||||
[TestCase("days-delete", 15)]
|
||||
public void should_set_history_removes_completed_downloads_false_for_separate_properties(string option, int number)
|
||||
{
|
||||
_config.Misc.history_retention_option = option;
|
||||
_config.Misc.history_retention_number = number;
|
||||
|
||||
var downloadClientInfo = Subject.GetStatus();
|
||||
|
||||
downloadClientInfo.RemovesCompletedDownloads.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("number-archive", 10)]
|
||||
[TestCase("number-delete", 10)]
|
||||
[TestCase("number-archive", 0)]
|
||||
[TestCase("number-delete", 0)]
|
||||
[TestCase("days-archive", 3)]
|
||||
[TestCase("days-delete", 3)]
|
||||
[TestCase("all-archive", 0)]
|
||||
[TestCase("all-delete", 0)]
|
||||
public void should_set_history_removes_completed_downloads_true_for_separate_properties(string option, int number)
|
||||
{
|
||||
_config.Misc.history_retention_option = option;
|
||||
_config.Misc.history_retention_number = number;
|
||||
|
||||
var downloadClientInfo = Subject.GetStatus();
|
||||
|
||||
downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase(@"Y:\nzbget\root", @"completed\downloads", @"vv", @"Y:\nzbget\root\completed\downloads", @"Y:\nzbget\root\completed\downloads\vv")]
|
||||
[TestCase(@"Y:\nzbget\root", @"completed", @"vv", @"Y:\nzbget\root\completed", @"Y:\nzbget\root\completed\vv")]
|
||||
[TestCase(@"/nzbget/root", @"completed/downloads", @"vv", @"/nzbget/root/completed/downloads", @"/nzbget/root/completed/downloads/vv")]
|
||||
|
||||
@@ -13,7 +13,7 @@ using NzbDrone.Core.Test.Framework;
|
||||
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
public class BookInfoProxyFixture : CoreTest<BookInfoProxy>
|
||||
{
|
||||
private MetadataProfile _metadataProfile;
|
||||
|
||||
@@ -15,7 +15,7 @@ using NzbDrone.Test.Common;
|
||||
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
public class BookInfoProxySearchFixture : CoreTest<BookInfoProxy>
|
||||
{
|
||||
[SetUp]
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
|
||||
[TestCase("Harry Potter and the sorcerer's stone a detailed summary", 72245296)]
|
||||
[TestCase("B0192CTMYG", 61209488)]
|
||||
[TestCase("9780439554930", 3)]
|
||||
[TestCase("9780439554930", 48517161)]
|
||||
public void successful_book_search(string title, int expected)
|
||||
{
|
||||
var result = Subject.Search(title);
|
||||
|
||||
@@ -66,19 +66,12 @@ namespace NzbDrone.Core.Backup
|
||||
{
|
||||
_logger.ProgressInfo("Starting Backup");
|
||||
|
||||
var backupFolder = GetBackupFolder(backupType);
|
||||
|
||||
_diskProvider.EnsureFolder(_backupTempFolder);
|
||||
_diskProvider.EnsureFolder(backupFolder);
|
||||
|
||||
if (!_diskProvider.FolderWritable(backupFolder))
|
||||
{
|
||||
throw new UnauthorizedAccessException($"Backup folder {backupFolder} is not writable");
|
||||
}
|
||||
_diskProvider.EnsureFolder(GetBackupFolder(backupType));
|
||||
|
||||
var dateNow = DateTime.Now;
|
||||
var backupFilename = $"readarr_backup_v{BuildInfo.Version}_{dateNow:yyyy.MM.dd_HH.mm.ss}.zip";
|
||||
var backupPath = Path.Combine(backupFolder, backupFilename);
|
||||
var backupPath = Path.Combine(GetBackupFolder(backupType), backupFilename);
|
||||
|
||||
Cleanup();
|
||||
|
||||
|
||||
@@ -53,7 +53,6 @@ namespace NzbDrone.Core.Configuration
|
||||
string SyslogServer { get; }
|
||||
int SyslogPort { get; }
|
||||
string SyslogLevel { get; }
|
||||
string Theme { get; }
|
||||
string PostgresHost { get; }
|
||||
int PostgresPort { get; }
|
||||
string PostgresUser { get; }
|
||||
@@ -61,7 +60,7 @@ namespace NzbDrone.Core.Configuration
|
||||
string PostgresMainDb { get; }
|
||||
string PostgresLogDb { get; }
|
||||
string PostgresCacheDb { get; }
|
||||
bool TrustCgnatIpAddresses { get; }
|
||||
string Theme { get; }
|
||||
}
|
||||
|
||||
public class ConfigFileProvider : IConfigFileProvider
|
||||
@@ -463,7 +462,5 @@ namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
SetValue("ApiKey", GenerateApiKey());
|
||||
}
|
||||
|
||||
public bool TrustCgnatIpAddresses => _authOptions.TrustCgnatIpAddresses ?? GetValueBoolean("TrustCgnatIpAddresses", false, persist: false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,12 +404,6 @@ namespace NzbDrone.Core.Configuration
|
||||
|
||||
public string ApplicationUrl => GetValue("ApplicationUrl", string.Empty);
|
||||
|
||||
public bool TrustCgnatIpAddresses
|
||||
{
|
||||
get { return GetValueBoolean("TrustCgnatIpAddresses", false); }
|
||||
set { SetValue("TrustCgnatIpAddresses", value); }
|
||||
}
|
||||
|
||||
private string GetValue(string key)
|
||||
{
|
||||
return GetValue(key, string.Empty);
|
||||
|
||||
@@ -239,7 +239,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
|
||||
// Avoid removing torrents that haven't reached the global max ratio.
|
||||
// Removal also requires the torrent to be paused, in case a higher max ratio was set on the torrent itself (which is not exposed by the api).
|
||||
item.CanMoveFiles = item.CanBeRemoved = torrent.State is "pausedUP" or "stoppedUP" && HasReachedSeedLimit(torrent, config);
|
||||
item.CanMoveFiles = item.CanBeRemoved = torrent.State == "pausedUP" && HasReachedSeedLimit(torrent, config);
|
||||
|
||||
switch (torrent.State)
|
||||
{
|
||||
@@ -248,8 +248,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
item.Message = "qBittorrent is reporting an error";
|
||||
break;
|
||||
|
||||
case "stoppedDL": // torrent is stopped and has NOT finished downloading
|
||||
case "pausedDL": // torrent is paused and has NOT finished downloading (qBittorrent < 5)
|
||||
case "pausedDL": // torrent is paused and has NOT finished downloading
|
||||
item.Status = DownloadItemStatus.Paused;
|
||||
break;
|
||||
|
||||
@@ -260,8 +259,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
item.Status = DownloadItemStatus.Queued;
|
||||
break;
|
||||
|
||||
case "pausedUP": // torrent is paused and has finished downloading (qBittorent < 5)
|
||||
case "stoppedUP": // torrent is stopped and has finished downloading
|
||||
case "pausedUP": // torrent is paused and has finished downloading
|
||||
case "uploading": // torrent is being seeded and data is being transferred
|
||||
case "stalledUP": // torrent is being seeded, but no connection were made
|
||||
case "queuedUP": // queuing is enabled and torrent is queued for upload
|
||||
@@ -620,14 +618,14 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
if (torrent.RatioLimit >= 0)
|
||||
{
|
||||
if (torrent.RatioLimit - torrent.Ratio <= 0.001f)
|
||||
if (torrent.Ratio >= torrent.RatioLimit)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (torrent.RatioLimit == -2 && config.MaxRatioEnabled)
|
||||
{
|
||||
if (config.MaxRatio - torrent.Ratio <= 0.001f)
|
||||
if (Math.Round(torrent.Ratio, 2) >= config.MaxRatio)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
Dictionary<string, QBittorrentLabel> GetLabels(QBittorrentSettings settings);
|
||||
void SetTorrentSeedingConfiguration(string hash, TorrentSeedConfiguration seedConfiguration, QBittorrentSettings settings);
|
||||
void MoveTorrentToTopInQueue(string hash, QBittorrentSettings settings);
|
||||
void PauseTorrent(string hash, QBittorrentSettings settings);
|
||||
void ResumeTorrent(string hash, QBittorrentSettings settings);
|
||||
void SetForceStart(string hash, bool enabled, QBittorrentSettings settings);
|
||||
}
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
request.AddFormParameter("paused", false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
|
||||
{
|
||||
request.AddFormParameter("paused", true);
|
||||
}
|
||||
@@ -178,7 +178,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
request.AddFormParameter("paused", false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
|
||||
{
|
||||
request.AddFormParameter("paused", true);
|
||||
}
|
||||
@@ -214,7 +214,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
catch (DownloadClientException ex)
|
||||
{
|
||||
// if setCategory fails due to method not being found, then try older setLabel command for qBittorrent < v.3.3.5
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.NotFound)
|
||||
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
var setLabelRequest = BuildRequest(settings).Resource("/command/setLabel")
|
||||
.Post()
|
||||
@@ -257,7 +257,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
catch (DownloadClientException ex)
|
||||
{
|
||||
// qBittorrent rejects all Prio commands with 403: Forbidden if Options -> BitTorrent -> Torrent Queueing is not enabled
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Forbidden)
|
||||
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Forbidden)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -266,6 +266,22 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
}
|
||||
}
|
||||
|
||||
public void PauseTorrent(string hash, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/command/pause")
|
||||
.Post()
|
||||
.AddFormParameter("hash", hash);
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public void ResumeTorrent(string hash, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/command/resume")
|
||||
.Post()
|
||||
.AddFormParameter("hash", hash);
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public void SetForceStart(string hash, bool enabled, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/command/setForceStart")
|
||||
|
||||
@@ -246,20 +246,14 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
request.AddFormParameter("category", settings.MusicCategory);
|
||||
}
|
||||
|
||||
// Avoid extraneous API version check if initial state is ForceStart
|
||||
if ((QBittorrentState)settings.InitialState is QBittorrentState.Start or QBittorrentState.Stop)
|
||||
// Note: ForceStart is handled by separate api call
|
||||
if ((QBittorrentState)settings.InitialState == QBittorrentState.Start)
|
||||
{
|
||||
var stoppedParameterName = GetApiVersion(settings) >= new Version(2, 11, 0) ? "stopped" : "paused";
|
||||
|
||||
// Note: ForceStart is handled by separate api call
|
||||
if ((QBittorrentState)settings.InitialState == QBittorrentState.Start)
|
||||
{
|
||||
request.AddFormParameter(stoppedParameterName, false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
|
||||
{
|
||||
request.AddFormParameter(stoppedParameterName, true);
|
||||
}
|
||||
request.AddFormParameter("paused", false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
|
||||
{
|
||||
request.AddFormParameter("paused", true);
|
||||
}
|
||||
|
||||
if (settings.SequentialOrder)
|
||||
@@ -297,7 +291,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
catch (DownloadClientException ex)
|
||||
{
|
||||
// setShareLimits was added in api v2.0.1 so catch it case of the unlikely event that someone has api v2.0
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.NotFound)
|
||||
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -319,7 +313,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
catch (DownloadClientException ex)
|
||||
{
|
||||
// qBittorrent rejects all Prio commands with 409: Conflict if Options -> BitTorrent -> Torrent Queueing is not enabled
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Conflict)
|
||||
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Conflict)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -328,6 +322,22 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
}
|
||||
}
|
||||
|
||||
public void PauseTorrent(string hash, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/api/v2/torrents/pause")
|
||||
.Post()
|
||||
.AddFormParameter("hashes", hash);
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public void ResumeTorrent(string hash, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/api/v2/torrents/resume")
|
||||
.Post()
|
||||
.AddFormParameter("hashes", hash);
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public void SetForceStart(string hash, bool enabled, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/api/v2/torrents/setForceStart")
|
||||
|
||||
@@ -1,16 +1,9 @@
|
||||
using NzbDrone.Core.Annotations;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
public enum QBittorrentState
|
||||
{
|
||||
[FieldOption(Label = "Started")]
|
||||
Start = 0,
|
||||
|
||||
[FieldOption(Label = "Force Started")]
|
||||
ForceStart = 1,
|
||||
|
||||
[FieldOption(Label = "Stopped")]
|
||||
Stop = 2
|
||||
Pause = 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,7 +263,20 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
status.OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, category.FullPath) };
|
||||
}
|
||||
|
||||
status.RemovesCompletedDownloads = RemovesCompletedDownloads(config);
|
||||
if (config.Misc.history_retention.IsNullOrWhiteSpace())
|
||||
{
|
||||
status.RemovesCompletedDownloads = false;
|
||||
}
|
||||
else if (config.Misc.history_retention.EndsWith("d"))
|
||||
{
|
||||
int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1),
|
||||
out var daysRetention);
|
||||
status.RemovesCompletedDownloads = daysRetention < 14;
|
||||
}
|
||||
else
|
||||
{
|
||||
status.RemovesCompletedDownloads = config.Misc.history_retention != "0";
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -505,43 +518,6 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
return categories.Contains(category);
|
||||
}
|
||||
|
||||
private bool RemovesCompletedDownloads(SabnzbdConfig config)
|
||||
{
|
||||
var retention = config.Misc.history_retention;
|
||||
var option = config.Misc.history_retention_option;
|
||||
var number = config.Misc.history_retention_number;
|
||||
|
||||
switch (option)
|
||||
{
|
||||
case "all":
|
||||
return false;
|
||||
case "number-archive":
|
||||
case "number-delete":
|
||||
return true;
|
||||
case "days-archive":
|
||||
case "days-delete":
|
||||
return number < 14;
|
||||
case "all-archive":
|
||||
case "all-delete":
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: Remove these checks once support for SABnzbd < 4.3 is removed
|
||||
if (retention.IsNullOrWhiteSpace())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (retention.EndsWith("d"))
|
||||
{
|
||||
int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1),
|
||||
out var daysRetention);
|
||||
return daysRetention < 14;
|
||||
}
|
||||
|
||||
return retention != "0";
|
||||
}
|
||||
|
||||
private bool ValidatePath(DownloadClientItem downloadClientItem)
|
||||
{
|
||||
var downloadItemOutputPath = downloadClientItem.OutputPath;
|
||||
|
||||
@@ -30,8 +30,6 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
public bool enable_date_sorting { get; set; }
|
||||
public bool pre_check { get; set; }
|
||||
public string history_retention { get; set; }
|
||||
public string history_retention_option { get; set; }
|
||||
public int history_retention_number { get; set; }
|
||||
}
|
||||
|
||||
public class SabnzbdCategory
|
||||
|
||||
@@ -4,7 +4,6 @@ using System.Net;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Cache;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
@@ -209,7 +208,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
|
||||
private void AuthenticateClient(HttpRequestBuilder requestBuilder, TransmissionSettings settings, bool reauthenticate = false)
|
||||
{
|
||||
var authKey = $"{requestBuilder.BaseUrl}:{settings.Password}";
|
||||
var authKey = string.Format("{0}:{1}", requestBuilder.BaseUrl, settings.Password);
|
||||
|
||||
var sessionId = _authSessionIDCache.Find(authKey);
|
||||
|
||||
@@ -221,26 +220,24 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
authLoginRequest.SuppressHttpError = true;
|
||||
|
||||
var response = _httpClient.Execute(authLoginRequest);
|
||||
|
||||
switch (response.StatusCode)
|
||||
if (response.StatusCode == HttpStatusCode.MovedPermanently)
|
||||
{
|
||||
case HttpStatusCode.MovedPermanently:
|
||||
var url = response.Headers.GetSingleValue("Location");
|
||||
var url = response.Headers.GetSingleValue("Location");
|
||||
|
||||
throw new DownloadClientException("Remote site redirected to " + url);
|
||||
case HttpStatusCode.Forbidden:
|
||||
throw new DownloadClientException($"Failed to authenticate with Transmission. It may be necessary to add {BuildInfo.AppName}'s IP address to RPC whitelist.");
|
||||
case HttpStatusCode.Conflict:
|
||||
sessionId = response.Headers.GetSingleValue("X-Transmission-Session-Id");
|
||||
throw new DownloadClientException("Remote site redirected to " + url);
|
||||
}
|
||||
else if (response.StatusCode == HttpStatusCode.Conflict)
|
||||
{
|
||||
sessionId = response.Headers.GetSingleValue("X-Transmission-Session-Id");
|
||||
|
||||
if (sessionId == null)
|
||||
{
|
||||
throw new DownloadClientException("Remote host did not return a Session Id.");
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
throw new DownloadClientAuthenticationException("Failed to authenticate with Transmission.");
|
||||
if (sessionId == null)
|
||||
{
|
||||
throw new DownloadClientException("Remote host did not return a Session Id.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new DownloadClientAuthenticationException("Failed to authenticate with Transmission.");
|
||||
}
|
||||
|
||||
_logger.Debug("Transmission authentication succeeded.");
|
||||
|
||||
@@ -184,7 +184,7 @@ namespace NzbDrone.Core.ImportLists
|
||||
report.BookGoodreadsId = remoteBook.ForeignBookId;
|
||||
report.Book = remoteBook.Title;
|
||||
report.Author ??= remoteBook.AuthorMetadata.Value.Name;
|
||||
report.AuthorGoodreadsId ??= remoteBook.AuthorMetadata.Value.ForeignAuthorId;
|
||||
report.AuthorGoodreadsId ??= remoteBook.AuthorMetadata.Value.Name;
|
||||
}
|
||||
catch (BookNotFoundException)
|
||||
{
|
||||
|
||||
@@ -784,17 +784,5 @@
|
||||
"DisabledForLocalAddresses": "Desactivat per a adreces locals",
|
||||
"Enabled": "Habilitat",
|
||||
"External": "Extern",
|
||||
"ApiKey": "Clau API",
|
||||
"FailedToFetchUpdates": "No s'han pogut obtenir les actualitzacions",
|
||||
"AptUpdater": "Utilitzeu apt per a instal·lar l'actualització",
|
||||
"BuiltIn": "Integrat",
|
||||
"CurrentlyInstalled": "Instal·lat actualment",
|
||||
"DockerUpdater": "actualitzeu el contenidor Docker per a rebre l'actualització",
|
||||
"ExternalUpdater": "{appName} està configurat per a utilitzar un mecanisme d'actualització extern",
|
||||
"InstallLatest": "Instal·la l'últim",
|
||||
"OnLatestVersion": "La darrera versió de {appName} ja està instal·lada",
|
||||
"Script": "Script",
|
||||
"UnmappedFiles": "Carpetes sense mapejar",
|
||||
"UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,",
|
||||
"AddMissing": "Afegeix faltants"
|
||||
"ApiKey": "Clau API"
|
||||
}
|
||||
|
||||
@@ -13,26 +13,26 @@
|
||||
"60MinutesSixty": "60 minut: {0}",
|
||||
"About": "O aplikaci",
|
||||
"AddListExclusion": "Přidat vyloučení seznamu",
|
||||
"AddingTag": "Přidávání štítku",
|
||||
"AddingTag": "Přidání značky",
|
||||
"AgeWhenGrabbed": "Stáří (kdy bylo získáno)",
|
||||
"AlreadyInYourLibrary": "Již máte ve své knihovně",
|
||||
"AlternateTitles": "Alternativní název",
|
||||
"Analytics": "Analýzy",
|
||||
"AnalyticsEnabledHelpText": "Odesílejte anonymní informace o použití a chybách na servery {appName}u. To zahrnuje informace o vašem prohlížeči, které stránky {appName} WebUI používáte, hlášení chyb a také verzi operačního systému a běhového prostředí. Tyto informace použijeme k upřednostnění funkcí a oprav chyb.",
|
||||
"AppDataDirectory": "Adresář AppData",
|
||||
"ApplyTags": "Použít štítky",
|
||||
"ApplyTags": "Použít značky",
|
||||
"Authentication": "Ověřování",
|
||||
"AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k {appName}u",
|
||||
"AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k {appName}",
|
||||
"AuthorClickToChangeBook": "Kliknutím změníte film",
|
||||
"AutoRedownloadFailedHelpText": "Automatické vyhledání a pokus o stažení jiného vydání",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Filmy odstraněné z disku jsou automaticky sledovány v {appName}u",
|
||||
"Automatic": "Automatický",
|
||||
"BackupFolderHelpText": "Relativní cesty budou v adresáři AppData společnosti {appName}",
|
||||
"BackupNow": "Zálohovat nyní",
|
||||
"BackupNow": "Ihned zálohovat",
|
||||
"BackupRetentionHelpText": "Automatické zálohy starší než doba uchovávání budou automaticky vyčištěny",
|
||||
"Backups": "Zálohy",
|
||||
"BindAddress": "Vázat adresu",
|
||||
"BindAddressHelpText": "Platná IP adresa, localhost nebo ‚*‘ pro všechna rozhraní",
|
||||
"BindAddressHelpText": "Platná IP adresa, localhost nebo '*' pro všechna rozhraní",
|
||||
"BindAddressHelpTextWarning": "Vyžaduje restart, aby se projevilo",
|
||||
"BookIsDownloading": "Film se stahuje",
|
||||
"BookIsDownloadingInterp": "Film se stahuje - {0}% {1}",
|
||||
@@ -41,8 +41,8 @@
|
||||
"Calendar": "Kalendář",
|
||||
"CalendarWeekColumnHeaderHelpText": "Zobrazuje se nad každým sloupcem, když je aktivní zobrazení týden",
|
||||
"Cancel": "Zrušit",
|
||||
"CancelPendingTask": "Opravdu chcete zrušit tento úkol čekající na vyřízení?",
|
||||
"CertificateValidation": "Ověřování certifikátu",
|
||||
"CancelPendingTask": "Opravdu chcete zrušit tento nevyřízený úkol?",
|
||||
"CertificateValidation": "Ověření certifikátu",
|
||||
"CertificateValidationHelpText": "Změňte přísnost ověřování certifikátů HTTPS. Neměňte, pokud nerozumíte rizikům.",
|
||||
"ChangeFileDate": "Změnit datum souboru",
|
||||
"ChangeHasNotBeenSavedYet": "Změna ještě nebyla uložena",
|
||||
@@ -51,7 +51,7 @@
|
||||
"ChmodFolderHelpTextWarning": "Funguje to pouze v případě, že je uživatel souboru {appName} vlastníkem souboru. Je lepší zajistit, aby stahovací klient správně nastavil oprávnění.",
|
||||
"ChownGroupHelpText": "Název skupiny nebo gid. Použijte gid pro vzdálené systémy souborů.",
|
||||
"ChownGroupHelpTextWarning": "Funguje to pouze v případě, že je uživatel souboru {appName} vlastníkem souboru. Je lepší zajistit, aby stahovací klient používal stejnou skupinu jako {appName}.",
|
||||
"Clear": "Vymazat",
|
||||
"Clear": "Vyčistit",
|
||||
"ClickToChangeQuality": "Kliknutím změníte kvalitu",
|
||||
"ClientPriority": "Priorita klienta",
|
||||
"CloneIndexer": "Klonovat indexátor",
|
||||
@@ -68,7 +68,7 @@
|
||||
"CutoffHelpText": "Jakmile je této kvality dosaženo, {appName} již nebude stahovat filmy",
|
||||
"CutoffUnmet": "Mezní hodnota nesplněna",
|
||||
"DatabaseMigration": "Migrace databáze",
|
||||
"Dates": "Data",
|
||||
"Dates": "Termíny",
|
||||
"DelayProfile": "Profil zpoždění",
|
||||
"DelayProfiles": "Profily zpoždění",
|
||||
"DelayingDownloadUntilInterp": "Zpoždění stahování do {0} o {1}",
|
||||
@@ -429,8 +429,8 @@
|
||||
"UsenetDelay": "Usenet Zpoždění",
|
||||
"UsenetDelayHelpText": "Zpoždění v minutách čekání před uvolněním z Usenetu",
|
||||
"Username": "Uživatelské jméno",
|
||||
"BranchUpdate": "Větev použitá k aktualizaci {appName}u",
|
||||
"BranchUpdateMechanism": "Větev použitá externím aktualizačním mechanismem",
|
||||
"BranchUpdate": "Pobočka, která se má použít k aktualizaci {appName}",
|
||||
"BranchUpdateMechanism": "Pobočka používaná mechanismem externí aktualizace",
|
||||
"Version": "Verze",
|
||||
"WeekColumnHeader": "Záhlaví sloupce týdne",
|
||||
"Year": "Rok",
|
||||
@@ -593,12 +593,12 @@
|
||||
"NoChange": "Žádná změna",
|
||||
"RemovingTag": "Odebírání značky",
|
||||
"SetTags": "Nastavit značky",
|
||||
"ApplyTagsHelpTextAdd": "Přidat: Přidat štítky do existujícího seznamu štítků",
|
||||
"ApplyTagsHelpTextAdd": "Přidat: Přidá značky k již existujícímu seznamu",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Jak použít značky na vybrané klienty pro stahování",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Jak použít značky na vybrané seznamy k importu",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Jak použít štítky na vybrané indexery",
|
||||
"ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané štítky",
|
||||
"ApplyTagsHelpTextReplace": "Nahradit: Nahradit štítky zadanými štítky (prázdné pole vymaže všechny štítky)",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Jak použít značky na vybrané indexery",
|
||||
"ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané značky",
|
||||
"ApplyTagsHelpTextReplace": "Nahradit: Nahradit značky zadanými značkami (prázdné pole vymaže všechny značky)",
|
||||
"DeleteSelectedDownloadClients": "Odstranit klienta pro stahování",
|
||||
"DeleteSelectedIndexersMessageText": "Opravdu chcete smazat {count} vybraný(ch) indexer(ů)?",
|
||||
"Yes": "Ano",
|
||||
@@ -618,9 +618,9 @@
|
||||
"FreeSpace": "Volný prostor",
|
||||
"System": "Systém",
|
||||
"TotalSpace": "Celkový prostor",
|
||||
"ConnectionLost": "Ztráta spojení",
|
||||
"ConnectionLost": "Spojení ztraceno",
|
||||
"ConnectionLostReconnect": "{appName} se pokusí připojit automaticky, nebo můžete kliknout na tlačítko znovunačtení níže.",
|
||||
"ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude potřeba ho znovu načíst.",
|
||||
"ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude třebaho znovu načíst.",
|
||||
"Large": "Velký",
|
||||
"LastDuration": "lastDuration",
|
||||
"Ui": "UI",
|
||||
@@ -630,7 +630,7 @@
|
||||
"NextExecution": "Další spuštění",
|
||||
"ClickToChangeReleaseGroup": "Kliknutím změníte skupinu vydání",
|
||||
"ApplicationURL": "URL aplikace",
|
||||
"ApplicationUrlHelpText": "Externí adresa URL této aplikace včetně http(s)://, portu a základu URL",
|
||||
"ApplicationUrlHelpText": "Externí adresa URL této aplikace včetně http(s)://, portu a základní adresy URL",
|
||||
"Continuing": "Pokračující",
|
||||
"AutomaticUpdatesDisabledDocker": "Automatické aktualizace nejsou při použití aktualizačního mechanismu Docker přímo podporovány. Obraz kontejneru je nutné aktualizovat mimo {appName} nebo použít skript",
|
||||
"AppUpdated": "{appName} aktualizován",
|
||||
@@ -688,7 +688,7 @@
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Opětovné stažení z interaktivního vyhledávání selhalo",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Automaticky vyhledat a pokusit se o stažení jiného vydání, pokud bylo neúspěšné vydání zachyceno z interaktivního vyhledávání",
|
||||
"SelectDropdown": "'Vybrat...",
|
||||
"CustomFilter": "Vlastní filtr",
|
||||
"CustomFilter": "Vlastní filtry",
|
||||
"SelectQuality": "Vyberte kvalitu",
|
||||
"IndexerFlags": "Příznaky indexeru",
|
||||
"InteractiveSearchModalHeader": "Interaktivní vyhledávání",
|
||||
@@ -702,13 +702,13 @@
|
||||
"ConnectionSettingsUrlBaseHelpText": "Přidá předponu do {connectionName} url, jako např. {url}",
|
||||
"AuthBasic": "Základní (vyskakovací okno prohlížeče)",
|
||||
"AuthenticationMethod": "Metoda ověřování",
|
||||
"AuthenticationMethodHelpTextWarning": "Vyberte platnou metodu ověřování",
|
||||
"AuthenticationRequired": "Vyžadováno ověření",
|
||||
"AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Neměňte, pokud nerozumíte rizikům.",
|
||||
"AuthenticationMethodHelpTextWarning": "Prosím vyberte platnou metodu ověřování",
|
||||
"AuthenticationRequired": "Vyžadované ověření",
|
||||
"AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Pokud nerozumíte rizikům, neměňte je.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Zadejte nové heslo",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Zadejte nové uživatelské jméno",
|
||||
"AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName}, aby bylo povoleno ověřování. Volitelně můžete zakázat ověřování z místních adres.",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Vložte nové heslo",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Vložte nové uživatelské jméno",
|
||||
"AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName} povolení ověření. Ověřování z místních adres můžete volitelně zakázat.",
|
||||
"BlocklistOnlyHint": "Blokovat a nehledat náhradu",
|
||||
"Enabled": "Povoleno",
|
||||
"ApiKey": "Klíč API",
|
||||
@@ -724,7 +724,5 @@
|
||||
"InstallLatest": "Nainstalujte nejnovější",
|
||||
"CurrentlyInstalled": "Aktuálně nainstalováno",
|
||||
"UnmappedFiles": "Nezmapované složky",
|
||||
"AptUpdater": "K instalaci aktualizace používat apt",
|
||||
"Author": "Autor",
|
||||
"Book": "Kniha"
|
||||
"AptUpdater": "K instalaci aktualizace použijte apt"
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"AlternateTitles": "Alternativ Titel",
|
||||
"Analytics": "Analyse",
|
||||
"AnalyticsEnabledHelpText": "Send anonym brugs- og fejlinformation til {appName}s servere. Dette inkluderer information i din browser, hvilke {appName} WebUI-sider du bruger, fejlrapportering samt OS og runtime-version. Vi bruger disse oplysninger til at prioritere funktioner og fejlrettelser.",
|
||||
"AppDataDirectory": "AppData-mappe",
|
||||
"AppDataDirectory": "AppData-bibliotek",
|
||||
"ApplyTags": "Anvend tags",
|
||||
"Authentication": "Godkendelse",
|
||||
"AuthenticationMethodHelpText": "Kræv brugernavn og adgangskode for at få adgang til {appName}",
|
||||
@@ -40,7 +40,7 @@
|
||||
"Cancel": "Afbryd",
|
||||
"CancelPendingTask": "Er du sikker på, at du vil annullere denne afventende opgave?",
|
||||
"CertificateValidation": "Validering af certifikat",
|
||||
"CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er. Ændr kun dette hvis du forstå risiciene.",
|
||||
"CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er",
|
||||
"ChangeFileDate": "Skift fildato",
|
||||
"ChangeHasNotBeenSavedYet": "Ændring er endnu ikke gemt",
|
||||
"ChmodFolder": "chmod mappe",
|
||||
@@ -63,31 +63,31 @@
|
||||
"CreateEmptyAuthorFoldersHelpText": "Opret manglende filmmapper under diskscanning",
|
||||
"CreateGroup": "Opret gruppe",
|
||||
"CutoffHelpText": "Når denne kvalitet er nået, downloader {appName} ikke længere film",
|
||||
"CutoffUnmet": "Grænse ikke opnået",
|
||||
"CutoffUnmet": "Afskåret ude",
|
||||
"DatabaseMigration": "DB Migration",
|
||||
"DelayProfile": "Udskyd Profiler",
|
||||
"DelayProfiles": "Udskyd Profiler",
|
||||
"DelayingDownloadUntilInterp": "Forsinker download indtil {0} kl. {1}",
|
||||
"Delete": "Slet",
|
||||
"DeleteBackup": "Slet sikkerhedskopi",
|
||||
"DeleteBackupMessageText": "Er du sikker på, at du vil slette sikkerhedskopien »{name}«?",
|
||||
"DeleteBackupMessageText": "Er du sikker på, at du vil slette sikkerhedskopien '{0}'?",
|
||||
"DeleteDelayProfile": "Slet forsinkelsesprofil",
|
||||
"DeleteDelayProfileMessageText": "Er du sikker på, at du vil slette denne forsinkelsesprofil?",
|
||||
"DeleteDownloadClient": "Slet Download Client",
|
||||
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil fjerne downloadklienten »{name}«?",
|
||||
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil slette downloadklienten '{0}'?",
|
||||
"DeleteEmptyFolders": "Slet tomme mapper",
|
||||
"DeleteEmptyFoldersHelpText": "Slet tomme filmmapper under diskscanning, og når filmfiler slettes",
|
||||
"DeleteImportListExclusion": "Slet udelukkelse af importliste",
|
||||
"DeleteImportListExclusionMessageText": "Er du sikker på, at du vil slette denne undtagelse fra importlisten?",
|
||||
"DeleteImportListMessageText": "Er du sikker på, at du vil slette listen »{name}«?",
|
||||
"DeleteImportListMessageText": "Er du sikker på, at du vil slette listen '{0}'?",
|
||||
"DeleteIndexer": "Slet Indexer",
|
||||
"DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren »{name}«?",
|
||||
"DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren '{0}'?",
|
||||
"DeleteMetadataProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
|
||||
"DeleteNotification": "Slet underretning",
|
||||
"DeleteNotificationMessageText": "Er du sikker på, at du vil slette notifikationen »{name}«?",
|
||||
"DeleteNotificationMessageText": "Er du sikker på, at du vil slette underretningen '{0}'?",
|
||||
"DeleteQualityProfile": "Slet kvalitetsprofil",
|
||||
"DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen »{name}«?",
|
||||
"DeleteReleaseProfile": "Slet udgivelsesprofil",
|
||||
"DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
|
||||
"DeleteReleaseProfile": "Slet forsinkelsesprofil",
|
||||
"DeleteReleaseProfileMessageText": "Er du sikker på, at du vil slette denne forsinkelsesprofil?",
|
||||
"DeleteSelectedBookFiles": "Slet valgte filmfiler",
|
||||
"DeleteSelectedBookFilesMessageText": "Er du sikker på, at du vil slette de valgte filmfiler?",
|
||||
@@ -140,7 +140,7 @@
|
||||
"GoToInterp": "Gå til {0}",
|
||||
"Grab": "Tag fat",
|
||||
"GrabID": "Grab ID",
|
||||
"GrabRelease": "Hent udgivelse",
|
||||
"GrabRelease": "Grab Release",
|
||||
"GrabReleaseMessageText": "{appName} var ikke i stand til at bestemme, hvilken film denne udgivelse var til. {appName} kan muligvis ikke automatisk importere denne udgivelse. Vil du hente '{0}'?",
|
||||
"GrabSelected": "Greb Valgt",
|
||||
"Group": "Gruppe",
|
||||
@@ -151,7 +151,7 @@
|
||||
"Hostname": "Værtsnavn",
|
||||
"ICalFeed": "iCal-feed",
|
||||
"ICalHttpUrlHelpText": "Kopier denne URL til dine klienter eller klik for at abonnere, hvis din browser understøtter webcal",
|
||||
"ICalLink": "iCal-link",
|
||||
"ICalLink": "iCal Link",
|
||||
"IconForCutoffUnmet": "Ikon til Cutoff Unmet",
|
||||
"IconTooltip": "Planlagt",
|
||||
"IgnoredAddresses": "Ignorerede adresser",
|
||||
@@ -274,7 +274,7 @@
|
||||
"ReleaseRejected": "Udgivelse afvist",
|
||||
"ReleaseWillBeProcessedInterp": "Udgivelsen behandles {0}",
|
||||
"Reload": "Genindlæs",
|
||||
"RemotePathMappings": "Sammenkædning med fjernsti",
|
||||
"RemotePathMappings": "Remote Path Mappings",
|
||||
"Remove": "Fjerne",
|
||||
"RemoveCompletedDownloadsHelpText": "Fjern importerede downloads fra downloadklienthistorik",
|
||||
"RemoveFailedDownloadsHelpText": "Fjern mislykkede downloads fra downloadklienthistorik",
|
||||
@@ -458,7 +458,7 @@
|
||||
"Blocklist": "Blacklist",
|
||||
"BlocklistRelease": "Udgivelse af sortliste",
|
||||
"SelectedCountBooksSelectedInterp": "{0} Film (er) valgt",
|
||||
"ThisCannotBeCancelled": "Dette kan ikke annulleres når først det er startet uden at du deaktiverer alle dine indeksører.",
|
||||
"ThisCannotBeCancelled": "Dette kan ikke annulleres en gang startet uden genstart af {appName}.",
|
||||
"UnselectAll": "Fravælg alle",
|
||||
"UpdateSelected": "Opdatering valgt",
|
||||
"Wanted": "Ønskede",
|
||||
@@ -549,7 +549,7 @@
|
||||
"MoveFiles": "Flyt filer",
|
||||
"Label": "Etiket",
|
||||
"HardlinkCopyFiles": "Hardlink/Kopir Filer",
|
||||
"CustomFormatScore": "Brugerdefineret formats resultat",
|
||||
"CustomFormatScore": "Bruger Tilpasset Format score",
|
||||
"MinimumCustomFormatScore": "Minimum tilpasset format score",
|
||||
"CloneCustomFormat": "Klon brugerdefineret format",
|
||||
"Conditions": "Betingelser",
|
||||
@@ -572,7 +572,7 @@
|
||||
"ShownClickToHide": "Vist, klik for at skjule",
|
||||
"HideAdvanced": "Gemt Avancerede",
|
||||
"ShowAdvanced": "Vis avanceret",
|
||||
"ColonReplacement": "Udskiftning af kolon",
|
||||
"ColonReplacement": "Udskiftning af tyktarm",
|
||||
"ReplaceWithDash": "Udskift med Dash",
|
||||
"ReplaceWithSpaceDash": "Udskift med Space Dash",
|
||||
"ReplaceWithSpaceDashSpace": "Udskift med Space Dash Space",
|
||||
@@ -582,7 +582,7 @@
|
||||
"Negated": "Negeret",
|
||||
"RemoveSelectedItemBlocklistMessageText": "Er du sikker på, at du vil fjerne de valgte emner fra sortlisten?",
|
||||
"BlocklistReleases": "Udgivelse af sortliste",
|
||||
"RemoveSelectedItemQueueMessageText": "Er du sikker på, at du vil fjerne 1 element fra køen?",
|
||||
"RemoveSelectedItemQueueMessageText": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?",
|
||||
"RemoveSelectedItemsQueueMessageText": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?",
|
||||
"Required": "Påkrævet",
|
||||
"NoEventsFound": "Ingen begivenheder fundet",
|
||||
@@ -618,8 +618,8 @@
|
||||
"System": "System",
|
||||
"NextExecution": "Næste udførelse",
|
||||
"NoResultsFound": "Ingen resultater fundet",
|
||||
"ConnectionLost": "Forbindelse mistet",
|
||||
"ConnectionLostReconnect": "{appName} vil prøve at tilslutte automatisk. Ellers du kan klikke genindlæs forneden.",
|
||||
"ConnectionLost": "Forbindelse Mistet",
|
||||
"ConnectionLostReconnect": "{appName} vil prøve at tilslutte automatisk, eller du kan klikke genindlæs forneden.",
|
||||
"Location": "Beliggenhed",
|
||||
"RecentChanges": "Seneste ændringer",
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Nogle resultater skjules af det anvendte filter",
|
||||
@@ -636,7 +636,7 @@
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Eksempler: '.sub, .nfo' eller 'sub, nfo'",
|
||||
"AutoRedownloadFailed": "Download fejlede",
|
||||
"SourceTitle": "Kildetitel",
|
||||
"RemoveQueueItemConfirmation": "Er du sikker på, at du vil fjerne »{sourceTitle}« fra køen?",
|
||||
"RemoveQueueItemConfirmation": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?",
|
||||
"ImportLists": "Lister",
|
||||
"ListsSettingsSummary": "Lister",
|
||||
"CustomFilter": "Bruger Tilpassede Filtere",
|
||||
@@ -668,7 +668,5 @@
|
||||
"UnmappedFiles": "Ikke-kortlagte mapper",
|
||||
"DockerUpdater": "opdater docker-containeren for at modtage opdateringen",
|
||||
"ExternalUpdater": "{appName} er konfigureret til at bruge en ekstern opdateringsmekanisme",
|
||||
"OnLatestVersion": "Den seneste version af {appName} er allerede installeret",
|
||||
"WouldYouLikeToRestoreBackup": "Vil du gendanne sikkerhedskopien »{name}«?",
|
||||
"MetadataProfile": "metadataprofil"
|
||||
"OnLatestVersion": "Den seneste version af {appName} er allerede installeret"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"PreviewRename": "Vorschau Umbenennung",
|
||||
"PreviewRename": "Umbenennen",
|
||||
"RecyclingBin": "Papierkorb",
|
||||
"Usenet": "Usenet",
|
||||
"20MinutesTwenty": "20 Minuten: {0}",
|
||||
@@ -17,7 +17,7 @@
|
||||
"AppDataDirectory": "AppData-Verzeichnis",
|
||||
"ApplyTags": "Schlagworte anwenden",
|
||||
"Authentication": "Authentifizierung",
|
||||
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} sind Benutzername und Passwort erforderlich",
|
||||
"AuthenticationMethodHelpText": "Für den Zugriff auf Readarr sind Benutzername und Passwort erforderlich",
|
||||
"AuthorClickToChangeBook": "Klicken um den Film zu bearbeiten",
|
||||
"AutoRedownloadFailedHelpText": "Suchen Sie automatisch nach einer anderen Version und versuchen Sie, sie herunterzuladen",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Auf der Festplatte gelöschte Filme auch automatisch in {appName} nicht mehr beobachten",
|
||||
@@ -57,7 +57,7 @@
|
||||
"Connections": "Verbindungen",
|
||||
"CopyUsingHardlinksHelpText": "Hardlinks erstellen wenn Torrents die noch geseeded werden kopiert werden sollen",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Dateisperren Gelegentlich kann es vorkommen, dass Dateisperren das Umbenennen von Dateien verhindern, die gerade geseeded werden. Sie können das Seeding vorübergehend deaktivieren und die Umbenennungsfunktion von Readarr als Workaround verwenden.",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Leere Autorenordner für fehlende Autoren beim Scan erstellen",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Leere Filmordner für fehlende Filme beim Scan erstellen",
|
||||
"CreateGroup": "Gruppe erstellen",
|
||||
"CutoffHelpText": "Sobald diese Qualität erreicht wird, werden keine neuen Releases erfasst",
|
||||
"CutoffUnmet": "Schwelle nicht erreicht",
|
||||
@@ -96,7 +96,7 @@
|
||||
"DiskSpace": "Festplattenplatz",
|
||||
"Docker": "Docker",
|
||||
"DownloadClientSettings": "Downloader Einstellungen",
|
||||
"DownloadClients": "Download Clients",
|
||||
"DownloadClients": "Downloader",
|
||||
"DownloadFailedCheckDownloadClientForMoreDetails": "Download fehlgeschlagen: Prüfe den Downloader für mehr Details",
|
||||
"DownloadFailedInterp": "Download fehlgeschlagen: {0}",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "Automatisch Proper oder Repacks zum upgraden eines Filmes zulassen",
|
||||
@@ -104,18 +104,18 @@
|
||||
"Edit": "Bearbeiten",
|
||||
"Edition": "Auflage",
|
||||
"Enable": "Aktivieren",
|
||||
"EnableAutomaticAdd": "Automatisches Hinzufügen aktivieren",
|
||||
"EnableAutomaticAdd": "Automatisch hinzufügen",
|
||||
"EnableAutomaticSearch": "Automatische Suche einschalten",
|
||||
"EnableColorImpairedMode": "Farbenblindmodus aktivieren",
|
||||
"EnableColorImpairedModeHelpText": "Stiländerung, um es Farbenblinden Benutzern zu ermöglichen, farbcodierte Informationen besser zu unterscheiden",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Automatischer Import abgeschlossener Downloads vom Download Client",
|
||||
"EnableHelpText": "Aktiviere die Erstellung von Metadaten-Dateien für diesen Metadaten-Typ",
|
||||
"EnableColorImpairedMode": "Farbbeeinträchtigter Modus aktivieren",
|
||||
"EnableColorImpairedModeHelpText": "Alternativer Stil, um farbbeeinträchtigten Benutzern eine bessere Unterscheidung farbcodierter Informationen zu ermöglichen",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Importiere fertige Downloads vom Downloader automatisch",
|
||||
"EnableHelpText": "Metadaten Dateien erstellen für diesen Metadata Typ",
|
||||
"EnableInteractiveSearch": "Interaktive Suche einschalten",
|
||||
"EnableRSS": "RSS aktivieren",
|
||||
"EnableSSL": "SSL",
|
||||
"EnableSslHelpText": " Erfordert einen Neustart als Administrator",
|
||||
"Ended": "Beendet",
|
||||
"ErrorLoadingContents": "Fehler beim Laden von Inhalten",
|
||||
"ErrorLoadingContents": "Fehler beim laden der Inhalte",
|
||||
"ErrorLoadingPreviews": "Fehler beim laden der Vorschauen",
|
||||
"Exception": "Ausnahme",
|
||||
"FailedDownloadHandling": "Verarbeitung fehlgeschlagener Downloads",
|
||||
@@ -132,20 +132,20 @@
|
||||
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Für mehr Infomationen klicke auf die Info-Knöpfe.",
|
||||
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Für mehr Infomationen klicke auf die Info-Knöpfe.",
|
||||
"GeneralSettings": "Allgemeine Einstellungen",
|
||||
"Global": "Weltweit",
|
||||
"Global": "Global",
|
||||
"GoToInterp": "Zu {0} gehen",
|
||||
"Grab": "Holen",
|
||||
"Grab": "Erfasse",
|
||||
"GrabID": "Erfass ID",
|
||||
"GrabRelease": "Release holen",
|
||||
"GrabRelease": "Release erfassen",
|
||||
"GrabReleaseMessageText": "Das Release konnte keinem Film zugeordnet werden. Ein automatischer Import wird nicht möglich sein. Trotzdem '{0}' erfassen?",
|
||||
"GrabSelected": "Auswahl abrufen",
|
||||
"GrabSelected": "Auswahl erfassen",
|
||||
"Group": "Gruppe",
|
||||
"HasPendingChangesNoChanges": "Keine Änderungen",
|
||||
"HasPendingChangesSaveChanges": "Änderungen speichern",
|
||||
"History": "Verlauf",
|
||||
"Host": "Host",
|
||||
"Hostname": "Hostname",
|
||||
"ICalFeed": "iCal Feed",
|
||||
"ICalFeed": "iCal-Feed",
|
||||
"ICalHttpUrlHelpText": "Füge diese URL in deinen Client ein oder klicke auf abonnieren wenn dein Browser Webcal untertützt",
|
||||
"ICalLink": "iCal Link",
|
||||
"IconForCutoffUnmet": "Symbol für Schwelle nicht erreicht",
|
||||
@@ -154,17 +154,17 @@
|
||||
"IgnoredHelpText": "Ein Release wird abgelehnt, wenn es einen oder mehrere dieser Begriffe enthält (Groß- und Kleinschreibung wird nicht berücksichtigt)",
|
||||
"IgnoredPlaceHolder": "Neue Beschränkung hinzufügen",
|
||||
"IllRestartLater": "Später neustarten",
|
||||
"ImportExtraFiles": "Zusätzliche Dateien importieren",
|
||||
"ImportExtraFiles": "Extra Dateien importieren",
|
||||
"ImportExtraFilesHelpText": "Importiere zutreffende Extra Dateien (Untertitel, nfo, etc.) nach dem Importieren einer Filmdatei",
|
||||
"ImportFailedInterp": "Import fehlgeschlagen: {0}",
|
||||
"ImportedTo": "Importiert nach",
|
||||
"Importing": "Importiere",
|
||||
"IncludeHealthWarningsHelpText": "Zustandswarnung",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Einträge ohne eine Zuordnung in der Warteschlange anzeigen. Dies könnten gelöschte Autoren, Bücher oder alles andere mit Readarrs Downloadkategorie sein",
|
||||
"IncludeUnmonitored": "Unüberwachte einbeziehen",
|
||||
"IncludeUnmonitored": "Nicht beobachtete einbeziehen",
|
||||
"Indexer": "Indexer",
|
||||
"IndexerPriority": "Indexer-Priorität",
|
||||
"IndexerSettings": "Indexer-Einstellungen",
|
||||
"IndexerPriority": "Priorität",
|
||||
"IndexerSettings": "Indexer Einstellungen",
|
||||
"Indexers": "Indexer",
|
||||
"Interval": "Intervall",
|
||||
"IsCutoffCutoff": "Schwelle",
|
||||
@@ -175,7 +175,7 @@
|
||||
"LoadingBookFilesFailed": "Laden der Film-Dateien fehlgeschlagen",
|
||||
"Local": "Lokal",
|
||||
"LogFiles": "Protokolldateien",
|
||||
"LogLevel": "Protokollstufe",
|
||||
"LogLevel": "Log Level",
|
||||
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "Trace logging sollte nur kurzzeitig aktiviert werden",
|
||||
"Logging": "Protokollierung",
|
||||
"Logs": "Protokolle",
|
||||
@@ -187,52 +187,52 @@
|
||||
"MaximumLimits": "Maximale Grenzen",
|
||||
"MaximumSize": "Maximale Größe",
|
||||
"MaximumSizeHelpText": "Maximale Größe für ein zu erfassendes Release in MB. 0 bedeutet unbegrenzt.",
|
||||
"Mechanism": "Mechanismus",
|
||||
"MediaInfo": "Medieninfo",
|
||||
"MediaManagementSettings": "Einstellungen zur Medienverwaltung",
|
||||
"Mechanism": "Verfahren",
|
||||
"MediaInfo": "Medien Information",
|
||||
"MediaManagementSettings": "Medienverwaltungs Einstellungen",
|
||||
"Message": "Nachricht",
|
||||
"MetadataSettings": "Einstellungen für Metadaten",
|
||||
"MetadataSettings": "Metadaten Einstellungen",
|
||||
"MinimumAge": "Mindestalter",
|
||||
"MinimumAgeHelpText": "Nur Usenet: Mindestalter in Minuten von NZBs, bevor sie heruntergeladen werden. Verwende dies, um neuen Releases Zeit zu geben, zu deinem Usenet-Anbieter zu propagieren.",
|
||||
"MinimumFreeSpace": "Mindestfreier Speicherplatz",
|
||||
"MinimumAgeHelpText": "Nur Usenet: Mindestalter in Minuten der NZBs bevor sie erfasst werden. Gebe damit neuen Releases Zeit, sich bei deinem Usenet Provider zu verbreiten.",
|
||||
"MinimumFreeSpace": "Mindest freier Speicher",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Importieren verhindern wenn weniger als dieser Wert als freier Speicher zur Verfügung steht",
|
||||
"MinimumLimits": "Minimale Grenzen",
|
||||
"MinimumLimits": "Mindest Grenzen",
|
||||
"Missing": "Fehlend",
|
||||
"Mode": "Modus",
|
||||
"Monitored": "Überwacht",
|
||||
"Monitored": "Beobachtet",
|
||||
"MoreInfo": "Mehr Infos",
|
||||
"MustContain": "Muss enthalten",
|
||||
"MustNotContain": "Darf nicht enthalten",
|
||||
"MustContain": "Muss beinhalten",
|
||||
"MustNotContain": "Darf nicht beinhalten",
|
||||
"Name": "Name",
|
||||
"NamingSettings": "Benennungseinstellungen",
|
||||
"NamingSettings": "Bennenungs Einstellungen",
|
||||
"New": "Neu",
|
||||
"NoBackupsAreAvailable": "Keine Sicherungen verfügbar",
|
||||
"NoBackupsAreAvailable": "Es sind keine Backups vorhanden",
|
||||
"NoHistory": "Kein Verlauf.",
|
||||
"NoLeaveIt": "Nein, lass es",
|
||||
"NoLimitForAnyRuntime": "Kein Limit für beliebige Laufzeit",
|
||||
"NoLogFiles": "Keine Logdateien",
|
||||
"NoMinimumForAnyRuntime": "Kein Minimum für beliebige Laufzeit",
|
||||
"NoLeaveIt": "Nein, nicht ändern",
|
||||
"NoLimitForAnyRuntime": "Keine Begrenzung der Laufzeiten",
|
||||
"NoLogFiles": "Keine Log-Dateien",
|
||||
"NoMinimumForAnyRuntime": "Kein Minimum für Laufzeiten",
|
||||
"NoUpdatesAreAvailable": "Es sind keine Updates verfügbar",
|
||||
"None": "Keine",
|
||||
"NotificationTriggers": "Benachrichtigungs-Auslöser",
|
||||
"NotificationTriggers": "Benachrichtigungs Auslöser",
|
||||
"OnGrabHelpText": "Erfassen",
|
||||
"OnHealthIssueHelpText": "Zustandsproblem",
|
||||
"OnRenameHelpText": "Umbennenen",
|
||||
"OnUpgradeHelpText": "Upgrade",
|
||||
"OpenBrowserOnStart": "Browser beim Start öffnen",
|
||||
"Options": "Optionen",
|
||||
"Original": "Original",
|
||||
"Overview": "Überblick",
|
||||
"PackageVersion": "Paketversion",
|
||||
"Original": "Orginal",
|
||||
"Overview": "Übersicht",
|
||||
"PackageVersion": "Paket Version",
|
||||
"PageSize": "Einträge pro Seite",
|
||||
"PageSizeHelpText": "Anzahl der Einträge pro Seite",
|
||||
"Password": "Passwort",
|
||||
"Path": "Pfad",
|
||||
"Permissions": "Berechtigungen",
|
||||
"Permissions": "Rechte",
|
||||
"Port": "Port",
|
||||
"PortHelpTextWarning": "Erfordert einen Neustart",
|
||||
"PortNumber": "Portnummer",
|
||||
"PosterSize": "Postergröße",
|
||||
"PortNumber": "Port Nummer",
|
||||
"PosterSize": "Plakatgröße",
|
||||
"Profiles": "Profile",
|
||||
"Proper": "Korrekt",
|
||||
"PropersAndRepacks": "Propers und Repacks",
|
||||
@@ -267,22 +267,22 @@
|
||||
"ReleaseGroup": "Release-Gruppe",
|
||||
"ReleaseRejected": "Release abgelehnt",
|
||||
"ReleaseWillBeProcessedInterp": "Release wird verarbeitet {0}",
|
||||
"Reload": "Neu laden",
|
||||
"Reload": "Neuladen",
|
||||
"RemotePathMappings": "Remote-Pfadzuordnungen",
|
||||
"Remove": "Entfernen",
|
||||
"RemoveCompletedDownloadsHelpText": "Entferne importierte Downloads aus der Download-Client-Historie",
|
||||
"RemoveCompletedDownloadsHelpText": "Importierte Downloads aus dem Downloader Verlauf entfernen",
|
||||
"RemoveFailedDownloadsHelpText": "Fehlgeschlagene Downloads aus dem Downloader Verlauf entfernen",
|
||||
"RemoveFilter": "Filter entfernen",
|
||||
"RemoveFromDownloadClient": "Aus dem Download Client entfernen",
|
||||
"RemoveFromQueue": "Aus der Warteschlange entfernen",
|
||||
"RemoveFromQueue": "Aus der Warteschlage entfernen",
|
||||
"RemoveHelpTextWarning": "Dies wird den Download und alle bereits heruntergeladenen Dateien aus dem Downloader entfernen.",
|
||||
"RemoveSelected": "Ausgewählte entfernen",
|
||||
"RemoveSelected": "Auswahl entfernen",
|
||||
"RemoveTagExistingTag": "Vorhandener Tag",
|
||||
"RemoveTagRemovingTag": "Tag entfernen",
|
||||
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlange entfernt",
|
||||
"RenameBooksHelpText": "Wenn das umbennen deaktiviert ist, wird der vorhandene Dateiname benutzt",
|
||||
"Reorder": "Neu anordnen",
|
||||
"ReplaceIllegalCharacters": "Illegale Zeichen ersetzen",
|
||||
"Reorder": "Neu sortieren",
|
||||
"ReplaceIllegalCharacters": "Sonderzeichen ersetzen",
|
||||
"RequiredHelpText": "Das Release mus mindesten eines der Begriffe beinhalten ( Groß-/Kleinschreibung wird nicht beachtet )",
|
||||
"RequiredPlaceHolder": "Neue Beschränkung hinzufügen",
|
||||
"RescanAfterRefreshHelpTextWarning": "Wenn nicht \"Immer (Always)\" ausgewählt wird, werden Dateiänderungen nicht automatisch erkannt",
|
||||
@@ -298,35 +298,35 @@
|
||||
"Result": "Ergebnis",
|
||||
"RetentionHelpText": "Nur Usenet: Auf Null setzen, um eine unbegrenzte Aufbewahrung festzulegen",
|
||||
"RetryingDownloadInterp": "Herunterladen nochmal versuchen {0} um {1}",
|
||||
"RootFolder": "Root-Ordner",
|
||||
"RootFolders": "Root-Ordner",
|
||||
"RssSyncIntervalHelpText": "Intervall in Minuten. Setze auf null, um es zu deaktivieren (dies stoppt alle automatischen Release-Abfragen)",
|
||||
"RootFolder": "Stammordner",
|
||||
"RootFolders": "Stammordner",
|
||||
"RssSyncIntervalHelpText": "Intervall in Minuten. Zum deaktivieren auf 0 setzen ( Dies wird das automatische Release erfassen deaktivieren )",
|
||||
"SSLCertPassword": "SSL Zertifikat Passwort",
|
||||
"SSLCertPath": "Pfad zum SSL Zertifikat",
|
||||
"SSLPort": "SSL Port",
|
||||
"Scheduled": "Geplant",
|
||||
"ScriptPath": "Skript-Pfad",
|
||||
"Search": "Suchen",
|
||||
"SearchAll": "Alle durchsuchen",
|
||||
"SearchForMissing": "Suche nach fehlenden Episoden",
|
||||
"SearchSelected": "Ausgewählte durchsuchen",
|
||||
"ScriptPath": "Script Pfad",
|
||||
"Search": "Suche",
|
||||
"SearchAll": "Suche alle",
|
||||
"SearchForMissing": "Suche fehlende",
|
||||
"SearchSelected": "Auswahl suchen",
|
||||
"Security": "Sicherheit",
|
||||
"SendAnonymousUsageData": "Sende anonyme Nutzungsdaten",
|
||||
"SetPermissions": "Berechtigungen festlegen",
|
||||
"SetPermissionsLinuxHelpText": "Soll chmod beim Importieren/Umbenennen von Dateien ausgeführt werden?",
|
||||
"SetPermissions": "Rechte setzen",
|
||||
"SetPermissionsLinuxHelpText": "Soll CHMOD ausgeführt werden wenn Datien importiert/umbenannt werden?",
|
||||
"SetPermissionsLinuxHelpTextWarning": "Wenn Sie nicht sicher sind, was diese Einstellungen bewirken, ändern Sie sie nicht.",
|
||||
"Settings": "Einstellungen",
|
||||
"ShortDateFormat": "Kurzes Datumsformat",
|
||||
"ShowCutoffUnmetIconHelpText": "Symbol zeigen wenn die Qualitätsschwelle noch nicht erreicht wurde",
|
||||
"ShowDateAdded": "Datum der Hinzufügung anzeigen",
|
||||
"ShowPath": "Pfad anzeigen",
|
||||
"ShowQualityProfile": "Qualitätsprofil anzeigen",
|
||||
"ShowQualityProfileHelpText": "Qualitätsprofil unter dem Poster anzeigen",
|
||||
"ShowRelativeDates": "Relative Daten anzeigen",
|
||||
"ShowRelativeDatesHelpText": "Relative (Heute/Gestern/etc.) oder absolute Daten anzeigen",
|
||||
"ShowQualityProfile": "Qualitätsdefinition anzeigen",
|
||||
"ShowQualityProfileHelpText": "Qualitätsprofil unter dem Plakat anzeigen",
|
||||
"ShowRelativeDates": "Relatives Datum anzeigen",
|
||||
"ShowRelativeDatesHelpText": "Relatives (z.B.: Heute, gestern, etc) oder absolutes Datum anzeigen",
|
||||
"ShowSearch": "Suche anzeigen",
|
||||
"ShowSearchActionHelpText": "Suchbutton anzeigen beim draufzeigen",
|
||||
"ShowSizeOnDisk": "Größe auf der Festplatte anzeigen",
|
||||
"ShowSizeOnDisk": "Belegter Speicherplatz anzeigen",
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Wird in der Wochenansicht über jeder Spalte angezeigt",
|
||||
"Size": " Größe",
|
||||
"SkipFreeSpaceCheck": "Prüfung des freien Speichers überspringen",
|
||||
@@ -400,7 +400,7 @@
|
||||
"UnableToLoadTags": "Tags konnten nicht geladen werden",
|
||||
"UnableToLoadTheCalendar": "Kalender konnte nicht geladen werden",
|
||||
"UnableToLoadUISettings": "Oberflächen Einstellungen konnten nicht geladen werden",
|
||||
"Ungroup": "Gruppierung aufheben",
|
||||
"Ungroup": "Gruppe entfernen",
|
||||
"UnmonitoredHelpText": "Nicht beobachtete Filme im iCal-Feed einschließen",
|
||||
"UpdateAll": "Alle aktualisieren",
|
||||
"UpdateAutomaticallyHelpText": "Updates automatisch herunterladen und installieren. Sie können weiterhin über System: Updates installieren",
|
||||
@@ -473,7 +473,7 @@
|
||||
"OutputPath": "Ausgabe-Pfad",
|
||||
"PortHelpText": "Calibre-Content-Server",
|
||||
"Progress": "Fortschritt",
|
||||
"ReleaseTitle": "Release-Titel",
|
||||
"ReleaseTitle": "Release Titel",
|
||||
"Actions": "Aktionen",
|
||||
"Today": "Heute",
|
||||
"Tomorrow": "Morgen",
|
||||
@@ -489,7 +489,7 @@
|
||||
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "Der Filmordner und dessen Inhalt wird gelöscht.",
|
||||
"DeleteFilesHelpText": "Lösche die Buchdateien und Autorordner",
|
||||
"Component": "Komponente",
|
||||
"Level": "Level",
|
||||
"Level": "Stufe",
|
||||
"Time": "Zeit",
|
||||
"RemoveFromBlocklist": "Aus der Sperrliste entfernen",
|
||||
"UnableToLoadBlocklist": "Sperrliste konnte nicht geladen werden",
|
||||
@@ -514,7 +514,7 @@
|
||||
"CatalogNumber": "Katalog Nummer",
|
||||
"ContinuingAllBooksDownloaded": "Fortfahren (Alle Bücher heruntergeladen)",
|
||||
"DeleteMetadataProfile": "Metadaten Profil löschen",
|
||||
"ImportListExclusions": "Ausschlüsse aus der Importliste",
|
||||
"ImportListExclusions": "Ausschlüsse der Importliste",
|
||||
"ImportLists": "Importlisten",
|
||||
"ImportListSettings": "Allgemeine Importlisten-Einstellungen",
|
||||
"ImportListSpecificSettings": "Listenspezifische Einstellungen importieren",
|
||||
@@ -531,7 +531,7 @@
|
||||
"MetadataProfile": "Metadaten Profil",
|
||||
"MetadataProfileIdHelpText": "Metadaten Profil Listenelemente sollten hinzugefügt werden mit",
|
||||
"MetadataProfiles": "Metadaten Profile",
|
||||
"MonitoringOptions": "Überwachungsoptionen",
|
||||
"MonitoringOptions": "Beobachtungsoptionen",
|
||||
"MusicbrainzId": "MusicBrainz Id",
|
||||
"WatchRootFoldersForFileChanges": "Beobachte Stammverzeichnis auf Dateiänderungen",
|
||||
"OnDownloadFailure": "Bei fehlgeschlagenem Download",
|
||||
@@ -556,7 +556,7 @@
|
||||
"FutureDays": "Zukünftige Tage",
|
||||
"FutureDaysHelpText": "Tage die iCal-Feed in die Zukunft schauen soll",
|
||||
"FutureBooks": "Zukünftige Bücher",
|
||||
"GeneralSettingsSummary": "Port, SSL, Benutzername/Kennwort, Proxy, Analyse und Updates",
|
||||
"GeneralSettingsSummary": "Port, SSL, Benutzername/Passwort, Proxy, Analytik und Updates",
|
||||
"IndexerJackettAll": "Indexer, welche den nicht unterstützten 'all'-Endpoint von Jackett verwenden: {0}",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Alle Indexer sind wegen über 6 Stunden langen bestehender Fehler nicht verfügbar",
|
||||
"IsExpandedShowFileInfo": "Dateiinformationen anzeigen",
|
||||
@@ -595,23 +595,23 @@
|
||||
"IndexerIdHelpTextWarning": "Die Verwendung eines bestimmten Indexers mit bevorzugten Wörtern kann dazu führen, dass Veröffentlichungen mehrfach erfasst werden",
|
||||
"LatestBook": "Neuestes Buch",
|
||||
"MetadataProviderSource": "Metadaten Anbieter Quelle",
|
||||
"MetadataSource": "Metadatenquelle",
|
||||
"MetadataSource": "Metadaten Quelle",
|
||||
"MetadataSourceHelpText": "Alternative Metadaten Quelle (Leer lassen für Standard)",
|
||||
"MusicBrainzRecordingID": "MusicBrainz Aufnahme Id",
|
||||
"MusicBrainzReleaseID": "MusicBrainz Veröffentlichung Id",
|
||||
"MusicBrainzTrackID": "MusicBrainz Titel Id",
|
||||
"OnGrab": "Bei Abruf",
|
||||
"OnGrab": "Bei Erfassung",
|
||||
"OnImportFailureHelpText": "Bei fehlgeschlagenem Import",
|
||||
"OnReleaseImport": "Bei Veröffentlichungsimport",
|
||||
"OnReleaseImportHelpText": "Bei Veröffentlichungsimport",
|
||||
"OnRename": "Bei Umbenennung",
|
||||
"PastDaysHelpText": "Tage für iCal-Feed, um in die Vergangenheit zu schauen",
|
||||
"PathHelpTextWarning": "Dies muss ein anderes Verzeichnis sein als das, in dem der Download Client die Dateien ablegt",
|
||||
"ReleaseProfiles": "Release-Profile",
|
||||
"ReleaseProfiles": "Veröffentlichungsprofile",
|
||||
"RootFolderPathHelpText": "Die Elemente im Stammverzeichnis werden hinzugefügt zu",
|
||||
"SearchMonitored": "Suche überwachte Episoden",
|
||||
"SearchMonitored": "Suche beobachtete",
|
||||
"ShowName": "Zeige Name",
|
||||
"SkipRedownload": "Neu-Download überspringen",
|
||||
"SkipRedownload": "Überspringe erneuten Download",
|
||||
"StatusEndedContinuing": "Fortfahren",
|
||||
"UnableToLoadMetadataProviderSettings": "Einstellungen für Metadata Provider konnten nicht geladen werden",
|
||||
"UpdatingIsDisabledInsideADockerContainerUpdateTheContainerImageInstead": "Aktualisierung innerhalb des Docker Containers ist deaktiviert. Aktualisieren Sie stattdessen das Container Image.",
|
||||
@@ -622,7 +622,7 @@
|
||||
"DefaultQualityProfileIdHelpText": "Standard Qualitätsprofil für Autoren, die in diesem Ordner gefunden werden",
|
||||
"DefaultReadarrTags": "Standard Readarr Tags",
|
||||
"DeleteBookFile": "Buchdatei löschen",
|
||||
"OnHealthIssue": "Bei Gesundheitsproblem",
|
||||
"OnHealthIssue": "Bei Zustandsproblem",
|
||||
"QualityProfileIdHelpText": "Qualitätsprofil mit dem Listemelemente hinzugefügt werden sollen",
|
||||
"UnmappedFiles": "Nicht zugewiesene Dateien",
|
||||
"AppDataLocationHealthCheckMessage": "Ein Update ist nicht möglich, um das Löschen von AppData beim Update zu verhindern",
|
||||
@@ -644,7 +644,7 @@
|
||||
"Disabled": "Deaktiviert",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Kein Download Client verfügbar",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Kommunikation mit {0} nicht möglich.",
|
||||
"DownloadClientsSettingsSummary": "Download Clients, Download-Verwaltung und Remote-Pfadzuordnungen",
|
||||
"DownloadClientsSettingsSummary": "Download Clients, Downloadverarbeitung und Remote-Pfadzuordnungen",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Alle Download Clients sind aufgrund von Fehlern nicht verfügbar",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Download Clients aufgrund von Fehlern nicht verfügbar: {0}",
|
||||
"EditAuthor": "Autor bearbeiten",
|
||||
@@ -693,7 +693,7 @@
|
||||
"RemotePathMappingCheckFolderPermissions": "{appName} kann das Downloadverzeichnis sehen, aber nicht verarbeiten {0}. Möglicherwiese ein Rechteproblem.",
|
||||
"RemotePathMappingCheckGenericPermissions": "Downloader {0} speichert Downloads in {1}, aber Readarr kann dieses Verzeichnis nicht sehen. Möglicherweise müssen die Verzeichnisrechte angepasst werden.",
|
||||
"RemotePathMappingCheckLocalWrongOSPath": "Downloader {0} speichert Downloads in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Downloader Einstellungen.",
|
||||
"Monitor": "Überwachen",
|
||||
"Monitor": "Beobachten",
|
||||
"MusicBrainzAuthorID": "MusicBranz Künstler Id",
|
||||
"MusicBrainzBookID": "MusicBrainz Titel Id",
|
||||
"WriteAudioTags": "Audiodateien mit Metadaten versehen",
|
||||
@@ -701,7 +701,7 @@
|
||||
"SearchForAllMissingBooks": "Suche nach allen fehlenden Alben",
|
||||
"SearchForMonitoredBooks": "Suche nach beobachteten Alben",
|
||||
"SelectedCountAuthorsSelectedInterp": "{0} Künstler ausgewählt",
|
||||
"SizeLimit": "Größenlimit",
|
||||
"SizeLimit": "Grössenlimit",
|
||||
"TheBooksFilesWillBeDeleted": "Die Dateien des Albums werden gelöscht.",
|
||||
"MediaManagement": "Medienverwaltung",
|
||||
"Metadata": "Metadaten",
|
||||
@@ -742,7 +742,7 @@
|
||||
"SearchFiltered": "Suche gefilterte",
|
||||
"AddList": "Liste hinzufügen",
|
||||
"InstanceName": "Instanzname",
|
||||
"InstanceNameHelpText": "Instanzname im Tab und für den Syslog-App-Namen",
|
||||
"InstanceNameHelpText": "Instanzname im Browser-Tab und für Syslog-Anwendungsname",
|
||||
"RestartRequiredHelpTextWarning": "Erfordert einen Neustart, damit die Aktion wirksam wird",
|
||||
"UseCalibreContentServer": "Calibre-Content-Server",
|
||||
"DataExistingBooks": "Beobachte Bücher die Dateien haben oder noch nicht veröffentlicht wurden",
|
||||
@@ -756,7 +756,7 @@
|
||||
"MonitorBook": "Buch überwachen",
|
||||
"MinimumPages": "Mindestseiten",
|
||||
"MassBookSearch": "Massensuche nach Büchern",
|
||||
"MediaManagementSettingsSummary": "Einstellungen zu Benennung, Dateiverwaltung und Root-Ordnern",
|
||||
"MediaManagementSettingsSummary": "Namensgebung, Dateimanagement-Einstellungen und Root-Ordner",
|
||||
"MinimumPopularity": "Mindestpolularität",
|
||||
"MinPagesHelpText": "Bücher mit weniger Seiten als dieses ignorieren",
|
||||
"MinPopularityHelpText": "Popularität ist Durchschnittsbewertung * Anzahl der Stimmen",
|
||||
@@ -854,7 +854,7 @@
|
||||
"Theme": "Design",
|
||||
"ThemeHelpText": "Ändern Sie das Benutzeroberflächen-Design der Anwendung. Das „Auto“-Design verwendet Ihr Betriebssystemdesign, um den Hell- oder Dunkelmodus festzulegen. Inspiriert vom Theme.Park",
|
||||
"BypassIfHighestQuality": "Ignoriere wenn höchste Qualität",
|
||||
"MinimumCustomFormatScore": "Mindestwert für benutzerdefinierte Formate",
|
||||
"MinimumCustomFormatScore": "Minimum der eigenen Formate Bewertungspunkte",
|
||||
"CustomFormatScore": "Eigenes Format Bewertungspunkte",
|
||||
"CloneCustomFormat": "Benutzerdefiniertes Format klonen",
|
||||
"Conditions": "Bedingungen",
|
||||
@@ -863,7 +863,7 @@
|
||||
"CustomFormats": "Eigene Formate",
|
||||
"CutoffFormatScoreHelpText": "Sobald diese eigener Format Bewertung erreicht wird, werden keine neuen Releases erfasst",
|
||||
"DeleteFormatMessageText": "Bist du sicher, dass du das Formatierungstag {0} löschen willst?",
|
||||
"ExportCustomFormat": "Benutzerdefiniertes Format exportieren",
|
||||
"ExportCustomFormat": "Eigenes Format exportieren",
|
||||
"Formats": "Formate",
|
||||
"MinFormatScoreHelpText": "Mindester eigener Format Score bis zum Download",
|
||||
"NegateHelpText": "Wenn aktiviert wird das eigene Format nicht angewendet solange diese {0} Bedingung zutrifft.",
|
||||
@@ -879,11 +879,11 @@
|
||||
"UnableToLoadCustomFormats": "Eigene Formate konnten nicht geladen werden",
|
||||
"ImportListMissingRoot": "Fehlendes Stammverzeichnis für Importlist(en): {0}",
|
||||
"ImportListMultipleMissingRoots": "Mehrere Stammverzeichnisse fehlen für Importlist: {0}",
|
||||
"IndexerDownloadClientHelpText": "Gib an, welcher Download-Client für Abrufe von diesem Indexer verwendet wird",
|
||||
"IndexerDownloadClientHelpText": "Wähle aus, welcher Download-Client für diesen Indexer verwendet wird",
|
||||
"IndexerTagsHelpText": "Benutze den Indexer nur für Filme mit mindesens einen zutreffenden Tag. Leer lassen für alle Filme.",
|
||||
"RecycleBinUnableToWriteHealthCheck": "Schreiben in konfigurierten Papierkorbordner nicht möglich: {0}. Stelle sicher, dass dieser Pfad existiert und von dem Benutzer, der {appName} ausführt, beschreibbar ist",
|
||||
"HiddenClickToShow": "Versteckt, zum Anzeigen anklicken",
|
||||
"HideAdvanced": "Erweiterte Einstellungen ausblenden",
|
||||
"HiddenClickToShow": "Versteckt, klicken zum anzeigen",
|
||||
"HideAdvanced": "Erweiterte Ansicht",
|
||||
"ShowAdvanced": "Erweitert anzeigen",
|
||||
"ShownClickToHide": "Angezeigt, zum Ausblenden klicken",
|
||||
"ColonReplacement": "Doppelpunktersatz",
|
||||
@@ -909,11 +909,11 @@
|
||||
"DeleteSelectedIndexersMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte(n) Indexer löschen möchten?",
|
||||
"EditSelectedDownloadClients": "Ausgewählte Download Clienten bearbeiten",
|
||||
"Implementation": "Integration",
|
||||
"NoEventsFound": "Keine Ereignisse gefunden",
|
||||
"NoEventsFound": "Keine Events gefunden",
|
||||
"NoImportListsFound": "Keine Einspiel-Listen gefunden",
|
||||
"NoIndexersFound": "Keine Indexer gefunden",
|
||||
"RemoveCompletedDownloads": "Entferne abgeschlossene Downloads",
|
||||
"RemoveDownloadsAlert": "Die Entfernen-Einstellungen wurden in die einzelnen Download-Client-Einstellungen in der Tabelle oben verschoben.",
|
||||
"RemoveDownloadsAlert": "Die Einstellungen zum Entfernen wurden in die individuellen Download Client Einstellungen in der obigen Tabelle verschoben.",
|
||||
"RemovingTag": "Tag entfernen",
|
||||
"Yes": "Ja",
|
||||
"BlocklistReleaseHelpText": "Dieses Release nicht automatisch erneut erfassen",
|
||||
@@ -922,7 +922,7 @@
|
||||
"DeleteConditionMessageText": "Bist du sicher, dass du die Bedingung '{0}' löschen willst?",
|
||||
"Negated": "Negiert",
|
||||
"ResetQualityDefinitions": "Qualitätsdefinitionen zurücksetzen",
|
||||
"RemoveSelectedItem": "Ausgewähltes Element entfernen",
|
||||
"RemoveSelectedItem": "Entferne ausgewählten Eintrag",
|
||||
"RemoveSelectedItems": "Markierte Einträge löschen",
|
||||
"Required": "Erforderlich",
|
||||
"RedownloadFailed": "Download fehlgeschlagen",
|
||||
@@ -956,19 +956,19 @@
|
||||
"Loading": "Lade",
|
||||
"ConnectionLostReconnect": "{appName} wird versuchen, automatisch eine Verbindung herzustellen, oder Sie können unten auf „Neu laden“ klicken.",
|
||||
"ConnectionLostToBackend": "{appName} hat die Verbindung zum Backend verloren und muss neu geladen werden, um die Funktionalität wiederherzustellen.",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Alle Benachrichtigungen sind aufgrund von Fehlern nicht verfügbar",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Wegen Fehlern sind keine Applikationen verfügbar",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {0}",
|
||||
"TotalSpace": "Gesamter Speicherplatz",
|
||||
"Ui": "Benutzeroberfläche",
|
||||
"FreeSpace": "Freier Platz",
|
||||
"FreeSpace": "Freier Speicher",
|
||||
"Large": "Groß",
|
||||
"LastExecution": "Letzte Ausführung",
|
||||
"LastWriteTime": "Letzte Schreibzeit",
|
||||
"LastWriteTime": "Zuletzt beschrieben",
|
||||
"Library": "Bibliothek",
|
||||
"Location": "Standort",
|
||||
"Location": "Speicherort",
|
||||
"Small": "Klein",
|
||||
"ConnectionLost": "Verbindung unterbrochen",
|
||||
"Events": "Ereignisse",
|
||||
"Events": "Events",
|
||||
"LastDuration": "Letzte Dauer",
|
||||
"RecentChanges": "Kürzliche Änderungen",
|
||||
"System": "System",
|
||||
@@ -987,8 +987,8 @@
|
||||
"AutomaticUpdatesDisabledDocker": "Automatische Updates werden bei Verwendung des Docker-Update-Mechanismus nicht direkt unterstützt. Sie müssen das Container-Image außerhalb von {appName} aktualisieren oder ein Skript verwenden",
|
||||
"AutoAdd": "Automatisch hinzufügen",
|
||||
"WouldYouLikeToRestoreBackup": "Willst du das Backup '{name}' wiederherstellen?",
|
||||
"Unmonitored": "Nicht überwacht",
|
||||
"Retention": "Aufbewahrung",
|
||||
"Unmonitored": "Nicht beobachtet",
|
||||
"Retention": "Aufbewahrung ( Retention )",
|
||||
"ClickToChangeIndexerFlags": "Klicken, um Indexer-Flags zu ändern",
|
||||
"BlocklistAndSearch": "Sperrliste und Suche",
|
||||
"BlocklistAndSearchHint": "Starte Suche nach einer Alternative, falls es der Sperrliste hinzugefügt wurde",
|
||||
@@ -997,14 +997,14 @@
|
||||
"BlocklistOnly": "Nur der Sperrliste hinzufügen",
|
||||
"BlocklistOnlyHint": "Der Sperrliste hinzufügen, ohne nach Alternative zu suchen",
|
||||
"ChangeCategory": "Kategorie wechseln",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht verwendet und kann gelöscht werden",
|
||||
"ExtraFileExtensionsHelpText": "Kommagetrennte Liste von zusätzlichen Dateien, die importiert werden sollen (.nfo wird als .nfo-orig importiert)",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht benutzt und kann gelöscht werden",
|
||||
"ExtraFileExtensionsHelpText": "Kommaseparierte Liste von Dateiendungen die als Extra Dateien importiert werden sollen ( .nfo wird in .nfo-orig umbenannt )",
|
||||
"DeleteImportListExclusion": "Importlisten Ausschluss löschen",
|
||||
"IndexerFlags": "Indexer-Flags",
|
||||
"CountAuthorsSelected": "{selectedCount} Künstler ausgewählt",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Beispiele: '.sub, .nfo' oder 'sub,nfo'",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Vorschläge: sub, nfo, srt, jpg",
|
||||
"DownloadClient": "Downloader",
|
||||
"ShowMonitoredHelpText": "Überwachungsstatus unter dem Poster anzeigen",
|
||||
"ShowMonitoredHelpText": "Beobachtungsstatus unter dem Plakat anzeigen",
|
||||
"CountDownloadClientsSelected": "{count} Download-Client(s) ausgewählt",
|
||||
"CountImportListsSelected": "{selectedCount} Künstler ausgewählt",
|
||||
"CustomFormatsSpecificationRegularExpression": "Regulären Ausdruck",
|
||||
@@ -1013,8 +1013,8 @@
|
||||
"AutoRedownloadFailed": "Erneuter Download fehlgeschlagen",
|
||||
"SourceTitle": "Quellentitel",
|
||||
"Tags": "Tags",
|
||||
"DownloadClientDelugeSettingsDirectoryHelpText": "Optionaler Ort für Downloads, leer lassen, um den Standard-Deluge-Ort zu verwenden",
|
||||
"ErrorLoadingContent": "Es ist ein Fehler beim Laden dieses Inhalts aufgetreten",
|
||||
"DownloadClientDelugeSettingsDirectoryHelpText": "Optionaler Speicherort für Downloads. Lassen Sie das Feld leer, um den standardmäßigen rTorrent-Speicherort zu verwenden",
|
||||
"ErrorLoadingContent": "Beim Laden des Eintrags ist ein Fehler aufgetreten",
|
||||
"BypassIfAboveCustomFormatScore": "Umgehen, wenn über dem Wert des benutzerdefinierten Formats liegt",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Aktivieren Sie die Umgehung, wenn die Veröffentlichung einen Wert hat, der höher ist als der konfigurierte Mindestwert für das benutzerdefinierte Format",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Der Download-Client {downloadClientName} ist so eingestellt, dass abgeschlossene Downloads entfernt werden. Dies kann dazu führen, dass Downloads von Ihrem Client entfernt werden, bevor {appName} sie importieren kann.",
|
||||
@@ -1024,12 +1024,12 @@
|
||||
"InteractiveSearchModalHeader": "Interaktive Suche",
|
||||
"MinimumCustomFormatScoreHelpText": "Mindestwert für benutzerdefiniertes Format, der erforderlich ist, um Verzögerungen für das bevorzugte Protokoll zu umgehen",
|
||||
"Rejections": "Ablehnungen",
|
||||
"RemoveQueueItemConfirmation": "Bist du sicher, dass du '{sourceTitle}' aus der Warteschlange entfernen möchtest?",
|
||||
"RemoveQueueItemConfirmation": "Bist du sicher, dass du {0} Einträge aus der Warteschlange entfernen willst?",
|
||||
"SelectDropdown": "Auswählen...",
|
||||
"SelectQuality": "Qualität auswählen",
|
||||
"SelectReleaseGroup": "Wähle Release-Gruppe",
|
||||
"ShowMonitored": "Überwachter Status anzeigen",
|
||||
"DeleteSelected": "Ausgewählte löschen",
|
||||
"ShowMonitored": "Beobachtete anzeigen",
|
||||
"DeleteSelected": "Markierte löschen",
|
||||
"Bookshelf": "Bücherregal",
|
||||
"BypassIfHighestQualityHelpText": "Umgehen der Verzögerung, wenn die Freigabe die höchste aktivierte Qualität im Qualitätsprofil hat",
|
||||
"CustomFormatsSpecificationFlag": "Markierung",
|
||||
@@ -1045,12 +1045,12 @@
|
||||
"CustomFormatsSettingsTriggerInfo": "Ein Eigenes Format wird auf eine Veröffentlichung oder Datei angewandt, wenn sie mindestens einer der verschiedenen ausgewählten Bedingungen entspricht.",
|
||||
"ConnectionSettingsUrlBaseHelpText": "Fügt ein Präfix zur {connectionName} URL hinzu, z. B. {url}",
|
||||
"DownloadClientDelugeSettingsDirectory": "Download Verzeichnis",
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Verschieben, wenn abgeschlossen Verzeichnis",
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Verschieben, wenn Verzeichnis abgeschlossen",
|
||||
"IgnoreDownloadHint": "Hält {appName} von der weiteren Verarbeitung dieses Downloads ab",
|
||||
"IgnoreDownloads": "Downloads ignorieren",
|
||||
"IgnoreDownload": "Download ignorieren",
|
||||
"IgnoreDownloadsHint": "Hindert {appName}, diese Downloads weiter zu verarbeiten",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Optionaler Ort, an den abgeschlossene Downloads verschoben werden, leer lassen, um den Standard-Deluge-Ort zu verwenden",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Optionaler Speicherort für Downloads. Lassen Sie das Feld leer, um den standardmäßigen rTorrent-Speicherort zu verwenden",
|
||||
"ApiKey": "API-Schlüssel",
|
||||
"AuthBasic": "Basis (Browser-Popup)",
|
||||
"AuthForm": "Formulare (Anmeldeseite)",
|
||||
@@ -1059,56 +1059,18 @@
|
||||
"AuthenticationRequired": "Authentifizierung benötigt",
|
||||
"AuthenticationRequiredHelpText": "Ändern, welche anfragen Authentifizierung benötigen. Ändere nichts wenn du dir nicht des Risikos bewusst bist.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Neues Passwort bestätigen",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Neues Passwort eingeben",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Neuen Benutzernamen eingeben",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Gib ein neues Passwort ein",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Gib einen neuen Benutzernamen ein",
|
||||
"AuthenticationRequiredWarning": "Um unberechtigte Fernzugriffe zu vermeiden benötigt {appName} jetzt , dass Authentifizierung eingeschaltet ist. Du kannst Authentifizierung optional für lokale Adressen ausschalten.",
|
||||
"DisabledForLocalAddresses": "Für lokale Adressen deaktiviert",
|
||||
"Enabled": "Aktiviert",
|
||||
"BuiltIn": "Eingebaut",
|
||||
"CurrentlyInstalled": "Derzeit installiert",
|
||||
"InstallLatest": "Neueste Version installieren",
|
||||
"OnLatestVersion": "Die neueste Version von {appName} ist bereits installiert",
|
||||
"InstallLatest": "Jetzt updaten",
|
||||
"OnLatestVersion": "Die aktuellste Version ist bereits installiert",
|
||||
"Script": "Skript",
|
||||
"AptUpdater": "Verwenden Sie apt, um das Update zu installieren",
|
||||
"DockerUpdater": "Aktualisieren Sie den Docker-Container, um das Update zu erhalten",
|
||||
"ExternalUpdater": "{appName} ist so konfiguriert, dass es einen externen Aktualisierungsmechanismus verwendet",
|
||||
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden.",
|
||||
"External": "Extern",
|
||||
"FailedToFetchSettings": "Einstellungen können nicht abgerufen werden",
|
||||
"FailedToFetchUpdates": "Updates konnten nicht abgerufen werden",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Inhaltslayout",
|
||||
"IndexerSettingsSeedRatio": "Seed-Verhältnis",
|
||||
"RemoveMultipleFromDownloadClientHint": "Entfernt Downloads und Dateien aus dem Download-Client",
|
||||
"IndexerSettingsSeedTime": "Seed-Zeit",
|
||||
"Install": "Installieren",
|
||||
"InstallMajorVersionUpdate": "Update installieren",
|
||||
"RemoveQueueItem": "Entfernen - {sourceTitle}",
|
||||
"NotificationsPlexSettingsAuthenticateWithPlexTv": "Mit Plex.tv authentifizieren",
|
||||
"SmartReplace": "Smart Replace",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Ob das konfigurierte Inhaltslayout von qBittorrent, das ursprüngliche Layout des Torrents oder immer ein Unterordner erstellt werden soll (qBittorrent 4.3.2+)",
|
||||
"IndexerSettingsSeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen muss, bevor er gestoppt wird. Leer verwendet das Standardverhältnis des Download-Clients. Das Verhältnis sollte mindestens 1,0 betragen und den Regeln des Indexers folgen.",
|
||||
"IndexerSettingsSeedTimeHelpText": "Die Zeit, die ein Torrent gesät werden sollte, bevor er gestoppt wird. Leer verwendet die Standardzeit des Download-Clients",
|
||||
"InstallMajorVersionUpdateMessage": "Dieses Update wird eine neue Hauptversion installieren und ist möglicherweise nicht mit deinem System kompatibel. Bist du sicher, dass du dieses Update installieren möchtest?",
|
||||
"InstallMajorVersionUpdateMessageLink": "Weitere Informationen findest du unter [{domain}]({url}).",
|
||||
"InvalidUILanguage": "Die UI ist auf eine ungültige Sprache eingestellt, korrigiere sie und speichere die Einstellungen",
|
||||
"LabelIsRequired": "Label ist erforderlich",
|
||||
"NotificationsPlexSettingsAuthToken": "Auth-Token",
|
||||
"NotificationsSettingsUpdateLibrary": "Bibliothek aktualisieren",
|
||||
"NotificationsSettingsUpdateMapPathsFrom": "Pfade von",
|
||||
"NotificationsSettingsUpdateMapPathsTo": "Pfade zu",
|
||||
"NotificationsSettingsUseSslHelpText": "Mit {serviceName} über HTTPS anstatt HTTP verbinden",
|
||||
"PasswordConfirmation": "Passwortbestätigung",
|
||||
"PreviouslyInstalled": "Früher installiert",
|
||||
"RemoveFromDownloadClientHint": "Entfernt den Download und die Datei(en) aus dem Download-Client",
|
||||
"RemoveQueueItemRemovalMethod": "Entfernmethode",
|
||||
"RemoveQueueItemRemovalMethodHelpTextWarning": "'Aus dem Download-Client entfernen' wird den Download und die Datei(en) aus dem Download-Client löschen.",
|
||||
"RemoveQueueItemsRemovalMethodHelpTextWarning": "'Aus dem Download-Client entfernen' wird die Downloads und die Dateien aus dem Download-Client löschen.",
|
||||
"SelectIndexerFlags": "Indexer-Flags auswählen",
|
||||
"SetIndexerFlags": "Indexer-Flags festlegen",
|
||||
"InteractiveSearchModalHeaderBookAuthor": "Interaktive Suche - {bookTitle} von {authorName}",
|
||||
"NoMissingItems": "Keine fehlenden Einträge",
|
||||
"NoCutoffUnmetItems": "Keine nicht erfüllten Cutoff-Elemente",
|
||||
"DashOrSpaceDashDependingOnName": "Dash oder Space Dash je nach Name",
|
||||
"NotificationsSettingsUpdateMapPathsFromHelpText": "{appName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')",
|
||||
"NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')"
|
||||
"ExternalUpdater": "{appName} wurde so konfiguriert, dass ein externer Update Mechanismus benutzt wird",
|
||||
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden."
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -328,11 +328,11 @@
|
||||
"ShortDateFormat": "Format de date courte",
|
||||
"ShowCutoffUnmetIconHelpText": "Afficher l'icône des fichiers lorsque la limite n'a pas été atteinte",
|
||||
"ShowDateAdded": "Afficher la date d'ajout",
|
||||
"ShowMonitored": "Afficher l'état de surveillance",
|
||||
"ShowMonitoredHelpText": "Affiche l'état de surveillance sous le poster",
|
||||
"ShowMonitored": "Afficher le chemin",
|
||||
"ShowMonitoredHelpText": "Afficher l'état de surveillance sous le poster",
|
||||
"ShowPath": "Afficher le chemin",
|
||||
"ShowQualityProfile": "Afficher le profil de qualité",
|
||||
"ShowQualityProfileHelpText": "Affiche le profil de qualité sous l'affiche",
|
||||
"ShowQualityProfileHelpText": "Afficher le profil de qualité sous l'affiche",
|
||||
"ShowRelativeDates": "Afficher les dates relatives",
|
||||
"ShowRelativeDatesHelpText": "Afficher les dates relatives (Aujourd'hui/Hier/etc) ou absolues",
|
||||
"ShowSearch": "Afficher la recherche",
|
||||
@@ -456,7 +456,7 @@
|
||||
"ReleaseTitle": "Titre de la version",
|
||||
"ShowBookTitleHelpText": "Affiche le titre du livre sous l'affiche",
|
||||
"ShowReleaseDate": "Afficher la date de sortie",
|
||||
"ShowTitle": "Afficher le titre",
|
||||
"ShowTitle": "Montrer le titre",
|
||||
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "Le dossier '{0}' et son contenu vont être supprimés.",
|
||||
"ReplaceIllegalCharactersHelpText": "Remplacer les caractères illégaux. Si non coché, Readarr les supprimera",
|
||||
"Level": "Niveau",
|
||||
|
||||
@@ -725,7 +725,7 @@
|
||||
"AppUpdated": "{appName} Aggiornato",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Tutti i risultati sono nascosti dal filtro applicato",
|
||||
"AutoRedownloadFailed": "Download fallito",
|
||||
"AddListExclusion": "Aggiungi elenco esclusioni",
|
||||
"AddListExclusion": "Aggiungi Lista esclusioni",
|
||||
"Location": "Posizione",
|
||||
"ListsSettingsSummary": "Liste",
|
||||
"RecentChanges": "Cambiamenti Recenti",
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
"MinimumAge": "최소 연령",
|
||||
"TimeFormat": "시간 형식",
|
||||
"Title": "표제",
|
||||
"TorrentDelay": "토렌트 지연",
|
||||
"TorrentDelayHelpText": "토렌트를 잡기 전에 대기까지 소요되는 지연 (분)",
|
||||
"Torrents": "토렌트",
|
||||
"TorrentDelay": "급류 지연",
|
||||
"TorrentDelayHelpText": "급류를 잡기 전에 대기하는 데 몇 분이 걸립니다.",
|
||||
"Torrents": "급류",
|
||||
"TotalFileSize": "총 파일 크기",
|
||||
"UILanguage": "UI 언어",
|
||||
"UILanguageHelpText": "{appName}가 UI에 사용할 언어",
|
||||
@@ -639,10 +639,5 @@
|
||||
"DockerUpdater": "Docker 컨테이너를 업데이트하여 업데이트를 받으십시오.",
|
||||
"ExternalUpdater": "{appName}는 외부 업데이트 메커니즘을 사용하도록 구성됩니다.",
|
||||
"OnLatestVersion": "최신 버전의 {appName}가 이미 설치되어 있습니다.",
|
||||
"UpdateAppDirectlyLoadError": "{appName}를 직접 업데이트 할 수 없습니다.",
|
||||
"ApiKeyValidationHealthCheckMessage": "API 키를 {length}자 이상으로 업데이트하세요. 설정 또는 구성 파일을 통해 이 작업을 수행할 수 있습니다.",
|
||||
"AppUpdated": "{appName} 업데이트",
|
||||
"AppUpdatedVersion": "{appName}이 버전 `{version}`으로 업데이트되었습니다. 최신 변경 사항을 받으려면 {appName}을 다시 로드해야 합니다",
|
||||
"WouldYouLikeToRestoreBackup": "'{name}' 백업을 복원하시겠습니까?",
|
||||
"UseSSL": "SSL 사용"
|
||||
"UpdateAppDirectlyLoadError": "{appName}를 직접 업데이트 할 수 없습니다."
|
||||
}
|
||||
|
||||
@@ -734,7 +734,7 @@
|
||||
"OnReleaseImport": "Ao Importar Lançamento",
|
||||
"OnRename": "Ao Renomear",
|
||||
"OnUpgrade": "Ao Atualizar",
|
||||
"AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData na Atualização",
|
||||
"AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData na atualização",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, o Readarr não dará nenhum resultado para pesquisa interativa",
|
||||
"ConnectSettingsSummary": "Notificações, conexões com servidores/tocadores de mídia e scripts personalizados",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Todos os clientes de download estão indisponíveis devido a falhas",
|
||||
|
||||
@@ -676,7 +676,7 @@
|
||||
"Medium": "Средний",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Все уведомления недоступны из-за ошибок",
|
||||
"TotalSpace": "Общее сводное место",
|
||||
"Ui": "Интерфейс",
|
||||
"Ui": "Пользовательский интерфейс",
|
||||
"Backup": "Резервное копирование",
|
||||
"Events": "События",
|
||||
"FreeSpace": "Свободное место",
|
||||
|
||||
@@ -196,9 +196,5 @@
|
||||
"Enabled": "Povoliť",
|
||||
"UnableToAddANewImportListExclusionPleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.",
|
||||
"UnableToAddANewMetadataProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.",
|
||||
"UnableToAddANewQualityProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.",
|
||||
"Reason": "Séria",
|
||||
"Clone": "Zatvoriť",
|
||||
"AptUpdater": "Použiť apt pre inštaláciu aktualizácie",
|
||||
"BuiltIn": "Vstavaný"
|
||||
"UnableToAddANewQualityProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova."
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
"AddingTag": "Etiket ekleniyor",
|
||||
"AnalyticsEnabledHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"Columns": "Sütunlar",
|
||||
"DeleteIndexer": "İndeksleyiciyi Sil",
|
||||
"DeleteIndexer": "Dizinleyiciyi Sil",
|
||||
"DeleteRootFolderMessageText": "Dizin oluşturucuyu '{0}' silmek istediğinizden emin misiniz?",
|
||||
"Ended": "Biten",
|
||||
"Ended": "Bitti",
|
||||
"Group": "Grup",
|
||||
"LoadingBooksFailed": "Film dosyaları yüklenemedi",
|
||||
"None": "Yok",
|
||||
@@ -18,22 +18,22 @@
|
||||
"SslCertPathHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"SslCertPasswordHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"UnableToLoadMetadataProfiles": "Gecikme Profilleri yüklenemiyor",
|
||||
"AgeWhenGrabbed": "Yıl (alındığında)",
|
||||
"AgeWhenGrabbed": "Yıl (yakalandığında)",
|
||||
"AlreadyInYourLibrary": "Kütüphanenizde mevcut",
|
||||
"AlternateTitles": "Alternatif Başlıklar",
|
||||
"Analytics": "Analiz",
|
||||
"Analytics": "Analitik",
|
||||
"AnalyticsEnabledHelpText": "Anonim kullanım ve hata bilgilerini {appName} sunucularına gönderin. Bu, tarayıcınızla ilgili bilgileri, kullandığınız {appName} WebUI sayfalarını, hata raporlamasının yanı sıra işletim sistemi ve çalışma zamanı sürümünü içerir. Bu bilgileri, özellikleri ve hata düzeltmelerini önceliklendirmek için kullanacağız.",
|
||||
"AppDataDirectory": "Uygulama Veri Dizini",
|
||||
"ApplyTags": "Etiketleri Uygula",
|
||||
"Authentication": "Doğrulama",
|
||||
"AuthenticationMethodHelpText": "{appName}'e erişmek için Kullanıcı Adı ve Parola gereklidir",
|
||||
"AuthenticationMethodHelpText": "{appName}'a erişmek için Kullanıcı Adı ve Şifre gerektir",
|
||||
"AuthorClickToChangeBook": "Filmi değiştirmek için tıklayın",
|
||||
"AutoRedownloadFailedHelpText": "Farklı bir sürümü otomatik olarak ara ve indirmeyi dene",
|
||||
"AutoRedownloadFailedHelpText": "Otomatik olarak farklı bir Yayın arayın ve indirmeye çalışın",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Diskten silinen filmler otomatik olarak {appName}'da izlenmez",
|
||||
"Automatic": "Otomatik",
|
||||
"BackupFolderHelpText": "Göreli yollar {appName}'ın AppData dizini altında olacaktır",
|
||||
"BackupNow": "Şimdi Yedekle",
|
||||
"BackupRetentionHelpText": "Saklama süresinden daha eski otomatik yedeklemeler otomatik olarak temizlenecektir",
|
||||
"BackupNow": "Şimdi yedekle",
|
||||
"BackupRetentionHelpText": "Saklama süresinden daha eski olan otomatik yedeklemeler otomatik olarak temizlenecektir",
|
||||
"Backups": "Yedeklemeler",
|
||||
"BindAddress": "Bind Adresi",
|
||||
"BindAddressHelpText": "Tüm arayüzler için geçerli IP adresi, localhost veya '*'",
|
||||
@@ -41,12 +41,12 @@
|
||||
"BookIsDownloading": "Film indiriliyor",
|
||||
"BookIsDownloadingInterp": "Film indiriliyor - {0}% {1}",
|
||||
"Branch": "Şube",
|
||||
"BypassProxyForLocalAddresses": "Yerel Adresler için Proxy'yi Kullanma",
|
||||
"BypassProxyForLocalAddresses": "Yerel Adresler için Proxy'yi Atla",
|
||||
"Calendar": "Takvim",
|
||||
"CalendarWeekColumnHeaderHelpText": "Aktif görünüm hafta olduğunda her bir sütunun üzerinde gösterilir",
|
||||
"Cancel": "Vazgeç",
|
||||
"CancelPendingTask": "Bekleyen görevi iptal etmek istediğinizden emin misiniz?",
|
||||
"CertificateValidation": "Sertifika Doğrulaması",
|
||||
"CancelPendingTask": "Bu bekleyen görevi iptal etmek istediğinizden emin misiniz?",
|
||||
"CertificateValidation": "Sertifika Doğrulama",
|
||||
"CertificateValidationHelpText": "HTTPS sertifika doğrulamasının sıkılığını değiştirin. Riskleri anlamadığınız sürece değişmeyin.",
|
||||
"ChangeFileDate": "Dosya Tarihini Değiştir",
|
||||
"ChangeHasNotBeenSavedYet": "Değişiklik henüz kaydedilmedi",
|
||||
@@ -87,7 +87,7 @@
|
||||
"DeleteImportListExclusion": "İçe Aktarma Listesi Hariç Tutmasını Sil",
|
||||
"DeleteImportListExclusionMessageText": "Bu içe aktarma listesi hariç tutma işlemini silmek istediğinizden emin misiniz?",
|
||||
"DeleteImportListMessageText": "'{name}' listesini silmek istediğinizden emin misiniz?",
|
||||
"DeleteIndexerMessageText": "'{name}' indeksleyicisini silmek istediğinizden emin misiniz?",
|
||||
"DeleteIndexerMessageText": "'{name}' dizinleyicisini silmek istediğinizden emin misiniz?",
|
||||
"DeleteMetadataProfileMessageText": "Kalite profilini silmek istediğinizden emin misiniz {0}",
|
||||
"DeleteNotification": "Bildirimi Sil",
|
||||
"DeleteNotificationMessageText": "'{name}' bildirimini silmek istediğinizden emin misiniz?",
|
||||
@@ -103,23 +103,23 @@
|
||||
"DetailedProgressBar": "Ayrıntılı İlerleme Çubuğu",
|
||||
"DetailedProgressBarHelpText": "İlerleme çubuğundaki metni göster",
|
||||
"DiskSpace": "Disk Alanı",
|
||||
"Docker": "Docker",
|
||||
"DownloadClient": "İndirme İstemcisi",
|
||||
"DownloadClientSettings": "İndirme İstemcisi Ayarlarını",
|
||||
"Docker": "Liman işçisi",
|
||||
"DownloadClient": "İstemciyi İndir",
|
||||
"DownloadClientSettings": "İstemci Ayarlarını İndir",
|
||||
"DownloadClients": "İndirme İstemcileri",
|
||||
"DownloadFailedCheckDownloadClientForMoreDetails": "İndirme başarısız oldu: Daha fazla ayrıntı için indirme istemcisini kontrol edin",
|
||||
"DownloadFailedInterp": "İndirme başarısız oldu: {0}",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "Propers / Repacks'e otomatik olarak yükseltme yapılıp yapılmayacağı",
|
||||
"DownloadWarningCheckDownloadClientForMoreDetails": "İndirme uyarısı: Daha fazla ayrıntı için indirme istemcisini kontrol edin",
|
||||
"Edit": "Düzenle",
|
||||
"Edition": "Versiyon",
|
||||
"Edition": "Baskı",
|
||||
"Enable": "etkinleştirme",
|
||||
"EnableAutomaticAdd": "Otomatik Eklemeyi Etkinleştir",
|
||||
"EnableAutomaticSearch": "Otomatik Aramayı Etkinleştir",
|
||||
"EnableColorImpairedMode": "Renk Bozukluğu Modunu Etkinleştir",
|
||||
"EnableColorImpairedModeHelpText": "Renk engelli kullanıcıların renkleri daha iyi ayırt edebilmelerini sağlamak için değiştirilmiş stil",
|
||||
"EnableColorImpairedModeHelpText": "Renk bozukluğu olan kullanıcıların renk kodlu bilgileri daha iyi ayırt etmesine olanak tanıyan değiştirilmiş stil",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Tamamlanan indirmeleri indirme istemcisinden otomatik olarak içe aktarın",
|
||||
"EnableHelpText": "Bu meta veri türü için meta veri dosyası oluşturmayı etkinleştir",
|
||||
"EnableHelpText": "Bu meta veri türü için meta veri dosyası oluşturmayı etkinleştirin",
|
||||
"EnableInteractiveSearch": "Etkileşimli Aramayı Etkinleştir",
|
||||
"EnableRSS": "RSS'yi etkinleştir",
|
||||
"EnableSSL": "SSL'yi etkinleştir",
|
||||
@@ -129,12 +129,12 @@
|
||||
"Exception": "İstisna",
|
||||
"FailedDownloadHandling": "Başarısız İndirme İşlemi",
|
||||
"FileDateHelpText": "İçe aktarmada / yeniden taramada dosya tarihini değiştirin",
|
||||
"FileManagement": "Dosya Yönetimi",
|
||||
"FileManagement": "Dosya idare",
|
||||
"FileNames": "Dosya Adları",
|
||||
"Filename": "Dosya adı",
|
||||
"Files": "Dosyalar",
|
||||
"FirstDayOfWeek": "Haftanın İlk Günü",
|
||||
"Fixed": "Düzeltilen",
|
||||
"FirstDayOfWeek": "Haftanın ilk günü",
|
||||
"Fixed": "Sabit",
|
||||
"Folder": "Klasör",
|
||||
"Folders": "Klasörler",
|
||||
"ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Bireysel indirme istemcileri hakkında daha fazla bilgi için bilgi düğmelerine tıklayın.",
|
||||
@@ -145,13 +145,13 @@
|
||||
"GoToInterp": "{0} adresine gidin",
|
||||
"Grab": "Kapmak",
|
||||
"GrabID": "Grab ID",
|
||||
"GrabRelease": "Yayın Alma",
|
||||
"GrabRelease": "Yayın Yakalama",
|
||||
"GrabReleaseMessageText": "{appName}, bu sürümün hangi film için olduğunu belirleyemedi. {appName} bu sürümü otomatik olarak içe aktaramayabilir. '{0}' almak istiyor musunuz?",
|
||||
"GrabSelected": "Seçilenleri Al",
|
||||
"GrabSelected": "Seçilenleri Kap",
|
||||
"HasPendingChangesNoChanges": "Değişiklikler yok",
|
||||
"HasPendingChangesSaveChanges": "Değişiklikleri Kaydet",
|
||||
"History": "Geçmiş",
|
||||
"Host": "Sunucu",
|
||||
"Host": "Ana bilgisayar",
|
||||
"Hostname": "Hostname",
|
||||
"ICalFeed": "iCal Beslemesi",
|
||||
"ICalHttpUrlHelpText": "Bu URL'yi müşterilerinize kopyalayın veya tarayıcınız webcal'i destekliyorsa abone olmak için tıklayın",
|
||||
@@ -166,14 +166,14 @@
|
||||
"ImportExtraFilesHelpText": "Bir film dosyasını içe aktardıktan sonra eşleşen ekstra dosyaları (altyazılar, bilgi notları vb.) İçe aktarın",
|
||||
"ImportFailedInterp": "İçe aktarma başarısız oldu: {0}",
|
||||
"ImportedTo": "İçeri Aktarıldı",
|
||||
"Importing": "İçe Aktarma",
|
||||
"Importing": "İçe aktarılıyor",
|
||||
"IncludeHealthWarningsHelpText": "Sağlık Uyarılarını Dahil Et",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Kuyrukta film olmayan öğeleri gösterin. Bu, kaldırılan filmleri veya {appName}'ın kategorisindeki herhangi bir şeyi içerebilir",
|
||||
"IncludeUnmonitored": "Takip Edilmeyenleri Dahil Et",
|
||||
"Indexer": "İndeksleyici",
|
||||
"IndexerPriority": "İndeksleyici Önceliği",
|
||||
"IndexerSettings": "İndeksleyici Ayarları",
|
||||
"Indexers": "İndeksleyiciler",
|
||||
"Indexer": "Dizinleyici",
|
||||
"IndexerPriority": "Dizinleyici Önceliği",
|
||||
"IndexerSettings": "Dizinleyici Ayarları",
|
||||
"Indexers": "Dizinleyiciler",
|
||||
"Interval": "Periyot",
|
||||
"IsCutoffCutoff": "Ayırmak",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Bu kalite karşılanana veya aşılana kadar yükseltin",
|
||||
@@ -182,33 +182,33 @@
|
||||
"LaunchBrowserHelpText": " Bir web tarayıcısı açın ve uygulama başlangıcında {appName} ana sayfasına gidin.",
|
||||
"LoadingBookFilesFailed": "Film dosyaları yüklenemedi",
|
||||
"Local": "Yerel",
|
||||
"LogFiles": "Log Kayıtları",
|
||||
"LogLevel": "Log Seviyesi",
|
||||
"LogFiles": "Log dosyaları",
|
||||
"LogLevel": "Günlük Düzeyi",
|
||||
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "İzleme günlük kaydı yalnızca geçici olarak etkinleştirilmelidir",
|
||||
"Logging": "Loglama",
|
||||
"Logs": "Kayıtlar",
|
||||
"Logs": "Kütükler",
|
||||
"LongDateFormat": "Uzun Tarih Formatı",
|
||||
"MIA": "MIA",
|
||||
"ManualImport": "Manuel İçe Aktar",
|
||||
"MarkAsFailed": "Başarısız olarak işaretle",
|
||||
"MarkAsFailedMessageText": "'{0}' başarısız olarak işaretlemek istediğinizden emin misiniz?",
|
||||
"MaximumLimits": "Maksimum Sınırlar",
|
||||
"MaximumSize": "Maksimum Boyut",
|
||||
"MaximumSize": "En büyük boy",
|
||||
"MaximumSizeHelpText": "MB cinsinden alınacak bir sürüm için maksimum boyut. Sınırsız olarak ayarlamak için sıfıra ayarlayın",
|
||||
"Mechanism": "Teknik",
|
||||
"Mechanism": "İşleyiş",
|
||||
"MediaInfo": "Medya bilgisi",
|
||||
"MediaManagementSettings": "Medya Yönetimi Ayarları",
|
||||
"Message": "Mesaj",
|
||||
"Message": "İleti",
|
||||
"MetadataSettings": "Meta Veri Ayarları",
|
||||
"MinimumAge": "Minimum Geçen Süre",
|
||||
"MinimumAgeHelpText": "Yalnızca Usenet: NZB'lerin almadan önceki minimum geçen süre (dakika cinsinden). Bunu, yeni sürümlerin usenet sağlayıcınıza yayılması için zaman vermek amacıyla kullanın.",
|
||||
"MinimumAge": "Asgari yaş",
|
||||
"MinimumAgeHelpText": "Yalnızca Usenet: NZB'lerin alınmadan önceki dakika cinsinden minimum yaşı. Yeni yayınların usenet sağlayıcınıza yayılması için zaman tanımak için bunu kullanın.",
|
||||
"MinimumFreeSpace": "Minimum Boş Alan",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Bu miktardan daha az kullanılabilir disk alanı bırakacaksa içe aktarmayı önleyin",
|
||||
"MinimumLimits": "Minimum Limitler",
|
||||
"Missing": "Eksik",
|
||||
"Mode": "Mod",
|
||||
"Monitored": "Takip Ediliyor",
|
||||
"MoreInfo": "Daha Fazla Bilgi",
|
||||
"MoreInfo": "Daha fazla bilgi",
|
||||
"MustContain": "İçermeli",
|
||||
"MustNotContain": "İçermemeli",
|
||||
"Name": "İsim",
|
||||
@@ -217,9 +217,9 @@
|
||||
"NoBackupsAreAvailable": "Kullanılabilir yedek yok",
|
||||
"NoLeaveIt": "Hayır, Bırak",
|
||||
"NoLimitForAnyRuntime": "Herhangi bir çalışma zamanı için sınır yok",
|
||||
"NoLogFiles": "Log kayıt dosyası henüz oluşturulmadı",
|
||||
"NoLogFiles": "Günlük dosyası yok",
|
||||
"NoMinimumForAnyRuntime": "Herhangi bir çalışma süresi için minimum değer yok",
|
||||
"NoUpdatesAreAvailable": "Güncelleme bulunamadı",
|
||||
"NoUpdatesAreAvailable": "Güncelleme yok",
|
||||
"NotificationTriggers": "Bildirim Tetikleyicileri",
|
||||
"OnGrabHelpText": "Yakalandığında",
|
||||
"OnHealthIssueHelpText": "Sağlık Sorunu Hakkında",
|
||||
@@ -230,12 +230,12 @@
|
||||
"Original": "Orijinal",
|
||||
"Overview": "Genel Bakış",
|
||||
"PackageVersion": "Paket Versiyonu",
|
||||
"PageSize": "Sayfa Boyutu",
|
||||
"PageSize": "Sayfa boyutu",
|
||||
"PageSizeHelpText": "Her sayfada gösterilecek öğe sayısı",
|
||||
"Password": "Şifre",
|
||||
"Path": "Yol",
|
||||
"Permissions": "İzinler",
|
||||
"Port": "Port No",
|
||||
"Port": "Liman",
|
||||
"PortHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"PortNumber": "Port numarası",
|
||||
"PosterSize": "Poster Boyutu",
|
||||
@@ -255,7 +255,7 @@
|
||||
"QualityProfile": "Kalite Profili",
|
||||
"QualityProfiles": "Kalite Profileri",
|
||||
"QualitySettings": "Kalite Ayarları",
|
||||
"Queue": "Kuyruk",
|
||||
"Queue": "Sırada",
|
||||
"RSSSync": "RSS Senkronizasyonu",
|
||||
"RSSSyncInterval": "RSS Senkronizasyon Aralığı",
|
||||
"ReadTheWikiForMoreInformation": "Daha fazla bilgi için Wiki'yi okuyun",
|
||||
@@ -267,7 +267,7 @@
|
||||
"RecycleBinCleanupDaysHelpTextWarning": "Geri dönüşüm kutusundaki, seçilen gün sayısından daha eski olan dosyalar otomatik olarak temizlenecektir",
|
||||
"RecycleBinHelpText": "Film dosyaları, kalıcı olarak silinmek yerine silindiğinde buraya gider",
|
||||
"RecyclingBin": "Geri dönüşüm Kutusu",
|
||||
"RecyclingBinCleanup": "Geri Dönüşüm Kutusu Temizle",
|
||||
"RecyclingBinCleanup": "Geri Dönüşüm Kutusu Temizleme",
|
||||
"Redownload": "Yeniden indir",
|
||||
"Refresh": "Yenile",
|
||||
"RefreshInformationAndScanDisk": "Bilgileri ve tarama diskini yenileyin",
|
||||
@@ -290,7 +290,7 @@
|
||||
"RemovedFromTaskQueue": "Görev kuyruğundan kaldırıldı",
|
||||
"RenameBooksHelpText": "Yeniden adlandırma devre dışı bırakılırsa, {appName} mevcut dosya adını kullanacaktır",
|
||||
"Reorder": "Yeniden sırala",
|
||||
"ReplaceIllegalCharacters": "Geçersiz Karakterleri Değiştirin",
|
||||
"ReplaceIllegalCharacters": "Yasadışı Karakterleri Değiştirin",
|
||||
"RequiredHelpText": "Sürüm, bu terimlerden en az birini içermelidir (büyük / küçük harfe duyarlı değildir)",
|
||||
"RequiredPlaceHolder": "Yeni kısıtlama ekle",
|
||||
"RescanAfterRefreshHelpTextWarning": "{appName}, 'Her Zaman' olarak ayarlanmadığında dosyalardaki değişiklikleri otomatik olarak algılamayacaktır",
|
||||
@@ -308,8 +308,8 @@
|
||||
"RetentionHelpText": "Yalnızca Usenet: Sınırsız saklamaya ayarlamak için sıfıra ayarlayın",
|
||||
"RetryingDownloadInterp": "İndirme işlemi {0}, {1} tarihinde yeniden deneniyor",
|
||||
"RootFolder": "Kök Klasör",
|
||||
"RootFolders": "Kök Klasörler",
|
||||
"RssSyncIntervalHelpText": "Dakika cinsinden aralık. Devre dışı bırakmak için sıfıra ayarlayın (tüm otomatik yayın almayı durduracaktır)",
|
||||
"RootFolders": "Kök klasörler",
|
||||
"RssSyncIntervalHelpText": "Dakika cinsinden periyot. Devre dışı bırakmak için sıfıra ayarlayın (tüm otomatik yayın yakalamayı durduracaktır)",
|
||||
"SSLCertPassword": "SSL Sertifika Parolası",
|
||||
"SSLCertPath": "SSL Sertifika Yolu",
|
||||
"SSLPort": "SSL Bağlantı Noktası",
|
||||
@@ -333,8 +333,8 @@
|
||||
"ShowPath": "Yolu Göster",
|
||||
"ShowQualityProfile": "Kalite Profilini Göster",
|
||||
"ShowQualityProfileHelpText": "Poster altında kalite profilini göster",
|
||||
"ShowRelativeDates": "İlgili Tarihleri Göster",
|
||||
"ShowRelativeDatesHelpText": "Göreceli (Bugün/Dün/vb.) veya mutlak tarihleri göster",
|
||||
"ShowRelativeDates": "Göreli Tarihleri Göster",
|
||||
"ShowRelativeDatesHelpText": "Göreli (Bugün / Dün / vb.) Veya mutlak tarihleri göster",
|
||||
"ShowSearch": "Aramayı Göster",
|
||||
"ShowSearchActionHelpText": "Fareyle üzerine gelindiğinde arama düğmesini göster",
|
||||
"ShowSizeOnDisk": "Diskte Boyutu Göster",
|
||||
@@ -346,7 +346,7 @@
|
||||
"SorryThatBookCannotBeFound": "Maalesef o film bulunamıyor.",
|
||||
"Source": "Kaynak",
|
||||
"SourcePath": "Kaynak Yolu",
|
||||
"SslCertPasswordHelpText": "Pfx dosyası için şifre",
|
||||
"SslCertPasswordHelpText": "Pfx dosyasının şifresi",
|
||||
"SslCertPathHelpText": "Pfx dosyasının yolu",
|
||||
"SslPortHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"StandardBookFormat": "Standart Film Formatı",
|
||||
@@ -354,7 +354,7 @@
|
||||
"StartupDirectory": "Başlangıç Dizini",
|
||||
"Status": "Durum",
|
||||
"StatusEndedEnded": "Bitti",
|
||||
"Style": "Stil",
|
||||
"Style": "Tarz",
|
||||
"SuccessMyWorkIsDoneNoFilesToRename": "Başarılı! İşim bitti, yeniden adlandırılacak dosya yok.",
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Başarılı! İşim bitti, yeniden adlandırılacak dosya yok.",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS, bu indeksleyici ile desteklenmiyor",
|
||||
@@ -366,7 +366,7 @@
|
||||
"Tasks": "Görevler",
|
||||
"TestAll": "Tümünü Test Et",
|
||||
"TestAllClients": "Tüm İstemcileri Test Et",
|
||||
"TestAllIndexers": "İndeksleyicileri Test Et",
|
||||
"TestAllIndexers": "Tüm Dizinleyicileri Test Et",
|
||||
"TestAllLists": "Tüm Listeleri Test Et",
|
||||
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Bu, tüm dizin oluşturucular için geçerli olacaktır, lütfen onlar tarafından belirlenen kurallara uyun",
|
||||
"TimeFormat": "Zaman formatı",
|
||||
@@ -382,7 +382,7 @@
|
||||
"URLBase": "URL Tabanı",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Yeni bir indirme istemcisi eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewImportListExclusionPleaseTryAgain": "Yeni bir liste dışlaması eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Yeni bir indeksleyici eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Yeni bir dizinleyici eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewListPleaseTryAgain": "Yeni bir liste eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewMetadataProfilePleaseTryAgain": "Yeni bir kaliteli profil eklenemiyor, lütfen tekrar deneyin.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Yeni bir bildirim eklenemiyor, lütfen tekrar deneyin.",
|
||||
@@ -397,7 +397,7 @@
|
||||
"UnableToLoadHistory": "Geçmiş yüklenemiyor",
|
||||
"UnableToLoadImportListExclusions": "Hariç Tutulanlar Listesi yüklenemiyor",
|
||||
"UnableToLoadIndexerOptions": "Dizin oluşturucu seçenekleri yüklenemiyor",
|
||||
"UnableToLoadIndexers": "İndeksleyiciler yüklenemiyor",
|
||||
"UnableToLoadIndexers": "Dizinleyiciler yüklenemiyor",
|
||||
"UnableToLoadLists": "Listeler yüklenemiyor",
|
||||
"UnableToLoadMediaManagementSettings": "Medya Yönetimi ayarları yüklenemiyor",
|
||||
"UnableToLoadMetadata": "Meta Veriler yüklenemiyor",
|
||||
@@ -429,20 +429,20 @@
|
||||
"UsenetDelay": "Usenet Gecikmesi",
|
||||
"UsenetDelayHelpText": "Usenet'ten bir yayın almadan önce beklemek için dakika cinsinden gecikme",
|
||||
"Username": "Kullanıcı adı",
|
||||
"BranchUpdate": "{appName} uygulamasını güncellemek için kullanılacak şube",
|
||||
"BranchUpdateMechanism": "Harici güncelleme mekanizması tarafından kullanılan şube",
|
||||
"BranchUpdate": "{appName}'ı güncellemek için kullanılacak dal",
|
||||
"BranchUpdateMechanism": "Harici güncelleme mekanizması tarafından kullanılan dal",
|
||||
"Version": "Sürüm",
|
||||
"WeekColumnHeader": "Hafta Sütun Başlığı",
|
||||
"Year": "Yıl",
|
||||
"YesCancel": "Evet İptal",
|
||||
"DownloadClientCheckDownloadingToRoot": "İndirme istemcisi {0}, indirmeleri kök klasöre yerleştirir {1}. Bir kök klasöre indirmemelisiniz.",
|
||||
"NotAvailable": "Müsait değil",
|
||||
"ReleaseTitle": "Yayın Başlığı",
|
||||
"ReleaseTitle": "Yayin Başlığı",
|
||||
"ShowReleaseDate": "Çıkış Tarihini Göster",
|
||||
"ReplaceIllegalCharactersHelpText": "Geçersiz karakterleri değiştirin. İşaretli değilse, {appName} onları kaldıracaktır.",
|
||||
"BookAvailableButMissing": "Film Mevcut, ancak Eksik",
|
||||
"NotMonitored": "Takip Edilmeyen",
|
||||
"OutputPath": "İndirilen Yol",
|
||||
"OutputPath": "Çıkış yolu",
|
||||
"Progress": "İlerleme",
|
||||
"ShowBookTitleHelpText": "Film başlığını posterin altında göster",
|
||||
"ShowTitle": "Başlığı göster",
|
||||
@@ -462,7 +462,7 @@
|
||||
"Time": "Zaman",
|
||||
"UnableToLoadBlocklist": "Kara liste yüklenemiyor",
|
||||
"Wanted": "Arananlar",
|
||||
"Blocklist": "Engellenenler listesi",
|
||||
"Blocklist": "Kara liste",
|
||||
"BlocklistRelease": "Kara Liste Sürümü",
|
||||
"AppDataLocationHealthCheckMessage": "Güncelleme sırasında AppData'nın silinmesini önlemek için güncelleme yapılmayacaktır",
|
||||
"Filters": "Filtreler",
|
||||
@@ -476,25 +476,25 @@
|
||||
"ConnectSettingsSummary": "Bildirimler, medya sunucularına/oynatıcılara bağlantılar ve özel komut kodları",
|
||||
"CreateEmptyAuthorFolders": "Boş film klasörleri oluşturun",
|
||||
"General": "Genel",
|
||||
"GeneralSettingsSummary": "Port, SSL, kullanıcı adı/şifre, proxy, analizler ve güncellemeler",
|
||||
"ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm indeksleyiciler kullanılamıyor",
|
||||
"GeneralSettingsSummary": "Port, SSL, kullanıcı adı/şifre, proxy, analitikler ve güncellemeler",
|
||||
"ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm listeler kullanılamıyor",
|
||||
"ImportListStatusCheckSingleClientMessage": "Hatalar nedeniyle kullanılamayan listeler: {0}",
|
||||
"ImportMechanismHealthCheckMessage": "Tamamlanan İndirme İşlemini Etkinleştir",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "6 saatten uzun süren arızalar nedeniyle tüm indeksleyiciler kullanılamıyor",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "6 saatten uzun süren arızalar nedeniyle tüm dizinleyiciler kullanılamıyor",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "6 saatten uzun süredir yaşanan arızalar nedeniyle dizinleyiciler kullanılamıyor: {0}",
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Son zamanlardaki indeksleyici hataları nedeniyle tüm rss uyumlu indeksleyiciler geçici olarak kullanılamıyor",
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Son indeksleyici hataları nedeniyle tüm rss özellikli indeksleyiciler geçici olarak kullanılamıyor",
|
||||
"IndexerRssHealthCheckNoIndexers": "RSS senkronizasyonunun etkin olduğu dizinleyici yok, {appName} yeni sürümleri otomatik olarak almayacak",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Otomatik Arama etkinken indeksleyici yok, {appName} herhangi bir otomatik arama sonucu sağlamayacak",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Son zamanlardaki indeksleyici hataları nedeniyle tüm arama yeteneğine sahip indeksleyiciler geçici olarak kullanılamıyor",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Son indeksleyici hataları nedeniyle arama özellikli indeksleyicilerin tümü geçici olarak kullanılamıyor",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Etkileşimli Arama etkinken indeksleyici yok, {appName} herhangi bir etkileşimli arama sonucu sağlamayacaktır",
|
||||
"IndexersSettingsSummary": "İndeksleyiciler ve yayımlama kısıtlamaları",
|
||||
"IndexerStatusCheckAllClientMessage": "Hatalar nedeniyle tüm indeksleyiciler kullanılamıyor",
|
||||
"IndexersSettingsSummary": "Dizinleyiciler ve yayımlama kısıtlamaları",
|
||||
"IndexerStatusCheckAllClientMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor",
|
||||
"IndexerStatusCheckSingleClientMessage": "Hatalar nedeniyle dizinleyiciler kullanılamıyor: {0}",
|
||||
"MediaManagement": "Medya Yönetimi",
|
||||
"MediaManagement": "Medya işletme",
|
||||
"MissingFromDisk": "{appName} dosyayı diskte bulamadı, bu yüzden kaldırıldı",
|
||||
"Monitor": "Takip",
|
||||
"MountCheckMessage": "Bir film yolu içeren bağlama, salt okunur olarak bağlanır: ",
|
||||
"OnGrab": "Alındığında",
|
||||
"OnGrab": "Yakalandığında",
|
||||
"OnHealthIssue": "Sağlık Sorunu Hakkında",
|
||||
"OnRename": "Yeniden Adlandırıldığında",
|
||||
"OnUpgrade": "Yükseltme sırasında",
|
||||
@@ -541,13 +541,13 @@
|
||||
"RestartRequiredHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"AddList": "Liste Ekleyin",
|
||||
"RenameFiles": "Yeniden Adlandır",
|
||||
"Test": "Test Et",
|
||||
"Test": "Sına",
|
||||
"ImportListExclusions": "İçe Aktarma Listesinden Hariç Bırakılan(lar)",
|
||||
"ManualImportSelectEdition": "Manuel İçe Aktarma - Film Seçin",
|
||||
"HardlinkCopyFiles": "Hardlink / Dosyaları Kopyala",
|
||||
"MoveFiles": "Dosyaları Taşı",
|
||||
"MinimumCustomFormatScore": "Minimum Özel Format Puanı",
|
||||
"CustomFormatScore": "Özel Format Puanı",
|
||||
"CustomFormatScore": "Özel Biçim Puanı",
|
||||
"CloneCustomFormat": "Özel Formatı Klonla",
|
||||
"Conditions": "Koşullar",
|
||||
"CopyToClipboard": "Panoya kopyala",
|
||||
@@ -555,10 +555,10 @@
|
||||
"CutoffFormatScoreHelpText": "Bu özel format puanına ulaşıldığında, {appName} artık film indirmeyecektir",
|
||||
"DeleteCustomFormat": "Özel Formatı Sil",
|
||||
"UnableToLoadCustomFormats": "Özel Biçimler yüklenemiyor",
|
||||
"UpgradesAllowed": "Yükseltmelere İzin Ver",
|
||||
"UpgradesAllowed": "Yükseltmelere İzin Verildi",
|
||||
"CustomFormat": "Özel Format",
|
||||
"CustomFormatSettings": "Özel Biçim Ayarları",
|
||||
"DeleteCustomFormatMessageText": "'{name}' özel formatı silmek istediğinizden emin misiniz?",
|
||||
"DeleteCustomFormatMessageText": "'{name}' özel biçimini silmek istediğinizden emin misiniz?",
|
||||
"DeleteFormatMessageText": "{0} biçim etiketini silmek istediğinizden emin misiniz?",
|
||||
"ExportCustomFormat": "Özel Formatı Dışa Aktar",
|
||||
"Formats": "Formatlar",
|
||||
@@ -595,7 +595,7 @@
|
||||
"ApplyTagsHelpTextRemove": "Kaldır: Girilen etiketleri kaldırın",
|
||||
"ApplyTagsHelpTextReplace": "Değiştir: Etiketleri girilen etiketlerle değiştirin (tüm etiketleri kaldırmak için etiket girmeyin)",
|
||||
"DeleteSelectedDownloadClients": "İndirme İstemcilerini Sil",
|
||||
"DeleteSelectedIndexers": "İndeksleyicileri Sil",
|
||||
"DeleteSelectedIndexers": "Dizinleyicileri Sil",
|
||||
"ExistingTag": "Mevcut etiket",
|
||||
"No": "Hayır",
|
||||
"NoChange": "Değişiklik yok",
|
||||
@@ -604,16 +604,16 @@
|
||||
"ConnectionLostReconnect": "{appName} otomatik bağlanmayı deneyecek veya aşağıda yeniden yükle seçeneğini işaretleyebilirsiniz.",
|
||||
"LastExecution": "Son Yürütme",
|
||||
"LastWriteTime": "Son Yazma Zamanı",
|
||||
"Location": "Klasör Yolu",
|
||||
"Location": "yer",
|
||||
"RecentChanges": "Son değişiklikler",
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Bazı sonuçlar uygulanan filtre tarafından gizlendi",
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Bazı sonuçlar, uygulanan filtre tarafından gizlendi",
|
||||
"WhatsNew": "Ne var ne yok?",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Arızalar nedeniyle tüm bildirimler kullanılamıyor",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Hatalar nedeniyle kullanılamayan listeler: {0}",
|
||||
"Small": "Küçük",
|
||||
"System": "Sistem",
|
||||
"Ui": "Arayüz",
|
||||
"Events": "Olaylar",
|
||||
"Events": "Etkinlikler",
|
||||
"FreeSpace": "Boş alan",
|
||||
"NextExecution": "Sonraki Yürütme",
|
||||
"NoResultsFound": "Sonuç bulunamadı",
|
||||
@@ -624,14 +624,14 @@
|
||||
"AddNew": "Yeni Ekle",
|
||||
"Large": "Büyük",
|
||||
"LastDuration": "Yürütme Süresi",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Tüm sonuçlar uygulanan filtre tarafından gizlendi",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Tüm sonuçlar, uygulanan filtre tarafından gizlenir",
|
||||
"Library": "kütüphane",
|
||||
"MetadataProfile": "üstveri profili",
|
||||
"MetadataProfiles": "üstveri profili",
|
||||
"ExtraFileExtensionsHelpText": "İçe aktarılacak ekstra dosyaların virgülle ayrılmış listesi (.nfo, .nfo-orig olarak içe aktarılacaktır)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Örnekler: \".sub, .nfo\" veya \"sub, nfo\"",
|
||||
"AppUpdated": "{appName} Güncellendi",
|
||||
"AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gerekli",
|
||||
"AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; en son değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gerekli",
|
||||
"Clone": "Klon",
|
||||
"ConnectionLostToBackend": "{appName}'ın arka uçla bağlantısı kesildi ve işlevselliğin geri kazanılması için yeniden yüklenmesi gerekecek.",
|
||||
"AutomaticUpdatesDisabledDocker": "Docker güncelleme mekanizması kullanıldığında otomatik güncellemeler doğrudan desteklenmez. Konteyner görüntüsünü {appName} dışında güncellemeniz veya bir komut dosyası kullanmanız gerekecek",
|
||||
@@ -652,10 +652,10 @@
|
||||
"ClickToChangeReleaseGroup": "Yayım grubunu değiştirmek için tıklayın",
|
||||
"CloneCondition": "Klon Durumu",
|
||||
"CustomFilter": "Özel Filtre",
|
||||
"AutoRedownloadFailed": "Başarısız İndirmeleri Yenile",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Etkileşimli aramadan başarısız bir sürüm alındığında otomatik olarak farklı bir sürümü arayın ve indirmeye çalışın",
|
||||
"AutoRedownloadFailed": "Yeniden İndirme Başarısız",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Başarısız indirmeler, etkileşimli aramada bulunduğunda otomatik olarak farklı bir versiyonu arayın ve indirmeyi deneyin",
|
||||
"ChangeCategoryHint": "İndirme İstemcisi'nden indirme işlemini 'İçe Aktarma Sonrası Kategorisi' olarak değiştirir",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Etkileşimli Arama'dan Başarısız İndirmeleri Yenile",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Etkileşimli Aramadan Yeniden İndirme Başarısız Oldu",
|
||||
"AutomaticAdd": "Otomatik Ekle",
|
||||
"DeleteCondition": "Koşulu Sil",
|
||||
"DeleteSelectedImportListsMessageText": "Seçilen {count} içe aktarma listesini silmek istediğinizden emin misiniz?",
|
||||
@@ -664,7 +664,7 @@
|
||||
"DeleteSelectedImportLists": "İçe Aktarma Listelerini Sil",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Seçilen {count} indirme istemcisini silmek istediğinizden emin misiniz?",
|
||||
"DeleteRootFolder": "Kök Klasörü Sil",
|
||||
"DeleteSelectedIndexersMessageText": "Seçilen {count} indeksleyiciyi silmek istediğinizden emin misiniz?",
|
||||
"DeleteSelectedIndexersMessageText": "Seçilen {count} dizinleyiciyi silmek istediğinizden emin misiniz?",
|
||||
"DoNotBlocklist": "Engelleme Listesine Eklemeyin",
|
||||
"DoNotBlocklistHint": "Engellenenler listesine eklemeden kaldır",
|
||||
"CustomFormatsSettingsTriggerInfo": "Bir yayına veya dosyaya, seçilen farklı koşul türlerinden en az biriyle eşleştiğinde Özel Format uygulanacaktır.",
|
||||
@@ -678,11 +678,11 @@
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "qBittorrent'in yapılandırılmış içerik düzenini mi, torrentteki orijinal düzeni mi kullanacağınızı yoksa her zaman bir alt klasör oluşturup oluşturmayacağınızı (qBittorrent 4.3.2+)",
|
||||
"EditSelectedImportLists": "Seçilen İçe Aktarma Listelerini Düzenle",
|
||||
"NoImportListsFound": "İçe aktarma listesi bulunamadı",
|
||||
"IndexerDownloadClientHelpText": "Bu indeksleyiciden almak için hangi indirme istemcisinin kullanılacağını belirtin",
|
||||
"IndexerDownloadClientHelpText": "Bu dizinleyiciden yakalamak için hangi indirme istemcisinin kullanılacağını belirtin",
|
||||
"ManageDownloadClients": "İndirme İstemcilerini Yönet",
|
||||
"ManageIndexers": "İndeksleyicileri Yönet",
|
||||
"ManageIndexers": "Dizinleyicileri Yönet",
|
||||
"NoHistoryBlocklist": "Geçmiş engellenenler listesi yok",
|
||||
"NoIndexersFound": "İndeksleyici bulunamadı",
|
||||
"NoIndexersFound": "Dizinleyici bulunamadı",
|
||||
"InstanceName": "Örnek isim",
|
||||
"ListRefreshInterval": "Liste Yenileme Aralığı",
|
||||
"Label": "Etiket",
|
||||
@@ -697,7 +697,7 @@
|
||||
"Implementation": "Uygula",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Geçersiz indirme istemcilerine sahip dizinleyiciler: {0}.",
|
||||
"LabelIsRequired": "Etiket gerekli",
|
||||
"EditSelectedIndexers": "Seçili İndeksleyicileri Düzenle",
|
||||
"EditSelectedIndexers": "Seçili Dizinleyicileri Düzenle",
|
||||
"ManageImportLists": "İçe Aktarma Listelerini Yönet",
|
||||
"IgnoreDownload": "İndirmeyi Yoksay",
|
||||
"IgnoreDownloadHint": "{appName}'in bu indirmeyi daha fazla işlemesini durdurur",
|
||||
@@ -710,7 +710,7 @@
|
||||
"RemoveCompleted": "Tamamlananları Kaldır",
|
||||
"RemoveFailedDownloads": "Başarısız İndirmeleri Kaldır",
|
||||
"ResetDefinitions": "Tanımları Sıfırla",
|
||||
"NotificationsPlexSettingsAuthToken": "Kimlik Doğrulama Token'ı",
|
||||
"NotificationsPlexSettingsAuthToken": "Kimlik Doğrulama Jetonu",
|
||||
"NotificationsSettingsUpdateMapPathsFrom": "Harita Yolları",
|
||||
"NotificationsPlexSettingsAuthenticateWithPlexTv": "Plex.tv ile kimlik doğrulaması yapın",
|
||||
"NotificationsSettingsUpdateLibrary": "Kitaplığı Güncelle",
|
||||
@@ -722,8 +722,8 @@
|
||||
"RemoveDownloadsAlert": "Kaldırma ayarları, yukarıdaki tabloda bireysel İndirme İstemcisi ayarlarına taşınmıştır.",
|
||||
"RemoveSelectedItem": "Seçilen Öğeyi Kaldır",
|
||||
"ResetQualityDefinitions": "Kalite Tanımlarını Sıfırla",
|
||||
"SelectIndexerFlags": "İndeksleyici Bayraklarını Seçin",
|
||||
"SetIndexerFlags": "İndeksleyici Bayraklarını Ayarla",
|
||||
"SelectIndexerFlags": "Dizinleyici Bayraklarını Seçin",
|
||||
"SetIndexerFlags": "Dizinleyici Bayraklarını Ayarla",
|
||||
"WouldYouLikeToRestoreBackup": "'{name}' yedeğini geri yüklemek ister misiniz?",
|
||||
"ThereWasAnErrorLoadingThisPage": "Sayfa yüklenirken bir hata oluştu",
|
||||
"Theme": "Tema",
|
||||
@@ -746,12 +746,12 @@
|
||||
"UpdateAvailable": "Yeni güncelleme mevcut",
|
||||
"ThemeHelpText": "Uygulama Kullanıcı Arayüzü Temasını Değiştirin, 'Otomatik' Teması, Açık veya Koyu modu ayarlamak için İşletim Sistemi Temanızı kullanacaktır. Theme.Park'tan ilham alındı",
|
||||
"RemoveQueueItemRemovalMethodHelpTextWarning": "'İndirme İstemcisinden Kaldır', indirme işlemini ve dosyaları indirme istemcisinden kaldıracaktır.",
|
||||
"ClickToChangeIndexerFlags": "İndeksleyici bayraklarını değiştirmek için tıklayın",
|
||||
"IndexerFlags": "İndeksleyici Bayrakları",
|
||||
"IndexerSettingsSeedRatioHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran. Boş bırakılırsa indirme istemcisinin varsayılan değerini kullanır. Oran en az 1,0 olmalı ve indeksleyici kurallarına uygun olmalıdır",
|
||||
"ClickToChangeIndexerFlags": "Dizinleyici bayraklarını değiştirmek için tıklayın",
|
||||
"IndexerFlags": "Dizinleyici Bayrakları",
|
||||
"IndexerSettingsSeedRatioHelpText": "Bir torrentin durmadan önce ulaşması gereken oran. Boş bırakılırsa indirme istemcisinin varsayılan değerini kullanır. Oran en az 1,0 olmalı ve indeksleyici kurallarına uygun olmalıdır",
|
||||
"IndexerSettingsSeedTime": "Seed Süresi",
|
||||
"IndexerSettingsSeedRatio": "Seed Oranı",
|
||||
"IndexerSettingsSeedTimeHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran, boş bırakıldığında uygulamanın varsayılanı kullanılır",
|
||||
"IndexerSettingsSeedTimeHelpText": "Bir torrentin durmadan önce seed edilmesi gereken süre. Boş bırakılırsa indirme istemcisinin varsayılan ayarını kullanır",
|
||||
"BypassIfAboveCustomFormatScore": "Özel Format Koşullarının Üstündeyse Baypas Et",
|
||||
"ImportLists": "Listeler",
|
||||
"Loading": "Yükleniyor",
|
||||
@@ -772,7 +772,7 @@
|
||||
"QualityProfileIdHelpText": "Kalite Profili listesi öğeleri şu şekilde eklenecektir:",
|
||||
"SourceTitle": "Kaynak başlığı",
|
||||
"EnabledHelpText": "Yayımlama profilini etkinleştirmek için işaretleyin",
|
||||
"ErrorLoadingContent": "Bu içerik yüklenirken bir hata oluştu",
|
||||
"ErrorLoadingContent": "Bu öğe yüklenirken bir hata oluştu",
|
||||
"IsShowingMonitoredMonitorSelected": "Takip Edilen Seçildi",
|
||||
"RemotePathMappingCheckFileRemoved": "Dosyanın {path} yolu işlenme sürecinin bir parçası olarak kaldırıldı.",
|
||||
"RecycleBinUnableToWriteHealthCheck": "Yapılandırılmış geri dönüşüm kutusu klasörüne yazılamıyor: {path}. Bu yolun mevcut olduğundan ve {appName} uygulamasını çalıştıran kullanıcı tarafından yazılabilir olduğundan emin olun",
|
||||
@@ -816,7 +816,7 @@
|
||||
"External": "Harici",
|
||||
"PasswordConfirmation": "Şifre Tekrarı",
|
||||
"AuthBasic": "Temel (Tarayıcı Açılır Penceresi)",
|
||||
"AuthForm": "Form (Giriş Sayfası)",
|
||||
"AuthForm": "Formlar (Giriş Sayfası)",
|
||||
"AuthenticationMethod": "Kimlik Doğrulama Yöntemi",
|
||||
"AuthenticationRequired": "Kimlik Doğrulama",
|
||||
"AuthenticationRequiredHelpText": "İstekler için Kimlik doğrulamanın gereklilik ayarını değiştirin. Riskleri anlamadığınız sürece değiştirmeyin.",
|
||||
@@ -830,38 +830,19 @@
|
||||
"SmartReplace": "Akıllı Değiştir",
|
||||
"DashOrSpaceDashDependingOnName": "İsme bağlı olarak Dash veya Space Dash",
|
||||
"CatalogNumber": "katalog numarası",
|
||||
"AptUpdater": "Güncellemeyi yüklemek için apt'ı kullanın",
|
||||
"AptUpdater": "Güncellemeyi yüklemek için apt kullanın",
|
||||
"BuiltIn": "Dahili",
|
||||
"CurrentlyInstalled": "Şuan Kurulu",
|
||||
"CurrentlyInstalled": "Şu anda Yüklü",
|
||||
"ExternalUpdater": "{appName}, harici bir güncelleme mekanizması kullanacak şekilde yapılandırıldı",
|
||||
"FailedToFetchUpdates": "Güncellemeler getirilemedi",
|
||||
"PreviouslyInstalled": "Daha Önce Kurulmuş",
|
||||
"Script": "Komut Dosyası",
|
||||
"PreviouslyInstalled": "Önceden Yüklenmiş",
|
||||
"Script": "Hazır Metin",
|
||||
"UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor,",
|
||||
"DockerUpdater": "Güncellemeyi almak için docker konteynerini güncelleyin",
|
||||
"DockerUpdater": "güncellemeyi almak için docker konteynerini güncelleyin",
|
||||
"Install": "Kur",
|
||||
"InstallLatest": "En Sonu Yükle",
|
||||
"InstallMajorVersionUpdate": "Güncellemeyi Kur",
|
||||
"InstallMajorVersionUpdateMessage": "Bu güncelleştirme yeni bir ana sürüm yükleyecek ve sisteminizle uyumlu olmayabilir. Bu güncelleştirmeyi yüklemek istediğinizden emin misiniz?",
|
||||
"InstallMajorVersionUpdateMessageLink": "Daha fazla bilgi için lütfen [{domain}]({url}) adresini kontrol edin.",
|
||||
"OnLatestVersion": "{appName}'ın en son sürümü kurulu",
|
||||
"AllExpandedCollapseAll": "Tümünü Daralt",
|
||||
"StatusEndedContinuing": "Devam ediyor",
|
||||
"AllExpandedExpandAll": "Tümünü Genişlet",
|
||||
"MonitoringOptions": "Takip Etme Seçenekleri",
|
||||
"AutoAdd": "Otomatik Ekle",
|
||||
"MediaManagementSettingsSummary": "Adlandırma ve dosya yönetimi ayarları",
|
||||
"SearchMonitored": "Takip Edilenleri Ara",
|
||||
"ShowBanners": "Bannerları Göster",
|
||||
"MetadataSource": "Meta Veri Kaynağı",
|
||||
"FailedToFetchSettings": "Ayarlar alınamadı",
|
||||
"Other": "Diğer",
|
||||
"Continuing": "Devam Ediyor",
|
||||
"Monitoring": "Takip Durumu",
|
||||
"Book": "Kitap",
|
||||
"LogRotation": "Günlük Döndürme",
|
||||
"FilterSentryEventsHelpText": "Bilinen kullanıcı hatası olaylarının Analitik olarak gönderilmesini filtreleyin",
|
||||
"LogRotateHelpText": "Günlük klasöründe saklanacak maksimum günlük dosyası sayısı",
|
||||
"FilterAnalyticsEvents": "Analitik Olayları Filtrele",
|
||||
"ConsoleLogLevel": "Konsol Günlük Düzeyi"
|
||||
"OnLatestVersion": "{appName}'ın en son sürümü zaten kurulu"
|
||||
}
|
||||
|
||||
@@ -482,7 +482,7 @@
|
||||
"AllExpandedExpandAll": "全部展开",
|
||||
"Duration": "时长",
|
||||
"Filters": "过滤器",
|
||||
"AppDataLocationHealthCheckMessage": "为防止在更新时删除 AppData,更新将无法进行",
|
||||
"AppDataLocationHealthCheckMessage": "无法更新,以防止在更新时删除 AppData",
|
||||
"FileWasDeletedByViaUI": "文件已通过 UI 删除",
|
||||
"IndexerJackettAll": "使用 Jackett 不受支持的“全部”终点的索引器:{0}",
|
||||
"SizeLimit": "尺寸限制",
|
||||
@@ -1116,6 +1116,5 @@
|
||||
"InstallMajorVersionUpdateMessage": "此更新将安装新的主要版本,这可能与您的系统不兼容。您确定要安装此更新吗?",
|
||||
"InstallMajorVersionUpdateMessageLink": "请查看 [{domain}]({url}) 以获取更多信息。",
|
||||
"PreviouslyInstalled": "上次安装",
|
||||
"UpdateAppDirectlyLoadError": "无法直接更新{appName},",
|
||||
"FailedToFetchSettings": "设置同步失败"
|
||||
"UpdateAppDirectlyLoadError": "无法直接更新{appName},"
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"Analytics": "分析",
|
||||
"About": "关于",
|
||||
"Username": "用户名"
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"About": "關於",
|
||||
"Actions": "動作",
|
||||
"Actions": "執行",
|
||||
"All": "全部",
|
||||
"AddingTag": "新增標籤",
|
||||
"Analytics": "分析",
|
||||
"AddList": "加入清單",
|
||||
"AddList": "新增列表",
|
||||
"ExportCustomFormat": "新增自定義格式",
|
||||
"Blocklist": "封鎖清單",
|
||||
"Branch": "分支",
|
||||
@@ -110,7 +110,7 @@
|
||||
"Ui": "UI",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "無法加入新的條件,請重新嘗試。",
|
||||
"UnableToAddANewRootFolderPleaseTryAgain": "無法加入新的自動標籤,請重新嘗試。",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "無法加入新的索引器,請重新嘗試。",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "無法加入新的條件,請重新嘗試。",
|
||||
"Grab": "抓取",
|
||||
"Hostname": "Hostname",
|
||||
"Label": "標籤",
|
||||
@@ -143,33 +143,5 @@
|
||||
"AuthForm": "表單(登入頁面)",
|
||||
"ApiKey": "API密鑰",
|
||||
"AuthBasic": "基礎(瀏覽器彈出視窗)",
|
||||
"Enabled": "啟用",
|
||||
"BuiltIn": "內建",
|
||||
"Reason": "季",
|
||||
"AptUpdater": "使用apt安裝更新",
|
||||
"BranchUpdate": "用於更新{appName}的分支",
|
||||
"UnableToLoadIndexers": "無法載入索引器",
|
||||
"UnselectAll": "取消全選",
|
||||
"UISettings": "使用者介面設定",
|
||||
"UILanguage": "使用者介面語言",
|
||||
"Version": "版本",
|
||||
"Uptime": "上線時間",
|
||||
"UnableToLoadTags": "無法載入標籤",
|
||||
"UnableToLoadUISettings": "無法載入 UI 設定",
|
||||
"UpdateAppDirectlyLoadError": "無法直接更新 {appName},",
|
||||
"UnableToLoadHistory": "無法載入歷史記錄",
|
||||
"AutoRedownloadFailed": "失敗時重新下載",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "失敗時重新下載來自手動搜索的資源",
|
||||
"AuthenticationMethodHelpTextWarning": "請選擇一個有效的驗證方式",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "確認新密碼",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "請輸入新密碼",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "請輸入新用戶名",
|
||||
"AuthenticationMethod": "驗證方式",
|
||||
"AuthenticationRequired": "需要驗證",
|
||||
"AuthenticationRequiredHelpText": "更改需要進行驗證的請求。除非你了解其中的風險,否則請勿修改。",
|
||||
"AuthenticationRequiredWarning": "為防止未經認證的遠程訪問,{appName} 現需要啟用身份認證。您可以選擇禁用本地地址的身份認證。",
|
||||
"IgnoredPlaceHolder": "加入新的限制",
|
||||
"RequiredPlaceHolder": "加入新的限制",
|
||||
"RedownloadFailed": "失敗時重新下載",
|
||||
"UnableToAddANewRemotePathMappingPleaseTryAgain": "無法加入新的遠程路徑對應,請重試。"
|
||||
"Enabled": "啟用"
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<PackageReference Include="Dapper" />
|
||||
<PackageReference Include="Diacritical.Net" />
|
||||
<PackageReference Include="LazyCache" />
|
||||
<PackageReference Include="Microsoft.Data.SqlClient" />
|
||||
<PackageReference Include="Polly" />
|
||||
<PackageReference Include="System.Text.Json" />
|
||||
<PackageReference Include="System.Text.Encoding.CodePages" />
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation.Validators;
|
||||
using NzbDrone.Common.Extensions;
|
||||
|
||||
namespace NzbDrone.Core.Validation
|
||||
@@ -9,5 +10,10 @@ namespace NzbDrone.Core.Validation
|
||||
{
|
||||
return ruleBuilder.Must(x => x.IsValidIpAddress()).WithMessage("Must contain wildcard (*) or a valid IP Address");
|
||||
}
|
||||
|
||||
public static IRuleBuilderOptions<T, string> NotListenAllIp4Address<T>(this IRuleBuilder<T, string> ruleBuilder)
|
||||
{
|
||||
return ruleBuilder.SetValidator(new RegularExpressionValidator(@"^(?!0\.0\.0\.0)")).WithMessage("Use * instead of 0.0.0.0");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace NzbDrone.Host
|
||||
License = new OpenApiLicense
|
||||
{
|
||||
Name = "GPL-3.0",
|
||||
Url = new Uri("https://github.com/Readarr/Readarr/blob/develop/LICENSE.md")
|
||||
Url = new Uri("https://github.com/Readarr/Readarr/blob/develop/LICENSE")
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ using Readarr.Api.V1.Author;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
public class AuthorEditorFixture : IntegrationTest
|
||||
{
|
||||
private void GivenExistingAuthor()
|
||||
|
||||
@@ -7,7 +7,7 @@ using NUnit.Framework;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
public class AuthorFixture : IntegrationTest
|
||||
{
|
||||
[Test]
|
||||
|
||||
@@ -4,7 +4,7 @@ using NUnit.Framework;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
public class AuthorLookupFixture : IntegrationTest
|
||||
{
|
||||
[TestCase("Robert Harris", "Robert Harris")]
|
||||
|
||||
@@ -6,7 +6,7 @@ using Readarr.Api.V1.Blocklist;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
public class BlocklistFixture : IntegrationTest
|
||||
{
|
||||
private AuthorResource _author;
|
||||
|
||||
@@ -9,7 +9,7 @@ using Readarr.Api.V1.Books;
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
public class CalendarFixture : IntegrationTest
|
||||
{
|
||||
public ClientBase<BookResource> Calendar;
|
||||
|
||||
@@ -8,7 +8,7 @@ using Readarr.Api.V1.RootFolders;
|
||||
namespace NzbDrone.Integration.Test.ApiTests.WantedTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
public class CutoffUnmetFixture : IntegrationTest
|
||||
{
|
||||
[SetUp]
|
||||
|
||||
@@ -7,7 +7,7 @@ using Readarr.Api.V1.RootFolders;
|
||||
namespace NzbDrone.Integration.Test.ApiTests.WantedTests
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-12-15 00:00:00Z")]
|
||||
public class MissingFixture : IntegrationTest
|
||||
{
|
||||
[SetUp]
|
||||
|
||||
@@ -34,6 +34,7 @@ namespace Readarr.Api.V1.Config
|
||||
|
||||
SharedValidator.RuleFor(c => c.BindAddress)
|
||||
.ValidIpAddress()
|
||||
.NotListenAllIp4Address()
|
||||
.When(c => c.BindAddress != "*" && c.BindAddress != "localhost");
|
||||
|
||||
SharedValidator.RuleFor(c => c.Port).ValidPort();
|
||||
|
||||
@@ -44,7 +44,6 @@ namespace Readarr.Api.V1.Config
|
||||
public string BackupFolder { get; set; }
|
||||
public int BackupInterval { get; set; }
|
||||
public int BackupRetention { get; set; }
|
||||
public bool TrustCgnatIpAddresses { get; set; }
|
||||
}
|
||||
|
||||
public static class HostConfigResourceMapper
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace Readarr.Api.V1.System.Backup
|
||||
}
|
||||
|
||||
[RestDeleteById]
|
||||
public object DeleteBackup(int id)
|
||||
public void DeleteBackup(int id)
|
||||
{
|
||||
var backup = GetBackup(id);
|
||||
|
||||
@@ -67,8 +67,6 @@ namespace Readarr.Api.V1.System.Backup
|
||||
}
|
||||
|
||||
_diskProvider.DeleteFile(path);
|
||||
|
||||
return new { };
|
||||
}
|
||||
|
||||
[HttpPost("restore/{id:int}")]
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"description": "Readarr API docs",
|
||||
"license": {
|
||||
"name": "GPL-3.0",
|
||||
"url": "https://github.com/Readarr/Readarr/blob/develop/LICENSE.md"
|
||||
"url": "https://github.com/Readarr/Readarr/blob/develop/LICENSE"
|
||||
},
|
||||
"version": "1.0.0"
|
||||
},
|
||||
@@ -10706,9 +10706,6 @@
|
||||
"backupRetention": {
|
||||
"type": "integer",
|
||||
"format": "int32"
|
||||
},
|
||||
"trustCgnatIpAddresses": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
|
||||
@@ -27,13 +27,10 @@ namespace NzbDrone.Http.Authentication
|
||||
if (_authenticationRequired == AuthenticationRequiredType.DisabledForLocalAddresses)
|
||||
{
|
||||
if (context.Resource is HttpContext httpContext &&
|
||||
IPAddress.TryParse(httpContext.GetRemoteIP(), out var ipAddress))
|
||||
IPAddress.TryParse(httpContext.GetRemoteIP(), out var ipAddress) &&
|
||||
ipAddress.IsLocalAddress())
|
||||
{
|
||||
if (ipAddress.IsLocalAddress() ||
|
||||
(_configService.TrustCgnatIpAddresses && ipAddress.IsCgnatIpAddress()))
|
||||
{
|
||||
context.Succeed(requirement);
|
||||
}
|
||||
context.Succeed(requirement);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user