Compare commits

...

16 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
37 changed files with 149 additions and 94 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 # 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) [![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' testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
majorVersion: '0.4.15' majorVersion: '0.4.19'
minorVersion: $[counter('minorVersion', 1)] minorVersion: $[counter('minorVersion', 1)]
readarrVersion: '$(majorVersion).$(minorVersion)' readarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(readarrVersion)' buildName: '$(Build.SourceBranchName).$(readarrVersion)'

View File

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

View File

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

View File

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

View File

@@ -17,7 +17,7 @@ namespace NzbDrone.Common.Reflection
public static List<Type> ImplementationsOf<T>(this Assembly assembly) 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) public static bool IsSimpleType(this Type type)
@@ -68,7 +68,7 @@ namespace NzbDrone.Common.Reflection
public static Type FindTypeByName(this Assembly assembly, string name) 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) 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 namespace NzbDrone.Core.Test.MetadataSource.Goodreads
{ {
[TestFixture] [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> public class BookInfoProxyFixture : CoreTest<BookInfoProxy>
{ {
private MetadataProfile _metadataProfile; private MetadataProfile _metadataProfile;

View File

@@ -15,7 +15,7 @@ using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.MetadataSource.Goodreads namespace NzbDrone.Core.Test.MetadataSource.Goodreads
{ {
[TestFixture] [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> public class BookInfoProxySearchFixture : CoreTest<BookInfoProxy>
{ {
[SetUp] [SetUp]

View File

@@ -222,7 +222,7 @@ namespace NzbDrone.Core.Books
protected override void DeleteEntity(Author local, bool deleteFiles) 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) 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) 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) protected override List<Edition> GetRemoteChildren(Book local, Book remote)

View File

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

View File

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

View File

@@ -237,7 +237,7 @@
"PosterSize": "Tamaño de póster", "PosterSize": "Tamaño de póster",
"PreviewRename": "Previsualizar renombrado", "PreviewRename": "Previsualizar renombrado",
"Profiles": "Perfiles", "Profiles": "Perfiles",
"Proper": "Proper", "Proper": "Correcto",
"PropersAndRepacks": "Propers y Repacks", "PropersAndRepacks": "Propers y Repacks",
"Protocol": "Protocolo", "Protocol": "Protocolo",
"ProtocolHelpText": "Elige qué protocolo(s) usar y cuál se prefiere cuando se elige entre lanzamientos equivalentes", "ProtocolHelpText": "Elige qué protocolo(s) usar y cuál se prefiere cuando se elige entre lanzamientos equivalentes",
@@ -564,7 +564,7 @@
"Label": "Etiqueta", "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", "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.", "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.", "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.", "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.", "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", "NotificationsSettingsUseSslHelpText": "Conectar a {serviceName} sobre HTTPS en vez de HTTP",
"Rejections": "Rechazados", "Rejections": "Rechazados",
"SelectIndexerFlags": "Seleccionar indicadores del indexador", "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", "SearchForAllMissingBooks": "Buscar todos los episodios perdidos",
"IndexerIdHelpText": "Especifica a qué indexador se aplica el perfil", "IndexerIdHelpText": "Especifica a qué indexador se aplica el perfil",
"ProfilesSettingsSummary": "Perfiles de calidad, de retraso de idioma y de lanzamiento", "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", "DataExistingBooks": "Monitoriza libros que no tienen archivos o que no se han lanzado aún",
"MonitoredAuthorIsMonitored": "El artista no está vigilado", "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", "ShowBannersHelpText": "Muestra carteles en lugar de nombres",
"DefaultTagsHelpText": "Etiquetas predeterminadas de Readarr para los autores detectados en esta carpeta", "DefaultTagsHelpText": "Etiquetas predeterminadas de Readarr para los autores detectados en esta carpeta",
"UseSSL": "Usar SSL", "UseSSL": "Usar SSL",

View File

@@ -1119,6 +1119,8 @@
"IgnoreDeletedBooks": "Ohita poistetut kirjat", "IgnoreDeletedBooks": "Ohita poistetut kirjat",
"LastSearched": "Edellinen haku", "LastSearched": "Edellinen haku",
"Unknown": "Tuntematon", "Unknown": "Tuntematon",
"AddNewAuthorRootFolderHelpText": "\"{folder}\" -alikansio luodaan automaattisesti.", "AddNewAuthorRootFolderHelpText": "Alikansio \"{folder}\" luodaan automaattisesti.",
"AddRootFolder": "Lisää juurikansio" "AddRootFolder": "Lisää juurikansio",
"AddNewBook": "Lisää uusi kirja",
"AddNewAuthor": "Lisää uusi kirjailija"
} }

View File

@@ -725,7 +725,7 @@
"AppUpdated": "{appName} Aggiornato", "AppUpdated": "{appName} Aggiornato",
"AllResultsAreHiddenByTheAppliedFilter": "Tutti i risultati sono nascosti dal filtro applicato", "AllResultsAreHiddenByTheAppliedFilter": "Tutti i risultati sono nascosti dal filtro applicato",
"AutoRedownloadFailed": "Download fallito", "AutoRedownloadFailed": "Download fallito",
"AddListExclusion": "Aggiungi elenco esclusioni", "AddListExclusion": "Aggiungi lista esclusioni",
"Location": "Posizione", "Location": "Posizione",
"ListsSettingsSummary": "Liste", "ListsSettingsSummary": "Liste",
"RecentChanges": "Cambiamenti Recenti", "RecentChanges": "Cambiamenti Recenti",
@@ -915,5 +915,7 @@
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Cerca automaticamente e tenta di scaricare una versione diversa quando il rilascio non riuscito è stato acquisito 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", "AddNewAuthorRootFolderHelpText": "La sottocartella '{0}' verrà creata automaticamente",
"AddRootFolder": "Aggiungi Cartella Radice" "AddRootFolder": "Aggiungi Cartella Radice",
"AddNewBook": "Aggiungi nuovo libro",
"AddNewAuthor": "Aggiungi nuovo autore"
} }

View File

@@ -4,8 +4,8 @@
"AlternateTitles": "대체 제목", "AlternateTitles": "대체 제목",
"Analytics": "해석학", "Analytics": "해석학",
"DownloadPropersAndRepacksHelpTexts1": "Propers / Repacks로 자동 업그레이드할지 여부", "DownloadPropersAndRepacksHelpTexts1": "Propers / Repacks로 자동 업그레이드할지 여부",
"20MinutesTwenty": "120 분 : {0}", "20MinutesTwenty": "20분 : {0}",
"45MinutesFourtyFive": "60 분 : {0}", "45MinutesFourtyFive": "45분 : {0}",
"ChownGroupHelpText": "그룹 이름 또는 gid. 원격 파일 시스템에 gid를 사용하십시오.", "ChownGroupHelpText": "그룹 이름 또는 gid. 원격 파일 시스템에 gid를 사용하십시오.",
"DeleteReleaseProfile": "지연 프로필 삭제", "DeleteReleaseProfile": "지연 프로필 삭제",
"DeleteIndexer": "인덱서 삭제", "DeleteIndexer": "인덱서 삭제",

View File

@@ -208,5 +208,6 @@
"RequiredPlaceHolder": "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", "AddNewAuthorRootFolderHelpText": "Undermappa \"{folder}\" vil bli automatisk laget",
"AddRootFolder": "Legg til rotmappe" "AddRootFolder": "Legg til rotmappe",
"History": "Historikk"
} }

View File

@@ -50,22 +50,22 @@
"ChangeHasNotBeenSavedYet": "Wijziging is nog niet opgeslagen", "ChangeHasNotBeenSavedYet": "Wijziging is nog niet opgeslagen",
"ChmodFolder": "chmod Map", "ChmodFolder": "chmod Map",
"ChmodFolderHelpText": "Octaal, toegepast tijdens importeren/hernoemen op media mappen en bestanden (zonder uitvoeringsbits)", "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.", "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": "Groep naam of gid. Gebruik gid voor externe bestandssystemen.", "ChownGroupHelpText": "Groepsnaam 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}.", "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", "Clear": "Wis",
"ClickToChangeQuality": "Klik om kwaliteit te wijzigen", "ClickToChangeQuality": "Klik om kwaliteit te wijzigen",
"ClientPriority": "Client Prioriteit", "ClientPriority": "Prioriteit Client",
"CloneIndexer": "Dupliceer Indexeerder", "CloneIndexer": "Indexeerder Dupliceren",
"CloneProfile": "Dupliceer Profiel", "CloneProfile": "Profiel Dupliceren",
"Close": "Sluit", "Close": "Sluiten",
"Columns": "Kolommen", "Columns": "Kolommen",
"CompletedDownloadHandling": "Voltooide Download Afhandeling", "CompletedDownloadHandling": "Afhandeling Voltooide Downloads",
"ConnectSettings": "Connecties Instellingen", "ConnectSettings": "Instellingen Verbindingen",
"Connections": "Connecties", "Connections": "Verbindingen",
"CopyUsingHardlinksHelpText": "Gebruik hardlinks bij het kopiëren van torrent bestanden die nog actief zijn", "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 in gebruik zijnde bestanden blokkeren. Als noodoplossing kunt u de hernoem functie van {appName} gebruiken na het opheffen van de bestandsvergrendeling.", "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": "Film mappen aanmaken voor ontbrekende films tijdens schijfscan", "CreateEmptyAuthorFoldersHelpText": "Ontbrekende auteursmappen aanmaken tijdens schijfscan",
"CreateGroup": "Groep aanmaken", "CreateGroup": "Groep aanmaken",
"CutoffHelpText": "Wanneer deze kwaliteit is behaald, zal {appName} niet langer films downloaden", "CutoffHelpText": "Wanneer deze kwaliteit is behaald, zal {appName} niet langer films downloaden",
"CutoffUnmet": "Onbereikte Drempel", "CutoffUnmet": "Onbereikte Drempel",
@@ -104,7 +104,7 @@
"DetailedProgressBarHelpText": "Toon tekst op voortgangsbalk", "DetailedProgressBarHelpText": "Toon tekst op voortgangsbalk",
"DiskSpace": "Schijfruimte", "DiskSpace": "Schijfruimte",
"Docker": "Docker", "Docker": "Docker",
"DownloadClient": "Downloader", "DownloadClient": "Downloadclient",
"DownloadClientSettings": "Downloader Instellingen", "DownloadClientSettings": "Downloader Instellingen",
"DownloadClients": "Downloaders", "DownloadClients": "Downloaders",
"DownloadFailedCheckDownloadClientForMoreDetails": "Download mislukt: controleer de downloader voor meer details", "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.", "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", "SslCertPathHelpTextWarning": "Herstarten vereist om in werking te treden",
"UnableToLoadMetadataProfiles": "Vertragingsprofielen kunnen niet worden geladen", "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", "MaintenanceRelease": "Onderhoudsuitgave",
"Actions": "Acties", "Actions": "Acties",
"Tomorrow": "Morgen", "Tomorrow": "Morgen",
@@ -493,7 +493,7 @@
"MissingFromDisk": "{appName} kon het bestand niet vinden op de schijf dus werd het verwijderd", "MissingFromDisk": "{appName} kon het bestand niet vinden op de schijf dus werd het verwijderd",
"Disabled": "Uitgeschakeld", "Disabled": "Uitgeschakeld",
"IndexerPriorityHelpText": "Indexeerder Prioriteit van 1 (Hoogste) tot 50 (Laagste). Standaard: 25.", "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", "DownloadClientCheckNoneAvailableMessage": "Er is geen downloader beschikbaar",
"DownloadClientCheckUnableToCommunicateMessage": "Niet in staat om te communiceren met {0}.", "DownloadClientCheckUnableToCommunicateMessage": "Niet in staat om te communiceren met {0}.",
"IndexersSettingsSummary": "Indexeerders en uitgave restricties", "IndexersSettingsSummary": "Indexeerders en uitgave restricties",
@@ -559,7 +559,7 @@
"OnBookFileDeleteHelpText": "Op filmbestand verwijderen", "OnBookFileDeleteHelpText": "Op filmbestand verwijderen",
"UpdateCheckStartupTranslocationMessage": "Kan de update niet installeren omdat de map '{0}' zich in een 'App Translocation' map bevindt.", "UpdateCheckStartupTranslocationMessage": "Kan de update niet installeren omdat de map '{0}' zich in een 'App Translocation' map bevindt.",
"WriteTagsNo": "Nooit", "WriteTagsNo": "Nooit",
"Connect": "Connecties", "Connect": "Verbindingen",
"General": "Algemeen", "General": "Algemeen",
"Lists": "Lijsten", "Lists": "Lijsten",
"ProxyCheckBadRequestMessage": "Testen van proxy is mislukt. Statuscode: {0}", "ProxyCheckBadRequestMessage": "Testen van proxy is mislukt. Statuscode: {0}",
@@ -568,7 +568,7 @@
"TimeLeft": "Resterende Tijd", "TimeLeft": "Resterende Tijd",
"UpdateCheckStartupNotWritableMessage": "Kan de update niet installeren omdat de map '{0}' niet schrijfbaar is voor de gebruiker '{1}'.", "UpdateCheckStartupNotWritableMessage": "Kan de update niet installeren omdat de map '{0}' niet schrijfbaar is voor de gebruiker '{1}'.",
"CouldntFindAnyResultsForTerm": "Kon geen resultaten vinden voor '{0}'", "CouldntFindAnyResultsForTerm": "Kon geen resultaten vinden voor '{0}'",
"CreateEmptyAuthorFolders": "Lege film mappen aanmaken", "CreateEmptyAuthorFolders": "Lege auteursmappen aanmaken",
"FileWasDeletedByViaUI": "File werd verwijderd via de UI", "FileWasDeletedByViaUI": "File werd verwijderd via de UI",
"RestartRequiredHelpTextWarning": "Herstarten vereist om in werking te treden", "RestartRequiredHelpTextWarning": "Herstarten vereist om in werking te treden",
"AddList": "Lijst Toevoegen", "AddList": "Lijst Toevoegen",
@@ -588,16 +588,16 @@
"ApplicationUrlHelpText": "De externe URL van deze applicatie inclusief http(s)://,Port en URL base", "ApplicationUrlHelpText": "De externe URL van deze applicatie inclusief http(s)://,Port en URL base",
"ImportListExclusions": "Verwijder van Uitzonderingenlijst", "ImportListExclusions": "Verwijder van Uitzonderingenlijst",
"MetadataProfile": "Metadata profiel toevoegen", "MetadataProfile": "Metadata profiel toevoegen",
"ChooseImportMethod": "Kies Importmodus", "ChooseImportMethod": "Kies Importmethode",
"ClickToChangeReleaseGroup": "Klik om de releasegroep te wijzigen", "ClickToChangeReleaseGroup": "Klik om de uitgavegroep te wijzigen",
"HardlinkCopyFiles": "Hardlink/Kopieer Bestanden", "HardlinkCopyFiles": "Hardlink/Kopieer Bestanden",
"OnApplicationUpdate": "Bij applicatie update", "OnApplicationUpdate": "Bij applicatie update",
"MoveFiles": "Verplaats Bestanden", "MoveFiles": "Verplaats Bestanden",
"OnApplicationUpdateHelpText": "Bij applicatie update", "OnApplicationUpdateHelpText": "Bij applicatie update",
"BypassIfHighestQuality": "Omzeilen indien de hoogste kwaliteit", "BypassIfHighestQuality": "Omzeilen indien de hoogste kwaliteit",
"CustomFormatScore": "Eigen Formaat Score", "CustomFormatScore": "Aangepaste Formaatscore",
"MinimumCustomFormatScore": "Minimum Eigen Formaat Score", "MinimumCustomFormatScore": "Minimum Eigen Formaat Score",
"Conditions": "Condities", "Conditions": "Voorwaarden",
"DeleteCustomFormat": "Verwijder Eigen Formaat", "DeleteCustomFormat": "Verwijder Eigen Formaat",
"DeleteCustomFormatMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?", "DeleteCustomFormatMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
"DeleteFormatMessageText": "Weet je zeker dat je formaat tag {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.", "NegateHelpText": "Indien aangevinkt, zal het eigen formaat niet worden toegepast indien deze {0} conditie overeenstemt.",
"UnableToLoadCustomFormats": "Eigen formaten kunnen niet worden geladen", "UnableToLoadCustomFormats": "Eigen formaten kunnen niet worden geladen",
"UpgradesAllowed": "Upgrades toegestaan", "UpgradesAllowed": "Upgrades toegestaan",
"CloneCustomFormat": "Dupliceer Eigen Formaat", "CloneCustomFormat": "Aangepast Formaat Dupliceren",
"CopyToClipboard": "Kopieer naar Klembord", "CopyToClipboard": "Kopiëren naar klembord",
"CustomFormat": "Eigen Formaat", "CustomFormat": "Aangepast Formaat",
"CustomFormatSettings": "Eigen Formaten Instellingen", "CustomFormatSettings": "Aangepaste Formaatinstellingen",
"CustomFormats": "Eigen Formaten", "CustomFormats": "Aangepaste Formaten",
"CutoffFormatScoreHelpText": "Wanneer deze eigen formaat score is behaald, zal {appName} niet langer films downloaden", "CutoffFormatScoreHelpText": "Wanneer deze aangepaste formaatscore is behaald, zal {appName} niet langer boeken downloaden",
"IncludeCustomFormatWhenRenamingHelpText": "Voeg toe aan het {Eigen Formaten} hernoemingsformaat", "IncludeCustomFormatWhenRenamingHelpText": "Voeg toe aan het {Eigen Formaten} hernoemingsformaat",
"ImportListMissingRoot": "Ontbrekende hoofdmap voor importlijst(en): {0}", "ImportListMissingRoot": "Ontbrekende hoofdmap voor importlijst(en): {0}",
"ImportListMultipleMissingRoots": "Er ontbreken meerdere hoofdmappen voor importlijsten: {0}", "ImportListMultipleMissingRoots": "Er ontbreken meerdere hoofdmappen voor importlijsten: {0}",
@@ -635,7 +635,7 @@
"ResetTitles": "Reset titels", "ResetTitles": "Reset titels",
"ApplyTagsHelpTextHowToApplyIndexers": "Hoe tags toepassen op de geselecteerde indexeerders", "ApplyTagsHelpTextHowToApplyIndexers": "Hoe tags toepassen op de geselecteerde indexeerders",
"AutomaticAdd": "Automatisch Toevoegen", "AutomaticAdd": "Automatisch Toevoegen",
"CloneCondition": "Kloon Conditie", "CloneCondition": "Voorwaarde dupliceren",
"ApplyTagsHelpTextHowToApplyImportLists": "Hoe tags toepassen op de geselecteerde import lijsten", "ApplyTagsHelpTextHowToApplyImportLists": "Hoe tags toepassen op de geselecteerde import lijsten",
"ApplyChanges": "Pas Wijzigingen Toe", "ApplyChanges": "Pas Wijzigingen Toe",
"ApplyTagsHelpTextAdd": "Toevoegen: Voeg de tags toe aan de bestaande tag lijst", "ApplyTagsHelpTextAdd": "Toevoegen: Voeg de tags toe aan de bestaande tag lijst",
@@ -662,7 +662,7 @@
"No": "Nee", "No": "Nee",
"NoChange": "Geen Wijziging", "NoChange": "Geen Wijziging",
"ApplyTagsHelpTextHowToApplyAuthors": "Hoe tags toe te passen op de geselecteerd films", "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?", "DeleteConditionMessageText": "Bent u zeker dat u de lijst '{name}' wilt verwijderen?",
"FreeSpace": "Vrije Ruimte", "FreeSpace": "Vrije Ruimte",
"ImportLists": "importlijst", "ImportLists": "importlijst",
@@ -685,7 +685,7 @@
"RemoveSelectedItem": "Verwijder geselecteerde item", "RemoveSelectedItem": "Verwijder geselecteerde item",
"DeleteSelectedIndexers": "Verwijder Indexeerder", "DeleteSelectedIndexers": "Verwijder Indexeerder",
"ExistingTag": "Bestaande tag", "ExistingTag": "Bestaande tag",
"ConnectionLost": "Verbinding Onderbroken", "ConnectionLost": "Verbinding Verbroken",
"LastDuration": "Laatste Looptijd", "LastDuration": "Laatste Looptijd",
"Medium": "Gemiddeld", "Medium": "Gemiddeld",
"NoEventsFound": "Geen gebeurtenissen gevonden", "NoEventsFound": "Geen gebeurtenissen gevonden",
@@ -694,7 +694,7 @@
"EnableRssHelpText": "Wordt gebruikt wanneer {appName} periodiek zoekt naar uitgaven via RSS synchronisatie", "EnableRssHelpText": "Wordt gebruikt wanneer {appName} periodiek zoekt naar uitgaven via RSS synchronisatie",
"Location": "Locatie", "Location": "Locatie",
"RecentChanges": "Recente wijzigingen", "RecentChanges": "Recente wijzigingen",
"CustomFilter": "Aangepaste Filters", "CustomFilter": "Aangepaste Filter",
"ErrorLoadingContent": "Er ging iets fout bij het laden van dit item", "ErrorLoadingContent": "Er ging iets fout bij het laden van dit item",
"SourceTitle": "Bron Titel", "SourceTitle": "Bron Titel",
"FailedLoadingSearchResults": "Fout bij laden van zoek resultaten, probeer het opnieuw.", "FailedLoadingSearchResults": "Fout bij laden van zoek resultaten, probeer het opnieuw.",
@@ -740,20 +740,20 @@
"DisabledForLocalAddresses": "Uitgeschakeld voor lokale adressen", "DisabledForLocalAddresses": "Uitgeschakeld voor lokale adressen",
"Enabled": "Ingeschakeld", "Enabled": "Ingeschakeld",
"ApiKey": "API-sleutel", "ApiKey": "API-sleutel",
"ClickToChangeIndexerFlags": "Klik om indexeringsvlaggen te wijzigen", "ClickToChangeIndexerFlags": "Klik om indexeerdersvlaggen te wijzigen",
"CustomFormatsSpecificationFlag": "Vlag", "CustomFormatsSpecificationFlag": "Vlag",
"CustomFormatsSpecificationRegularExpression": "Reguliere expressie", "CustomFormatsSpecificationRegularExpression": "Reguliere expressie",
"BlocklistOnlyHint": "Blokkeer lijst zonder te zoeken naar een vervanger", "BlocklistOnlyHint": "Blokkeer lijst zonder te zoeken naar een vervanger",
"BlocklistAndSearch": "Blokkeerlijst en zoeken", "BlocklistAndSearch": "Blokkeerlijst en zoeken",
"BlocklistAndSearchHint": "Een vervanger zoeken na het blokkeren", "BlocklistAndSearchHint": "Een vervanger zoeken na het blokkeren",
"BlocklistAndSearchMultipleHint": "Zoekopdrachten voor vervangers starten na het blokkeren van de lijst", "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.", "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}", "ConnectionSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de {connectionName} URL, zoals {url}",
"BlocklistMultipleOnlyHint": "Blocklist zonder te zoeken naar vervangers", "BlocklistMultipleOnlyHint": "Blocklist zonder te zoeken naar vervangers",
"BlocklistOnly": "Alleen bloklijst", "BlocklistOnly": "Alleen bloklijst",
"ChangeCategoryHint": "Verandert download naar de 'Post-Import Categorie' van Downloadclient", "ChangeCategoryHint": "Verandert download naar de 'Post-Import Categorie' van Downloadclient",
"Clone": "Kloon", "Clone": "Dupliceren",
"CustomFormatsSpecificationRegularExpressionHelpText": "Aangepaste opmaak RegEx is hoofdletterongevoelig", "CustomFormatsSpecificationRegularExpressionHelpText": "RegEx van aangepaste formaten is hoofdletterongevoelig",
"ChangeCategoryMultipleHint": "Wijzigt downloads naar de 'Post-Import Categorie' van Downloadclient", "ChangeCategoryMultipleHint": "Wijzigt downloads naar de 'Post-Import Categorie' van Downloadclient",
"BypassIfAboveCustomFormatScore": "Omzeilen indien boven aangepaste opmaak score", "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", "BypassIfAboveCustomFormatScoreHelpText": "Schakel omleiding in als de release een score heeft die hoger is dan de geconfigureerde minimale aangepaste formaatscore",
@@ -769,5 +769,17 @@
"CurrentlyInstalled": "Momenteel Geïnstalleerd", "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", "AddNewAuthorRootFolderHelpText": "'{0}' submap zal automatisch worden aangemaakt",
"AddRootFolder": "Voeg hoofdmap toe" "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

@@ -965,5 +965,7 @@
"Script": "Script", "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", "AddNewAuthorRootFolderHelpText": "A subpasta \"{0}\" será criada automaticamente",
"AddRootFolder": "Adicionar pasta raiz" "AddRootFolder": "Adicionar pasta raiz",
"ThereWasAnErrorLoadingThisItem": "Houve um erro ao carregar este item",
"ThereWasAnErrorLoadingThisPage": "Houve um erro ao carregar esta página"
} }

