Compare commits

...

22 Commits

Author SHA1 Message Date
Robin Dadswell
0b79d3000d Retirement announcement 2025-06-27 11:17:54 +01:00
Bogdan
0f3e716044 Fixed: Don't treat metadata errors as missing author/book entities 2025-06-16 21:36:01 +03:00
Bogdan
f53c4dc017 Fixed: Don't delete files when books are deleted from the metadata 2025-06-15 22:13:26 +03:00
Bogdan
f48eac7e36 Bump version to 0.4.19 2025-06-15 09:22:48 +03:00
Bogdan
7cc02f95af Fix filename for class 2025-06-10 13:21:32 +03:00
Bogdan
1f92bf6679 Fix fullscreen automation screenshots 2025-06-10 13:16:08 +03:00
Taloth Saldono
a8d4aa6770 Used ReflectionOnly and/or public types where possible to avoid loading related assemblies unnecessarily. 2025-06-08 10:38:03 +03:00
Bogdan
7661b5bc87 Bump version to 0.4.18 2025-06-08 10:31:09 +03:00
Weblate
200ef600cd Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Ilbebino <tommasobellandi08@gmail.com>
Co-authored-by: NanderTGA <nander.roobaert@gmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/sk/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/uk/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_Hans/
Translation: Servarr/Readarr
2025-06-07 18:16:49 +03:00
Bogdan
ad6228983b Skip failing tests 2025-06-03 11:18:20 +03:00
Servarr
582ec9f7ce Automated API Docs update 2025-06-02 00:04:28 +03:00
Taloth Saldono
525e855038 Fixed: Return remote image links for RemotePoster and RemoteCover
(cherry picked from commit 4219cdb3644f96e1e8f3178fe0a50430c1004506)

Fixes #4101
Closes #212
2025-06-01 23:55:06 +03:00
Weblate
7a629ed044 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Hugoren Martinako <aumpfbahn@gmail.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Youngzheimer <me@youngzheimer.com>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ko/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nb_NO/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt/
Translation: Servarr/Readarr
2025-05-04 21:07:53 +03:00
Bogdan
7f501322dd Bump version to 0.4.17 2025-05-04 21:07:14 +03:00
Samuel Mercer
18bca0b228 Fixed: Displayed root folder path getting truncated when adding an author with a long name 2025-05-01 13:53:47 +03:00
Bogdan
9ddac60b47 Bump version to 0.4.16 2025-04-20 09:01:31 +03:00
Bogdan
bd8bc0b35b Pass messages with arguments to NLog in LoggerExtensions 2025-04-13 13:17:00 +03:00
Bogdan
ae623f4481 Fixed: Use template for log messages in Import Books 2025-04-13 12:55:42 +03:00
Bogdan
e67d133bb6 Mark as template for log progress messages 2025-04-13 12:55:42 +03:00
Weblate
772ea95ce4 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Hugoren Martinako <aumpfbahn@gmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: fordas <fordas15@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ar/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/bg/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/cs/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/da/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/el/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/he/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/hi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/hr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/is/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ja/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ko/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nb_NO/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pl/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ro/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/ru/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/sk/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/sv/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/th/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/tr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/uk/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/vi/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_CN/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_TW/
Translation: Servarr/Readarr
2025-04-13 10:09:39 +03:00
Bogdan
5459a7bb7e Bump version to 0.4.15 2025-04-13 09:48:49 +03:00
Servarr
614f98f9b4 Automated API Docs update 2025-04-08 22:09:31 +03:00
63 changed files with 278 additions and 146 deletions

View File

