mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-18 21:34:28 -04:00
Compare commits
1 Commits
v0.1.2.153
...
sonarr-pul
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72691ecd2f |
@@ -9,7 +9,7 @@ variables:
|
|||||||
testsFolder: './_tests'
|
testsFolder: './_tests'
|
||||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||||
majorVersion: '0.1.2'
|
majorVersion: '0.1.1'
|
||||||
minorVersion: $[counter('minorVersion', 1)]
|
minorVersion: $[counter('minorVersion', 1)]
|
||||||
readarrVersion: '$(majorVersion).$(minorVersion)'
|
readarrVersion: '$(majorVersion).$(minorVersion)'
|
||||||
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
|
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
|
||||||
|
|||||||
@@ -1,18 +1,22 @@
|
|||||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
import $ from 'jquery';
|
||||||
|
|
||||||
function getTranslations() {
|
function getTranslations() {
|
||||||
let localization = null;
|
let localization = null;
|
||||||
const ajaxOptions = {
|
const ajaxOptions = {
|
||||||
async: false,
|
async: false,
|
||||||
|
type: 'GET',
|
||||||
|
global: false,
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
url: '/localization',
|
url: `${window.Readarr.apiRoot}/localization`,
|
||||||
success: function(data) {
|
success: function(data) {
|
||||||
localization = data.Strings;
|
localization = data.Strings;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
createAjaxRequest(ajaxOptions);
|
ajaxOptions.headers = ajaxOptions.headers || {};
|
||||||
|
ajaxOptions.headers['X-Api-Key'] = window.Readarr.apiKey;
|
||||||
|
|
||||||
|
$.ajax(ajaxOptions);
|
||||||
return localization;
|
return localization;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||||
<PackageVersion Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr22" />
|
<PackageVersion Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr22" />
|
||||||
<PackageVersion Include="Moq" Version="4.17.2" />
|
<PackageVersion Include="Moq" Version="4.17.2" />
|
||||||
<PackageVersion Include="MonoTorrent" Version="2.0.7" />
|
<PackageVersion Include="MonoTorrent" Version="2.0.6" />
|
||||||
<PackageVersion Include="NBuilder" Version="6.1.0" />
|
<PackageVersion Include="NBuilder" Version="6.1.0" />
|
||||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
|
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
|
||||||
<PackageVersion Include="NLog.Extensions.Logging" Version="5.1.0" />
|
<PackageVersion Include="NLog.Extensions.Logging" Version="5.1.0" />
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace NzbDrone.Core.Test.Download
|
|||||||
_downloadClients = new List<IDownloadClient>();
|
_downloadClients = new List<IDownloadClient>();
|
||||||
|
|
||||||
Mocker.GetMock<IProvideDownloadClient>()
|
Mocker.GetMock<IProvideDownloadClient>()
|
||||||
.Setup(v => v.GetDownloadClients(It.IsAny<bool>()))
|
.Setup(v => v.GetDownloadClients())
|
||||||
.Returns(_downloadClients);
|
.Returns(_downloadClients);
|
||||||
|
|
||||||
Mocker.GetMock<IProvideDownloadClient>()
|
Mocker.GetMock<IProvideDownloadClient>()
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|||||||
public void should_return_warning_when_download_client_has_not_been_configured()
|
public void should_return_warning_when_download_client_has_not_been_configured()
|
||||||
{
|
{
|
||||||
Mocker.GetMock<IProvideDownloadClient>()
|
Mocker.GetMock<IProvideDownloadClient>()
|
||||||
.Setup(s => s.GetDownloadClients(It.IsAny<bool>()))
|
.Setup(s => s.GetDownloadClients())
|
||||||
.Returns(Array.Empty<IDownloadClient>());
|
.Returns(Array.Empty<IDownloadClient>());
|
||||||
|
|
||||||
Subject.Check().ShouldBeWarning();
|
Subject.Check().ShouldBeWarning();
|
||||||
@@ -40,7 +40,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|||||||
.Throws<Exception>();
|
.Throws<Exception>();
|
||||||
|
|
||||||
Mocker.GetMock<IProvideDownloadClient>()
|
Mocker.GetMock<IProvideDownloadClient>()
|
||||||
.Setup(s => s.GetDownloadClients(It.IsAny<bool>()))
|
.Setup(s => s.GetDownloadClients())
|
||||||
.Returns(new IDownloadClient[] { downloadClient.Object });
|
.Returns(new IDownloadClient[] { downloadClient.Object });
|
||||||
|
|
||||||
Subject.Check().ShouldBeError();
|
Subject.Check().ShouldBeError();
|
||||||
@@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|||||||
.Returns(new List<DownloadClientItem>());
|
.Returns(new List<DownloadClientItem>());
|
||||||
|
|
||||||
Mocker.GetMock<IProvideDownloadClient>()
|
Mocker.GetMock<IProvideDownloadClient>()
|
||||||
.Setup(s => s.GetDownloadClients(It.IsAny<bool>()))
|
.Setup(s => s.GetDownloadClients())
|
||||||
.Returns(new IDownloadClient[] { downloadClient.Object });
|
.Returns(new IDownloadClient[] { downloadClient.Object });
|
||||||
|
|
||||||
Subject.Check().ShouldBeOk();
|
Subject.Check().ShouldBeOk();
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|||||||
.Returns(_clientStatus);
|
.Returns(_clientStatus);
|
||||||
|
|
||||||
Mocker.GetMock<IProvideDownloadClient>()
|
Mocker.GetMock<IProvideDownloadClient>()
|
||||||
.Setup(s => s.GetDownloadClients(It.IsAny<bool>()))
|
.Setup(s => s.GetDownloadClients())
|
||||||
.Returns(new IDownloadClient[] { _downloadClient.Object });
|
.Returns(new IDownloadClient[] { _downloadClient.Object });
|
||||||
|
|
||||||
Mocker.GetMock<IDiskProvider>()
|
Mocker.GetMock<IDiskProvider>()
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Common.Disk;
|
||||||
|
using NzbDrone.Core.Download;
|
||||||
|
using NzbDrone.Core.Download.Clients;
|
||||||
|
using NzbDrone.Core.HealthCheck.Checks;
|
||||||
|
using NzbDrone.Core.RootFolders;
|
||||||
|
using NzbDrone.Core.Test.Framework;
|
||||||
|
using NzbDrone.Test.Common;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class DownloadClientFolderCheckFixture : CoreTest<DownloadClientSortingCheck>
|
||||||
|
{
|
||||||
|
private DownloadClientInfo _clientStatus;
|
||||||
|
private Mock<IDownloadClient> _downloadClient;
|
||||||
|
|
||||||
|
private static Exception[] DownloadClientExceptions =
|
||||||
|
{
|
||||||
|
new DownloadClientUnavailableException("error"),
|
||||||
|
new DownloadClientAuthenticationException("error"),
|
||||||
|
new DownloadClientException("error")
|
||||||
|
};
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
_clientStatus = new DownloadClientInfo
|
||||||
|
{
|
||||||
|
IsLocalhost = true,
|
||||||
|
SortingMode = null
|
||||||
|
};
|
||||||
|
|
||||||
|
_downloadClient = Mocker.GetMock<IDownloadClient>();
|
||||||
|
_downloadClient.Setup(s => s.Definition)
|
||||||
|
.Returns(new DownloadClientDefinition { Name = "Test" });
|
||||||
|
|
||||||
|
_downloadClient.Setup(s => s.GetStatus())
|
||||||
|
.Returns(_clientStatus);
|
||||||
|
|
||||||
|
Mocker.GetMock<IProvideDownloadClient>()
|
||||||
|
.Setup(s => s.GetDownloadClients())
|
||||||
|
.Returns(new IDownloadClient[] { _downloadClient.Object });
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_ok_if_sorting_is_not_enabled()
|
||||||
|
{
|
||||||
|
Subject.Check().ShouldBeOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_warning_if_sorting_is_enabled()
|
||||||
|
{
|
||||||
|
_clientStatus.SortingMode = "TV";
|
||||||
|
|
||||||
|
Subject.Check().ShouldBeWarning();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
[TestCaseSource("DownloadClientExceptions")]
|
||||||
|
public void should_return_ok_if_client_throws_downloadclientexception(Exception ex)
|
||||||
|
{
|
||||||
|
_downloadClient.Setup(s => s.GetStatus())
|
||||||
|
.Throws(ex);
|
||||||
|
|
||||||
|
Subject.Check().ShouldBeOk();
|
||||||
|
|
||||||
|
ExceptionVerification.ExpectedErrors(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -63,7 +63,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|||||||
.Returns(_clientStatus);
|
.Returns(_clientStatus);
|
||||||
|
|
||||||
Mocker.GetMock<IProvideDownloadClient>()
|
Mocker.GetMock<IProvideDownloadClient>()
|
||||||
.Setup(s => s.GetDownloadClients(It.IsAny<bool>()))
|
.Setup(s => s.GetDownloadClients())
|
||||||
.Returns(new IDownloadClient[] { _downloadClient.Object });
|
.Returns(new IDownloadClient[] { _downloadClient.Object });
|
||||||
|
|
||||||
Mocker.GetMock<IProvideDownloadClient>()
|
Mocker.GetMock<IProvideDownloadClient>()
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
|||||||
[Test]
|
[Test]
|
||||||
public void getting_details_of_invalid_book()
|
public void getting_details_of_invalid_book()
|
||||||
{
|
{
|
||||||
Assert.Throws<BookNotFoundException>(() => Subject.GetBookInfo("1"));
|
Assert.Throws<BookNotFoundException>(() => Subject.GetBookInfo("99999999"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ValidateAuthor(Author author)
|
private void ValidateAuthor(Author author)
|
||||||
|
|||||||
@@ -45,17 +45,13 @@ namespace NzbDrone.Core.AuthorStats
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private SqlBuilder Builder()
|
private SqlBuilder Builder() => new SqlBuilder(_database.DatabaseType)
|
||||||
{
|
.Select(@"""Authors"".""Id"" AS ""AuthorId"",
|
||||||
var trueIndicator = _database.DatabaseType == DatabaseType.PostgreSQL ? "true" : "1";
|
|
||||||
|
|
||||||
return new SqlBuilder(_database.DatabaseType)
|
|
||||||
.Select($@"""Authors"".""Id"" AS ""AuthorId"",
|
|
||||||
""Books"".""Id"" AS ""BookId"",
|
""Books"".""Id"" AS ""BookId"",
|
||||||
SUM(COALESCE(""BookFiles"".""Size"", 0)) AS ""SizeOnDisk"",
|
SUM(COALESCE(""BookFiles"".""Size"", 0)) AS ""SizeOnDisk"",
|
||||||
1 AS ""TotalBookCount"",
|
1 AS ""TotalBookCount"",
|
||||||
CASE WHEN MIN(""BookFiles"".""Id"") IS NULL THEN 0 ELSE 1 END AS ""AvailableBookCount"",
|
CASE WHEN MIN(""BookFiles"".""Id"") IS NULL THEN 0 ELSE 1 END AS ""AvailableBookCount"",
|
||||||
CASE WHEN (""Books"".""Monitored"" = {trueIndicator} AND (""Books"".""ReleaseDate"" < @currentDate) OR ""Books"".""ReleaseDate"" IS NULL) OR MIN(""BookFiles"".""Id"") IS NOT NULL THEN 1 ELSE 0 END AS ""BookCount"",
|
CASE WHEN (""Books"".""Monitored"" = true AND (""Books"".""ReleaseDate"" < @currentDate) OR ""Books"".""ReleaseDate"" IS NULL) OR MIN(""BookFiles"".""Id"") IS NOT NULL THEN 1 ELSE 0 END AS ""BookCount"",
|
||||||
CASE WHEN MIN(""BookFiles"".""Id"") IS NULL THEN 0 ELSE COUNT(""BookFiles"".""Id"") END AS ""BookFileCount""")
|
CASE WHEN MIN(""BookFiles"".""Id"") IS NULL THEN 0 ELSE COUNT(""BookFiles"".""Id"") END AS ""BookFileCount""")
|
||||||
.Join<Edition, Book>((e, b) => e.BookId == b.Id)
|
.Join<Edition, Book>((e, b) => e.BookId == b.Id)
|
||||||
.Join<Book, Author>((book, author) => book.AuthorMetadataId == author.AuthorMetadataId)
|
.Join<Book, Author>((book, author) => book.AuthorMetadataId == author.AuthorMetadataId)
|
||||||
@@ -64,6 +60,5 @@ namespace NzbDrone.Core.AuthorStats
|
|||||||
.GroupBy<Author>(x => x.Id)
|
.GroupBy<Author>(x => x.Id)
|
||||||
.GroupBy<Book>(x => x.Id)
|
.GroupBy<Book>(x => x.Id)
|
||||||
.AddParameters(new Dictionary<string, object> { { "currentDate", DateTime.UtcNow } });
|
.AddParameters(new Dictionary<string, object> { { "currentDate", DateTime.UtcNow } });
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -260,6 +260,19 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
|||||||
|
|
||||||
if (category != null)
|
if (category != null)
|
||||||
{
|
{
|
||||||
|
if (config.Misc.enable_tv_sorting && ContainsCategory(config.Misc.tv_categories, Settings.TvCategory))
|
||||||
|
{
|
||||||
|
status.SortingMode = "TV";
|
||||||
|
}
|
||||||
|
else if (config.Misc.enable_movie_sorting && ContainsCategory(config.Misc.movie_categories, Settings.TvCategory))
|
||||||
|
{
|
||||||
|
status.SortingMode = "Movie";
|
||||||
|
}
|
||||||
|
else if (config.Misc.enable_date_sorting && ContainsCategory(config.Misc.date_categories, Settings.TvCategory))
|
||||||
|
{
|
||||||
|
status.SortingMode = "Date";
|
||||||
|
}
|
||||||
|
|
||||||
status.OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, category.FullPath) };
|
status.OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, category.FullPath) };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using NzbDrone.Common.Disk;
|
using NzbDrone.Common.Disk;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Download
|
namespace NzbDrone.Core.Download
|
||||||
@@ -11,6 +11,7 @@ namespace NzbDrone.Core.Download
|
|||||||
}
|
}
|
||||||
|
|
||||||
public bool IsLocalhost { get; set; }
|
public bool IsLocalhost { get; set; }
|
||||||
|
public string SortingMode { get; set; }
|
||||||
public List<OsPath> OutputRootFolders { get; set; }
|
public List<OsPath> OutputRootFolders { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace NzbDrone.Core.Download
|
|||||||
public interface IProvideDownloadClient
|
public interface IProvideDownloadClient
|
||||||
{
|
{
|
||||||
IDownloadClient GetDownloadClient(DownloadProtocol downloadProtocol);
|
IDownloadClient GetDownloadClient(DownloadProtocol downloadProtocol);
|
||||||
IEnumerable<IDownloadClient> GetDownloadClients(bool filterBlockedClients = false);
|
IEnumerable<IDownloadClient> GetDownloadClients();
|
||||||
IDownloadClient Get(int id);
|
IDownloadClient Get(int id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,39 +67,14 @@ namespace NzbDrone.Core.Download
|
|||||||
return provider;
|
return provider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IDownloadClient> GetDownloadClients(bool filterBlockedClients = false)
|
public IEnumerable<IDownloadClient> GetDownloadClients()
|
||||||
{
|
{
|
||||||
var enabledClients = _downloadClientFactory.GetAvailableProviders();
|
return _downloadClientFactory.GetAvailableProviders();
|
||||||
|
|
||||||
if (filterBlockedClients)
|
|
||||||
{
|
|
||||||
return FilterBlockedIndexers(enabledClients).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
return enabledClients;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDownloadClient Get(int id)
|
public IDownloadClient Get(int id)
|
||||||
{
|
{
|
||||||
return _downloadClientFactory.GetAvailableProviders().Single(d => d.Definition.Id == id);
|
return _downloadClientFactory.GetAvailableProviders().Single(d => d.Definition.Id == id);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<IDownloadClient> FilterBlockedIndexers(IEnumerable<IDownloadClient> clients)
|
|
||||||
{
|
|
||||||
var blockedClients = _downloadClientStatusService.GetBlockedProviders().ToDictionary(v => v.ProviderId, v => v);
|
|
||||||
|
|
||||||
foreach (var client in clients)
|
|
||||||
{
|
|
||||||
DownloadClientStatus blockedClientStatus;
|
|
||||||
|
|
||||||
if (blockedClients.TryGetValue(client.Definition.Id, out blockedClientStatus))
|
|
||||||
{
|
|
||||||
_logger.Debug("Temporarily ignoring client {0} till {1} due to recent failures.", client.Definition.Name, blockedClientStatus.DisabledTill.Value.ToLocalTime());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
yield return client;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
|
||||||
using NLog;
|
using NLog;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
using NzbDrone.Core.Datastore.Events;
|
using NzbDrone.Core.Datastore.Events;
|
||||||
@@ -38,9 +37,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
|
|
||||||
public override HealthCheck Check()
|
public override HealthCheck Check()
|
||||||
{
|
{
|
||||||
// Only check clients not in failure status, those get another message
|
var clients = _downloadClientProvider.GetDownloadClients();
|
||||||
var clients = _downloadClientProvider.GetDownloadClients(true);
|
|
||||||
|
|
||||||
var rootFolders = _rootFolderService.All();
|
var rootFolders = _rootFolderService.All();
|
||||||
|
|
||||||
foreach (var client in clients)
|
foreach (var client in clients)
|
||||||
@@ -61,10 +58,6 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
{
|
{
|
||||||
_logger.Debug(ex, "Unable to communicate with {0}", client.Definition.Name);
|
_logger.Debug(ex, "Unable to communicate with {0}", client.Definition.Name);
|
||||||
}
|
}
|
||||||
catch (HttpRequestException ex)
|
|
||||||
{
|
|
||||||
_logger.Debug(ex, "Unable to communicate with {0}", client.Definition.Name);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.Error(ex, "Unknown error occured in DownloadClientRootFolderCheck HealthCheck");
|
_logger.Error(ex, "Unknown error occured in DownloadClientRootFolderCheck HealthCheck");
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using NLog;
|
||||||
|
using NzbDrone.Common.Extensions;
|
||||||
|
using NzbDrone.Core.Datastore.Events;
|
||||||
|
using NzbDrone.Core.Download;
|
||||||
|
using NzbDrone.Core.Download.Clients;
|
||||||
|
using NzbDrone.Core.RemotePathMappings;
|
||||||
|
using NzbDrone.Core.RootFolders;
|
||||||
|
using NzbDrone.Core.ThingiProvider.Events;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.HealthCheck.Checks
|
||||||
|
{
|
||||||
|
[CheckOn(typeof(ProviderUpdatedEvent<IDownloadClient>))]
|
||||||
|
[CheckOn(typeof(ProviderDeletedEvent<IDownloadClient>))]
|
||||||
|
[CheckOn(typeof(ModelEvent<RootFolder>))]
|
||||||
|
[CheckOn(typeof(ModelEvent<RemotePathMapping>))]
|
||||||
|
|
||||||
|
public class DownloadClientSortingCheck : HealthCheckBase, IProvideHealthCheck
|
||||||
|
{
|
||||||
|
private readonly IProvideDownloadClient _downloadClientProvider;
|
||||||
|
private readonly Logger _logger;
|
||||||
|
|
||||||
|
public DownloadClientSortingCheck(IProvideDownloadClient downloadClientProvider,
|
||||||
|
Logger logger)
|
||||||
|
{
|
||||||
|
_downloadClientProvider = downloadClientProvider;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override HealthCheck Check()
|
||||||
|
{
|
||||||
|
var clients = _downloadClientProvider.GetDownloadClients();
|
||||||
|
|
||||||
|
foreach (var client in clients)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var clientName = client.Definition.Name;
|
||||||
|
var status = client.GetStatus();
|
||||||
|
|
||||||
|
if (status.SortingMode.IsNotNullOrWhiteSpace())
|
||||||
|
{
|
||||||
|
return new HealthCheck(GetType(),
|
||||||
|
HealthCheckResult.Warning,
|
||||||
|
$"Download client {clientName} has {status.SortingMode} sorting enabled for Sonarr's category. You should disable sorting in your download client to avoid import issues.",
|
||||||
|
"#download-folder-and-library-folder-not-different-folders");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (DownloadClientException ex)
|
||||||
|
{
|
||||||
|
_logger.Debug(ex, "Unable to communicate with {0}", client.Definition.Name);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "Unknown error occurred in DownloadClientSortingCheck HealthCheck");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new HealthCheck(GetType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -53,8 +53,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
return new HealthCheck(GetType());
|
return new HealthCheck(GetType());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only check clients not in failure status, those get another message
|
var clients = _downloadClientProvider.GetDownloadClients();
|
||||||
var clients = _downloadClientProvider.GetDownloadClients(true);
|
|
||||||
|
|
||||||
foreach (var client in clients)
|
foreach (var client in clients)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1 @@
|
|||||||
{
|
{}
|
||||||
"About": "সম্পর্কিত",
|
|
||||||
"Actions": "ক্রিয়াকাণ্ড"
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -349,7 +349,7 @@
|
|||||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Wird in der Wochenansicht über jeder Spalte angezeigt",
|
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Wird in der Wochenansicht über jeder Spalte angezeigt",
|
||||||
"Size": " Größe",
|
"Size": " Größe",
|
||||||
"SkipFreeSpaceCheck": "Pürfung des freien Speichers überspringen",
|
"SkipFreeSpaceCheck": "Pürfung des freien Speichers überspringen",
|
||||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Aktiviere diese Option, wenn es Readarr nicht möglich ist, den freien Speicherplatz des Stammverzeichnisses für Autoren zu erkennen",
|
"SkipFreeSpaceCheckWhenImportingHelpText": "Aktiviere diese Option, wenn es Readarr nicht möglich ist, den freien Speicherplatz des Stammverzeichnises für Autoren zu erkennen",
|
||||||
"SorryThatAuthorCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.",
|
"SorryThatAuthorCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.",
|
||||||
"SorryThatBookCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.",
|
"SorryThatBookCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.",
|
||||||
"Source": "Quelle",
|
"Source": "Quelle",
|
||||||
@@ -426,7 +426,7 @@
|
|||||||
"UnmonitoredHelpText": "Nicht beobachtete Filme im iCal-Feed einschließen",
|
"UnmonitoredHelpText": "Nicht beobachtete Filme im iCal-Feed einschließen",
|
||||||
"UpdateAll": "Alle aktualisieren",
|
"UpdateAll": "Alle aktualisieren",
|
||||||
"UpdateAutomaticallyHelpText": "Updates automatisch herunteraden und installieren. Es kann weiterhin unter \"System -> Updates\" ein manuelles Update angestoßen werden",
|
"UpdateAutomaticallyHelpText": "Updates automatisch herunteraden und installieren. Es kann weiterhin unter \"System -> Updates\" ein manuelles Update angestoßen werden",
|
||||||
"UpdateMechanismHelpText": "Readarr's Built-In Updater oder ein Script verwenden",
|
"UpdateMechanismHelpText": "Benutze Readarr's Built-In Updater oder ein Script",
|
||||||
"UpdateScriptPathHelpText": "Pfad zu einem benutzerdefinierten Skript, das ein extrahiertes Update-Paket übernimmt und den Rest des Update-Prozesses abwickelt",
|
"UpdateScriptPathHelpText": "Pfad zu einem benutzerdefinierten Skript, das ein extrahiertes Update-Paket übernimmt und den Rest des Update-Prozesses abwickelt",
|
||||||
"Updates": "Updates",
|
"Updates": "Updates",
|
||||||
"UpgradeAllowedHelpText": "Wenn deaktiviert wird die Qualität nicht verbessert",
|
"UpgradeAllowedHelpText": "Wenn deaktiviert wird die Qualität nicht verbessert",
|
||||||
@@ -543,7 +543,7 @@
|
|||||||
"DeleteMetadataProfile": "Metadaten Profil löschen",
|
"DeleteMetadataProfile": "Metadaten Profil löschen",
|
||||||
"ImportListExclusions": "Ausschlüsse der Importliste",
|
"ImportListExclusions": "Ausschlüsse der Importliste",
|
||||||
"ImportLists": "Importlisten",
|
"ImportLists": "Importlisten",
|
||||||
"ImportListSettings": "Allgemeine Importlisten-Einstellungen",
|
"ImportListSettings": "Allgemeine Einstellungen der Importliste",
|
||||||
"ImportListSpecificSettings": "Listenspezifische Einstellungen importieren",
|
"ImportListSpecificSettings": "Listenspezifische Einstellungen importieren",
|
||||||
"IndexerLongTermStatusCheckSingleClientMessage": "Indexer wegen über 6 Stunden langen bestehenden Fehlern nicht verfügbar: {0}",
|
"IndexerLongTermStatusCheckSingleClientMessage": "Indexer wegen über 6 Stunden langen bestehenden Fehlern nicht verfügbar: {0}",
|
||||||
"IndexerPriorityHelpText": "Indexer Priorität von 1 (höchste) bis 50 (niedrigste). Standard: 25. Wird beim Holen von Veröffentlichungen als Tiebreaker für ansonsten gleiche Veröffentlichungen verwendet, Readarr benützt weiterhin alle aktivierten Indexer für RSS-Synchronisierung und -Suche.",
|
"IndexerPriorityHelpText": "Indexer Priorität von 1 (höchste) bis 50 (niedrigste). Standard: 25. Wird beim Holen von Veröffentlichungen als Tiebreaker für ansonsten gleiche Veröffentlichungen verwendet, Readarr benützt weiterhin alle aktivierten Indexer für RSS-Synchronisierung und -Suche.",
|
||||||
@@ -702,7 +702,7 @@
|
|||||||
"ImportListStatusCheckSingleClientMessage": "Listen aufgrund von Fehlern nicht verfügbar: {0}",
|
"ImportListStatusCheckSingleClientMessage": "Listen aufgrund von Fehlern nicht verfügbar: {0}",
|
||||||
"ImportMechanismHealthCheckMessage": "Aktiviere die Verarbeitung der abgeschlossenen Downloads",
|
"ImportMechanismHealthCheckMessage": "Aktiviere die Verarbeitung der abgeschlossenen Downloads",
|
||||||
"IndexerRssHealthCheckNoIndexers": "Da keine Indexer mit aktivierter RSS-Synchronisierung aktiviert sind, erfasst Readarr neue Erscheinungen nicht automatisch",
|
"IndexerRssHealthCheckNoIndexers": "Da keine Indexer mit aktivierter RSS-Synchronisierung aktiviert sind, erfasst Readarr neue Erscheinungen nicht automatisch",
|
||||||
"IndexerSearchCheckNoInteractiveMessage": "Keine Indexer mit aktivierter interaktiver Suche verfügbar, Readarr liefert keine interaktiven Suchergebnisse",
|
"IndexerSearchCheckNoInteractiveMessage": "Keine Indexer mit interaktiver Suche verfügbar, Readarr liefert keine interaktiven Suchergebnisse",
|
||||||
"IndexerStatusCheckSingleClientMessage": "Indexer aufgrund von Fehlern nicht verfügbar: {0}",
|
"IndexerStatusCheckSingleClientMessage": "Indexer aufgrund von Fehlern nicht verfügbar: {0}",
|
||||||
"ChownGroup": "chown Gruppe",
|
"ChownGroup": "chown Gruppe",
|
||||||
"AllowFingerprintingHelpText": "Benutze Fingerabdrücke um die Genauigkeit der Buch Übereinstimmungen zu verbessern",
|
"AllowFingerprintingHelpText": "Benutze Fingerabdrücke um die Genauigkeit der Buch Übereinstimmungen zu verbessern",
|
||||||
@@ -877,7 +877,5 @@
|
|||||||
"ShowBookCount": "Zeige Anzahl an Büchern",
|
"ShowBookCount": "Zeige Anzahl an Büchern",
|
||||||
"SkipPartBooksAndSets": "Überspringe Teilbücher und Sets",
|
"SkipPartBooksAndSets": "Überspringe Teilbücher und Sets",
|
||||||
"TagsHelpText": "Gilt für Autoren mit mindestens einem passenden Tag. Leer lassen, um auf alle Autoren anzuwenden",
|
"TagsHelpText": "Gilt für Autoren mit mindestens einem passenden Tag. Leer lassen, um auf alle Autoren anzuwenden",
|
||||||
"TagsSettingsSummary": "Verwalten von Autoren-, Profil-, Beschränkungs- und Benachrichtigungs-Tags",
|
"TagsSettingsSummary": "Verwalten von Autoren-, Profil-, Beschränkungs- und Benachrichtigungs-Tags"
|
||||||
"ApplicationURL": "Anwendungs-URL",
|
|
||||||
"ApplicationUrlHelpText": "Die externe URL der Anwendung inklusive http(s)://, Port und URL-Basis"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
"Size": " Μέγεθος",
|
"Size": " Μέγεθος",
|
||||||
"Source": "Πηγή",
|
"Source": "Πηγή",
|
||||||
"Uptime": "Ώρα",
|
"Uptime": "Ώρα",
|
||||||
"20MinutesTwenty": "20 λεπτά: {0}",
|
"20MinutesTwenty": "60 λεπτά: {0}",
|
||||||
"45MinutesFourtyFive": "45 λεπτά: {0}",
|
"45MinutesFourtyFive": "60 λεπτά: {0}",
|
||||||
"60MinutesSixty": "60 λεπτά: {0}",
|
"60MinutesSixty": "60 λεπτά: {0}",
|
||||||
"APIKey": "Κλειδί API",
|
"APIKey": "Κλειδί API",
|
||||||
"About": "Σχετικά",
|
"About": "Σχετικά",
|
||||||
@@ -557,9 +557,5 @@
|
|||||||
"Test": "Δοκιμή",
|
"Test": "Δοκιμή",
|
||||||
"AddList": "Προσθήκη Λίστας",
|
"AddList": "Προσθήκη Λίστας",
|
||||||
"RenameFiles": "Μετονομασία αρχείων",
|
"RenameFiles": "Μετονομασία αρχείων",
|
||||||
"ManualImportSelectEdition": "Μη αυτόματη εισαγωγή - Επιλέξτε ταινία",
|
"ManualImportSelectEdition": "Μη αυτόματη εισαγωγή - Επιλέξτε ταινία"
|
||||||
"AllExpandedCollapseAll": "Σύμπτυξη Όλων",
|
|
||||||
"AllExpandedExpandAll": "Ανάπτυξη Όλων",
|
|
||||||
"AddNewItem": "Προσθήκη Νέου",
|
|
||||||
"AddMissing": "Προσθήκη Στοιχείου Που Λείπει"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -448,7 +448,7 @@
|
|||||||
"LoadingBooksFailed": "Elokuvatiedostojen lataaminen epäonnistui",
|
"LoadingBooksFailed": "Elokuvatiedostojen lataaminen epäonnistui",
|
||||||
"ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee syöttää vain tarvittaessa. Muussa tapauksessa jätä kentät tyhjiksi.",
|
"ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee syöttää vain tarvittaessa. Muussa tapauksessa jätä kentät tyhjiksi.",
|
||||||
"SslCertPathHelpTextWarning": "Käyttöönotto vaatii uudelleenkäynnistyksen.",
|
"SslCertPathHelpTextWarning": "Käyttöönotto vaatii uudelleenkäynnistyksen.",
|
||||||
"UnableToLoadMetadataProfiles": "Metatietoprofiileja ei voida ladata.",
|
"UnableToLoadMetadataProfiles": "Metatietoprofiilien lataus epäonnistui.",
|
||||||
"DownloadClientCheckDownloadingToRoot": "Lataustyökalu '{0}' sijoittaa lataukset juurikansioon '{1}' ja näin ei pitäisi tehdä, vaan lataukset tulee tallentaa erilliseen sijaintiin.",
|
"DownloadClientCheckDownloadingToRoot": "Lataustyökalu '{0}' sijoittaa lataukset juurikansioon '{1}' ja näin ei pitäisi tehdä, vaan lataukset tulee tallentaa erilliseen sijaintiin.",
|
||||||
"ReplaceIllegalCharactersHelpText": "Korvaa laittomat merkit. Jos ei käytössä, laittomat merkit poistetaan.",
|
"ReplaceIllegalCharactersHelpText": "Korvaa laittomat merkit. Jos ei käytössä, laittomat merkit poistetaan.",
|
||||||
"OutputPath": "Tallennussijainti",
|
"OutputPath": "Tallennussijainti",
|
||||||
@@ -624,7 +624,7 @@
|
|||||||
"UpdateAvailable": "Uusi päivitys on saatavilla",
|
"UpdateAvailable": "Uusi päivitys on saatavilla",
|
||||||
"Filters": "Suodattimet",
|
"Filters": "Suodattimet",
|
||||||
"General": "Yleiset",
|
"General": "Yleiset",
|
||||||
"ImportMechanismHealthCheckMessage": "Käytä valmiiden latausten käsittelyä",
|
"ImportMechanismHealthCheckMessage": "Ota valmiiden latausten käsittely käyttöön",
|
||||||
"IndexerJackettAll": "Jackettin ei-tuettua 'all'-päätettä käyttävät tietolähteet: {0}",
|
"IndexerJackettAll": "Jackettin ei-tuettua 'all'-päätettä käyttävät tietolähteet: {0}",
|
||||||
"IndexersSettingsSummary": "Sisältölähteet ja julkaisurajoitukset.",
|
"IndexersSettingsSummary": "Sisältölähteet ja julkaisurajoitukset.",
|
||||||
"IndexerStatusCheckAllClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi",
|
"IndexerStatusCheckAllClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi",
|
||||||
@@ -637,7 +637,7 @@
|
|||||||
"RemotePathMappingCheckFilesGenericPermissions": "Lataustyökalu '{0}' ilmoitti tiedostosijainniksi '{1}', mutta Radarr ei näe sitä. Saata joutua muokkaamaan kansion käyttöoikeuksia.",
|
"RemotePathMappingCheckFilesGenericPermissions": "Lataustyökalu '{0}' ilmoitti tiedostosijainniksi '{1}', mutta Radarr ei näe sitä. Saata joutua muokkaamaan kansion käyttöoikeuksia.",
|
||||||
"RemotePathMappingCheckImportFailed": "Radarr ei voinut tuoda elokuvaa. Tarkista loki saadaksesi lisätietoja.",
|
"RemotePathMappingCheckImportFailed": "Radarr ei voinut tuoda elokuvaa. Tarkista loki saadaksesi lisätietoja.",
|
||||||
"CouldntFindAnyResultsForTerm": "Haku '{0}' ei tuottanut tuloksia.",
|
"CouldntFindAnyResultsForTerm": "Haku '{0}' ei tuottanut tuloksia.",
|
||||||
"IndexerSearchCheckNoAutomaticMessage": "Automaattihaussa käytettäviä tietolähteitä ei ole käytettävissä, eikä automaattisia hakutuloksia ole tämän vuoksi saatavilla.",
|
"IndexerSearchCheckNoAutomaticMessage": "Ei hakemistoja, joissa automaattinen haku on käytössä, Radarr ei tarjoa automaattisia hakutuloksia",
|
||||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Kaikki hakukelpoiset tietolähteet ovat tilapaisesti tavoittamattomissa viimeaikaisten tietolähdevirheiden vuoksi.",
|
"IndexerSearchCheckNoAvailableIndexersMessage": "Kaikki hakukelpoiset tietolähteet ovat tilapaisesti tavoittamattomissa viimeaikaisten tietolähdevirheiden vuoksi.",
|
||||||
"RemotePathMappingCheckDockerFolderMissing": "Käytät Dockeria ja lataustyökalu '{0}' sijoittaa lataukset kohteeseen '{1}', mutta kansiota ei näytä olevan olemassa containerissa. Tarkista etäsijaintiesi kartoitukset ja containerin tallennusmedia-asetukset.",
|
"RemotePathMappingCheckDockerFolderMissing": "Käytät Dockeria ja lataustyökalu '{0}' sijoittaa lataukset kohteeseen '{1}', mutta kansiota ei näytä olevan olemassa containerissa. Tarkista etäsijaintiesi kartoitukset ja containerin tallennusmedia-asetukset.",
|
||||||
"RemotePathMappingCheckDownloadPermissions": "Radarr näkee, muttei voi käyttää ladattua elokuvaa '{0}'. Todennäköinen syy on sijainnin käyttöoikeusvirhe.",
|
"RemotePathMappingCheckDownloadPermissions": "Radarr näkee, muttei voi käyttää ladattua elokuvaa '{0}'. Todennäköinen syy on sijainnin käyttöoikeusvirhe.",
|
||||||
@@ -663,7 +663,7 @@
|
|||||||
"FileWasDeletedByUpgrade": "Tiedosto poistettiin päivityksen tuontia varten.",
|
"FileWasDeletedByUpgrade": "Tiedosto poistettiin päivityksen tuontia varten.",
|
||||||
"HealthNoIssues": "Kokoonpanossasi ei ole ongelmia.",
|
"HealthNoIssues": "Kokoonpanossasi ei ole ongelmia.",
|
||||||
"IndexerRssHealthCheckNoAvailableIndexers": "Kaikki RSS-tietolähteet ovat tilapaisesti tavoittamattomissa viimeaikaisten tietolähdevirheiden vuoksi.",
|
"IndexerRssHealthCheckNoAvailableIndexers": "Kaikki RSS-tietolähteet ovat tilapaisesti tavoittamattomissa viimeaikaisten tietolähdevirheiden vuoksi.",
|
||||||
"IndexerRssHealthCheckNoIndexers": "Yhtään RSS-synkronointia käyttävää tietolähdettä ei ole käytettävissä, eikä uusia julkaisuja sen vuoksi siepata automaattisesti.",
|
"IndexerRssHealthCheckNoIndexers": "Yhtään RSS-synkronointia käyttävää tietolähdettä ei ole käytettävissä, eikä Radarr tämän vuoksi sieppaa uusia julkaisuja automaattisesti.",
|
||||||
"IndexerStatusCheckSingleClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi: {0}",
|
"IndexerStatusCheckSingleClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi: {0}",
|
||||||
"MissingFromDisk": "Radarr ei löytänyt tiedostoa levyltä, joten sen kytkös kirjaston elokuvaan poistettiin",
|
"MissingFromDisk": "Radarr ei löytänyt tiedostoa levyltä, joten sen kytkös kirjaston elokuvaan poistettiin",
|
||||||
"Monitor": "Valvo",
|
"Monitor": "Valvo",
|
||||||
@@ -676,7 +676,7 @@
|
|||||||
"OnRename": "Kun elokuva nimetään uudelleen",
|
"OnRename": "Kun elokuva nimetään uudelleen",
|
||||||
"OnUpgrade": "Kun elokuva päivitetään",
|
"OnUpgrade": "Kun elokuva päivitetään",
|
||||||
"ProxyCheckResolveIpMessage": "Määritetyn välityspalvelimen '{0}' IP-osoitteen selvitys epäonnistui.",
|
"ProxyCheckResolveIpMessage": "Määritetyn välityspalvelimen '{0}' IP-osoitteen selvitys epäonnistui.",
|
||||||
"QualitySettingsSummary": "Laatumääritykset erilaisia sisältömuotoja ja tiedostokokoja varten.",
|
"QualitySettingsSummary": "Laatumääritykset erilaisia sisältömuotoja ja teidostokokoja varten.",
|
||||||
"QueueIsEmpty": "Jono on tyhjä",
|
"QueueIsEmpty": "Jono on tyhjä",
|
||||||
"ReadarrSupportsAnyDownloadClient": "Radarr tukee kaikkien Newznab-yhteensopivien lataustyökalujen ohella myös monia muita alla listattuja torrent- ja Usenet-lataustyökaluja.",
|
"ReadarrSupportsAnyDownloadClient": "Radarr tukee kaikkien Newznab-yhteensopivien lataustyökalujen ohella myös monia muita alla listattuja torrent- ja Usenet-lataustyökaluja.",
|
||||||
"RefreshAndScan": "Päivitä ja tarkista",
|
"RefreshAndScan": "Päivitä ja tarkista",
|
||||||
@@ -687,7 +687,7 @@
|
|||||||
"SettingsRemotePathMappingRemotePath": "Etäsijainti",
|
"SettingsRemotePathMappingRemotePath": "Etäsijainti",
|
||||||
"SettingsRemotePathMappingRemotePathHelpText": "Lataustyökalun käyttämän hakemiston juurisijainti",
|
"SettingsRemotePathMappingRemotePathHelpText": "Lataustyökalun käyttämän hakemiston juurisijainti",
|
||||||
"SizeLimit": "Kokorajoitus",
|
"SizeLimit": "Kokorajoitus",
|
||||||
"SystemTimeCheckMessage": "Järjestelmän aika on pielessä yli vuorokauden. Ajoitetut tehtävät eivät luultavasti toimi oikein ennen sen korjausta.",
|
"SystemTimeCheckMessage": "Järjestelmän aika on heittä yli vuorokauden verran. Ajoitetut tehtävät eivät luultavasti toimi oikein ennen ajan korjausta.",
|
||||||
"UISettingsSummary": "Kalenterin, päiväyksen ja kellonajan sekä kielen ja heikentyneelle värinäölle sopivan tilan asetukset.",
|
"UISettingsSummary": "Kalenterin, päiväyksen ja kellonajan sekä kielen ja heikentyneelle värinäölle sopivan tilan asetukset.",
|
||||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti sovellus, joka kommunikoi API:n kanssa",
|
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti sovellus, joka kommunikoi API:n kanssa",
|
||||||
"WatchLibraryForChangesHelpText": "Suorita automaattinen uudelleentutkinta, kun juurikansiossa havaitaan tiedostomuutoksia.",
|
"WatchLibraryForChangesHelpText": "Suorita automaattinen uudelleentutkinta, kun juurikansiossa havaitaan tiedostomuutoksia.",
|
||||||
@@ -699,61 +699,8 @@
|
|||||||
"MonitorNewBooks": "Valvo uusia kirjoja",
|
"MonitorNewBooks": "Valvo uusia kirjoja",
|
||||||
"RenameFiles": "Uudelleennimeä tiedostot",
|
"RenameFiles": "Uudelleennimeä tiedostot",
|
||||||
"Test": "Kokeile",
|
"Test": "Kokeile",
|
||||||
"AllowFingerprintingHelpText": "Tarkenna kirjojen täsmäystarkkuutta piiloleimauksen avulla.",
|
"AllowFingerprintingHelpText": "Käytä piiloleimausta kirjojen täsmäyksen tarkennukseen",
|
||||||
"AllowFingerprinting": "Salli piiloleimaus",
|
"AllowFingerprinting": "Salli piiloleimaus",
|
||||||
"Database": "Tietokanta",
|
"Database": "Tietokanta",
|
||||||
"ManualImportSelectEdition": "Manuaalinen tuonti - Valitse versio",
|
"ManualImportSelectEdition": "Manuaalinen tuonti - Valitse versio"
|
||||||
"ApplicationURL": "Sovelluksen URL-osoite",
|
|
||||||
"MusicBrainzReleaseID": "MusicBrainz-julkaisutunniste",
|
|
||||||
"MusicBrainzTrackID": "MusicBrainz-kappaletunniste",
|
|
||||||
"ShowBanners": "Näytä bannerit",
|
|
||||||
"CatalogNumber": "Luettelonumero",
|
|
||||||
"Continuing": "Jatkuva",
|
|
||||||
"DeleteRootFolder": "Poista juurikansio",
|
|
||||||
"DiscCount": "Levyjen määrä",
|
|
||||||
"EditList": "Muokkaa listaa",
|
|
||||||
"EnableProfile": "Käytä profiilia",
|
|
||||||
"FutureDays": "Tulevat päivät",
|
|
||||||
"ImportFailures": "Tuontivirheet",
|
|
||||||
"ImportLists": "Tuotilistat",
|
|
||||||
"ImportListSettings": "Tuontilistojen yleiset asetukset",
|
|
||||||
"ImportListSpecificSettings": "Tuotilistakohtaiset asetukset",
|
|
||||||
"IsShowingMonitoredMonitorSelected": "Valvo valittuja",
|
|
||||||
"IsShowingMonitoredUnmonitorSelected": "Lopeta valittujen valvonta",
|
|
||||||
"PreferredHelpTexts2": "Positiivisia tuloksia suositaan enemmän",
|
|
||||||
"MusicbrainzId": "MusicBrainz-tunniste",
|
|
||||||
"MusicBrainzRecordingID": "MusicBrainz-tallennetunniste",
|
|
||||||
"ShouldSearchHelpText": "Etsi tietolähteistä hiljattain lisättyjä kohteita. Käytä suurien listojen kanssa varoen.",
|
|
||||||
"OnDownloadFailure": "Latauksen epäonnistuessa",
|
|
||||||
"OnDownloadFailureHelpText": "Latauksen epäonnistuessa",
|
|
||||||
"OnImportFailure": "Tuonnin epäonistuessa",
|
|
||||||
"OnImportFailureHelpText": "Tuonnin epäonistuessa",
|
|
||||||
"OnReleaseImport": "Tuotaessa julkaisu",
|
|
||||||
"OnReleaseImportHelpText": "Tuotaessa julkaisu",
|
|
||||||
"PreferredHelpTexts3": "Negatiivisia tuloksia suositaan vähemmän",
|
|
||||||
"ReleaseProfiles": "Julkaisuprofiilit",
|
|
||||||
"ShowBannersHelpText": "Näytä nimien sijaan bannerit.",
|
|
||||||
"StatusEndedContinuing": "Jatkuu",
|
|
||||||
"UnableToLoadMetadataProviderSettings": "Metatietolähteen asetuksia ei voitu ladata",
|
|
||||||
"UnmappedFiles": "Kartoittamattomat tiedostot",
|
|
||||||
"UpdatingIsDisabledInsideADockerContainerUpdateTheContainerImageInstead": "Päivittäminen ei ole Docker-säiliössä käytettävissä. Päivitä sen sijaan säiliön kuva.",
|
|
||||||
"WatchRootFoldersForFileChanges": "Seuraa juurikansioiden tiedostomuutoksia",
|
|
||||||
"WriteMetadataTags": "Tallenna metatietotagit",
|
|
||||||
"Country": "Maa",
|
|
||||||
"MonitoringOptions": "Valvonta-asetukset",
|
|
||||||
"PastDays": "Menneet päivät",
|
|
||||||
"SearchMonitored": "Etsi valvottuja",
|
|
||||||
"SkipRedownload": "Ohita uudelleenlataus",
|
|
||||||
"TrackNumber": "Kappaleiden numero",
|
|
||||||
"TrackTitle": "Kappaleiden nimi",
|
|
||||||
"IsExpandedHideFileInfo": "Piilota tiedostotiedot",
|
|
||||||
"MetadataConsumers": "Metatietojen kuluttajat",
|
|
||||||
"MetadataProviderSource": "Metatietotoimittajan lähde",
|
|
||||||
"MetadataSource": "Metatietojen lähde",
|
|
||||||
"FutureDaysHelpText": "Päivien määrä, jonka verran tulevaisuuteen iCal-syötettä seurataan.",
|
|
||||||
"ManualDownload": "Manuaalinen lataus",
|
|
||||||
"PastDaysHelpText": "Päivien määrä, jonka verran menneisyyteen iCal-syötettä seurataan.",
|
|
||||||
"DiscNumber": "Levyn numero",
|
|
||||||
"ForeignIdHelpText": "Ohitettavan kirjailijan/kirjan MusicBrainz-tunniste.",
|
|
||||||
"IsExpandedShowFileInfo": "Näytä tiedostotiedot"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -877,7 +877,5 @@
|
|||||||
"InstanceNameHelpText": "Példánynév a böngésző lapon és a syslog alkalmazás neve",
|
"InstanceNameHelpText": "Példánynév a böngésző lapon és a syslog alkalmazás neve",
|
||||||
"LoadingEditionsFailed": "A kiadások betöltése nem sikerült",
|
"LoadingEditionsFailed": "A kiadások betöltése nem sikerült",
|
||||||
"ManualImportSelectEdition": "Kézi importálás – Válaszd ki a Kiadást",
|
"ManualImportSelectEdition": "Kézi importálás – Válaszd ki a Kiadást",
|
||||||
"Database": "Adatbázis",
|
"Database": "Adatbázis"
|
||||||
"ApplicationURL": "Alkalmazás URL-je",
|
|
||||||
"ApplicationUrlHelpText": "Az alkalmazás külső URL-címe, beleértve a http(s)://-t, a portot és az URL-alapot"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"45MinutesFourtyFive": "45 Minuti: {0}",
|
"45MinutesFourtyFive": "45 Minuti: {0}",
|
||||||
"60MinutesSixty": "60 Minuti: {0}",
|
"60MinutesSixty": "60 Minuti: {0}",
|
||||||
"APIKey": "Chiave API",
|
"APIKey": "Chiave API",
|
||||||
"About": "Info",
|
"About": "Informazioni",
|
||||||
"AddListExclusion": "Aggiungi Lista Esclusioni",
|
"AddListExclusion": "Aggiungi Lista Esclusioni",
|
||||||
"AddingTag": "Aggiungi etichetta",
|
"AddingTag": "Aggiungi etichetta",
|
||||||
"AdvancedSettingsHiddenClickToShow": "Nascosto, clicca per mostrare",
|
"AdvancedSettingsHiddenClickToShow": "Nascosto, clicca per mostrare",
|
||||||
@@ -44,11 +44,11 @@
|
|||||||
"AutoRedownloadFailedHelpText": "Cerca e prova a scaricare automaticamente un'altra versione",
|
"AutoRedownloadFailedHelpText": "Cerca e prova a scaricare automaticamente un'altra versione",
|
||||||
"Automatic": "Automatico",
|
"Automatic": "Automatico",
|
||||||
"BackupFolderHelpText": "I percorsi relativi saranno nella cartella AppData di Readarr",
|
"BackupFolderHelpText": "I percorsi relativi saranno nella cartella AppData di Readarr",
|
||||||
"BackupNow": "Esegui backup ora",
|
"BackupNow": "Effettua il Backup adesso",
|
||||||
"BackupRetentionHelpText": "I backup automatici più vecchi del periodo di conservazione verranno eliminati automaticamente",
|
"BackupRetentionHelpText": "I backup automatici più vecchi del periodo di conservazione verranno eliminati automaticamente",
|
||||||
"Backups": "I Backup",
|
"Backups": "I Backup",
|
||||||
"BindAddress": "Indirizzo di Bind",
|
"BindAddress": "Indirizzo di Bind",
|
||||||
"BindAddressHelpText": "Indirizzo IPV4 valido o '*' per tutte le interfacce di rete",
|
"BindAddressHelpText": "Indirizzo IPv4 valido o '*' per tutte le interfacce",
|
||||||
"BindAddressHelpTextWarning": "Richiede il riavvio per avere effetto",
|
"BindAddressHelpTextWarning": "Richiede il riavvio per avere effetto",
|
||||||
"BookIsDownloading": "Libro in download",
|
"BookIsDownloading": "Libro in download",
|
||||||
"BookIsDownloadingInterp": "Libro in download - {0}% {1}",
|
"BookIsDownloadingInterp": "Libro in download - {0}% {1}",
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
"Cancel": "Annulla",
|
"Cancel": "Annulla",
|
||||||
"CancelMessageText": "Sei sicuro di voler cancellare questa operazione in sospeso?",
|
"CancelMessageText": "Sei sicuro di voler cancellare questa operazione in sospeso?",
|
||||||
"CertificateValidation": "Convalida del Certificato",
|
"CertificateValidation": "Convalida del Certificato",
|
||||||
"CertificateValidationHelpText": "Cambia quanto rigorosamente vengono validati i certificati HTTPS. Non cambiare senza conoscerne i rischi.",
|
"CertificateValidationHelpText": "Cambia quanto è rigorosa la convalida del certificato HTTPS. Non cambiare a meno che tu non comprenda i rischi.",
|
||||||
"ChangeFileDate": "Cambiare la Data del File",
|
"ChangeFileDate": "Cambiare la Data del File",
|
||||||
"ChangeHasNotBeenSavedYet": "Il cambio non è stato ancora salvato",
|
"ChangeHasNotBeenSavedYet": "Il cambio non è stato ancora salvato",
|
||||||
"ChmodFolder": "Permessi Cartella",
|
"ChmodFolder": "Permessi Cartella",
|
||||||
@@ -381,9 +381,9 @@
|
|||||||
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Verrà usato durante la ricerca interattiva",
|
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Verrà usato durante la ricerca interattiva",
|
||||||
"TagIsNotUsedAndCanBeDeleted": "L'etichetta non è in uso e può essere eliminata",
|
"TagIsNotUsedAndCanBeDeleted": "L'etichetta non è in uso e può essere eliminata",
|
||||||
"Tasks": "Attività",
|
"Tasks": "Attività",
|
||||||
"TestAll": "Prova Tutti",
|
"TestAll": "Testa Tutti",
|
||||||
"TestAllClients": "Testa tutti i client",
|
"TestAllClients": "Testa Tutti i Client",
|
||||||
"TestAllIndexers": "Prova tutti gli indicizzatori",
|
"TestAllIndexers": "Testa tutti gli Indicizzatori",
|
||||||
"TestAllLists": "Testa tutte le liste",
|
"TestAllLists": "Testa tutte le liste",
|
||||||
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Questo verrà applicato a tutti gli indexer, segui le regole impostate da loro",
|
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Questo verrà applicato a tutti gli indexer, segui le regole impostate da loro",
|
||||||
"TimeFormat": "Formato orario",
|
"TimeFormat": "Formato orario",
|
||||||
@@ -544,7 +544,7 @@
|
|||||||
"ProxyCheckBadRequestMessage": "Il test del proxy è fallito. Codice Stato: {0}",
|
"ProxyCheckBadRequestMessage": "Il test del proxy è fallito. Codice Stato: {0}",
|
||||||
"ProxyCheckFailedToTestMessage": "Test del proxy fallito: {0}",
|
"ProxyCheckFailedToTestMessage": "Test del proxy fallito: {0}",
|
||||||
"QualitySettingsSummary": "Dimensioni delle qualità e denominazione",
|
"QualitySettingsSummary": "Dimensioni delle qualità e denominazione",
|
||||||
"Queued": "In coda",
|
"Queued": "Messo in coda",
|
||||||
"RefreshAndScan": "Aggiorna e Scansiona",
|
"RefreshAndScan": "Aggiorna e Scansiona",
|
||||||
"RemotePathMappingCheckBadDockerPath": "Stai utilizzando docker; Il client di download {0} mette i download in {1} ma questo non è un percorso valido {2}. Controlla la mappa dei percorsi remoti e le impostazioni del client di download.",
|
"RemotePathMappingCheckBadDockerPath": "Stai utilizzando docker; Il client di download {0} mette i download in {1} ma questo non è un percorso valido {2}. Controlla la mappa dei percorsi remoti e le impostazioni del client di download.",
|
||||||
"RemotePathMappingCheckDockerFolderMissing": "Stai utilizzando docker; il download client {0} riporta files in {1} ma questa directory non sembra esistere nel contenitore. Controlla la mappa dei percorsi remoti e le impostazioni dei volumi del container.",
|
"RemotePathMappingCheckDockerFolderMissing": "Stai utilizzando docker; il download client {0} riporta files in {1} ma questa directory non sembra esistere nel contenitore. Controlla la mappa dei percorsi remoti e le impostazioni dei volumi del container.",
|
||||||
@@ -617,34 +617,9 @@
|
|||||||
"Series": "Serie",
|
"Series": "Serie",
|
||||||
"Test": "Test",
|
"Test": "Test",
|
||||||
"InstanceName": "Nome Istanza",
|
"InstanceName": "Nome Istanza",
|
||||||
"InstanceNameHelpText": "Nome istanza nella scheda e per il nome dell'app nel Syslog",
|
"InstanceNameHelpText": "Nome dell'istanza nella scheda e per il nome dell'applicazione Syslog",
|
||||||
"LogRotateHelpText": "Numero massimo di file di log da tenere salvati nella cartella log",
|
"LogRotateHelpText": "Numero massimo di file di log da tenere salvati nella cartella log",
|
||||||
"LogRotation": "Rotazione Log",
|
"LogRotation": "Rotazione Log",
|
||||||
"ManualImportSelectEdition": "Importazione manuale: seleziona Film",
|
"ManualImportSelectEdition": "Importazione manuale: seleziona Film",
|
||||||
"Database": "Database",
|
"Database": "Database"
|
||||||
"ApplicationURL": "URL Applicazione",
|
|
||||||
"ApplicationUrlHelpText": "L'URL esterno di questa applicazione, incluso http(s)://, porta e URL base",
|
|
||||||
"CatalogNumber": "Numero Catalogo",
|
|
||||||
"Country": "Nazione",
|
|
||||||
"Continuing": "Continuando",
|
|
||||||
"EditList": "Modifica Lista",
|
|
||||||
"EnableProfile": "Abilita Profilo",
|
|
||||||
"ChownGroup": "chown Group",
|
|
||||||
"DiscNumber": "Numero Disco",
|
|
||||||
"DeleteImportList": "Cancella la lista di importazione",
|
|
||||||
"DeleteRootFolder": "Cancella la cartella principale",
|
|
||||||
"CalibreSettings": "Impostazioni di Calibre",
|
|
||||||
"Started": "Iniziato",
|
|
||||||
"CalibreContentServer": "Server di Contenuto Calibre",
|
|
||||||
"BooksTotal": "Libri ({0})",
|
|
||||||
"BookTitle": "Titolo del Libro",
|
|
||||||
"CalibrePassword": "Password di Calibre",
|
|
||||||
"CalibrePort": "Porta di Calibre",
|
|
||||||
"CalibreUrlBase": "URL di Base di Calibre",
|
|
||||||
"CalibreUsername": "Nome Utente di Calibre",
|
|
||||||
"CalibreHost": "Host di Calibre",
|
|
||||||
"CalibreLibrary": "Libreria di Calibre",
|
|
||||||
"CalibreMetadata": "Metadati di Calibre",
|
|
||||||
"CalibreOutputFormat": "Formato di output di Calibre",
|
|
||||||
"CalibreOutputProfile": "Profilo di output di Calibre"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
"BackupRetentionHelpText": "Automatische veiligheidskopieën ouder dan de retentie periode zullen worden opgeruimd",
|
"BackupRetentionHelpText": "Automatische veiligheidskopieën ouder dan de retentie periode zullen worden opgeruimd",
|
||||||
"Backups": "Veiligheidskopieën",
|
"Backups": "Veiligheidskopieën",
|
||||||
"BindAddress": "Gebonden Adres",
|
"BindAddress": "Gebonden Adres",
|
||||||
"BindAddressHelpText": "Geldig IPv4-adres of '*' voor alle interfaces",
|
"BindAddressHelpText": "Geldig IPv4 adres of '*' voor alle interfaces",
|
||||||
"BindAddressHelpTextWarning": "Herstarten vereist om in werking te treden",
|
"BindAddressHelpTextWarning": "Herstarten vereist om in werking te treden",
|
||||||
"BookIsDownloading": "Film is aan het downloaden",
|
"BookIsDownloading": "Film is aan het downloaden",
|
||||||
"BookIsDownloadingInterp": "Film is aan het downloaden - {0}% {1}",
|
"BookIsDownloadingInterp": "Film is aan het downloaden - {0}% {1}",
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
"Cancel": "Annuleer",
|
"Cancel": "Annuleer",
|
||||||
"CancelMessageText": "Bent u zeker dat u deze taak in afwachting wilt annuleren?",
|
"CancelMessageText": "Bent u zeker dat u deze taak in afwachting wilt annuleren?",
|
||||||
"CertificateValidation": "Certificaat Validatie",
|
"CertificateValidation": "Certificaat Validatie",
|
||||||
"CertificateValidationHelpText": "Wijzig hoe strict HTTPS certificaat validatie is. Wijzig dit niet behalve als je de risico's begrijpt.",
|
"CertificateValidationHelpText": "Wijzig hoe strikt HTTPS certificaat validatie is",
|
||||||
"ChangeFileDate": "Wijzig Bestandsdatum",
|
"ChangeFileDate": "Wijzig Bestandsdatum",
|
||||||
"ChangeHasNotBeenSavedYet": "Wijziging is nog niet opgeslagen",
|
"ChangeHasNotBeenSavedYet": "Wijziging is nog niet opgeslagen",
|
||||||
"ChmodFolder": "chmod Map",
|
"ChmodFolder": "chmod Map",
|
||||||
@@ -591,12 +591,5 @@
|
|||||||
"RenameFiles": "Hernoem Bestanden",
|
"RenameFiles": "Hernoem Bestanden",
|
||||||
"Test": "Test",
|
"Test": "Test",
|
||||||
"ManualImportSelectEdition": "Manuele import - Selecteer Film",
|
"ManualImportSelectEdition": "Manuele import - Selecteer Film",
|
||||||
"Database": "Databasis",
|
"Database": "Databasis"
|
||||||
"AddNewItem": "Voeg nieuwe toe",
|
|
||||||
"AddImportListExclusionHelpText": "Voorkom dat Readarr het boek toevoegt met Import Lijsten of Auteur Verversing",
|
|
||||||
"AllAuthorBooks": "Alle boeken van deze auteur",
|
|
||||||
"AllExpandedCollapseAll": "Klap alles in",
|
|
||||||
"AllExpandedExpandAll": "Klap alles uit",
|
|
||||||
"AllowAuthorChangeClickToChangeAuthor": "Klik om auteur aan te passen",
|
|
||||||
"AllowedLanguages": "Toegestane talen"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -224,7 +224,7 @@
|
|||||||
"MinimumFreeSpace": "Mínimo de espaço livre",
|
"MinimumFreeSpace": "Mínimo de espaço livre",
|
||||||
"MinimumFreeSpaceWhenImportingHelpText": "Impedir a importação se deixar menos do que esta quantidade de espaço em disco disponível",
|
"MinimumFreeSpaceWhenImportingHelpText": "Impedir a importação se deixar menos do que esta quantidade de espaço em disco disponível",
|
||||||
"MinimumLimits": "Limites mínimos",
|
"MinimumLimits": "Limites mínimos",
|
||||||
"MonoVersion": "Versão Mono",
|
"MonoVersion": "Versão do Mono",
|
||||||
"MoreInfo": "Mais informações",
|
"MoreInfo": "Mais informações",
|
||||||
"MustNotContain": "Não deve conter",
|
"MustNotContain": "Não deve conter",
|
||||||
"Name": "Nome",
|
"Name": "Nome",
|
||||||
@@ -260,7 +260,7 @@
|
|||||||
"Preferred": "Preferido",
|
"Preferred": "Preferido",
|
||||||
"PreviewRename": "Visualizar renomeação",
|
"PreviewRename": "Visualizar renomeação",
|
||||||
"Profiles": "Perfis",
|
"Profiles": "Perfis",
|
||||||
"Proper": "Apropriado",
|
"Proper": "Proper",
|
||||||
"PropersAndRepacks": "Propers e repacks",
|
"PropersAndRepacks": "Propers e repacks",
|
||||||
"Protocol": "Protocolo",
|
"Protocol": "Protocolo",
|
||||||
"ProtocolHelpText": "Escolha que protocolo(s) utilizar e qual o preferido ao escolher entre versões iguais",
|
"ProtocolHelpText": "Escolha que protocolo(s) utilizar e qual o preferido ao escolher entre versões iguais",
|
||||||
@@ -761,7 +761,7 @@
|
|||||||
"OnRename": "Ao Renomear",
|
"OnRename": "Ao Renomear",
|
||||||
"OnUpgrade": "Ao Atualizar",
|
"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 fornecerá nenhum resultado de pesquisa interativo",
|
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, Readarr não irá prover quaisquer resultados para pesquisa interativa",
|
||||||
"ConnectSettingsSummary": "Notificações, conexões com servidores/tocadores de mídia e scripts personalizados",
|
"ConnectSettingsSummary": "Notificações, conexões com servidores/tocadores de mídia e scripts personalizados",
|
||||||
"DownloadClientStatusCheckAllClientMessage": "Todos os clientes download não estão disponíveis devido a falhas",
|
"DownloadClientStatusCheckAllClientMessage": "Todos os clientes download não estão disponíveis devido a falhas",
|
||||||
"DownloadClientsSettingsSummary": "Clientes de download, gerenciamento do download e mapeamento remoto de caminhos",
|
"DownloadClientsSettingsSummary": "Clientes de download, gerenciamento do download e mapeamento remoto de caminhos",
|
||||||
@@ -821,7 +821,7 @@
|
|||||||
"ReadarrSupportsAnyDownloadClient": "Readarr suporta muitos clientes populares de download de torrent e usenet.",
|
"ReadarrSupportsAnyDownloadClient": "Readarr suporta muitos clientes populares de download de torrent e usenet.",
|
||||||
"RemotePathMappingCheckDockerFolderMissing": "Você está usando o docker; cliente de download {0} coloca downloads em {1}, mas esse diretório parece não existir dentro do contêiner. Revise seus mapeamentos de caminho remoto e configurações de volume de contêiner.",
|
"RemotePathMappingCheckDockerFolderMissing": "Você está usando o docker; cliente de download {0} coloca downloads em {1}, mas esse diretório parece não existir dentro do contêiner. Revise seus mapeamentos de caminho remoto e configurações de volume de contêiner.",
|
||||||
"RemotePathMappingCheckFilesLocalWrongOSPath": "O cliente de download local {0} relatou arquivos em {1}, mas este não é um caminho {2} válido. Revise as configurações do seu cliente de download.",
|
"RemotePathMappingCheckFilesLocalWrongOSPath": "O cliente de download local {0} relatou arquivos em {1}, mas este não é um caminho {2} válido. Revise as configurações do seu cliente de download.",
|
||||||
"RemotePathMappingCheckGenericPermissions": "O cliente de download {0} coloca os downloads em {1}, mas Readarr não pode ver este diretório. Pode ser necessário ajustar as permissões da pasta.",
|
"RemotePathMappingCheckGenericPermissions": "O cliente de download {0} coloca os downloads em {1}, mas o Readarr não pode ver este diretório. Pode ser necessário ajustar as permissões da pasta.",
|
||||||
"RemotePathMappingCheckRemoteDownloadClient": "O cliente de download remoto {0} relatou arquivos em {1}, mas este diretório parece não existir. Provavelmente faltando mapeamento de caminho remoto.",
|
"RemotePathMappingCheckRemoteDownloadClient": "O cliente de download remoto {0} relatou arquivos em {1}, mas este diretório parece não existir. Provavelmente faltando mapeamento de caminho remoto.",
|
||||||
"SettingsRemotePathMappingLocalPathHelpText": "Caminho que Readarr deve usar para acessar o caminho remoto localmente",
|
"SettingsRemotePathMappingLocalPathHelpText": "Caminho que Readarr deve usar para acessar o caminho remoto localmente",
|
||||||
"RootFolderCheckSingleMessage": "Pasta raiz ausente: {0}",
|
"RootFolderCheckSingleMessage": "Pasta raiz ausente: {0}",
|
||||||
@@ -851,7 +851,7 @@
|
|||||||
"UpdateCheckStartupTranslocationMessage": "Não é possível instalar a atualização porque a pasta de inicialização '{0}' está em uma pasta App Translocation.",
|
"UpdateCheckStartupTranslocationMessage": "Não é possível instalar a atualização porque a pasta de inicialização '{0}' está em uma pasta App Translocation.",
|
||||||
"TagsSettingsSummary": "Gerenciar etiquetas de autor, perfil, restrição e notificação",
|
"TagsSettingsSummary": "Gerenciar etiquetas de autor, perfil, restrição e notificação",
|
||||||
"InstanceNameHelpText": "Nome da instância na guia e para o nome do aplicativo Syslog",
|
"InstanceNameHelpText": "Nome da instância na guia e para o nome do aplicativo Syslog",
|
||||||
"AddList": "Adicionar Lista",
|
"AddList": "Adicionar à Lista",
|
||||||
"DataExistingBooks": "Monitorar livros que você tem arquivos ou que não foram lançados ainda",
|
"DataExistingBooks": "Monitorar livros que você tem arquivos ou que não foram lançados ainda",
|
||||||
"DataListMonitorAll": "Monitorar autores e todos os livros para cada autor incluído na lista de importação",
|
"DataListMonitorAll": "Monitorar autores e todos os livros para cada autor incluído na lista de importação",
|
||||||
"DataListMonitorNone": "Não monitorar autores ou livros",
|
"DataListMonitorNone": "Não monitorar autores ou livros",
|
||||||
@@ -861,7 +861,7 @@
|
|||||||
"RenameFiles": "Renomear Arquivos",
|
"RenameFiles": "Renomear Arquivos",
|
||||||
"Test": "Testar",
|
"Test": "Testar",
|
||||||
"WriteMetadataTags": "Salvar Etiquetas de Metadados",
|
"WriteMetadataTags": "Salvar Etiquetas de Metadados",
|
||||||
"RestartRequiredHelpTextWarning": "Requer reinicialização para ter efeito",
|
"RestartRequiredHelpTextWarning": "Requer reinicio para fazer efeito",
|
||||||
"InstanceName": "Nome da instância",
|
"InstanceName": "Nome da instância",
|
||||||
"ConvertToFormat": "Converter para o Formato",
|
"ConvertToFormat": "Converter para o Formato",
|
||||||
"DataAllBooks": "Monitorar todos os livros",
|
"DataAllBooks": "Monitorar todos os livros",
|
||||||
@@ -877,7 +877,5 @@
|
|||||||
"SetReadarrTags": "Configurar Etiquetas do Readarr",
|
"SetReadarrTags": "Configurar Etiquetas do Readarr",
|
||||||
"Database": "Banco de dados",
|
"Database": "Banco de dados",
|
||||||
"LoadingEditionsFailed": "Falha ao carregar edições",
|
"LoadingEditionsFailed": "Falha ao carregar edições",
|
||||||
"ManualImportSelectEdition": "Importação Manual - Selecionar Edição",
|
"ManualImportSelectEdition": "Importação Manual - Selecionar Edição"
|
||||||
"ApplicationURL": "URL do Aplicativo",
|
|
||||||
"ApplicationUrlHelpText": "A URL externa deste aplicativo, incluindo http(s)://, porta e base da URL"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -592,8 +592,5 @@
|
|||||||
"Started": "Запущено",
|
"Started": "Запущено",
|
||||||
"Database": "База данных",
|
"Database": "База данных",
|
||||||
"InstanceName": "Имя экземпляра",
|
"InstanceName": "Имя экземпляра",
|
||||||
"InstanceNameHelpText": "Имя экземпляра на вкладке и для имени приложения системного журнала",
|
"InstanceNameHelpText": "Имя экземпляра на вкладке и для имени приложения системного журнала"
|
||||||
"AllowedLanguages": "Разрешенные языки",
|
|
||||||
"ApplicationURL": "URL-адрес приложения",
|
|
||||||
"ApplicationUrlHelpText": "Внешний URL-адрес этого приложения, включая http(s)://, порт и базовый URL-адрес"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -803,7 +803,5 @@
|
|||||||
"DataExistingBooks": "Bevaka album som har filer eller inte har släppts än",
|
"DataExistingBooks": "Bevaka album som har filer eller inte har släppts än",
|
||||||
"DataFirstBook": "Bevaka första album. Alla andra album kommer bli ignorerade",
|
"DataFirstBook": "Bevaka första album. Alla andra album kommer bli ignorerade",
|
||||||
"DataFuturebooks": "Bevaka albums som inte har släppts än",
|
"DataFuturebooks": "Bevaka albums som inte har släppts än",
|
||||||
"DataMissingBooks": "Bevaka album som har filer eller inte har släppts än",
|
"DataMissingBooks": "Bevaka album som har filer eller inte har släppts än"
|
||||||
"ApplicationURL": "Applikations-URL",
|
|
||||||
"ApplicationUrlHelpText": "Denna applikations externa URL inklusive http(s)://, port och URL-bas"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,375 +95,5 @@
|
|||||||
"BackupFolderHelpText": "Відносні шляхи будуть у каталозі AppData Radarr",
|
"BackupFolderHelpText": "Відносні шляхи будуть у каталозі AppData Radarr",
|
||||||
"BlocklistHelpText": "Забороняє Radarr знову автоматично захопити цей випуск",
|
"BlocklistHelpText": "Забороняє Radarr знову автоматично захопити цей випуск",
|
||||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Гілка, що використовується зовнішнім механізмом оновлення",
|
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Гілка, що використовується зовнішнім механізмом оновлення",
|
||||||
"AddList": "Додати список",
|
"AddList": "Додати список"
|
||||||
"ShowDateAdded": "Показати дату додавання",
|
|
||||||
"UnableToLoadBlocklist": "Не вдалося завантажити список блокувань",
|
|
||||||
"UnableToLoadQualityProfiles": "Не вдалося завантажити профілі якості",
|
|
||||||
"YesCancel": "Так, скасувати",
|
|
||||||
"Yesterday": "Вчора",
|
|
||||||
"ImportFailedInterp": "Помилка імпорту: {0}",
|
|
||||||
"NoLogFiles": "Немає файлів журналу",
|
|
||||||
"RSSSync": "Синхронізація RSS",
|
|
||||||
"RSSSyncInterval": "Інтервал синхронізації RSS",
|
|
||||||
"DeleteTag": "Видалити тег",
|
|
||||||
"DownloadClientCheckDownloadingToRoot": "Клієнт завантаження {0} розміщує завантаження в кореневій папці {1}. Ви не повинні завантажувати в кореневу папку.",
|
|
||||||
"DownloadClientCheckNoneAvailableMessage": "Немає доступного клієнта для завантаження",
|
|
||||||
"DownloadClients": "Клієнти завантажувачів",
|
|
||||||
"Enable": "Увімкнути",
|
|
||||||
"EnableAutomaticSearch": "Увімкнути автоматичний пошук",
|
|
||||||
"EnableColorImpairedMode": "Увімкнути режим із порушенням кольору",
|
|
||||||
"EnableColorImpairedModeHelpText": "Змінений стиль, щоб користувачі з вадами кольору могли краще розрізняти кольорову кодовану інформацію",
|
|
||||||
"Interval": "Інтервал",
|
|
||||||
"ApplicationURL": "URL програми",
|
|
||||||
"ApplicationUrlHelpText": "Зовнішня URL-адреса цієї програми, включаючи http(s)://, порт і базу URL-адрес",
|
|
||||||
"DownloadClientsSettingsSummary": "Клієнти завантаження, обробка завантажень і віддалені відображення шляхів",
|
|
||||||
"DownloadClientStatusCheckAllClientMessage": "Усі клієнти завантаження недоступні через збої",
|
|
||||||
"DownloadFailedCheckDownloadClientForMoreDetails": "Помилка завантаження: перевірте клієнт завантаження, щоб дізнатися більше",
|
|
||||||
"DownloadFailedInterp": "Помилка завантаження: {0}",
|
|
||||||
"DownloadWarningCheckDownloadClientForMoreDetails": "Попередження про завантаження: перевірте клієнт завантаження, щоб дізнатися більше",
|
|
||||||
"Edition": "Видання",
|
|
||||||
"EnableCompletedDownloadHandlingHelpText": "Автоматично імпортувати завершені завантаження з клієнта завантажень",
|
|
||||||
"EnableHelpText": "Увімкнути створення файлу метаданих для цього типу метаданих",
|
|
||||||
"EnableSslHelpText": " Щоб набуло чинності, потрібно перезапустити роботу від імені адміністратора",
|
|
||||||
"ImportListStatusCheckAllClientMessage": "Усі списки недоступні через помилки",
|
|
||||||
"ImportMechanismHealthCheckMessage": "Увімкнути обробку завершених завантажень",
|
|
||||||
"IncludeHealthWarningsHelpText": "Включайте попередження про здоров’я",
|
|
||||||
"Path": "Шлях",
|
|
||||||
"RetryingDownloadInterp": "Повторна спроба завантажити {0} о {1}",
|
|
||||||
"UnableToLoadBackups": "Не вдалося завантажити резервні копії",
|
|
||||||
"UpdateScriptPathHelpText": "Шлях до спеціального сценарію, який приймає витягнутий пакет оновлення та обробляє решту процесу оновлення",
|
|
||||||
"Message": "Повідомлення",
|
|
||||||
"DownloadClientSettings": "Налаштування клієнта завантажувача",
|
|
||||||
"MIA": "MIA",
|
|
||||||
"MinimumAgeHelpText": "Тільки Usenet: мінімальний вік NZB у хвилинах до їх захоплення. Використовуйте це, щоб дати новим випускам час для поширення до вашого провайдера usenet.",
|
|
||||||
"MinimumFreeSpace": "Мінімальний вільний простір",
|
|
||||||
"MinimumFreeSpaceWhenImportingHelpText": "Заборонити імпорт, якщо він залишить менше, ніж цей обсяг доступного дискового простору",
|
|
||||||
"EnableInteractiveSearch": "Увімкнути інтерактивний пошук",
|
|
||||||
"ErrorLoadingContents": "Помилка завантаження вмісту",
|
|
||||||
"ExtraFileExtensionsHelpTexts1": "Розділений комами список додаткових файлів для імпорту (.nfo буде імпортовано як .nfo-orig)",
|
|
||||||
"FileWasDeletedByUpgrade": "Файл видалено, щоб імпортувати оновлення",
|
|
||||||
"FirstDayOfWeek": "Перший день тижня",
|
|
||||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Усі індексатори з можливістю пошуку тимчасово недоступні через нещодавні помилки індексатора",
|
|
||||||
"None": "Жодного",
|
|
||||||
"GeneralSettings": "Загальні налаштування",
|
|
||||||
"NotificationTriggers": "Тригери сповіщень",
|
|
||||||
"GeneralSettingsSummary": "Порт, SSL, ім’я користувача/пароль, проксі, аналітика та оновлення",
|
|
||||||
"NotAvailable": "Недоступний",
|
|
||||||
"GoToInterp": "Перейти до {0}",
|
|
||||||
"NotMonitored": "Не контролюється",
|
|
||||||
"NoUpdatesAreAvailable": "Немає оновлень",
|
|
||||||
"HealthNoIssues": "Немає проблем із вашою конфігурацією",
|
|
||||||
"ICalHttpUrlHelpText": "Скопіюйте цю URL-адресу до своїх клієнтів або натисніть, щоб підписатися, якщо ваш браузер підтримує веб-канал",
|
|
||||||
"OnHealthIssue": "Про питання здоров'я",
|
|
||||||
"OnHealthIssueHelpText": "Про питання здоров'я",
|
|
||||||
"OnRename": "При перейменуванні",
|
|
||||||
"OnRenameHelpText": "При перейменуванні",
|
|
||||||
"OnUpgrade": "При оновленні",
|
|
||||||
"OpenBrowserOnStart": "Відкрийте браузер при запуску",
|
|
||||||
"OutputPath": "Вихідний шлях",
|
|
||||||
"Overview": "Огляд",
|
|
||||||
"PackageVersion": "Версія пакета",
|
|
||||||
"PageSize": "Розмір сторінки",
|
|
||||||
"PageSizeHelpText": "Кількість елементів для показу на кожній сторінці",
|
|
||||||
"Password": "Пароль",
|
|
||||||
"IndexerPriority": "Пріоритет індексатора",
|
|
||||||
"IndexerRssHealthCheckNoAvailableIndexers": "Усі індексатори з підтримкою rss тимчасово недоступні через нещодавні помилки індексатора",
|
|
||||||
"DiskSpace": "Дисковий простір",
|
|
||||||
"Permissions": "Дозволи",
|
|
||||||
"Port": "Порт",
|
|
||||||
"PortNumber": "Номер порту",
|
|
||||||
"IndexerStatusCheckSingleClientMessage": "Індексатори недоступні через помилки: {0}",
|
|
||||||
"PosterSize": "Розмір плаката",
|
|
||||||
"PreviewRename": "Попередній перегляд Перейменування",
|
|
||||||
"Profiles": "Профілі",
|
|
||||||
"Proxy": "Проксі",
|
|
||||||
"ProtocolHelpText": "Виберіть протокол(и) для використання та який із них є кращим під час вибору між однаковими випусками",
|
|
||||||
"ProxyPasswordHelpText": "Вам потрібно лише ввести ім’я користувача та пароль, якщо вони потрібні. В іншому випадку залиште їх порожніми.",
|
|
||||||
"ProxyType": "Тип проксі",
|
|
||||||
"ProxyUsernameHelpText": "Вам потрібно лише ввести ім’я користувача та пароль, якщо вони потрібні. В іншому випадку залиште їх порожніми.",
|
|
||||||
"PublishedDate": "Дата публікації",
|
|
||||||
"Quality": "Якість",
|
|
||||||
"QualityDefinitions": "Визначення якості",
|
|
||||||
"QualityProfile": "Профіль якості",
|
|
||||||
"RemotePathMappingCheckLocalFolderMissing": "Клієнт віддаленого завантаження {0} розміщує завантаження в {1}, але цей каталог не існує. Ймовірно, віддалений шлях відсутній або неправильний.",
|
|
||||||
"RemotePathMappingCheckLocalWrongOSPath": "Локальний клієнт завантаження {0} розміщує завантаження в {1}, але це недійсний шлях {2}. Перегляньте налаштування клієнта завантаження.",
|
|
||||||
"RemoveSelected": "Видалити вибране",
|
|
||||||
"RemotePathMappingCheckWrongOSPath": "Клієнт віддаленого завантаження {0} розміщує завантаження в {1}, але це недійсний шлях {2}. Перегляньте свої віддалені відображення шляхів і завантажте налаштування клієнта.",
|
|
||||||
"MaximumLimits": "Максимальні обмеження",
|
|
||||||
"Reset": "Скинути",
|
|
||||||
"Restart": "Перезавантажити",
|
|
||||||
"MinimumLimits": "Мінімальні обмеження",
|
|
||||||
"MoreInfo": "Більше інформації",
|
|
||||||
"RootFolders": "Кореневі папки",
|
|
||||||
"SearchFiltered": "Пошук відфільтровано",
|
|
||||||
"NoBackupsAreAvailable": "Немає резервних копій",
|
|
||||||
"SourcePath": "Вихідний шлях",
|
|
||||||
"StartupDirectory": "Каталог запуску",
|
|
||||||
"Status": "Статус",
|
|
||||||
"SSLPort": "Порт SSL",
|
|
||||||
"Started": "Розпочато",
|
|
||||||
"StartTypingOrSelectAPathBelow": "Почніть вводити текст або виберіть шлях нижче",
|
|
||||||
"TagIsNotUsedAndCanBeDeleted": "Тег не використовується і може бути видалений",
|
|
||||||
"Tags": "Теги",
|
|
||||||
"SystemTimeCheckMessage": "Системний час вимкнено більш ніж на 1 день. Заплановані завдання можуть не працювати належним чином, доки час не буде виправлено",
|
|
||||||
"TestAll": "Перевірити все",
|
|
||||||
"Test": "Тест",
|
|
||||||
"TestAllIndexers": "Перевірити всі індексатори",
|
|
||||||
"ProxyBypassFilterHelpText": "Використовуйте «,» як роздільник і «*». як символ підстановки для субдоменів",
|
|
||||||
"ThisCannotBeCancelled": "Це не можна скасувати після запуску без вимкнення всіх ваших індексаторів.",
|
|
||||||
"Time": "Час",
|
|
||||||
"UnableToAddANewListPleaseTryAgain": "Не вдалося додати новий список, спробуйте ще раз.",
|
|
||||||
"UnableToAddANewQualityProfilePleaseTryAgain": "Не вдалося додати новий профіль якості, спробуйте ще раз.",
|
|
||||||
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Не вдалося додати нове зіставлення віддаленого шляху, спробуйте ще раз.",
|
|
||||||
"UnableToAddANewNotificationPleaseTryAgain": "Не вдалося додати нове сповіщення, спробуйте ще раз.",
|
|
||||||
"UnableToLoadDownloadClients": "Не вдалося завантажити клієнти для завантаження",
|
|
||||||
"UnableToLoadGeneralSettings": "Не вдалося завантажити загальні налаштування",
|
|
||||||
"UnableToLoadIndexers": "Не вдалося завантажити індексатори",
|
|
||||||
"UnableToLoadMediaManagementSettings": "Не вдалося завантажити налаштування керування медіафайлами",
|
|
||||||
"UnableToLoadMetadata": "Не вдалося завантажити метадані",
|
|
||||||
"UnableToLoadNotifications": "Не вдалося завантажити сповіщення",
|
|
||||||
"UnableToLoadQualities": "Неможливо завантажити якості",
|
|
||||||
"UnableToLoadNamingSettings": "Не вдалося завантажити налаштування імен",
|
|
||||||
"UnableToLoadUISettings": "Не вдалося завантажити налаштування інтерфейсу користувача",
|
|
||||||
"Ungroup": "Розгрупувати",
|
|
||||||
"UnableToLoadRootFolders": "Не вдалося завантажити кореневі папки",
|
|
||||||
"UnableToLoadTags": "Не вдалося завантажити теги",
|
|
||||||
"UnableToLoadTheCalendar": "Неможливо завантажити календар",
|
|
||||||
"RemotePathMappingCheckFilesLocalWrongOSPath": "Локальний клієнт завантаження {0} повідомив про файли в {1}, але це недійсний шлях {2}. Перегляньте налаштування клієнта завантаження.",
|
|
||||||
"RemotePathMappingCheckFilesWrongOSPath": "Клієнт віддаленого завантаження {0} повідомив про файли в {1}, але це недійсний шлях {2}. Перегляньте свої віддалені відображення шляхів і завантажте налаштування клієнта.",
|
|
||||||
"Unmonitored": "Неконтрольований",
|
|
||||||
"Year": "Рік",
|
|
||||||
"RemoveHelpTextWarning": "Видалення видалить завантаження та файл(и) із клієнта завантаження.",
|
|
||||||
"Search": "Пошук",
|
|
||||||
"SendAnonymousUsageData": "Надсилати анонімні дані про використання",
|
|
||||||
"SetPermissionsLinuxHelpText": "Чи слід запускати chmod, коли файли імпортуються/перейменовуються?",
|
|
||||||
"ShowMonitoredHelpText": "Показати відстежуваний статус під плакатом",
|
|
||||||
"ShowReleaseDate": "Показати дату випуску",
|
|
||||||
"SkipFreeSpaceCheck": "Пропустити перевірку вільного місця",
|
|
||||||
"Tomorrow": "Завтра",
|
|
||||||
"UILanguageHelpTextWarning": "Потрібно перезавантажити браузер",
|
|
||||||
"UISettings": "Налаштування інтерфейсу користувача",
|
|
||||||
"UISettingsSummary": "Параметри календаря, дати та кольору",
|
|
||||||
"UnableToAddANewIndexerPleaseTryAgain": "Не вдалося додати новий індексатор, спробуйте ще раз.",
|
|
||||||
"UnableToLoadIndexerOptions": "Не вдалося завантажити параметри індексатора",
|
|
||||||
"UnableToLoadRemotePathMappings": "Неможливо завантажити віддалені відображення шляхів",
|
|
||||||
"UpdateAutomaticallyHelpText": "Автоматичне завантаження та встановлення оновлень. Ви все ще зможете встановити з System: Updates",
|
|
||||||
"UpdateCheckStartupTranslocationMessage": "Неможливо встановити оновлення, оскільки папка запуску \"{0}\" знаходиться в папці переміщення програми.",
|
|
||||||
"Version": "Версія",
|
|
||||||
"Original": "Оригінал",
|
|
||||||
"Options": "Опції",
|
|
||||||
"RefreshInformationAndScanDisk": "Оновити інформацію та сканувати диск",
|
|
||||||
"ManualImport": "Імпорт вручну",
|
|
||||||
"ProxyCheckBadRequestMessage": "Не вдалося перевірити проксі. Код стану: {0}",
|
|
||||||
"Reason": "Причина",
|
|
||||||
"RemoveFromQueue": "Видалити з черги",
|
|
||||||
"Restore": "Відновлення",
|
|
||||||
"SelectAll": "Вибрати все",
|
|
||||||
"TorrentDelayHelpText": "Затримка в хвилинах, щоб зачекати, перш ніж захопити торрент",
|
|
||||||
"Fixed": "Виправлено",
|
|
||||||
"DownloadClient": "Клієнт завантажувача",
|
|
||||||
"DownloadClientCheckUnableToCommunicateMessage": "Неможливо зв'язатися з {0}.",
|
|
||||||
"DownloadClientStatusCheckSingleClientMessage": "Завантаження клієнтів недоступне через помилки: {0}",
|
|
||||||
"Edit": "Редагувати",
|
|
||||||
"EnableAutomaticAdd": "Увімкнути автоматичне додавання",
|
|
||||||
"DestinationPath": "Шлях призначення",
|
|
||||||
"DetailedProgressBar": "Детальний індикатор прогресу",
|
|
||||||
"DetailedProgressBarHelpText": "Показати текст на панелі виконання",
|
|
||||||
"Disabled": "Вимкнено",
|
|
||||||
"Duration": "Тривалість",
|
|
||||||
"EnableRSS": "Увімкнути RSS",
|
|
||||||
"EnableSSL": "Увімкнути SSL",
|
|
||||||
"Ended": "Завершено",
|
|
||||||
"ErrorLoadingPreviews": "Помилка завантаження попереднього перегляду",
|
|
||||||
"Exception": "Виняток",
|
|
||||||
"FailedDownloadHandling": "Помилка обробки завантаження",
|
|
||||||
"FailedToLoadQueue": "Не вдалося завантажити чергу",
|
|
||||||
"FileDateHelpText": "Змінити дату файлу під час імпорту/повторного сканування",
|
|
||||||
"FileManagement": "Керування файлами",
|
|
||||||
"Filename": "Ім'я файлу",
|
|
||||||
"FileNames": "Імена файлів",
|
|
||||||
"Files": "Файли",
|
|
||||||
"FileWasDeletedByViaUI": "Файл видалено через інтерфейс користувача",
|
|
||||||
"Folder": "Папка",
|
|
||||||
"Folders": "Папки",
|
|
||||||
"General": "Загальний",
|
|
||||||
"Global": "Глобальний",
|
|
||||||
"IllRestartLater": "Я перезапущу пізніше",
|
|
||||||
"ImportedTo": "Імпортовано в",
|
|
||||||
"ImportExtraFiles": "Імпорт додаткових файлів",
|
|
||||||
"Filters": "Фільтри",
|
|
||||||
"Importing": "Імпорт",
|
|
||||||
"Indexers": "Індексатори",
|
|
||||||
"ImportListStatusCheckSingleClientMessage": "Списки недоступні через помилки: {0}",
|
|
||||||
"Indexer": "Індексатор",
|
|
||||||
"IndexerLongTermStatusCheckAllClientMessage": "Усі індексатори недоступні через збої більше 6 годин",
|
|
||||||
"IndexerLongTermStatusCheckSingleClientMessage": "Індексатори недоступні через збої більше 6 годин: {0}",
|
|
||||||
"IndexerJackettAll": "Індексатори, які використовують непідтримувану кінцеву точку Jackett 'all': {0}",
|
|
||||||
"IndexerSettings": "Налаштування індексатора",
|
|
||||||
"IndexersSettingsSummary": "Індексатори та обмеження випуску",
|
|
||||||
"IndexerStatusCheckAllClientMessage": "Усі індексатори недоступні через збої",
|
|
||||||
"InstanceName": "Ім'я екземпляра",
|
|
||||||
"InstanceNameHelpText": "Ім’я екземпляра на вкладці та ім’я програми Syslog",
|
|
||||||
"Language": "Мова",
|
|
||||||
"Level": "Рівень",
|
|
||||||
"Lists": "Списки",
|
|
||||||
"MaximumSize": "Максимальний розмір",
|
|
||||||
"Mechanism": "Механізм",
|
|
||||||
"MediaInfo": "Медіа інформація",
|
|
||||||
"MinimumAge": "Мінімальний вік",
|
|
||||||
"Mode": "Режим",
|
|
||||||
"MustContain": "Має містити",
|
|
||||||
"MustNotContain": "Не повинен містити",
|
|
||||||
"Name": "Ім'я",
|
|
||||||
"NamingSettings": "Налаштування імен",
|
|
||||||
"New": "Новий",
|
|
||||||
"NoLeaveIt": "Ні, залиште це",
|
|
||||||
"NoLimitForAnyRuntime": "Немає обмежень для будь-якого часу виконання",
|
|
||||||
"NoMinimumForAnyRuntime": "Немає мінімуму для будь-якого часу виконання",
|
|
||||||
"OnUpgradeHelpText": "При оновленні",
|
|
||||||
"Progress": "Прогрес",
|
|
||||||
"Proper": "Належний",
|
|
||||||
"Protocol": "Протокол",
|
|
||||||
"ProxyCheckFailedToTestMessage": "Не вдалося перевірити проксі: {0}",
|
|
||||||
"ProxyCheckResolveIpMessage": "Не вдалося визначити IP-адресу для налаштованого проксі-сервера {0}",
|
|
||||||
"RemotePathMappingCheckRemoteDownloadClient": "Клієнт віддаленого завантаження {0} повідомив про файли в {1}, але цей каталог, здається, не існує. Ймовірно, відсутнє відображення віддаленого шляху.",
|
|
||||||
"RemoveFromDownloadClient": "Видалити з клієнта завантаження",
|
|
||||||
"Reorder": "Змінити порядок",
|
|
||||||
"ReplaceIllegalCharacters": "Замінити неприпустимі символи",
|
|
||||||
"ResetAPIKey": "Скинути ключ API",
|
|
||||||
"RestartNow": "Перезавантажити зараз",
|
|
||||||
"RestartRequiredHelpTextWarning": "Щоб набуло чинності, потрібно перезапустити",
|
|
||||||
"Save": "Зберегти",
|
|
||||||
"Scheduled": "За розкладом",
|
|
||||||
"Score": "Оцінка",
|
|
||||||
"ScriptPath": "Шлях сценарію",
|
|
||||||
"SearchAll": "Пошук у всіх",
|
|
||||||
"SearchForMissing": "Розшук зниклих",
|
|
||||||
"SearchSelected": "Пошук вибрано",
|
|
||||||
"Security": "Безпека",
|
|
||||||
"SetPermissions": "Встановити дозволи",
|
|
||||||
"SetPermissionsLinuxHelpTextWarning": "Якщо ви не впевнені, що ці налаштування роблять, не змінюйте їх.",
|
|
||||||
"Settings": "Налаштування",
|
|
||||||
"SettingsRemotePathMappingLocalPath": "Місцевий шлях",
|
|
||||||
"SettingsRemotePathMappingRemotePath": "Віддалений шлях",
|
|
||||||
"SettingsRemotePathMappingRemotePathHelpText": "Кореневий шлях до каталогу, до якого має доступ клієнт завантаження",
|
|
||||||
"ShowCutoffUnmetIconHelpText": "Показувати піктограму для файлів, коли обмеження не досягнуто",
|
|
||||||
"ShowMonitored": "Показати Моніторинг",
|
|
||||||
"ShowPath": "Показати шлях",
|
|
||||||
"ShowQualityProfileHelpText": "Покажіть якісний профіль під плакатом",
|
|
||||||
"ShowSearch": "Показати пошук",
|
|
||||||
"ShowSizeOnDisk": "Показати розмір на диску",
|
|
||||||
"ShowTitle": "Показати назву",
|
|
||||||
"SizeLimit": "Обмеження розміру",
|
|
||||||
"Source": "Джерело",
|
|
||||||
"Style": "Стиль",
|
|
||||||
"Tasks": "Задачі",
|
|
||||||
"TestAllClients": "Перевірте всіх клієнтів",
|
|
||||||
"TestAllLists": "Перевірити всі списки",
|
|
||||||
"TimeFormat": "Формат часу",
|
|
||||||
"Title": "Назва",
|
|
||||||
"Today": "Сьогодні",
|
|
||||||
"TotalFileSize": "Загальний розмір файлу",
|
|
||||||
"UILanguage": "Мова інтерфейсу користувача",
|
|
||||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Не вдається додати новий клієнт для завантаження, повторіть спробу.",
|
|
||||||
"UnableToLoadDelayProfiles": "Неможливо завантажити профілі затримки",
|
|
||||||
"UnableToLoadDownloadClientOptions": "Не вдалося завантажити параметри клієнта для завантаження",
|
|
||||||
"UnableToLoadLists": "Не вдалося завантажити списки",
|
|
||||||
"UnableToLoadQualityDefinitions": "Не вдалося завантажити визначення якості",
|
|
||||||
"UnselectAll": "Скасувати вибір усіх",
|
|
||||||
"UpdateAvailable": "Доступне нове оновлення",
|
|
||||||
"UpdateCheckStartupNotWritableMessage": "Неможливо встановити оновлення, оскільки папка запуску \"{0}\" не може бути записана користувачем \"{1}\".",
|
|
||||||
"UpdateCheckUINotWritableMessage": "Неможливо встановити оновлення, оскільки папка інтерфейсу користувача \"{0}\" не може бути записана користувачем \"{1}\".",
|
|
||||||
"Updates": "Оновлення",
|
|
||||||
"Uptime": "Час роботи",
|
|
||||||
"URLBase": "URL-адреса",
|
|
||||||
"UseHardlinksInsteadOfCopy": "Використовуйте жорсткі посилання замість копіювати",
|
|
||||||
"UsenetDelay": "Затримка Usenet",
|
|
||||||
"UseProxy": "Використовуйте проксі",
|
|
||||||
"Username": "Ім'я користувача",
|
|
||||||
"Wanted": "Розшукується",
|
|
||||||
"WeekColumnHeader": "Заголовок стовпця тижня",
|
|
||||||
"Local": "Місцевий",
|
|
||||||
"LogFiles": "Файли журналів",
|
|
||||||
"LogLevel": "Рівень журналу",
|
|
||||||
"Logs": "Журнали",
|
|
||||||
"MarkAsFailed": "Позначити як помилку",
|
|
||||||
"MarkAsFailedMessageText": "Ви впевнені, що бажаєте позначити \"{0}\" як невдале?",
|
|
||||||
"QualityProfiles": "Профілі якості",
|
|
||||||
"QualitySettings": "Налаштування якості",
|
|
||||||
"QualitySettingsSummary": "Якісні розміри та найменування",
|
|
||||||
"Queue": "Черга",
|
|
||||||
"Queued": "У черзі",
|
|
||||||
"QueueIsEmpty": "Черга порожня",
|
|
||||||
"ReadTheWikiForMoreInformation": "Читайте Wiki для отримання додаткової інформації",
|
|
||||||
"Real": "Справжня",
|
|
||||||
"RecycleBinCleanupDaysHelpText": "Встановіть значення 0, щоб вимкнути автоматичне очищення",
|
|
||||||
"RecycleBinCleanupDaysHelpTextWarning": "Файли в кошику, старші за вибрану кількість днів, будуть очищені автоматично",
|
|
||||||
"RecyclingBin": "Сміттєвий кошик",
|
|
||||||
"RecyclingBinCleanup": "Очищення сміттєвого кошика",
|
|
||||||
"Redownload": "Повторне завантаження",
|
|
||||||
"Refresh": "Оновити",
|
|
||||||
"RefreshAndScan": "Оновити та сканувати",
|
|
||||||
"UsenetDelayHelpText": "Затримка в хвилинах, щоб зачекати, перш ніж отримати випуск від Usenet",
|
|
||||||
"DeleteImportListExclusion": "Видалити виключення зі списку імпорту",
|
|
||||||
"DeleteIndexer": "Видалити індексатор",
|
|
||||||
"DeleteNotification": "Видалити сповіщення",
|
|
||||||
"DeleteQualityProfile": "Видалити профіль якості",
|
|
||||||
"Docker": "Docker",
|
|
||||||
"Group": "Група",
|
|
||||||
"History": "Історія",
|
|
||||||
"Host": "Хост",
|
|
||||||
"Hostname": "Ім'я хоста",
|
|
||||||
"ICalFeed": "Канал iCal",
|
|
||||||
"IgnoredAddresses": "Ігноровані адреси",
|
|
||||||
"IgnoredPlaceHolder": "Додайте нове обмеження",
|
|
||||||
"Missing": "Відсутня",
|
|
||||||
"Preferred": "Бажано",
|
|
||||||
"RemotePathMappingCheckDockerFolderMissing": "Ви використовуєте docker; клієнт завантаження {0} розміщує завантаження в {1}, але цей каталог не існує всередині контейнера. Перегляньте свої віддалені відображення шляхів і налаштування обсягу контейнера.",
|
|
||||||
"RemotePathMappingCheckFileRemoved": "Файл {0} видалено під час обробки.",
|
|
||||||
"RemotePathMappingCheckFilesBadDockerPath": "Ви використовуєте docker; завантажити клієнтські {0} звітні файли в {1}, але це недійсний {2} шлях. Перегляньте свої віддалені відображення шляхів і завантажте налаштування клієнта.",
|
|
||||||
"ReleaseGroup": "Група випуску",
|
|
||||||
"ReleaseRejected": "Реліз відхилено",
|
|
||||||
"ReleaseTitle": "Назва випуску",
|
|
||||||
"ReleaseWillBeProcessedInterp": "Випуск буде оброблено {0}",
|
|
||||||
"Reload": "Перезавантажити",
|
|
||||||
"RemotePathMappingCheckBadDockerPath": "Ви використовуєте docker; клієнт завантаження {0} розміщує завантаження в {1}, але це недійсний шлях {2}. Перегляньте свої віддалені відображення шляхів і завантажте налаштування клієнта.",
|
|
||||||
"RenameFiles": "Перейменування файлів",
|
|
||||||
"RestoreBackup": "Відновлення резервної копії",
|
|
||||||
"Result": "Результат",
|
|
||||||
"Retention": "Утримання",
|
|
||||||
"RetentionHelpText": "Лише Usenet: встановіть нуль, щоб налаштувати необмежену утримку",
|
|
||||||
"RootFolder": "Коренева папка",
|
|
||||||
"RemotePathMappings": "Віддалені відображення шляхів",
|
|
||||||
"Remove": "Видалити",
|
|
||||||
"RemoveCompletedDownloadsHelpText": "Видалити імпортовані завантаження з історії клієнта завантажень",
|
|
||||||
"RemovedFromTaskQueue": "Видалено з черги завдань",
|
|
||||||
"RemoveFailedDownloadsHelpText": "Видаліть невдалі завантаження з історії завантажень клієнта",
|
|
||||||
"RemoveFilter": "Видалити фільтр",
|
|
||||||
"RemoveFromBlocklist": "Видалити зі списку блокувань",
|
|
||||||
"RootFolderCheckMultipleMessage": "Відсутні кілька кореневих папок: {0}",
|
|
||||||
"RootFolderCheckSingleMessage": "Відсутня коренева папка: {0}",
|
|
||||||
"TorrentDelay": "Затримка торрента",
|
|
||||||
"Torrents": "Торренти",
|
|
||||||
"UpgradeAllowedHelpText": "Якщо відключені якості не будуть покращені",
|
|
||||||
"MediaManagementSettings": "Налаштування Управління медіа",
|
|
||||||
"OnGrab": "При захопленні",
|
|
||||||
"OnGrabHelpText": "При захопленні",
|
|
||||||
"SSLCertPassword": "Пароль SSL сертифіката",
|
|
||||||
"SSLCertPath": "Шлях сертифіката SSL",
|
|
||||||
"IncludeUnmonitored": "Включити неконтрольований",
|
|
||||||
"MediaManagement": "Управління медіа",
|
|
||||||
"MetadataSettings": "Налаштування метаданих",
|
|
||||||
"Monitor": "Контрольований",
|
|
||||||
"Monitored": "Відстежується",
|
|
||||||
"UI": "Інтерфейс користувача",
|
|
||||||
"Usenet": "Usenet",
|
|
||||||
"Logging": "Журналування",
|
|
||||||
"MaintenanceRelease": "Випуск для обслуговування: виправлення помилок та інші покращення. Щоб отримати докладнішу інформацію, перегляньте історію фіксації Github",
|
|
||||||
"Metadata": "Метадані",
|
|
||||||
"GrabRelease": "Захопити реліз",
|
|
||||||
"GrabSelected": "Захопити вибране",
|
|
||||||
"IconForCutoffUnmet": "Значок \"Не виконано відсікання\"",
|
|
||||||
"Grab": "Захопити",
|
|
||||||
"GrabID": "Захопити ID"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,7 +83,7 @@
|
|||||||
"DeleteImportListMessageText": "您确定要删除列表 '{0}'?",
|
"DeleteImportListMessageText": "您确定要删除列表 '{0}'?",
|
||||||
"DeleteIndexer": "删除索引",
|
"DeleteIndexer": "删除索引",
|
||||||
"DeleteIndexerMessageText": "您确定要删除索引 '{0}'吗?",
|
"DeleteIndexerMessageText": "您确定要删除索引 '{0}'吗?",
|
||||||
"DeleteMetadataProfileMessageText": "确定要删除元数据配置吗‘{0}’?",
|
"DeleteMetadataProfileMessageText": "确定要删除影片质量配置“{0}”",
|
||||||
"DeleteNotification": "删除消息推送",
|
"DeleteNotification": "删除消息推送",
|
||||||
"DeleteNotificationMessageText": "您确定要删除推送 '{0}' 吗?",
|
"DeleteNotificationMessageText": "您确定要删除推送 '{0}' 吗?",
|
||||||
"DeleteQualityProfile": "删除电影质量配置",
|
"DeleteQualityProfile": "删除电影质量配置",
|
||||||
@@ -433,7 +433,7 @@
|
|||||||
"WeekColumnHeader": "日期格式",
|
"WeekColumnHeader": "日期格式",
|
||||||
"Year": "年",
|
"Year": "年",
|
||||||
"YesCancel": "是,取消",
|
"YesCancel": "是,取消",
|
||||||
"20MinutesTwenty": "20 分钟:{0}",
|
"20MinutesTwenty": "20分钟: {0}",
|
||||||
"45MinutesFourtyFive": "45分钟: {0}",
|
"45MinutesFourtyFive": "45分钟: {0}",
|
||||||
"60MinutesSixty": "60分钟: {0}",
|
"60MinutesSixty": "60分钟: {0}",
|
||||||
"APIKey": "API Key",
|
"APIKey": "API Key",
|
||||||
@@ -877,7 +877,5 @@
|
|||||||
"CollapseMultipleBooksHelpText": "折叠在同日发行的多本书籍",
|
"CollapseMultipleBooksHelpText": "折叠在同日发行的多本书籍",
|
||||||
"ASIN": "亚马逊标准识别码",
|
"ASIN": "亚马逊标准识别码",
|
||||||
"NoTagsHaveBeenAddedYet": "尚未添加标签,添加标签以链接具有延迟配置文件、限制或通知的作者。单击{0}以了解有关Readarr中标签的更多信息。",
|
"NoTagsHaveBeenAddedYet": "尚未添加标签,添加标签以链接具有延迟配置文件、限制或通知的作者。单击{0}以了解有关Readarr中标签的更多信息。",
|
||||||
"BindAddressHelpText": "有效的 IPv4 地址或以'*'代表所有接口",
|
"BindAddressHelpText": "有效的 IPv4 地址或以'*'代表所有接口"
|
||||||
"ApplicationURL": "程序URL",
|
|
||||||
"ApplicationUrlHelpText": "此应用的外部URL,包含 http(s)://、端口和基本URL"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
|||||||
catch (BookInfoException e)
|
catch (BookInfoException e)
|
||||||
{
|
{
|
||||||
_logger.Warn(e, "Unexpected error getting book info");
|
_logger.Warn(e, "Unexpected error getting book info");
|
||||||
throw new BookNotFoundException(foreignBookId);
|
throw new AuthorNotFoundException(foreignBookId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,29 +378,14 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
|||||||
|
|
||||||
private Book GetEditionInfo(int id, bool getAllEditions)
|
private Book GetEditionInfo(int id, bool getAllEditions)
|
||||||
{
|
{
|
||||||
HttpRequest httpRequest;
|
var httpRequest = _requestBuilder.GetRequestBuilder().Create()
|
||||||
HttpResponse httpResponse;
|
.SetSegment("route", $"book/{id}")
|
||||||
|
.Build();
|
||||||
|
|
||||||
while (true)
|
httpRequest.SuppressHttpError = true;
|
||||||
{
|
|
||||||
httpRequest = _requestBuilder.GetRequestBuilder().Create()
|
|
||||||
.SetSegment("route", $"book/{id}")
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
httpRequest.SuppressHttpError = true;
|
// we expect a redirect
|
||||||
|
var httpResponse = _httpClient.Get(httpRequest);
|
||||||
// we expect a redirect
|
|
||||||
httpResponse = _httpClient.Get(httpRequest);
|
|
||||||
|
|
||||||
if (httpResponse.StatusCode == HttpStatusCode.TooManyRequests)
|
|
||||||
{
|
|
||||||
WaitUntilRetry(httpResponse);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (httpResponse.StatusCode == HttpStatusCode.NotFound)
|
if (httpResponse.StatusCode == HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
@@ -413,9 +398,9 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
var location = httpResponse.Headers.GetSingleValue("Location");
|
var location = httpResponse.Headers.GetSingleValue("Location");
|
||||||
var split = location.Split('/').Reverse().ToList();
|
var split = location.Split('/');
|
||||||
var newId = split[0];
|
var type = split[0];
|
||||||
var type = split[1];
|
var newId = split[1];
|
||||||
|
|
||||||
Book book;
|
Book book;
|
||||||
List<AuthorMetadata> authors;
|
List<AuthorMetadata> authors;
|
||||||
@@ -452,10 +437,6 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
|||||||
trimmed.AuthorMetadata = book.AuthorMetadata.Value;
|
trimmed.AuthorMetadata = book.AuthorMetadata.Value;
|
||||||
trimmed.SeriesLinks = book.SeriesLinks;
|
trimmed.SeriesLinks = book.SeriesLinks;
|
||||||
var edition = book.Editions.Value.SingleOrDefault(e => e.ForeignEditionId == id.ToString());
|
var edition = book.Editions.Value.SingleOrDefault(e => e.ForeignEditionId == id.ToString());
|
||||||
if (edition != null)
|
|
||||||
{
|
|
||||||
edition.Monitored = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
trimmed.Editions = new List<Edition> { edition };
|
trimmed.Editions = new List<Edition> { edition };
|
||||||
book = trimmed;
|
book = trimmed;
|
||||||
@@ -469,32 +450,16 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
|||||||
|
|
||||||
private List<Book> MapSearchResult(List<int> ids)
|
private List<Book> MapSearchResult(List<int> ids)
|
||||||
{
|
{
|
||||||
HttpRequest httpRequest;
|
var httpRequest = _requestBuilder.GetRequestBuilder().Create()
|
||||||
HttpResponse<BulkBookResource> httpResponse;
|
.SetSegment("route", $"book/bulk")
|
||||||
|
.SetHeader("Content-Type", "application/json")
|
||||||
|
.Build();
|
||||||
|
|
||||||
while (true)
|
httpRequest.SetContent(ids.ToJson());
|
||||||
{
|
|
||||||
httpRequest = _requestBuilder.GetRequestBuilder().Create()
|
|
||||||
.SetSegment("route", $"book/bulk")
|
|
||||||
.SetHeader("Content-Type", "application/json")
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
httpRequest.SetContent(ids.ToJson());
|
httpRequest.AllowAutoRedirect = true;
|
||||||
|
|
||||||
httpRequest.AllowAutoRedirect = true;
|
var httpResponse = _httpClient.Post<BulkBookResource>(httpRequest);
|
||||||
httpRequest.SuppressHttpError = true;
|
|
||||||
|
|
||||||
httpResponse = _httpClient.Post<BulkBookResource>(httpRequest);
|
|
||||||
|
|
||||||
if (httpResponse.StatusCode == HttpStatusCode.TooManyRequests)
|
|
||||||
{
|
|
||||||
WaitUntilRetry(httpResponse);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var mapped = MapBulkBook(httpResponse.Resource);
|
var mapped = MapBulkBook(httpResponse.Resource);
|
||||||
|
|
||||||
@@ -609,12 +574,7 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
|||||||
|
|
||||||
if (httpResponse.HasHttpError)
|
if (httpResponse.HasHttpError)
|
||||||
{
|
{
|
||||||
if (httpResponse.StatusCode == HttpStatusCode.TooManyRequests)
|
if (httpResponse.StatusCode == HttpStatusCode.NotFound)
|
||||||
{
|
|
||||||
WaitUntilRetry(httpResponse);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if (httpResponse.StatusCode == HttpStatusCode.NotFound)
|
|
||||||
{
|
{
|
||||||
throw new AuthorNotFoundException(foreignAuthorId);
|
throw new AuthorNotFoundException(foreignAuthorId);
|
||||||
}
|
}
|
||||||
@@ -664,12 +624,6 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
|||||||
// this may redirect to an author
|
// this may redirect to an author
|
||||||
var httpResponse = _httpClient.Get(httpRequest);
|
var httpResponse = _httpClient.Get(httpRequest);
|
||||||
|
|
||||||
if (httpResponse.StatusCode == HttpStatusCode.TooManyRequests)
|
|
||||||
{
|
|
||||||
WaitUntilRetry(httpResponse);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (httpResponse.StatusCode == HttpStatusCode.NotFound)
|
if (httpResponse.StatusCode == HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
throw new BookNotFoundException(foreignBookId);
|
throw new BookNotFoundException(foreignBookId);
|
||||||
@@ -678,9 +632,9 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
|||||||
if (httpResponse.HasHttpRedirect)
|
if (httpResponse.HasHttpRedirect)
|
||||||
{
|
{
|
||||||
var location = httpResponse.Headers.GetSingleValue("Location");
|
var location = httpResponse.Headers.GetSingleValue("Location");
|
||||||
var split = location.Split('/').Reverse().ToList();
|
var split = location.Split('/');
|
||||||
var newId = split[0];
|
var type = split[0];
|
||||||
var type = split[1];
|
var newId = split[1];
|
||||||
|
|
||||||
if (type == "author")
|
if (type == "author")
|
||||||
{
|
{
|
||||||
@@ -739,25 +693,6 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
|||||||
return Tuple.Create(authorId, book, metadata);
|
return Tuple.Create(authorId, book, metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WaitUntilRetry(HttpResponse response)
|
|
||||||
{
|
|
||||||
var seconds = 5;
|
|
||||||
|
|
||||||
if (response.Headers.ContainsKey("Retry-After"))
|
|
||||||
{
|
|
||||||
var retryAfter = response.Headers["Retry-After"];
|
|
||||||
|
|
||||||
if (!int.TryParse(retryAfter, out seconds))
|
|
||||||
{
|
|
||||||
seconds = 5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_logger.Info("BookInfo returned 429, backing off for {0}s", seconds);
|
|
||||||
|
|
||||||
Thread.Sleep(TimeSpan.FromSeconds(seconds));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static AuthorMetadata MapAuthorMetadata(AuthorResource resource)
|
private static AuthorMetadata MapAuthorMetadata(AuthorResource resource)
|
||||||
{
|
{
|
||||||
var metadata = new AuthorMetadata
|
var metadata = new AuthorMetadata
|
||||||
|
|||||||
@@ -215,20 +215,11 @@ namespace NzbDrone.Host
|
|||||||
private static IConfiguration GetConfiguration(StartupContext context)
|
private static IConfiguration GetConfiguration(StartupContext context)
|
||||||
{
|
{
|
||||||
var appFolder = new AppFolderInfo(context);
|
var appFolder = new AppFolderInfo(context);
|
||||||
var configPath = appFolder.GetConfigPath();
|
return new ConfigurationBuilder()
|
||||||
|
.AddXmlFile(appFolder.GetConfigPath(), optional: true, reloadOnChange: false)
|
||||||
try
|
.AddInMemoryCollection(new List<KeyValuePair<string, string>> { new ("dataProtectionFolder", appFolder.GetDataProtectionPath()) })
|
||||||
{
|
.AddEnvironmentVariables()
|
||||||
return new ConfigurationBuilder()
|
.Build();
|
||||||
.AddXmlFile(configPath, optional: true, reloadOnChange: false)
|
|
||||||
.AddInMemoryCollection(new List<KeyValuePair<string, string>> { new ("dataProtectionFolder", appFolder.GetDataProtectionPath()) })
|
|
||||||
.AddEnvironmentVariables()
|
|
||||||
.Build();
|
|
||||||
}
|
|
||||||
catch (InvalidDataException ex)
|
|
||||||
{
|
|
||||||
throw new InvalidConfigFileException($"{configPath} is corrupt or invalid. Please delete the config file and Readarr will recreate it.", ex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string BuildUrl(string scheme, string bindAddress, int port)
|
private static string BuildUrl(string scheme, string bindAddress, int port)
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
@@ -23,8 +22,6 @@ namespace Readarr.Api.V1.Indexers
|
|||||||
private readonly IIndexerFactory _indexerFactory;
|
private readonly IIndexerFactory _indexerFactory;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
|
|
||||||
private static readonly object PushLock = new object();
|
|
||||||
|
|
||||||
public ReleasePushController(IMakeDownloadDecision downloadDecisionMaker,
|
public ReleasePushController(IMakeDownloadDecision downloadDecisionMaker,
|
||||||
IProcessDownloadDecisions downloadDecisionProcessor,
|
IProcessDownloadDecisions downloadDecisionProcessor,
|
||||||
IIndexerFactory indexerFactory,
|
IIndexerFactory indexerFactory,
|
||||||
@@ -54,13 +51,8 @@ namespace Readarr.Api.V1.Indexers
|
|||||||
|
|
||||||
ResolveIndexer(info);
|
ResolveIndexer(info);
|
||||||
|
|
||||||
List<DownloadDecision> decisions;
|
var decisions = _downloadDecisionMaker.GetRssDecision(new List<ReleaseInfo> { info });
|
||||||
|
_downloadDecisionProcessor.ProcessDecisions(decisions);
|
||||||
lock (PushLock)
|
|
||||||
{
|
|
||||||
decisions = _downloadDecisionMaker.GetRssDecision(new List<ReleaseInfo> { info });
|
|
||||||
_downloadDecisionProcessor.ProcessDecisions(decisions);
|
|
||||||
}
|
|
||||||
|
|
||||||
var firstDecision = decisions.FirstOrDefault();
|
var firstDecision = decisions.FirstOrDefault();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user