View File

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

View File

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

View File

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

View File

@@ -30,13 +30,11 @@ namespace NzbDrone.Core.MediaCover
private string _url; private string _url;
public string Url public string Url
{ {
get get => _url;
{
return _url;
}
set set
{ {
_url = value; _url = value;
if (Extension.IsNullOrWhiteSpace()) if (Extension.IsNullOrWhiteSpace())
{ {
Extension = Path.GetExtension(value); Extension = Path.GetExtension(value);
@@ -46,6 +44,7 @@ namespace NzbDrone.Core.MediaCover
public MediaCoverTypes CoverType { get; set; } public MediaCoverTypes CoverType { get; set; }
public string Extension { get; private set; } public string Extension { get; private set; }
public string RemoteUrl { get; set; }
public MediaCover() 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 // Author isn't in Readarr yet, map via a proxy to circument referrer issues
foreach (var mediaCover in covers) foreach (var mediaCover in covers)
{ {
mediaCover.Url = _mediaCoverProxy.RegisterUrl(mediaCover.Url); mediaCover.RemoteUrl = mediaCover.Url;
mediaCover.Url = _mediaCoverProxy.RegisterUrl(mediaCover.RemoteUrl);
} }
} }
else else
@@ -104,6 +105,8 @@ namespace NzbDrone.Core.MediaCover
var filePath = GetCoverPath(entityId, coverEntity, mediaCover.CoverType, mediaCover.Extension, null); var filePath = GetCoverPath(entityId, coverEntity, mediaCover.CoverType, mediaCover.Extension, null);
mediaCover.RemoteUrl = mediaCover.Url;
if (coverEntity == MediaCoverEntity.Book) if (coverEntity == MediaCoverEntity.Book)
{ {
mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/Books/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + GetExtension(mediaCover.CoverType, mediaCover.Extension); mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/Books/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + GetExtension(mediaCover.CoverType, mediaCover.Extension);

View File

@@ -103,8 +103,8 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
} }
catch (BookInfoException e) catch (BookInfoException e)
{ {
_logger.Warn(e, "Unexpected error getting author info"); _logger.Warn(e, "Unexpected error getting author info: {foreignAuthorId}", foreignAuthorId);
throw new AuthorNotFoundException(foreignAuthorId); throw;
} }
} }
@@ -126,8 +126,8 @@ 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: {foreignBookId}", foreignBookId);
throw new BookNotFoundException(foreignBookId); throw;
} }
} }
@@ -430,7 +430,7 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
{ {
var author = PollAuthor(newId); 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 }; authors = new List<AuthorMetadata> { author.Metadata.Value };
} }
else if (type == "work") else if (type == "work")