@@ -1,3 +1,23 @@
# Announcement: Retirement of Readarr
We would like to announce that the [Readarr project](<https://github.com/Readarr/Readarr>) has been retired. This difficult decision was made due to a combination of factors: the project's metadata has become unusable, we no longer have the time to remake or repair it, and the community effort to transition to using Open Library as the source has stalled without much progress.
Third-party metadata mirrors exist, but as we're not involved with them at all, we cannot provide support for them. Use of them is entirely at your own risk. The most popular mirror appears to be [rreading-glasses](<https://github.com/blampe/rreading-glasses>).
Without anyone to take over Readarr development, we expect it to wither away, so we still encourage you to seek alternatives to Readarr.
## Key Points:
- **Effective Immediately**: The retirement takes effect immediately. Please stay tuned for any possible further communications.
- **Support Window**: We will provide support during a brief transition period to help with troubleshooting non metadata related issues.
- **Alternative Solutions**: Users are encouraged to explore and adopt any other possible solutions as alternatives to Readarr.
- **Opportunities for Revival**: We are open to someone taking over and revitalizing the project. If you are interested, please get in touch.
- **Gratitude**: We extend our deepest gratitude to all the contributors and community members who supported Readarr over the years.
Thank you for being part of the Readarr journey. For any inquiries or assistance during this transition, please contact our team.
Sincerely,
The Servarr Team
# Readarr
[![Build Status](https://dev.azure.com/Readarr/Readarr/_apis/build/status/Readarr.Readarr?branchName=develop)](https://dev.azure.com/Readarr/Readarr/_build/latest?definitionId=1&branchName=develop)

View File

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

View File

@@ -14,11 +14,11 @@
}
.path {
@add-mixin truncate;
flex: 0 1 auto;
}
.authorFolder {
@add-mixin truncate;
flex: 0 1 auto;
color: var(--disabledColor);
}

View File

@@ -40,15 +40,16 @@ namespace NzbDrone.Automation.Test
var service = ChromeDriverService.CreateDefaultService();
// Timeout as windows automation tests seem to take alot longer to get going
driver = new ChromeDriver(service, options, new TimeSpan(0, 3, 0));
driver = new ChromeDriver(service, options, TimeSpan.FromMinutes(3));
driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);
driver.Manage().Window.FullScreen();
_runner = new NzbDroneRunner(LogManager.GetCurrentClassLogger(), null);
_runner.KillAll();
_runner.Start(true);
driver.Url = "http://localhost:8787";
driver.Navigate().GoToUrl("http://localhost:8787");
var page = new PageBase(driver);
page.WaitForNoSpinner();
@@ -68,7 +69,7 @@ namespace NzbDrone.Automation.Test
{
try
{
var image = ((ITakesScreenshot)driver).GetScreenshot();
var image = (driver as ITakesScreenshot).GetScreenshot();
image.SaveAsFile($"./{name}_test_screenshot.png", ScreenshotImageFormat.Png);
}
catch (Exception ex)

View File

@@ -1,19 +1,17 @@
using System;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
namespace NzbDrone.Automation.Test.PageModel
{
public class PageBase
{
private readonly RemoteWebDriver _driver;
private readonly IWebDriver _driver;
public PageBase(RemoteWebDriver driver)
public PageBase(IWebDriver driver)
{
_driver = driver;
driver.Manage().Window.Maximize();
}
public IWebElement FindByClass(string className, int timeout = 5)

View File

@@ -4,27 +4,27 @@ namespace NzbDrone.Common.Instrumentation.Extensions
{
public static class LoggerExtensions
{
[MessageTemplateFormatMethod("message")]
public static void ProgressInfo(this Logger logger, string message, params object[] args)
{
var formattedMessage = string.Format(message, args);
LogProgressMessage(logger, LogLevel.Info, formattedMessage);
LogProgressMessage(logger, LogLevel.Info, message, args);
}
[MessageTemplateFormatMethod("message")]
public static void ProgressDebug(this Logger logger, string message, params object[] args)
{
var formattedMessage = string.Format(message, args);
LogProgressMessage(logger, LogLevel.Debug, formattedMessage);
LogProgressMessage(logger, LogLevel.Debug, message, args);
}
[MessageTemplateFormatMethod("message")]
public static void ProgressTrace(this Logger logger, string message, params object[] args)
{
var formattedMessage = string.Format(message, args);
LogProgressMessage(logger, LogLevel.Trace, formattedMessage);
LogProgressMessage(logger, LogLevel.Trace, message, args);
}
private static void LogProgressMessage(Logger logger, LogLevel level, string message)
private static void LogProgressMessage(Logger logger, LogLevel level, string message, object[] parameters)
{
var logEvent = new LogEventInfo(level, logger.Name, message);
var logEvent = new LogEventInfo(level, logger.Name, null, message, parameters);
logEvent.Properties.Add("Status", "");
logger.Log(logEvent);

View File

@@ -17,7 +17,7 @@ namespace NzbDrone.Common.Reflection
public static List<Type> ImplementationsOf<T>(this Assembly assembly)
{
return assembly.GetTypes().Where(c => typeof(T).IsAssignableFrom(c)).ToList();
return assembly.GetExportedTypes().Where(c => typeof(T).IsAssignableFrom(c)).ToList();
}
public static bool IsSimpleType(this Type type)
@@ -68,7 +68,7 @@ namespace NzbDrone.Common.Reflection
public static Type FindTypeByName(this Assembly assembly, string name)
{
return assembly.GetTypes().SingleOrDefault(c => c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
return assembly.GetExportedTypes().SingleOrDefault(c => c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
}
public static bool HasAttribute<TAttribute>(this Type type)

View File

@@ -13,7 +13,7 @@ using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2026-01-15 00:00:00Z")]
public class BookInfoProxyFixture : CoreTest<BookInfoProxy>
{
private MetadataProfile _metadataProfile;

View File

@@ -15,7 +15,7 @@ using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2026-01-15 00:00:00Z")]
public class BookInfoProxySearchFixture : CoreTest<BookInfoProxy>
{
[SetUp]

View File

@@ -222,7 +222,7 @@ namespace NzbDrone.Core.Books
protected override void DeleteEntity(Author local, bool deleteFiles)
{
_authorService.DeleteAuthor(local.Id, true);
_authorService.DeleteAuthor(local.Id, deleteFiles);
}
protected override List<Book> GetRemoteChildren(Author local, Author remote)

View File

@@ -239,7 +239,7 @@ namespace NzbDrone.Core.Books
protected override void DeleteEntity(Book local, bool deleteFiles)
{
_bookService.DeleteBook(local.Id, true);
_bookService.DeleteBook(local.Id, deleteFiles);
}
protected override List<Edition> GetRemoteChildren(Book local, Book remote)

View File

@@ -126,7 +126,7 @@ namespace NzbDrone.Core.Books
if (ShouldDelete(local))
{
_logger.Warn($"{typeof(TEntity).Name} {local} not found in metadata and is being deleted");
DeleteEntity(local, true);
DeleteEntity(local, false);
return false;
}
else

View File

@@ -40,6 +40,7 @@ namespace NzbDrone.Core.Datastore
Environment.SetEnvironmentVariable("No_Expand", "true");
Environment.SetEnvironmentVariable("No_SQLiteXmlConfigFile", "true");
Environment.SetEnvironmentVariable("No_PreLoadSQLite", "true");
Environment.SetEnvironmentVariable("No_SQLiteFunctions", "true");
}
public DbFactory(IMigrationController migrationController,

View File

@@ -653,5 +653,7 @@
"UnmappedFiles": "المجلدات غير المعينة",
"UpdateAppDirectlyLoadError": "تعذر تحديث {appName} مباشرة ،",
"Clone": "قريب",
"BuiltIn": "مدمج"
"BuiltIn": "مدمج",
"AddNewAuthorRootFolderHelpText": "سيتم إنشاء المجلد الفرعي \"{folder}\" تلقائيًا",
"AddRootFolder": "إضافة مجلد جذر"
}

View File

@@ -695,5 +695,7 @@
"AuthenticationRequired": "Изисква се удостоверяване",
"AuthenticationRequiredPasswordHelpTextWarning": "Въведете нова парола",
"ApplyChanges": "Прилагане на промените",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Потвърдете новата парола"
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Потвърдете новата парола",
"AddNewAuthorRootFolderHelpText": "Подпапката „{0}“ ще бъде създадена автоматично",
"AddRootFolder": "Добавяне на коренна папка"
}

View File

@@ -242,7 +242,7 @@
"PackageVersion": "Versió del paquet",
"PageSize": "Mida de la pàgina",
"PageSizeHelpText": "Nombre d'elements per mostrar a cada pàgina",
"Proper": "Proper",
"Proper": "Correcte",
"ProxyBypassFilterHelpText": "Utilitzeu ',' com a separador i '*.' com a comodí per als subdominis",
"ProxyCheckBadRequestMessage": "No s'ha pogut provar el servidor intermediari. Codi d'estat: {0}",
"ProxyCheckFailedToTestMessage": "No s'ha pogut provar el servidor intermediari: {0}",
@@ -336,7 +336,7 @@
"IgnoredAddresses": "Adreces ignorades",
"IgnoredPlaceHolder": "Afegeix una nova restricció",
"ImportExtraFiles": "Importa fitxers addicionals",
"ImportFailedInterp": "ImportFailedInterp",
"ImportFailedInterp": "Importació fallida: {0}",
"IncludeHealthWarningsHelpText": "Inclou advertències de salut",
"NotificationTriggers": "Activadors de notificacions",
"NoUpdatesAreAvailable": "No hi ha actualitzacions disponibles",
@@ -462,7 +462,7 @@
"IsTagUsedCannotBeDeletedWhileInUse": "No es pot suprimir mentre està en ús",
"LaunchBrowserHelpText": " Obriu un navegador web i navegueu a la pàgina d'inici de Readarr a l'inici de l'aplicació.",
"LoadingBookFilesFailed": "No s'han pogut carregar els fitxers de pel·lícules",
"NoHistory": "Sense història",
"NoHistory": "Sense història.",
"OnBookFileDeleteForUpgradeHelpText": "Al suprimir el fitxer de pel·lícula per a l'actualització",
"OnBookFileDeleteHelpText": "Al suprimir fitxer de pel·lícula",
"ReleaseBranchCheckOfficialBranchMessage": "La branca {0} no és una branca de llançament de Readarr vàlida, no rebreu actualitzacions",
@@ -498,7 +498,7 @@
"SorryThatBookCannotBeFound": "Ho sentim, aquesta pel·lícula no s'ha trobat.",
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "S'utilitzarà quan s'utilitzi la cerca interactiva",
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Això s'aplicarà a tots els indexadors, si us plau, seguiu les regles establertes per ells",
"UnableToLoadHistory": "No es pot carregar l'historial",
"UnableToLoadHistory": "No es pot carregar l'historial.",
"IconTooltip": "Programat",
"ReadarrTags": "Etiquetes de Readarr",
"DownloadPropersAndRepacksHelpTexts1": "Si s'ha d'actualitzar automàticament o no a Propers/Repacks",
@@ -531,7 +531,7 @@
"ImportExtraFilesHelpText": "Importeu fitxers addicionals coincidents (subtítols, nfo, etc.) després d'importar un fitxer de pel·lícula",
"ImportListExclusions": "Suprimeix l'exclusió de la llista d'importació",
"LongDateFormat": "Format de data llarga",
"MaximumSizeHelpText": "Mida màxima per a una versió que es pot capturar en MB. Establiu a zero per establir-lo en il·limitat",
"MaximumSizeHelpText": "Mida màxima per a una versió que es pot capturar en MB. Establiu a zero per establir-lo en il·limitat,",
"MetadataProfile": "perfil de metadades",
"MetadataProfiles": "perfil de metadades",
"OnBookFileDelete": "Al suprimir fitxer de pel·lícula",
@@ -729,7 +729,7 @@
"NextExecution": "Propera execució",
"RemoveCompleted": "S'ha eliminat",
"SelectReleaseGroup": "Seleccioneu grup de llançament",
"CountDownloadClientsSelected": "{count} client(s) de baixada seleccionat(s)",
"CountDownloadClientsSelected": "{selectedCount} client(s) de baixada seleccionat(s)",
"Authors": "Autor",
"FreeSpace": "Espai lliure",
"ExtraFileExtensionsHelpText": "Llista separada per comes de fitxers addicionals per importar (.nfo s'importarà com a .nfo-orig)",
@@ -740,7 +740,7 @@
"RemoveFailed": "Ha fallat l'eliminació",
"ImportLists": "llista d'importació",
"RemovingTag": "S'està eliminant l'etiqueta",
"ApiKeyValidationHealthCheckMessage": "Actualitzeu la vostra clau de l'API perquè tingui almenys {length} caràcters. Podeu fer-ho mitjançant la configuració o el fitxer de configuració",
"ApiKeyValidationHealthCheckMessage": "Actualitzeu la vostra clau de l'API perquè tingui almenys {0} caràcters. Podeu fer-ho mitjançant la configuració o el fitxer de configuració",
"ExtraFileExtensionsHelpTextsExamples": "Exemples: '.sub, .nfo' o 'sub,nfo'",
"SourceTitle": "Títol de la font",
"NoEventsFound": "No s'han trobat esdeveniments",
@@ -752,7 +752,7 @@
"StatusEndedContinuing": "Continua",
"DeleteBookFileMessageText": "Esteu segur que voleu suprimir '{0}'?",
"DownloadClientTagHelpText": "Utilitzeu aquest indexador només per a pel·lícules amb almenys una etiqueta coincident. Deixeu-ho en blanc per utilitzar-ho amb totes les pel·lícules.",
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El client de baixada {downloadClientName} està configurat per eliminar les baixades completades. Això pot provocar que les baixades s'eliminin del vostre client abans que {1} pugui importar-les.",
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El client de baixada {0} està configurat per eliminar les baixades completades. Això pot provocar que les baixades s'eliminin del vostre client abans que {1} pugui importar-les.",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Cerqueu i intenteu baixar automàticament una versió diferent quan es trobi una versió fallida a la cerca interactiva",
"FailedLoadingSearchResults": "No s'han pogut carregar els resultats de la cerca, torneu-ho a provar.",
"IndexerFlags": "Indicadors de l'indexador",
@@ -1117,5 +1117,10 @@
"AllowFingerprintingHelpText": "Utilitza l'empremta digital per millorar la precisió de la coincidència de llibres",
"ExistingTagsScrubbed": "Etiquetes existents rastrejades",
"NETCore": ".NET Core",
"WriteMetadataTags": "Escriu les etiquetes de les metadades"
"WriteMetadataTags": "Escriu les etiquetes de les metadades",
"AddNewAuthorRootFolderHelpText": "La subcarpeta '{folder}' es crearà automàticament",
"AddRootFolder": "Afegeix una carpeta arrel",
"Book": "Llibre",
"AddNewBook": "Afegeix nou llibre",
"AddNewAuthor": "Afegeix nou autor"
}

View File

@@ -758,5 +758,7 @@
"NoCutoffUnmetItems": "Žádné neodpovídající nesplněné položky",
"DownloadClientDelugeSettingsDirectoryCompleted": "Adresář kam přesunout po dokončení",
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Nepovinné - umístění kam přesunout dokončená stahování, pokud ponecháte prázné, použije se výchozí umístění Deluge",
"DownloadClientDelugeSettingsDirectoryHelpText": "Nepovinné - umístění stahovaných souborů, pokud ponecháte prázné, použije se výchozí umístění Deluge"
"DownloadClientDelugeSettingsDirectoryHelpText": "Nepovinné - umístění stahovaných souborů, pokud ponecháte prázné, použije se výchozí umístění Deluge",
"AddNewAuthorRootFolderHelpText": "Podsložka '{folder}' bude vytvořena automaticky",
"AddRootFolder": "Přidat kořenový adresář"
}

View File

@@ -671,5 +671,7 @@
"OnLatestVersion": "Den seneste version af {appName} er allerede installeret",
"WouldYouLikeToRestoreBackup": "Vil du gendanne sikkerhedskopien »{name}«?",
"MetadataProfile": "metadataprofil",
"Unknown": "Ukendt"
"Unknown": "Ukendt",
"AddRootFolder": "Tilføj rodmappe",
"AddNewAuthorRootFolderHelpText": "Undermappen '{0}' oprettes automatisk"
}

View File

@@ -1118,5 +1118,7 @@
"SelectBook": "Buch auswählen",
"SelectEdition": "Wähle Edition",
"LastSearched": "Letzte Suche",
"Unknown": "Unbekannt"
"Unknown": "Unbekannt",
"AddRootFolder": "Stammverzeichnis hinzufügen",
"AddNewAuthorRootFolderHelpText": "'{folder}' Unterordner wird automatisch erstellt werden"
}

View File

@@ -1020,5 +1020,7 @@
"Script": "Γραφή",
"UpdateAppDirectlyLoadError": "Δεν είναι δυνατή η απευθείας ενημέρωση του {appName},",
"ExternalUpdater": "Το {appName} έχει ρυθμιστεί να χρησιμοποιεί έναν εξωτερικό μηχανισμό ενημέρωσης",
"InstallLatest": "Εγκατάσταση πιο πρόσφατου"
"InstallLatest": "Εγκατάσταση πιο πρόσφατου",
"AddNewAuthorRootFolderHelpText": "Ο υποφάκελος \"{0}\" θα δημιουργηθεί αυτόματα",
"AddRootFolder": "Προσθήκη φακέλου ρίζας"
}

View File

@@ -237,7 +237,7 @@
"PosterSize": "Tamaño de póster",
"PreviewRename": "Previsualizar renombrado",
"Profiles": "Perfiles",
"Proper": "Proper",
"Proper": "Correcto",
"PropersAndRepacks": "Propers y Repacks",
"Protocol": "Protocolo",
"ProtocolHelpText": "Elige qué protocolo(s) usar y cuál se prefiere cuando se elige entre lanzamientos equivalentes",
@@ -564,7 +564,7 @@
"Label": "Etiqueta",
"MissingFromDisk": "Readarr no pudo encontrar el archivo en el disco, por lo que el archivo fue desvinculado del libro en la base de datos",
"RemotePathMappingCheckDownloadPermissions": "Readarr puede ver pero no acceder al libro descargado {0}. Probablemente sea un error de permisos.",
"RemotePathMappingCheckFolderPermissions": "Readarr puede ver pero no acceder al directorio de descarga {0}. Probablemente sea un error de permisos.",
"RemotePathMappingCheckFolderPermissions": "Readarr puede ver pero no acceder al directorio de descarga {1}. Probablemente sea un error de permisos.",
"RemotePathMappingCheckFilesGenericPermissions": "El cliente de descarga {0} informó de la existencia de archivos en {1} pero Readarr no puede ver este directorio. Puede que tengas que ajustar los permisos de la carpeta.",
"RemotePathMappingCheckGenericPermissions": "El cliente de descarga {0} coloca las descargas en {1} pero Readarr no puede ver este directorio. Puede que tengas que ajustar los permisos de la carpeta.",
"RemotePathMappingCheckImportFailed": "Readarr falló al importar un libro. Comprueba tus registros para más detalles.",
@@ -855,13 +855,13 @@
"NotificationsSettingsUseSslHelpText": "Conectar a {serviceName} sobre HTTPS en vez de HTTP",
"Rejections": "Rechazados",
"SelectIndexerFlags": "Seleccionar indicadores del indexador",
"RecycleBinUnableToWriteHealthCheck": "No se pudo escribir en la carpeta configurada de la papelera de reciclaje: {path}. Asegúrate de que esta ruta existe y es modificable por el usuario que ejecuta {appName}",
"RecycleBinUnableToWriteHealthCheck": "No se pudo escribir en la carpeta configurada de la papelera de reciclaje: {0}. Asegúrate de que esta ruta existe y es modificable por el usuario que ejecuta Readarr",
"SearchForAllMissingBooks": "Buscar todos los episodios perdidos",
"IndexerIdHelpText": "Especifica a qué indexador se aplica el perfil",
"ProfilesSettingsSummary": "Perfiles de calidad, de retraso de idioma y de lanzamiento",
"DataExistingBooks": "Monitoriza libros que no tienen archivos o que no se han lanzado aún",
"MonitoredAuthorIsMonitored": "El artista no está vigilado",
"RemotePathMappingsInfo": "Los mapeos de ruta remota son muy raramente solicitados, si {appName} y tu cliente de descarga están en el mismo sistema es mejor coincidir sus rutas. Para más información consulta la [wiki]({wikiLink}).",
"RemotePathMappingsInfo": "Los mapeos de ruta remota son muy raramente requeridos, si {app} y tu cliente de descarga están en el mismo sistema es mejor coincidir sus rutas. Para más información consulta la [wiki]({wikiLink}).",
"ShowBannersHelpText": "Muestra carteles en lugar de nombres",
"DefaultTagsHelpText": "Etiquetas predeterminadas de Readarr para los autores detectados en esta carpeta",
"UseSSL": "Usar SSL",
@@ -1118,5 +1118,9 @@
"InstallMajorVersionUpdateMessage": "Esta actualización instalará una nueva versión principal y podría no ser compatible con tu sistema. ¿Estás seguro que quieres instalar esta actualización?",
"InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información.",
"LastSearched": "Último buscado",
"Unknown": "Desconocido"
"Unknown": "Desconocido",
"AddNewBook": "Añadir Nuevo Libro",
"AddNewAuthor": "Añadir Nuevo Autor",
"AddNewAuthorRootFolderHelpText": "La subcarpeta '{folder}' será creada automáticamente",
"AddRootFolder": "Añadir Carpeta Raíz"
}

View File

@@ -1118,5 +1118,9 @@
"DownloadPropersAndRepacksHelpTexts2": "\"Älä suosi\" käyttää Proper-/Repack-julkaisujen sijaan haluttua sanapisteytystä.",
"IgnoreDeletedBooks": "Ohita poistetut kirjat",
"LastSearched": "Edellinen haku",
"Unknown": "Tuntematon"
"Unknown": "Tuntematon",
"AddNewAuthorRootFolderHelpText": "Alikansio \"{folder}\" luodaan automaattisesti.",
"AddRootFolder": "Lisää juurikansio",
"AddNewBook": "Lisää uusi kirja",
"AddNewAuthor": "Lisää uusi kirjailija"
}

View File

@@ -1118,5 +1118,7 @@
"UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName},",
"InstallMajorVersionUpdateMessage": "Cette mise à jour installera une nouvelle version majeure et pourrait ne pas être compatible avec votre système. Êtes-vous sûr de vouloir installer cette mise à jour ?",
"LastSearched": "Dernière recherche",
"Unknown": "Inconnu"
"Unknown": "Inconnu",
"AddNewAuthorRootFolderHelpText": "Le sous-dossier « {folder} » sera créé automatiquement",
"AddRootFolder": "Ajouter un dossier racine"
}

View File

@@ -687,5 +687,7 @@
"Script": "תַסרִיט",
"UnmappedFiles": "תיקיות לא ממופות",
"UpdateAppDirectlyLoadError": "לא ניתן לעדכן את {appName} ישירות,",
"Clone": "סגור"
"Clone": "סגור",
"AddNewAuthorRootFolderHelpText": "תיקיית המשנה '{0}' תיווצר באופן אוטומטי",
"AddRootFolder": "הוסף תיקיית שורש"
}

View File

@@ -650,5 +650,7 @@
"OnLatestVersion": "रेडर का नवीनतम संस्करण पहले से ही स्थापित है",
"Script": "लिपि",
"UpdateAppDirectlyLoadError": "सीधे {appName} अद्यतन करने में असमर्थ,",
"Clone": "बंद करे"
"Clone": "बंद करे",
"AddNewAuthorRootFolderHelpText": "'{0}' सबफ़ोल्डर स्वचालित रूप से बनाया जाएगा",
"AddRootFolder": "रूट फ़ोल्डर जोड़ें"
}

View File

@@ -229,5 +229,6 @@
"DeleteSelectedBookFilesMessageText": "Jeste li sigurni da želite obrisati ovaj profil odgode?",
"Clone": "Zatvori",
"BuiltIn": "Ugrađeno",
"AptUpdater": "Koristi apt kako bi instalirao ažuriranje"
"AptUpdater": "Koristi apt kako bi instalirao ažuriranje",
"AddRootFolder": "Dodaj Korijensku Mapu"
}

View File

@@ -1085,5 +1085,7 @@
"PreviouslyInstalled": "Korábban telepítve",
"Script": "Szkript",
"UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t",
"Unknown": "Ismeretlen"
"Unknown": "Ismeretlen",
"AddNewAuthorRootFolderHelpText": "A „{folder}” almappa automatikusan létrejön",
"AddRootFolder": "Gyökérmappa hozzáadása"
}