View File

@@ -7,7 +7,7 @@ using Readarr.Api.V1.Author;
namespace NzbDrone.Integration.Test.ApiTests namespace NzbDrone.Integration.Test.ApiTests
{ {
[TestFixture] [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 public class AuthorEditorFixture : IntegrationTest
{ {
private void GivenExistingAuthor() private void GivenExistingAuthor()

View File

@@ -7,7 +7,7 @@ using NUnit.Framework;
namespace NzbDrone.Integration.Test.ApiTests namespace NzbDrone.Integration.Test.ApiTests
{ {
[TestFixture] [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 public class AuthorFixture : IntegrationTest
{ {
[Test] [Test]

View File

@@ -4,7 +4,7 @@ using NUnit.Framework;
namespace NzbDrone.Integration.Test.ApiTests namespace NzbDrone.Integration.Test.ApiTests
{ {
[TestFixture] [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 public class AuthorLookupFixture : IntegrationTest
{ {
[TestCase("Robert Harris", "Robert Harris")] [TestCase("Robert Harris", "Robert Harris")]

View File

@@ -6,7 +6,7 @@ using Readarr.Api.V1.Blocklist;
namespace NzbDrone.Integration.Test.ApiTests namespace NzbDrone.Integration.Test.ApiTests
{ {
[TestFixture] [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 public class BlocklistFixture : IntegrationTest
{ {
private AuthorResource _author; private AuthorResource _author;

View File

@@ -9,7 +9,7 @@ using Readarr.Api.V1.Books;
namespace NzbDrone.Integration.Test.ApiTests namespace NzbDrone.Integration.Test.ApiTests
{ {
[TestFixture] [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 class CalendarFixture : IntegrationTest
{ {
public ClientBase<BookResource> Calendar; public ClientBase<BookResource> Calendar;

View File

@@ -8,7 +8,7 @@ using Readarr.Api.V1.RootFolders;
namespace NzbDrone.Integration.Test.ApiTests.WantedTests namespace NzbDrone.Integration.Test.ApiTests.WantedTests
{ {
[TestFixture] [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 public class CutoffUnmetFixture : IntegrationTest
{ {
[SetUp] [SetUp]

View File

@@ -7,7 +7,7 @@ using Readarr.Api.V1.RootFolders;
namespace NzbDrone.Integration.Test.ApiTests.WantedTests namespace NzbDrone.Integration.Test.ApiTests.WantedTests
{ {
[TestFixture] [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 public class MissingFixture : IntegrationTest
{ {
[SetUp] [SetUp]

View File

@@ -37,11 +37,11 @@ namespace Readarr.Api.V1.Author
_coverMapper.ConvertToLocalUrls(resource.Id, MediaCoverEntity.Author, resource.Images); _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) if (poster != null)
{ {
resource.RemotePoster = poster.Url; resource.RemotePoster = poster.RemoteUrl;
} }
resource.Folder = _fileNameBuilder.GetAuthorFolder(currentAuthor); resource.Folder = _fileNameBuilder.GetAuthorFolder(currentAuthor);

View File

@@ -34,11 +34,11 @@ namespace Readarr.Api.V1.Books
_coverMapper.ConvertToLocalUrls(resource.Id, MediaCoverEntity.Book, resource.Images); _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) if (cover != null)
{ {
resource.RemoteCover = cover.Url; resource.RemoteCover = cover.RemoteUrl;
} }
yield return resource; yield return resource;

View File

@@ -47,11 +47,11 @@ namespace Readarr.Api.V1.Search
_coverMapper.ConvertToLocalUrls(resource.Author.Id, MediaCoverEntity.Author, resource.Author.Images); _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) if (poster != null)
{ {
resource.Author.RemotePoster = poster.Url; resource.Author.RemotePoster = poster.RemoteUrl;
} }
resource.Author.Folder = _fileNameBuilder.GetAuthorFolder(author); 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); _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) if (cover != null)
{ {
resource.Book.RemoteCover = cover.Url; resource.Book.RemoteCover = cover.RemoteUrl;
} }
resource.Book.Author.Folder = _fileNameBuilder.GetAuthorFolder(book.Author); resource.Book.Author.Folder = _fileNameBuilder.GetAuthorFolder(book.Author);

View File

@@ -11370,6 +11370,10 @@
"type": "string", "type": "string",
"nullable": true, "nullable": true,
"readOnly": true "readOnly": true
},
"remoteUrl": {
"type": "string",
"nullable": true
} }
}, },
"additionalProperties": false "additionalProperties": false