View File

@@ -652,5 +652,7 @@
"OnLatestVersion": "Nýjasta útgáfan af {appName} er þegar uppsett",
"Script": "Handrit",
"UnmappedFiles": "Ókortlagðar möppur",
"UpdateAppDirectlyLoadError": "Ekki er hægt að uppfæra {appName} beint,"
"UpdateAppDirectlyLoadError": "Ekki er hægt að uppfæra {appName} beint,",
"AddNewAuthorRootFolderHelpText": "„{0}“ undirmöppan verður búin til sjálfkrafa",
"AddRootFolder": "Bæta við rótarmöppu"
}

View File

@@ -725,7 +725,7 @@
"AppUpdated": "{appName} Aggiornato",
"AllResultsAreHiddenByTheAppliedFilter": "Tutti i risultati sono nascosti dal filtro applicato",
"AutoRedownloadFailed": "Download fallito",
"AddListExclusion": "Aggiungi elenco esclusioni",
"AddListExclusion": "Aggiungi lista esclusioni",
"Location": "Posizione",
"ListsSettingsSummary": "Liste",
"RecentChanges": "Cambiamenti Recenti",
@@ -913,5 +913,9 @@
"UpdateAppDirectlyLoadError": "Impossibile aggiornare {appName} direttamente,",
"AutoRedownloadFailedFromInteractiveSearch": "Riesecuzione del download non riuscita dalla ricerca interattiva",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Cerca automaticamente e tenta di scaricare una versione diversa quando il rilascio non riuscito è stato acquisito dalla ricerca interattiva",
"Unknown": "Sconosciuto"
"Unknown": "Sconosciuto",
"AddNewAuthorRootFolderHelpText": "La sottocartella '{0}' verrà creata automaticamente",
"AddRootFolder": "Aggiungi Cartella Radice",
"AddNewBook": "Aggiungi nuovo libro",
"AddNewAuthor": "Aggiungi nuovo autore"
}

View File

@@ -651,5 +651,7 @@
"CurrentlyInstalled": "現在インストール中",
"DockerUpdater": "Dockerコンテナを更新して、更新を受信します",
"ExternalUpdater": "{appName}は、外部更新メカニズムを使用するように構成されています",
"OnLatestVersion": "{appName}の最新バージョンはすでにインストールされています"
"OnLatestVersion": "{appName}の最新バージョンはすでにインストールされています",
"AddRootFolder": "ルートフォルダを追加する",
"AddNewAuthorRootFolderHelpText": "'{0}'サブフォルダは自動的に作成されます"
}

View File

@@ -4,8 +4,8 @@
"AlternateTitles": "대체 제목",
"Analytics": "해석학",
"DownloadPropersAndRepacksHelpTexts1": "Propers / Repacks로 자동 업그레이드할지 여부",
"20MinutesTwenty": "120 분 : {0}",
"45MinutesFourtyFive": "60 분 : {0}",
"20MinutesTwenty": "20분 : {0}",
"45MinutesFourtyFive": "45분 : {0}",
"ChownGroupHelpText": "그룹 이름 또는 gid. 원격 파일 시스템에 gid를 사용하십시오.",
"DeleteReleaseProfile": "지연 프로필 삭제",
"DeleteIndexer": "인덱서 삭제",
@@ -780,5 +780,7 @@
"NotificationsSettingsUpdateMapPathsTo": "지도 경로",
"Series": "시리즈",
"IgnoreDownloadsHint": "{appName}가 이러한 다운로드를 더 이상 처리하지 않도록 중지합니다",
"InstallMajorVersionUpdateMessageLink": "상세 내용은 [{domain}]({url})을 확인하세요."
"InstallMajorVersionUpdateMessageLink": "상세 내용은 [{domain}]({url})을 확인하세요.",
"AddNewAuthorRootFolderHelpText": "'{folder}' 하위 폴더가 자동으로 생성됩니다",
"AddRootFolder": "루트 폴더 추가"
}

View File

@@ -206,5 +206,8 @@
"FailedLoadingSearchResults": "Kunne ikke laste søkeresultat, vennligst prøv igjen.",
"IgnoredPlaceHolder": "Legg til ny begrensning",
"RequiredPlaceHolder": "Legg til ny begrensning",
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Kunne ikke legge til ny ekstern stimapping, vennligst prøv igjen."
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Kunne ikke legge til ny ekstern stimapping, vennligst prøv igjen.",
"AddNewAuthorRootFolderHelpText": "Undermappa \"{folder}\" vil bli automatisk laget",
"AddRootFolder": "Legg til rotmappe",
"History": "Historikk"
}

View File

@@ -50,22 +50,22 @@
"ChangeHasNotBeenSavedYet": "Wijziging is nog niet opgeslagen",
"ChmodFolder": "chmod Map",
"ChmodFolderHelpText": "Octaal, toegepast tijdens importeren/hernoemen op media mappen en bestanden (zonder uitvoeringsbits)",
"ChmodFolderHelpTextWarning": "Dit werkt alleen als de gebruiker die {appName} draait de eigenaar is van het bestand. Het is beter om zeker te zijn dat de downloader de juiste rechten zet.",
"ChownGroupHelpText": "Groep naam of gid. Gebruik gid voor externe bestandssystemen.",
"ChownGroupHelpTextWarning": "Dit werkt alleen als de gebruiker die {appName} draait de eigenaar is van het bestand. Het is beter om zeker te zijn dat de downloader dezelfde groep gebruikt als {appName}.",
"ChmodFolderHelpTextWarning": "Dit werkt alleen als de gebruiker die {appName} uitvoert de eigenaar is van het bestand. Het is beter om ervoor te zorgen dat de downloadclient de juiste rechten instelt.",
"ChownGroupHelpText": "Groepsnaam of gid. Gebruik gid voor externe bestandssystemen.",
"ChownGroupHelpTextWarning": "Dit werkt alleen als de gebruiker die {appName} uitvoert de eigenaar is van het bestand. Het is beter om ervoor te zorgen dat de downloadclient dezelfde groep gebruikt als {appName}.",
"Clear": "Wis",
"ClickToChangeQuality": "Klik om kwaliteit te wijzigen",
"ClientPriority": "Client Prioriteit",
"CloneIndexer": "Dupliceer Indexeerder",
"CloneProfile": "Dupliceer Profiel",
"Close": "Sluit",
"ClientPriority": "Prioriteit Client",
"CloneIndexer": "Indexeerder Dupliceren",
"CloneProfile": "Profiel Dupliceren",
"Close": "Sluiten",
"Columns": "Kolommen",
"CompletedDownloadHandling": "Voltooide Download Afhandeling",
"ConnectSettings": "Connecties Instellingen",
"Connections": "Connecties",
"CopyUsingHardlinksHelpText": "Gebruik hardlinks bij het kopiëren van torrent bestanden die nog actief zijn",
"CopyUsingHardlinksHelpTextWarning": "Sporadisch kan bestandsvergrendeling het hernoemen van in gebruik zijnde bestanden blokkeren. Als noodoplossing kunt u de hernoem functie van {appName} gebruiken na het opheffen van de bestandsvergrendeling.",
"CreateEmptyAuthorFoldersHelpText": "Film mappen aanmaken voor ontbrekende films tijdens schijfscan",
"CompletedDownloadHandling": "Afhandeling Voltooide Downloads",
"ConnectSettings": "Instellingen Verbindingen",
"Connections": "Verbindingen",
"CopyUsingHardlinksHelpText": "Hardlinks staan {appName} toe om torrents te importeren die nog actief zijn zonder extra opslag in beslag te nemen of het volledige bestand te kopiëren. Hardlinks werken alleen maar als de bron en de bestemming zich op hetzelfde opslagvolume bevinden",
"CopyUsingHardlinksHelpTextWarning": "Sporadisch kan bestandsvergrendeling het hernoemen van bestanden blokkeren die geseed worden. Als tijdelijke oplossing kan u seeden uitzetten en de hernoemfunctie van {appName} gebruiken.",
"CreateEmptyAuthorFoldersHelpText": "Ontbrekende auteursmappen aanmaken tijdens schijfscan",
"CreateGroup": "Groep aanmaken",
"CutoffHelpText": "Wanneer deze kwaliteit is behaald, zal {appName} niet langer films downloaden",
"CutoffUnmet": "Onbereikte Drempel",
@@ -104,7 +104,7 @@
"DetailedProgressBarHelpText": "Toon tekst op voortgangsbalk",
"DiskSpace": "Schijfruimte",
"Docker": "Docker",
"DownloadClient": "Downloader",
"DownloadClient": "Downloadclient",
"DownloadClientSettings": "Downloader Instellingen",
"DownloadClients": "Downloaders",
"DownloadFailedCheckDownloadClientForMoreDetails": "Download mislukt: controleer de downloader voor meer details",
@@ -435,7 +435,7 @@
"ProxyPasswordHelpText": "Je moet alleen een gebruikersnaam en wachtwoord ingeven als dit vereist is, laat ze anders leeg.",
"SslCertPathHelpTextWarning": "Herstarten vereist om in werking te treden",
"UnableToLoadMetadataProfiles": "Vertragingsprofielen kunnen niet worden geladen",
"DownloadClientCheckDownloadingToRoot": "Downloadclient {0} plaatst downloads in de hoofdmap {1}. U mag niet naar een hoofdmap downloaden.",
"DownloadClientCheckDownloadingToRoot": "Downloadclient {0} plaatst downloads in de hoofdmap {1}. Het wordt afgeraden om naar een hoofdmap downloaden.",
"MaintenanceRelease": "Onderhoudsuitgave",
"Actions": "Acties",
"Tomorrow": "Morgen",
@@ -493,7 +493,7 @@
"MissingFromDisk": "{appName} kon het bestand niet vinden op de schijf dus werd het verwijderd",
"Disabled": "Uitgeschakeld",
"IndexerPriorityHelpText": "Indexeerder Prioriteit van 1 (Hoogste) tot 50 (Laagste). Standaard: 25.",
"ConnectSettingsSummary": "Notificaties, connecties met media servers/spelers en scripts",
"ConnectSettingsSummary": "Meldingen, verbindingen met mediaservers/spelers en scripts",
"DownloadClientCheckNoneAvailableMessage": "Er is geen downloader beschikbaar",
"DownloadClientCheckUnableToCommunicateMessage": "Niet in staat om te communiceren met {0}.",
"IndexersSettingsSummary": "Indexeerders en uitgave restricties",
@@ -559,7 +559,7 @@
"OnBookFileDeleteHelpText": "Op filmbestand verwijderen",
"UpdateCheckStartupTranslocationMessage": "Kan de update niet installeren omdat de map '{0}' zich in een 'App Translocation' map bevindt.",
"WriteTagsNo": "Nooit",
"Connect": "Connecties",
"Connect": "Verbindingen",
"General": "Algemeen",
"Lists": "Lijsten",
"ProxyCheckBadRequestMessage": "Testen van proxy is mislukt. Statuscode: {0}",
@@ -568,7 +568,7 @@
"TimeLeft": "Resterende Tijd",
"UpdateCheckStartupNotWritableMessage": "Kan de update niet installeren omdat de map '{0}' niet schrijfbaar is voor de gebruiker '{1}'.",
"CouldntFindAnyResultsForTerm": "Kon geen resultaten vinden voor '{0}'",
"CreateEmptyAuthorFolders": "Lege film mappen aanmaken",
"CreateEmptyAuthorFolders": "Lege auteursmappen aanmaken",
"FileWasDeletedByViaUI": "File werd verwijderd via de UI",
"RestartRequiredHelpTextWarning": "Herstarten vereist om in werking te treden",
"AddList": "Lijst Toevoegen",
@@ -588,16 +588,16 @@
"ApplicationUrlHelpText": "De externe URL van deze applicatie inclusief http(s)://,Port en URL base",
"ImportListExclusions": "Verwijder van Uitzonderingenlijst",
"MetadataProfile": "Metadata profiel toevoegen",
"ChooseImportMethod": "Kies Importmodus",
"ClickToChangeReleaseGroup": "Klik om de releasegroep te wijzigen",
"ChooseImportMethod": "Kies Importmethode",
"ClickToChangeReleaseGroup": "Klik om de uitgavegroep te wijzigen",
"HardlinkCopyFiles": "Hardlink/Kopieer Bestanden",
"OnApplicationUpdate": "Bij applicatie update",
"MoveFiles": "Verplaats Bestanden",
"OnApplicationUpdateHelpText": "Bij applicatie update",
"BypassIfHighestQuality": "Omzeilen indien de hoogste kwaliteit",
"CustomFormatScore": "Eigen Formaat Score",
"CustomFormatScore": "Aangepaste Formaatscore",
"MinimumCustomFormatScore": "Minimum Eigen Formaat Score",
"Conditions": "Condities",
"Conditions": "Voorwaarden",
"DeleteCustomFormat": "Verwijder Eigen Formaat",
"DeleteCustomFormatMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
"DeleteFormatMessageText": "Weet je zeker dat je formaat tag {0} wilt verwijderen?",
@@ -607,12 +607,12 @@
"NegateHelpText": "Indien aangevinkt, zal het eigen formaat niet worden toegepast indien deze {0} conditie overeenstemt.",
"UnableToLoadCustomFormats": "Eigen formaten kunnen niet worden geladen",
"UpgradesAllowed": "Upgrades toegestaan",
"CloneCustomFormat": "Dupliceer Eigen Formaat",
"CopyToClipboard": "Kopieer naar Klembord",
"CustomFormat": "Eigen Formaat",
"CustomFormatSettings": "Eigen Formaten Instellingen",
"CustomFormats": "Eigen Formaten",
"CutoffFormatScoreHelpText": "Wanneer deze eigen formaat score is behaald, zal {appName} niet langer films downloaden",
"CloneCustomFormat": "Aangepast Formaat Dupliceren",
"CopyToClipboard": "Kopiëren naar klembord",
"CustomFormat": "Aangepast Formaat",
"CustomFormatSettings": "Aangepaste Formaatinstellingen",
"CustomFormats": "Aangepaste Formaten",
"CutoffFormatScoreHelpText": "Wanneer deze aangepaste formaatscore is behaald, zal {appName} niet langer boeken downloaden",
"IncludeCustomFormatWhenRenamingHelpText": "Voeg toe aan het {Eigen Formaten} hernoemingsformaat",
"ImportListMissingRoot": "Ontbrekende hoofdmap voor importlijst(en): {0}",
"ImportListMultipleMissingRoots": "Er ontbreken meerdere hoofdmappen voor importlijsten: {0}",
@@ -635,7 +635,7 @@
"ResetTitles": "Reset titels",
"ApplyTagsHelpTextHowToApplyIndexers": "Hoe tags toepassen op de geselecteerde indexeerders",
"AutomaticAdd": "Automatisch Toevoegen",
"CloneCondition": "Kloon Conditie",
"CloneCondition": "Voorwaarde dupliceren",
"ApplyTagsHelpTextHowToApplyImportLists": "Hoe tags toepassen op de geselecteerde import lijsten",
"ApplyChanges": "Pas Wijzigingen Toe",
"ApplyTagsHelpTextAdd": "Toevoegen: Voeg de tags toe aan de bestaande tag lijst",
@@ -662,7 +662,7 @@
"No": "Nee",
"NoChange": "Geen Wijziging",
"ApplyTagsHelpTextHowToApplyAuthors": "Hoe tags toe te passen op de geselecteerd films",
"CountDownloadClientsSelected": "{count} download client(s) geselecteerd",
"CountDownloadClientsSelected": "{selectedCount} downloadclient(s) geselecteerd",
"DeleteConditionMessageText": "Bent u zeker dat u de lijst '{name}' wilt verwijderen?",
"FreeSpace": "Vrije Ruimte",
"ImportLists": "importlijst",
@@ -685,7 +685,7 @@
"RemoveSelectedItem": "Verwijder geselecteerde item",
"DeleteSelectedIndexers": "Verwijder Indexeerder",
"ExistingTag": "Bestaande tag",
"ConnectionLost": "Verbinding Onderbroken",
"ConnectionLost": "Verbinding Verbroken",
"LastDuration": "Laatste Looptijd",
"Medium": "Gemiddeld",
"NoEventsFound": "Geen gebeurtenissen gevonden",
@@ -694,7 +694,7 @@
"EnableRssHelpText": "Wordt gebruikt wanneer {appName} periodiek zoekt naar uitgaven via RSS synchronisatie",
"Location": "Locatie",
"RecentChanges": "Recente wijzigingen",
"CustomFilter": "Aangepaste Filters",
"CustomFilter": "Aangepaste Filter",
"ErrorLoadingContent": "Er ging iets fout bij het laden van dit item",
"SourceTitle": "Bron Titel",
"FailedLoadingSearchResults": "Fout bij laden van zoek resultaten, probeer het opnieuw.",
@@ -740,20 +740,20 @@
"DisabledForLocalAddresses": "Uitgeschakeld voor lokale adressen",
"Enabled": "Ingeschakeld",
"ApiKey": "API-sleutel",
"ClickToChangeIndexerFlags": "Klik om indexeringsvlaggen te wijzigen",
"ClickToChangeIndexerFlags": "Klik om indexeerdersvlaggen te wijzigen",
"CustomFormatsSpecificationFlag": "Vlag",
"CustomFormatsSpecificationRegularExpression": "Reguliere expressie",
"BlocklistOnlyHint": "Blokkeer lijst zonder te zoeken naar een vervanger",
"BlocklistAndSearch": "Blokkeerlijst en zoeken",
"BlocklistAndSearchHint": "Een vervanger zoeken na het blokkeren",
"BlocklistAndSearchMultipleHint": "Zoekopdrachten voor vervangers starten na het blokkeren van de lijst",
"CustomFormatsSettingsTriggerInfo": "Een Aangepast Formaat wordt toegepast op een uitgave of bestand als het overeenkomt met ten minste één van de verschillende condities die zijn gekozen.",
"ConnectionSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de {connectionName} url, zoals {url}",
"CustomFormatsSettingsTriggerInfo": "Een aangepast formaat wordt toegepast op een uitgave of bestand wanneer het overeenkomt met ten minste één van elk van de verschillende voorwaarden die zijn gekozen.",
"ConnectionSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de {connectionName} URL, zoals {url}",
"BlocklistMultipleOnlyHint": "Blocklist zonder te zoeken naar vervangers",
"BlocklistOnly": "Alleen bloklijst",
"ChangeCategoryHint": "Verandert download naar de 'Post-Import Categorie' van Downloadclient",
"Clone": "Kloon",
"CustomFormatsSpecificationRegularExpressionHelpText": "Aangepaste opmaak RegEx is hoofdletterongevoelig",
"Clone": "Dupliceren",
"CustomFormatsSpecificationRegularExpressionHelpText": "RegEx van aangepaste formaten is hoofdletterongevoelig",
"ChangeCategoryMultipleHint": "Wijzigt downloads naar de 'Post-Import Categorie' van Downloadclient",
"BypassIfAboveCustomFormatScore": "Omzeilen indien boven aangepaste opmaak score",
"BypassIfAboveCustomFormatScoreHelpText": "Schakel omleiding in als de release een score heeft die hoger is dan de geconfigureerde minimale aangepaste formaatscore",
@@ -767,5 +767,19 @@
"Script": "Script",
"UpdateAppDirectlyLoadError": "Kan {appName} niet rechtstreeks updaten,",
"CurrentlyInstalled": "Momenteel Geïnstalleerd",
"ExternalUpdater": "{appName} is geconfigureerd om een extern update mechanisme te gebruiken"
"ExternalUpdater": "{appName} is geconfigureerd om een extern update mechanisme te gebruiken",
"AddNewAuthorRootFolderHelpText": "'{0}' submap zal automatisch worden aangemaakt",
"AddRootFolder": "Voeg hoofdmap toe",
"CollapseMultipleBooks": "Meerdere Boeken Samenvouwen",
"Country": "Land",
"CollapseMultipleBooksHelpText": "Meerdere boeken die op dezelfde dag worden uitgegeven samenvouwen",
"ConvertToFormat": "Converteren Naar Formaat",
"ContinuingMoreBooksAreExpected": "Er worden meer boeken verwacht",
"CountAuthorsSelected": "{selectedCount} auteur(s) geselecteerd",
"ContinuingNoAdditionalBooksAreExpected": "Er worden geen nieuwe boeken verwacht",
"CountImportListsSelected": "{selectedCount} importeerlijst(en) geselecteerd",
"CountIndexersSelected": "{selectedCount} indexeerder(s) geselecteerd",
"Continuing": "Doorgaan",
"ContinuingAllBooksDownloaded": "Doorgaan (Alle boeken gedownload)",
"StatusEndedContinuing": "Doorgaan"
}

View File

@@ -718,5 +718,7 @@
"Script": "Scenariusz",
"UnmappedFiles": "Niezmapowane foldery",
"UpdateAppDirectlyLoadError": "Nie można bezpośrednio zaktualizować {appName},",
"DockerUpdater": "zaktualizuj kontener Dockera, aby otrzymać aktualizację"
"DockerUpdater": "zaktualizuj kontener Dockera, aby otrzymać aktualizację",
"AddNewAuthorRootFolderHelpText": "Podfolder „{0}” zostanie utworzony automatycznie",
"AddRootFolder": "Dodaj folder główny"
}

View File

@@ -963,5 +963,9 @@
"DockerUpdater": "atualize o contentor do Docker para receber a atualização",
"ExternalUpdater": "O {appName} está definido para usar um mecanismo de atualização externo",
"Script": "Script",
"UpdateAppDirectlyLoadError": "Não foi possível atualizar o {appName} diretamente,"
"UpdateAppDirectlyLoadError": "Não foi possível atualizar o {appName} diretamente,",
"AddNewAuthorRootFolderHelpText": "A subpasta \"{0}\" será criada automaticamente",
"AddRootFolder": "Adicionar pasta raiz",
"ThereWasAnErrorLoadingThisItem": "Houve um erro ao carregar este item",
"ThereWasAnErrorLoadingThisPage": "Houve um erro ao carregar esta página"
}

View File

@@ -1118,5 +1118,9 @@
"InstallMajorVersionUpdateMessage": "Esta atualização instalará uma nova versão principal e pode não ser compatível com o seu sistema. Tem certeza de que deseja instalar esta atualização?",
"InstallMajorVersionUpdateMessageLink": "Verifique [{domain}]({url}) para obter mais informações.",
"LastSearched": "Última Pesquisa",
"Unknown": "Desconhecido"
"Unknown": "Desconhecido",
"AddRootFolder": "Adicionar pasta raiz",
"AddNewAuthorRootFolderHelpText": "A subpasta \"{folder}\" será criada automaticamente",
"AddNewBook": "Adicionar Novo Livro",
"AddNewAuthor": "Adicionar Novo Autor"
}

View File

@@ -672,5 +672,7 @@
"OnLatestVersion": "Cea mai recentă versiune a {appName} este deja instalată",
"Script": "Script",
"UpdateAppDirectlyLoadError": "Imposibil de actualizat direct {appName},",
"Unknown": "Necunoscut"
"Unknown": "Necunoscut",
"AddRootFolder": "Adăugați folderul rădăcină",
"AddNewAuthorRootFolderHelpText": "Subfolderul „{0}” va fi creat automat"
}

View File

@@ -882,5 +882,7 @@
"DeleteSelected": "Удалить выбранные",
"Unknown": "Неизвестный",
"WhySearchesCouldBeFailing": "Нажмите здесь, чтобы найти причину ошибок писка",
"LastSearched": "Искали недавно"
"LastSearched": "Искали недавно",
"AddRootFolder": "Добавить корневой каталог",
"AddNewAuthorRootFolderHelpText": "Подпапка \"{folder}\" будет создана автоматически"
}

View File

@@ -200,5 +200,9 @@
"Reason": "Séria",
"Clone": "Zatvoriť",
"AptUpdater": "Použiť apt pre inštaláciu aktualizácie",
"BuiltIn": "Vstavaný"
"BuiltIn": "Vstavaný",
"AddRootFolder": "Pridať koreňový priečinok",
"AddNewAuthorRootFolderHelpText": "'{folder}' podpriečinok sa vytvorí automaticky",
"IgnoredPlaceHolder": "Pridať nové obmedzenie",
"RequiredPlaceHolder": "Pridať nové obmedzenie"
}

View File

@@ -882,5 +882,7 @@
"InstallLatest": "Installera senaste",
"OnLatestVersion": "Den senaste versionen av {appName} är redan installerad",
"Script": "Skript",
"UpdateAppDirectlyLoadError": "Det går inte att uppdatera {appName} direkt,"
"UpdateAppDirectlyLoadError": "Det går inte att uppdatera {appName} direkt,",
"AddNewAuthorRootFolderHelpText": "Mappen \"{folder}\" kommer skapas automatiskt",
"AddRootFolder": "Lägg till rotmapp"
}

View File

@@ -653,5 +653,7 @@
"UpdateAppDirectlyLoadError": "ไม่สามารถอัปเดต {appName} ได้โดยตรง",
"UnmappedFiles": "โฟลเดอร์ที่ไม่ได้แมป",
"AptUpdater": "ใช้ apt เพื่อติดตั้งการอัปเดต",
"OnLatestVersion": "มีการติดตั้ง {appName} เวอร์ชันล่าสุดแล้ว"
"OnLatestVersion": "มีการติดตั้ง {appName} เวอร์ชันล่าสุดแล้ว",
"AddRootFolder": "เพิ่มโฟลเดอร์รูท",
"AddNewAuthorRootFolderHelpText": "โฟลเดอร์ย่อย \"{0}\" จะถูกสร้างขึ้นโดยอัตโนมัติ"
}

View File

@@ -865,5 +865,7 @@
"FilterAnalyticsEvents": "Analitik Olayları Filtrele",
"ConsoleLogLevel": "Konsol Günlük Düzeyi",
"LastSearched": "Son Aranan",
"Unknown": "Bilinmeyen"
"Unknown": "Bilinmeyen",
"AddNewAuthorRootFolderHelpText": "'{0}' alt klasörü otomatik olarak oluşturulacak",
"AddRootFolder": "Kök Klasör Ekle"
}

View File

@@ -851,5 +851,14 @@
"NotificationsSettingsUpdateMapPathsTo": "Карта шляхів до",
"PasswordConfirmation": "Підтвердження пароля",
"PreviouslyInstalled": "Раніше встановлений",
"SetIndexerFlags": "Встановити прапорці індексатора"
"SetIndexerFlags": "Встановити прапорці індексатора",
"AddRootFolder": "Додати корневий каталог",
"AddNewAuthorRootFolderHelpText": "Вкладена папка \"{0}\" буде створена автоматично",
"WriteBookTagsHelpTextWarning": "Вибір \"Усі файли\" змінить існуючі файли під час їх імпорту.",
"ForeignId": "Зовнішній ідентифікатор",
"AudioFileMetadata": "Записувати метадані до аудіофайлів",
"OnDownloadFailureHelpText": "При помилці завантаження",
"WriteAudioTags": "Тегувати аудіофайли метаданими",
"SearchForNewItems": "Пошук нових елементів",
"WriteAudioTagsScrub": "Очистити існуючі теги"
}

View File

@@ -658,5 +658,7 @@
"AptUpdater": "Sử dụng apt để cài đặt bản cập nhật",
"ExternalUpdater": "{appName} được định cấu hình để sử dụng cơ chế cập nhật bên ngoài",
"WhySearchesCouldBeFailing": "Nhấp vào đây để tìm hiểu lý do tại sao tìm kiếm thất bại",
"Unknown": "Không rõ"
"Unknown": "Không rõ",
"AddNewAuthorRootFolderHelpText": "Thư mục con '{0}' sẽ được tạo tự động",
"AddRootFolder": "Thêm thư mục gốc"
}

View File

@@ -1118,5 +1118,7 @@
"UpdateAppDirectlyLoadError": "无法直接更新{appName}",
"FailedToFetchSettings": "设置同步失败",
"LastSearched": "最近搜索",
"Unknown": "未知"
"Unknown": "未知",
"AddNewAuthorRootFolderHelpText": "将自动创建 '{folder}' 子文件夹",
"AddRootFolder": "添加根目录"
}

View File

@@ -2,5 +2,6 @@
"Analytics": "分析",
"About": "关于",
"Username": "用户名",
"Activity": "111"
"Activity": "111",
"Actions": "Actions"
}

View File

@@ -171,5 +171,6 @@
"IgnoredPlaceHolder": "加入新的限制",
"RequiredPlaceHolder": "加入新的限制",
"RedownloadFailed": "失敗時重新下載",
"UnableToAddANewRemotePathMappingPleaseTryAgain": "無法加入新的遠程路徑對應,請重試。"
"UnableToAddANewRemotePathMappingPleaseTryAgain": "無法加入新的遠程路徑對應,請重試。",
"AddRootFolder": "加入根目錄資料夾"
}

View File

@@ -30,13 +30,11 @@ namespace NzbDrone.Core.MediaCover
private string _url;
public string Url
{
get
{
return _url;
}
get => _url;
set
{
_url = value;
if (Extension.IsNullOrWhiteSpace())
{
Extension = Path.GetExtension(value);
@@ -46,6 +44,7 @@ namespace NzbDrone.Core.MediaCover
public MediaCoverTypes CoverType { get; set; }
public string Extension { get; private set; }
public string RemoteUrl { get; set; }
public MediaCover()
{

View File

@@ -90,7 +90,8 @@ namespace NzbDrone.Core.MediaCover
// Author isn't in Readarr yet, map via a proxy to circument referrer issues
foreach (var mediaCover in covers)
{
mediaCover.Url = _mediaCoverProxy.RegisterUrl(mediaCover.Url);
mediaCover.RemoteUrl = mediaCover.Url;
mediaCover.Url = _mediaCoverProxy.RegisterUrl(mediaCover.RemoteUrl);
}
}
else
@@ -104,6 +105,8 @@ namespace NzbDrone.Core.MediaCover
var filePath = GetCoverPath(entityId, coverEntity, mediaCover.CoverType, mediaCover.Extension, null);
mediaCover.RemoteUrl = mediaCover.Url;
if (coverEntity == MediaCoverEntity.Book)
{
mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/Books/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + GetExtension(mediaCover.CoverType, mediaCover.Extension);

View File

@@ -97,7 +97,7 @@ namespace NzbDrone.Core.MediaFiles.BookImport
var iDecision = 1;
foreach (var bookDecision in bookDecisions)
{
_logger.ProgressInfo($"Importing book {iDecision++}/{bookDecisions.Count} {bookDecision.First().Item.Book}");
_logger.ProgressInfo("Importing book {0}/{1} {2}", iDecision++, bookDecisions.Count, bookDecision.First().Item.Book);
var decisionList = bookDecision.ToList();
@@ -130,7 +130,7 @@ namespace NzbDrone.Core.MediaFiles.BookImport
// RemoveExistingTrackFiles(author, book);
// }
// make sure part numbers are populated for audio books
// Make sure part numbers are populated for audiobooks
// If all audio files and all part numbers are zero, set them by filename order
if (decisionList.All(b => MediaFileExtensions.AudioExtensions.Contains(Path.GetExtension(b.Item.Path)) && b.Item.Part == 0))
{
@@ -147,7 +147,7 @@ namespace NzbDrone.Core.MediaFiles.BookImport
book.Editions = _editionService.SetMonitored(newRelease);
// Publish book edited event.
// Deliberatly don't put in the old book since we don't want to trigger an AuthorScan.
// Deliberately don't put in the old book since we don't want to trigger an AuthorScan.
_eventAggregator.PublishEvent(new BookEditedEvent(book, book));
}
@@ -158,8 +158,8 @@ namespace NzbDrone.Core.MediaFiles.BookImport
.SelectMany(c => c)
.ToList();
_logger.ProgressInfo($"Importing {qualifiedImports.Count} files");
_logger.Debug($"Importing {qualifiedImports.Count} files. replaceExisting: {replaceExisting}");
_logger.ProgressInfo("Importing {0} files", qualifiedImports.Count);
_logger.Debug("Importing {0} files. Replace existing: {1}", qualifiedImports.Count, replaceExisting);
var filesToAdd = new List<BookFile>(qualifiedImports.Count);
var trackImportedEvents = new List<TrackImportedEvent>(qualifiedImports.Count);
@@ -310,7 +310,7 @@ namespace NzbDrone.Core.MediaFiles.BookImport
var watch = new System.Diagnostics.Stopwatch();
watch.Start();
_mediaFileService.AddMany(filesToAdd);
_logger.Debug($"Inserted new trackfiles in {watch.ElapsedMilliseconds}ms");
_logger.Debug("Inserted new trackfiles in {0}ms", watch.ElapsedMilliseconds);
// now that trackfiles have been inserted and ids generated, publish the import events
foreach (var trackImportedEvent in trackImportedEvents)
@@ -354,7 +354,7 @@ namespace NzbDrone.Core.MediaFiles.BookImport
if (booksToRefresh.Any())
{
_logger.Debug($"Refreshing info for {booksToRefresh.Count} new books");
_logger.Debug("Refreshing info for {0} new books", booksToRefresh.Count);
_commandQueueManager.Push(new BulkRefreshBookCommand(booksToRefresh.Select(x => x.Id).ToList()));
}
@@ -371,7 +371,8 @@ namespace NzbDrone.Core.MediaFiles.BookImport
if (dbAuthor == null)
{
_logger.Debug($"Adding remote author {author}");
_logger.Debug("Adding remote author {0}", author);
var path = decisions.First().Item.Path;
var rootFolder = _rootFolderService.GetBestRootFolder(path);
@@ -438,7 +439,7 @@ namespace NzbDrone.Core.MediaFiles.BookImport
if (dbBook == null)
{
_logger.Debug($"Adding remote book {book}");
_logger.Debug("Adding remote book {0}", book);
if (book.AuthorMetadataId == 0)
{
@@ -497,7 +498,8 @@ namespace NzbDrone.Core.MediaFiles.BookImport
if (dbEdition == null)
{
_logger.Debug($"Adding remote edition {edition}");
_logger.Debug("Adding remote edition {0}", edition);
try
{
edition.BookId = book.Id;
@@ -540,7 +542,7 @@ namespace NzbDrone.Core.MediaFiles.BookImport
var rootFolder = _diskProvider.GetParentFolder(author.Path);
var previousFiles = _mediaFileService.GetFilesByBook(book.Id);
_logger.Debug($"Deleting {previousFiles.Count} existing files for {book}");
_logger.Debug("Deleting {0} existing files for {1}", previousFiles.Count, book);
foreach (var previousFile in previousFiles)
{

View File

@@ -103,8 +103,8 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
}
catch (BookInfoException e)
{
_logger.Warn(e, "Unexpected error getting author info");
throw new AuthorNotFoundException(foreignAuthorId);
_logger.Warn(e, "Unexpected error getting author info: {foreignAuthorId}", foreignAuthorId);
throw;
}
}
@@ -126,8 +126,8 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
}
catch (BookInfoException e)
{
_logger.Warn(e, "Unexpected error getting book info");
throw new BookNotFoundException(foreignBookId);
_logger.Warn(e, "Unexpected error getting book info: {foreignBookId}", foreignBookId);
throw;
}
}
@@ -430,7 +430,7 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
{
var author = PollAuthor(newId);
book = author.Books.Value.Where(b => b.Editions.Value.Any(e => e.ForeignEditionId == id.ToString())).FirstOrDefault();
book = author.Books.Value.FirstOrDefault(b => b.Editions.Value.Any(e => e.ForeignEditionId == id.ToString()));
authors = new List<AuthorMetadata> { author.Metadata.Value };
}
else if (type == "work")

View File

@@ -7,7 +7,7 @@ using Readarr.Api.V1.Author;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2026-01-15 00:00:00Z")]
public class AuthorEditorFixture : IntegrationTest
{
private void GivenExistingAuthor()

View File

@@ -7,7 +7,7 @@ using NUnit.Framework;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2026-01-15 00:00:00Z")]
public class AuthorFixture : IntegrationTest
{
[Test]

View File

@@ -4,7 +4,7 @@ using NUnit.Framework;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2026-01-15 00:00:00Z")]
public class AuthorLookupFixture : IntegrationTest
{
[TestCase("Robert Harris", "Robert Harris")]

View File

@@ -6,7 +6,7 @@ using Readarr.Api.V1.Blocklist;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2026-01-15 00:00:00Z")]
public class BlocklistFixture : IntegrationTest
{
private AuthorResource _author;

View File

@@ -9,7 +9,7 @@ using Readarr.Api.V1.Books;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2026-01-15 00:00:00Z")]
public class CalendarFixture : IntegrationTest
{
public ClientBase<BookResource> Calendar;

View File

@@ -8,7 +8,7 @@ using Readarr.Api.V1.RootFolders;
namespace NzbDrone.Integration.Test.ApiTests.WantedTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2026-01-15 00:00:00Z")]
public class CutoffUnmetFixture : IntegrationTest
{
[SetUp]

View File

@@ -7,7 +7,7 @@ using Readarr.Api.V1.RootFolders;
namespace NzbDrone.Integration.Test.ApiTests.WantedTests
{
[TestFixture]
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
[Ignore("Waiting for metadata to be back again", Until = "2026-01-15 00:00:00Z")]
public class MissingFixture : IntegrationTest
{
[SetUp]

View File

@@ -37,11 +37,11 @@ namespace Readarr.Api.V1.Author
_coverMapper.ConvertToLocalUrls(resource.Id, MediaCoverEntity.Author, resource.Images);
var poster = currentAuthor.Metadata.Value.Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Poster);
var poster = resource.Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Poster);
if (poster != null)
{
resource.RemotePoster = poster.Url;
resource.RemotePoster = poster.RemoteUrl;
}
resource.Folder = _fileNameBuilder.GetAuthorFolder(currentAuthor);

View File

@@ -34,11 +34,11 @@ namespace Readarr.Api.V1.Books
_coverMapper.ConvertToLocalUrls(resource.Id, MediaCoverEntity.Book, resource.Images);
var cover = currentBook.Editions.Value.Single(x => x.Monitored).Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Cover);
var cover = resource.Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Cover);
if (cover != null)
{
resource.RemoteCover = cover.Url;
resource.RemoteCover = cover.RemoteUrl;
}
yield return resource;

View File

@@ -47,11 +47,11 @@ namespace Readarr.Api.V1.Search
_coverMapper.ConvertToLocalUrls(resource.Author.Id, MediaCoverEntity.Author, resource.Author.Images);
var poster = author.Metadata.Value.Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Poster);
var poster = resource.Author.Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Poster);
if (poster != null)
{
resource.Author.RemotePoster = poster.Url;
resource.Author.RemotePoster = poster.RemoteUrl;
}
resource.Author.Folder = _fileNameBuilder.GetAuthorFolder(author);
@@ -66,11 +66,11 @@ namespace Readarr.Api.V1.Search
_coverMapper.ConvertToLocalUrls(resource.Book.Id, MediaCoverEntity.Book, resource.Book.Images);
var cover = book.Editions.Value.Single(x => x.Monitored).Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Cover);
var cover = resource.Book.Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Cover);
if (cover != null)
{
resource.Book.RemoteCover = cover.Url;
resource.Book.RemoteCover = cover.RemoteUrl;
}
resource.Book.Author.Folder = _fileNameBuilder.GetAuthorFolder(book.Author);

View File

@@ -8761,6 +8761,10 @@
"type": "string",
"nullable": true
},
"folder": {
"type": "string",
"nullable": true
},
"genres": {
"type": "array",
"items": {
@@ -11366,6 +11370,10 @@
"type": "string",
"nullable": true,
"readOnly": true
},
"remoteUrl": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false