From 790e1233ec2468916fc50c7c4b7df577c4a5fa97 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 18 Aug 2024 15:03:17 +0300 Subject: [PATCH 001/275] Bump version to 2.5.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4a301a28c..1957d2429 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.5.1' + majorVersion: '2.5.2' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 950e94564e2e89a40cb286e4abcf26414a222a4b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 15 Aug 2024 01:14:59 +0300 Subject: [PATCH 002/275] Sort quality and metadata profiles by name in custom filters (cherry picked from commit dc7a16a03ae7d1f2492e7cca26de5a0ecbdde96b) Closes #5010 --- .../Filter/Builder/FilterBuilderRow.js | 8 ++--- .../MetadataProfileFilterBuilderRowValue.tsx | 30 +++++++++++++++++++ ...taProfileFilterBuilderRowValueConnector.js | 28 ----------------- .../QualityProfileFilterBuilderRowValue.tsx | 30 +++++++++++++++++++ ...tyProfileFilterBuilderRowValueConnector.js | 28 ----------------- 5 files changed, 64 insertions(+), 60 deletions(-) create mode 100644 frontend/src/Components/Filter/Builder/MetadataProfileFilterBuilderRowValue.tsx delete mode 100644 frontend/src/Components/Filter/Builder/MetadataProfileFilterBuilderRowValueConnector.js create mode 100644 frontend/src/Components/Filter/Builder/QualityProfileFilterBuilderRowValue.tsx delete mode 100644 frontend/src/Components/Filter/Builder/QualityProfileFilterBuilderRowValueConnector.js diff --git a/frontend/src/Components/Filter/Builder/FilterBuilderRow.js b/frontend/src/Components/Filter/Builder/FilterBuilderRow.js index 3ffebeee8..77dad7173 100644 --- a/frontend/src/Components/Filter/Builder/FilterBuilderRow.js +++ b/frontend/src/Components/Filter/Builder/FilterBuilderRow.js @@ -11,11 +11,11 @@ import DateFilterBuilderRowValue from './DateFilterBuilderRowValue'; import FilterBuilderRowValueConnector from './FilterBuilderRowValueConnector'; import HistoryEventTypeFilterBuilderRowValue from './HistoryEventTypeFilterBuilderRowValue'; import IndexerFilterBuilderRowValueConnector from './IndexerFilterBuilderRowValueConnector'; -import MetadataProfileFilterBuilderRowValueConnector from './MetadataProfileFilterBuilderRowValueConnector'; +import MetadataProfileFilterBuilderRowValue from './MetadataProfileFilterBuilderRowValue'; import MonitorNewItemsFilterBuilderRowValue from './MonitorNewItemsFilterBuilderRowValue'; import ProtocolFilterBuilderRowValue from './ProtocolFilterBuilderRowValue'; import QualityFilterBuilderRowValueConnector from './QualityFilterBuilderRowValueConnector'; -import QualityProfileFilterBuilderRowValueConnector from './QualityProfileFilterBuilderRowValueConnector'; +import QualityProfileFilterBuilderRowValue from './QualityProfileFilterBuilderRowValue'; import TagFilterBuilderRowValueConnector from './TagFilterBuilderRowValueConnector'; import styles from './FilterBuilderRow.css'; @@ -68,7 +68,7 @@ function getRowValueConnector(selectedFilterBuilderProp) { return IndexerFilterBuilderRowValueConnector; case filterBuilderValueTypes.METADATA_PROFILE: - return MetadataProfileFilterBuilderRowValueConnector; + return MetadataProfileFilterBuilderRowValue; case filterBuilderValueTypes.MONITOR_NEW_ITEMS: return MonitorNewItemsFilterBuilderRowValue; @@ -80,7 +80,7 @@ function getRowValueConnector(selectedFilterBuilderProp) { return QualityFilterBuilderRowValueConnector; case filterBuilderValueTypes.QUALITY_PROFILE: - return QualityProfileFilterBuilderRowValueConnector; + return QualityProfileFilterBuilderRowValue; case filterBuilderValueTypes.ARTIST: return ArtistFilterBuilderRowValue; diff --git a/frontend/src/Components/Filter/Builder/MetadataProfileFilterBuilderRowValue.tsx b/frontend/src/Components/Filter/Builder/MetadataProfileFilterBuilderRowValue.tsx new file mode 100644 index 000000000..bbd9a8274 --- /dev/null +++ b/frontend/src/Components/Filter/Builder/MetadataProfileFilterBuilderRowValue.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { useSelector } from 'react-redux'; +import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; +import FilterBuilderRowValueProps from 'Components/Filter/Builder/FilterBuilderRowValueProps'; +import sortByProp from 'Utilities/Array/sortByProp'; +import FilterBuilderRowValue from './FilterBuilderRowValue'; + +function createMetadataProfilesSelector() { + return createSelector( + (state: AppState) => state.settings.metadataProfiles.items, + (metadataProfiles) => { + return metadataProfiles; + } + ); +} + +function MetadataProfileFilterBuilderRowValue( + props: FilterBuilderRowValueProps +) { + const metadataProfiles = useSelector(createMetadataProfilesSelector()); + + const tagList = metadataProfiles + .map(({ id, name }) => ({ id, name })) + .sort(sortByProp('name')); + + return ; +} + +export default MetadataProfileFilterBuilderRowValue; diff --git a/frontend/src/Components/Filter/Builder/MetadataProfileFilterBuilderRowValueConnector.js b/frontend/src/Components/Filter/Builder/MetadataProfileFilterBuilderRowValueConnector.js deleted file mode 100644 index 89d6c06b3..000000000 --- a/frontend/src/Components/Filter/Builder/MetadataProfileFilterBuilderRowValueConnector.js +++ /dev/null @@ -1,28 +0,0 @@ -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import FilterBuilderRowValue from './FilterBuilderRowValue'; - -function createMapStateToProps() { - return createSelector( - (state) => state.settings.metadataProfiles, - (metadataProfiles) => { - const tagList = metadataProfiles.items.map((metadataProfile) => { - const { - id, - name - } = metadataProfile; - - return { - id, - name - }; - }); - - return { - tagList - }; - } - ); -} - -export default connect(createMapStateToProps)(FilterBuilderRowValue); diff --git a/frontend/src/Components/Filter/Builder/QualityProfileFilterBuilderRowValue.tsx b/frontend/src/Components/Filter/Builder/QualityProfileFilterBuilderRowValue.tsx new file mode 100644 index 000000000..50036cb90 --- /dev/null +++ b/frontend/src/Components/Filter/Builder/QualityProfileFilterBuilderRowValue.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { useSelector } from 'react-redux'; +import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; +import FilterBuilderRowValueProps from 'Components/Filter/Builder/FilterBuilderRowValueProps'; +import sortByProp from 'Utilities/Array/sortByProp'; +import FilterBuilderRowValue from './FilterBuilderRowValue'; + +function createQualityProfilesSelector() { + return createSelector( + (state: AppState) => state.settings.qualityProfiles.items, + (qualityProfiles) => { + return qualityProfiles; + } + ); +} + +function QualityProfileFilterBuilderRowValue( + props: FilterBuilderRowValueProps +) { + const qualityProfiles = useSelector(createQualityProfilesSelector()); + + const tagList = qualityProfiles + .map(({ id, name }) => ({ id, name })) + .sort(sortByProp('name')); + + return ; +} + +export default QualityProfileFilterBuilderRowValue; diff --git a/frontend/src/Components/Filter/Builder/QualityProfileFilterBuilderRowValueConnector.js b/frontend/src/Components/Filter/Builder/QualityProfileFilterBuilderRowValueConnector.js deleted file mode 100644 index 4a8b82283..000000000 --- a/frontend/src/Components/Filter/Builder/QualityProfileFilterBuilderRowValueConnector.js +++ /dev/null @@ -1,28 +0,0 @@ -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import FilterBuilderRowValue from './FilterBuilderRowValue'; - -function createMapStateToProps() { - return createSelector( - (state) => state.settings.qualityProfiles, - (qualityProfiles) => { - const tagList = qualityProfiles.items.map((qualityProfile) => { - const { - id, - name - } = qualityProfile; - - return { - id, - name - }; - }); - - return { - tagList - }; - } - ); -} - -export default connect(createMapStateToProps)(FilterBuilderRowValue); From afbead8a88efbf150ac427f15c5522efa7bc5d7f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 18 Aug 2024 17:57:54 +0300 Subject: [PATCH 003/275] Fixed: Stale formats score after changing quality profile for artists Closes #5009 --- frontend/src/Artist/Details/ArtistDetailsConnector.js | 2 +- frontend/src/Components/SignalRConnector.js | 2 ++ frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/Artist/Details/ArtistDetailsConnector.js b/frontend/src/Artist/Details/ArtistDetailsConnector.js index bed30a937..ec7228b0a 100644 --- a/frontend/src/Artist/Details/ArtistDetailsConnector.js +++ b/frontend/src/Artist/Details/ArtistDetailsConnector.js @@ -166,7 +166,7 @@ class ArtistDetailsConnector extends Component { // Lifecycle componentDidMount() { - registerPagePopulator(this.populate); + registerPagePopulator(this.populate, ['artistUpdated']); this.populate(); } diff --git a/frontend/src/Components/SignalRConnector.js b/frontend/src/Components/SignalRConnector.js index db631de6f..40c6265c6 100644 --- a/frontend/src/Components/SignalRConnector.js +++ b/frontend/src/Components/SignalRConnector.js @@ -234,6 +234,8 @@ class SignalRConnector extends Component { if (action === 'updated') { this.props.dispatchUpdateItem({ section, ...body.resource }); + + repopulatePage('artistUpdated'); } else if (action === 'deleted') { this.props.dispatchRemoveItem({ section, id: body.resource.id }); } diff --git a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js index dbb4f2235..d0d5591bc 100644 --- a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js +++ b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js @@ -53,7 +53,7 @@ class CutoffUnmetConnector extends Component { gotoCutoffUnmetFirstPage } = this.props; - registerPagePopulator(this.repopulate, ['trackFileUpdated', 'trackFileDeleted']); + registerPagePopulator(this.repopulate, ['artistUpdated', 'trackFileUpdated', 'trackFileDeleted']); if (useCurrentPage) { fetchCutoffUnmet(); From 809db4022e062211091afe0cffa8469b246d2aa2 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 18 Aug 2024 17:59:03 +0300 Subject: [PATCH 004/275] Fixed: Persist selected custom filter for interactive searches Closes #5006 --- frontend/src/Store/Actions/releaseActions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/Store/Actions/releaseActions.js b/frontend/src/Store/Actions/releaseActions.js index 1c9b6f5ef..c4955c915 100644 --- a/frontend/src/Store/Actions/releaseActions.js +++ b/frontend/src/Store/Actions/releaseActions.js @@ -219,8 +219,9 @@ export const defaultState = { }; export const persistState = [ - 'releases.selectedFilterKey', + 'releases.album.selectedFilterKey', 'releases.album.customFilters', + 'releases.artist.selectedFilterKey', 'releases.artist.customFilters' ]; From 04e0d3f22e9cb9aedd19c2c8a4602f686388898b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 15 Aug 2024 06:20:25 +0300 Subject: [PATCH 005/275] Skip duplicate import list exclusions (cherry picked from commit 9af2f137f41867a29d544fad77551672a79f24b6) Closes #5003 --- .../ImportLists/ImportListExclusionController.cs | 6 +++++- .../ImportLists}/ImportListExclusionExistsValidator.cs | 10 ++++++++-- src/NzbDrone.Core/Validation/GuidValidator.cs | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) rename src/{NzbDrone.Core/ImportLists/Exclusions => Lidarr.Api.V1/ImportLists}/ImportListExclusionExistsValidator.cs (64%) diff --git a/src/Lidarr.Api.V1/ImportLists/ImportListExclusionController.cs b/src/Lidarr.Api.V1/ImportLists/ImportListExclusionController.cs index b5b30f1cd..c78bbc1ad 100644 --- a/src/Lidarr.Api.V1/ImportLists/ImportListExclusionController.cs +++ b/src/Lidarr.Api.V1/ImportLists/ImportListExclusionController.cs @@ -20,7 +20,11 @@ namespace Lidarr.Api.V1.ImportLists { _importListExclusionService = importListExclusionService; - SharedValidator.RuleFor(c => c.ForeignId).NotEmpty().SetValidator(guidValidator).SetValidator(importListExclusionExistsValidator); + SharedValidator.RuleFor(c => c.ForeignId).Cascade(CascadeMode.Stop) + .NotEmpty() + .SetValidator(guidValidator) + .SetValidator(importListExclusionExistsValidator); + SharedValidator.RuleFor(c => c.ArtistName).NotEmpty(); } diff --git a/src/NzbDrone.Core/ImportLists/Exclusions/ImportListExclusionExistsValidator.cs b/src/Lidarr.Api.V1/ImportLists/ImportListExclusionExistsValidator.cs similarity index 64% rename from src/NzbDrone.Core/ImportLists/Exclusions/ImportListExclusionExistsValidator.cs rename to src/Lidarr.Api.V1/ImportLists/ImportListExclusionExistsValidator.cs index 2883f473a..101e83397 100644 --- a/src/NzbDrone.Core/ImportLists/Exclusions/ImportListExclusionExistsValidator.cs +++ b/src/Lidarr.Api.V1/ImportLists/ImportListExclusionExistsValidator.cs @@ -1,6 +1,7 @@ using FluentValidation.Validators; +using NzbDrone.Core.ImportLists.Exclusions; -namespace NzbDrone.Core.ImportLists.Exclusions +namespace Lidarr.Api.V1.ImportLists { public class ImportListExclusionExistsValidator : PropertyValidator { @@ -20,7 +21,12 @@ namespace NzbDrone.Core.ImportLists.Exclusions return true; } - return !_importListExclusionService.All().Exists(s => s.ForeignId == context.PropertyValue.ToString()); + if (context.InstanceToValidate is not ImportListExclusionResource listExclusionResource) + { + return true; + } + + return !_importListExclusionService.All().Exists(v => v.ForeignId == context.PropertyValue.ToString() && v.Id != listExclusionResource.Id); } } } diff --git a/src/NzbDrone.Core/Validation/GuidValidator.cs b/src/NzbDrone.Core/Validation/GuidValidator.cs index 99a491acd..19956a2fd 100644 --- a/src/NzbDrone.Core/Validation/GuidValidator.cs +++ b/src/NzbDrone.Core/Validation/GuidValidator.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Validation return false; } - return Guid.TryParse(context.PropertyValue.ToString(), out var guidOutput); + return Guid.TryParse(context.PropertyValue.ToString(), out _); } } } From 51d22bed2a19fc244d3f3320d34305f731e149e9 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 18 Aug 2024 18:16:58 +0300 Subject: [PATCH 006/275] Include available version in update health check (cherry picked from commit 15e3c3efb18242caf28b9bfc77a72a78296018bf) (cherry picked from commit 3b29096e402c9a738b12ca8085b97924c52577f9) Closes #4949 Closes #5000 --- .../HealthCheck/Checks/UpdateCheck.cs | 16 ++++++++++++++-- src/NzbDrone.Core/Localization/Core/ca.json | 2 +- src/NzbDrone.Core/Localization/Core/de.json | 2 +- src/NzbDrone.Core/Localization/Core/el.json | 2 +- src/NzbDrone.Core/Localization/Core/en.json | 2 +- src/NzbDrone.Core/Localization/Core/es.json | 2 +- src/NzbDrone.Core/Localization/Core/fi.json | 2 +- src/NzbDrone.Core/Localization/Core/fr.json | 2 +- src/NzbDrone.Core/Localization/Core/hu.json | 2 +- src/NzbDrone.Core/Localization/Core/it.json | 2 +- src/NzbDrone.Core/Localization/Core/nl.json | 2 +- src/NzbDrone.Core/Localization/Core/pl.json | 2 +- src/NzbDrone.Core/Localization/Core/pt.json | 2 +- src/NzbDrone.Core/Localization/Core/pt_BR.json | 2 +- src/NzbDrone.Core/Localization/Core/ru.json | 2 +- src/NzbDrone.Core/Localization/Core/tr.json | 2 +- src/NzbDrone.Core/Localization/Core/uk.json | 2 +- src/NzbDrone.Core/Localization/Core/zh_CN.json | 2 +- 18 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/NzbDrone.Core/HealthCheck/Checks/UpdateCheck.cs b/src/NzbDrone.Core/HealthCheck/Checks/UpdateCheck.cs index bf77de8d7..aae6658ea 100644 --- a/src/NzbDrone.Core/HealthCheck/Checks/UpdateCheck.cs +++ b/src/NzbDrone.Core/HealthCheck/Checks/UpdateCheck.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using NzbDrone.Common.Disk; using NzbDrone.Common.EnvironmentInfo; @@ -68,9 +69,20 @@ namespace NzbDrone.Core.HealthCheck.Checks } } - if (BuildInfo.BuildDateTime < DateTime.UtcNow.AddDays(-14) && _checkUpdateService.AvailableUpdate() != null) + if (BuildInfo.BuildDateTime < DateTime.UtcNow.AddDays(-14)) { - return new HealthCheck(GetType(), HealthCheckResult.Warning, _localizationService.GetLocalizedString("UpdateAvailable"), "#new-update-is-available"); + var latestAvailable = _checkUpdateService.AvailableUpdate(); + + if (latestAvailable != null) + { + return new HealthCheck(GetType(), + HealthCheckResult.Warning, + _localizationService.GetLocalizedString("UpdateAvailableHealthCheckMessage", new Dictionary + { + { "version", $"v{latestAvailable.Version}" } + }), + "#new-update-is-available"); + } } return new HealthCheck(GetType()); diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 10ccb1c41..87b07c05f 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -658,7 +658,7 @@ "RootFolderCheckSingleMessage": "Falta la carpeta arrel: {0}", "SystemTimeCheckMessage": "L'hora del sistema està apagada durant més d'1 dia. És possible que les tasques programades no s'executin correctament fins que no es corregeixi l'hora", "CutoffFormatScoreHelpText": "Un cop s'arribi a aquesta puntuació de format personalitzat, {appName} ja no baixarà pel·lícules", - "UpdateAvailable": "Nova actualització disponible", + "UpdateAvailableHealthCheckMessage": "Nova actualització disponible", "ImportListStatusCheckSingleClientMessage": "Llistes no disponibles a causa d'errors: {0}", "ImportMechanismHealthCheckMessage": "Activa la gestió de baixades completades", "IndexerRssHealthCheckNoIndexers": "No hi ha indexadors disponibles amb la sincronització RSS activada, {appName} no capturarà les noves versions automàticament", diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index c90f2fa5a..1df123ee4 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -888,7 +888,7 @@ "ReplaceWithSpaceDash": "Mit Leerzeichen Bindestrich ersetzen", "RootFolderCheckSingleMessage": "Fehlender Stammordner: {0}", "RootFolderCheckMultipleMessage": "Es fehlen mehrere Stammordner: {0}", - "UpdateAvailable": "Neue Version verfügbar", + "UpdateAvailableHealthCheckMessage": "Neue Version verfügbar", "UpdateCheckStartupNotWritableMessage": "Update kann nicht installiert werden, da der Startordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.", "UpdateCheckStartupTranslocationMessage": "Update kann nicht installiert werden, da sich der Startordner '{0}' in einem App Translocation-Ordner befindet.", "UpdateCheckUINotWritableMessage": "Update kann nicht installiert werden, da der Benutzeroberflächenordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.", diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index 577e98bdd..d14c8c527 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -905,7 +905,7 @@ "ReplaceWithDash": "Αντικαταστήστε με Dash", "RootFolderCheckSingleMessage": "Λείπει ριζικός φάκελος: {0}", "SystemTimeCheckMessage": "Ο χρόνος συστήματος είναι απενεργοποιημένος για περισσότερο από 1 ημέρα. Οι προγραμματισμένες εργασίες ενδέχεται να μην εκτελούνται σωστά έως ότου διορθωθεί η ώρα", - "UpdateAvailable": "Νέα ενημέρωση είναι διαθέσιμη", + "UpdateAvailableHealthCheckMessage": "Νέα ενημέρωση είναι διαθέσιμη", "DownloadClientCheckNoneAvailableMessage": "Δεν υπάρχει διαθέσιμο πρόγραμμα Λήψης", "DownloadClientStatusCheckSingleClientMessage": "Προγράμματα λήψης που είναι μη διαθέσιμα λόγων αποτυχιών: {0}", "IndexerLongTermStatusCheckAllClientMessage": "Όλοι οι δείκτες δεν είναι διαθέσιμοι λόγω αστοχιών για περισσότερο από 6 ώρες", diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 649257baa..466664174 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -1263,7 +1263,7 @@ "UnmonitoredOnly": "Unmonitored Only", "UpdateAll": "Update All", "UpdateAutomaticallyHelpText": "Automatically download and install updates. You will still be able to install from System: Updates", - "UpdateAvailable": "New update is available", + "UpdateAvailableHealthCheckMessage": "New update is available: {version}", "UpdateCheckStartupNotWritableMessage": "Cannot install update because startup folder '{0}' is not writable by the user '{1}'.", "UpdateCheckStartupTranslocationMessage": "Cannot install update because startup folder '{0}' is in an App Translocation folder.", "UpdateCheckUINotWritableMessage": "Cannot install update because UI folder '{0}' is not writable by the user '{1}'.", diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 95614b326..2cbcc7f3a 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -656,7 +656,7 @@ "RootFolderCheckMultipleMessage": "Varias carpetas de origen no existen: {0}", "RootFolderCheckSingleMessage": "La carpeta de origen no existe: {0}", "SystemTimeCheckMessage": "El reloj del sistema está retrasado más de un día. Las tareas de mantenimiento no se ejecutarán correctamente hasta que se haya corregido", - "UpdateAvailable": "La nueva actualización está disponible", + "UpdateAvailableHealthCheckMessage": "La nueva actualización está disponible", "UpdateCheckStartupNotWritableMessage": "No se puede instalar la actualización porque la carpeta de arranque '{0}' no tiene permisos de escritura para el usuario '{1}'.", "UpdateCheckStartupTranslocationMessage": "No se puede instalar la actualización porque la carpeta de arranque '{0}' está en una carpeta de \"App Translocation\".", "ShownClickToHide": "Mostrado, haz clic para ocultar", diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 51faf1702..f51f129f8 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -972,7 +972,7 @@ "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Lataustyökalu \"{0}\" on määritetty poistamaan valmistuneet lataukset, jonka seuraksena ne saatetaan poistaa ennen kuin {1} ehtii tuoda niitä.", "Enabled": "Käytössä", "RemotePathMappingCheckLocalFolderMissing": "Etälataustyökalu \"{0}\" tallentaa lataukset kohteeseen \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kohdistus.", - "UpdateAvailable": "Uusi päivitys on saatavilla", + "UpdateAvailableHealthCheckMessage": "Uusi päivitys on saatavilla", "UpdateMonitoring": "Päivitä valvontatila", "ApplyTagsHelpTextHowToApplyImportLists": "Tunnisteiden käyttö valituissa tuontilistoissa", "AutomaticUpdatesDisabledDocker": "Automaattisia päivityksiä ei tueta suoraan käytettäessä Dockerin päivitysmekanismia. Docker-säiliö on päivitettävä {appName}in ulkopuolella tai päivitys on suoritettava komentosarjalla.", diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 0fad97553..6be83438d 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -745,7 +745,7 @@ "ThereWasAnErrorLoadingThisItem": "Une erreur s'est produite lors du chargement de cet élément", "ThereWasAnErrorLoadingThisPage": "Une erreur s'est produite lors du chargement de cette page", "UpdateCheckUINotWritableMessage": "Impossible d'installer la mise à jour car le dossier d'interface utilisateur '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.", - "UpdateAvailable": "Une nouvelle mise à jour est disponible", + "UpdateAvailableHealthCheckMessage": "Une nouvelle mise à jour est disponible", "UpdateCheckStartupNotWritableMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.", "UpdateCheckStartupTranslocationMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' se trouve dans un dossier App Translocation.", "DeleteRemotePathMapping": "Supprimer la correspondance de chemin distant", diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index b70352b60..7b3da4338 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -912,7 +912,7 @@ "RootFolderCheckMultipleMessage": "Több gyökérmappa hiányzik: {0}", "RootFolderCheckSingleMessage": "Hiányzó gyökérmappa: {0}", "SystemTimeCheckMessage": "A rendszeridő több mint 1 napja nem frissült. Előfordulhat, hogy az ütemezett feladatok az idő kijavításáig nem futnak megfelelően", - "UpdateAvailable": "Új frissítés elérhető", + "UpdateAvailableHealthCheckMessage": "Új frissítés elérhető", "UpdateCheckStartupNotWritableMessage": "A frissítés nem telepíthető, mert a (z) „{0}” indítási mappát a „{1}” felhasználó nem írhatja.", "UpdateCheckStartupTranslocationMessage": "Nem lehet telepíteni a frissítést, mert a (z) „{0}” indítási mappa az Alkalmazások Transzlokációs mappájában található.", "UpdateCheckUINotWritableMessage": "Nem lehet telepíteni a frissítést, mert a(z) „{0}” felhasználói felület mappát nem írhatja a „{1}” felhasználó.", diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index 385e9abb6..e44e32c90 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -731,7 +731,7 @@ "RootFolderCheckMultipleMessage": "Ci sono più cartelle radice mancanti: {0}", "RootFolderCheckSingleMessage": "Cartella radice mancante: {0}", "SystemTimeCheckMessage": "L'orario di sistema è sbagliato di più di un giorno. Le attività pianificate potrebbero non essere eseguite correttamente fino alla correzione", - "UpdateAvailable": "É disponibile un nuovo aggiornamento", + "UpdateAvailableHealthCheckMessage": "É disponibile un nuovo aggiornamento", "DeleteRemotePathMapping": "Elimina la Mappatura dei Percorsi Remoti", "BlocklistReleaseHelpText": "Impedisci a {appName} di re-acquisire automaticamente questa versione", "FailedToLoadQueue": "Impossibile caricare la coda", diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index a3dbcb481..d86944eff 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -665,7 +665,7 @@ "RootFolderCheckMultipleMessage": "Meerdere hoofdmappen ontbreken: {0}", "RootFolderCheckSingleMessage": "Ontbrekende hoofdmap: {0}", "SystemTimeCheckMessage": "De systeemtijd loopt verkeerd met meer dan 1 dag. Geplande taken worden mogelijk niet goed uitgevoerd tot dit is opgelost", - "UpdateAvailable": "Nieuwe update is beschikbaar", + "UpdateAvailableHealthCheckMessage": "Nieuwe update is beschikbaar", "UpdateCheckStartupNotWritableMessage": "Kan de update niet installeren omdat de map '{0}' niet schrijfbaar is voor de gebruiker '{1}'.", "UpdateCheckStartupTranslocationMessage": "Kan de update niet installeren omdat de map '{0}' zich in een 'App Translocation' map bevindt.", "UpdateCheckUINotWritableMessage": "Kan de update niet installeren omdat de UI map '{0}' niet schrijfbaar is voor de gebruiker '{1}'.", diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 105b4182b..332a43d3a 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -658,7 +658,7 @@ "RootFolderCheckMultipleMessage": "Brakuje wielu folderów głównych: {0}", "RootFolderCheckSingleMessage": "Brak folderu głównego: {0}", "SystemTimeCheckMessage": "Czas systemowy jest wyłączony o więcej niż 1 dzień. Zaplanowane zadania mogą nie działać poprawnie, dopóki czas nie zostanie skorygowany", - "UpdateAvailable": "Dostępna jest aktualizacja", + "UpdateAvailableHealthCheckMessage": "Dostępna jest aktualizacja", "UpdateCheckStartupNotWritableMessage": "Nie można zainstalować aktualizacji, ponieważ użytkownik „{1}” nie ma prawa zapisu do folderu startowego „{0}”.", "Language": "Język", "DeleteRemotePathMapping": "Edytuj zdalne mapowanie ścieżki", diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index b2e69c442..e0d38c9a0 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -733,7 +733,7 @@ "RootFolderCheckMultipleMessage": "Múltiplas pastas raiz estão ausentes: {0}", "RootFolderCheckSingleMessage": "Pasta raiz não encontrada: {0}", "SystemTimeCheckMessage": "A hora do sistema está atrasada em mais de 1 dia. As tarefas agendadas podem não ocorrer corretamente até a hora ser corrigida", - "UpdateAvailable": "Nova atualização disponível", + "UpdateAvailableHealthCheckMessage": "Nova atualização disponível", "UpdateCheckStartupNotWritableMessage": "Não é possível instalar a atualização porque a pasta de arranque \"{0}\" não tem permissões de escrita para o utilizador \"{1}\".", "ApiKeyValidationHealthCheckMessage": "Por favor, atualize a sua API Key para ter no mínimo {0} caracteres. Pode fazer através das definições ou do ficheiro de configuração", "DeleteRemotePathMapping": "Editar mapeamento de caminho remoto", diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index ac34a22a2..aa79380fb 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -928,7 +928,7 @@ "SystemTimeCheckMessage": "A hora do sistema está desligada por mais de 1 dia. Tarefas agendadas podem não ser executadas corretamente até que o horário seja corrigido", "ThereWasAnErrorLoadingThisItem": "Ocorreu um erro ao carregar este item", "ThereWasAnErrorLoadingThisPage": "Ocorreu um erro ao carregar esta página", - "UpdateAvailable": "Nova atualização está disponível", + "UpdateAvailableHealthCheckMessage": "Nova atualização está disponível", "UpdateCheckStartupNotWritableMessage": "Não é possível instalar a atualização porque a pasta de inicialização '{0}' não pode ser gravada pelo usuário '{1}'.", "UpdateCheckStartupTranslocationMessage": "Não é possível instalar a atualização porque a pasta de inicialização '{0}' está em uma pasta de translocação de aplicativo.", "Total": "Total", diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index 57458034a..7951f1741 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -673,7 +673,7 @@ "SystemTimeCheckMessage": "Расхождение системного времени более чем на 1 день. Запланированные задачи могут работать некорректно, пока не будет исправлено время", "UnableToLoadCustomFormats": "Невозможно загрузить пользовательские форматы", "UnableToLoadInteractiveSearch": "Невозможно загрузить результаты поиска по этому фильму. Попробуйте позже", - "UpdateAvailable": "Доступно новое обновление", + "UpdateAvailableHealthCheckMessage": "Доступно новое обновление", "UpdateCheckStartupNotWritableMessage": "Невозможно установить обновление так как загрузочная папка '{0}' недоступна для записи для пользователя '{1}'.", "UpdateCheckStartupTranslocationMessage": "Не удается установить обновление, поскольку папка автозагрузки \"{0}\" находится в папке перемещения приложений.", "ApiKeyValidationHealthCheckMessage": "Пожалуйста, обновите свой ключ API, чтобы он был длиной не менее {0} символов. Вы можете сделать это через настройки или файл конфигурации", diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 65122f8a8..6d6d9e4f4 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -926,7 +926,7 @@ "SizeLimit": "Boyut Limiti", "OnHealthRestored": "Sağlığın İyileştirilmesi Hakkında", "RemoveTagsAutomaticallyHelpText": "Koşullar karşılanmazsa otomatik etiketlemeyi kaldırın", - "UpdateAvailable": "Yeni güncelleme mevcut", + "UpdateAvailableHealthCheckMessage": "Yeni güncelleme mevcut", "NotificationsTelegramSettingsIncludeAppName": "{appName}'i Başlığa dahil et", "NotificationsTelegramSettingsIncludeAppNameHelpText": "Farklı uygulamalardan gelen bildirimleri ayırt etmek için isteğe bağlı olarak mesaj başlığının önüne {appName} ekleyin", "RemotePathMappingCheckImportFailed": "{appName} filmi içe aktaramadı. Ayrıntılar için günlüklerinizi kontrol edin.", diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 2b8b12d8e..8c6874cf2 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -518,7 +518,7 @@ "AuthenticationRequired": "Потрібна Автентифікація", "Yesterday": "Вчора", "ArtistType": "Тип Виконавця", - "UpdateAvailable": "Доступне нове оновлення", + "UpdateAvailableHealthCheckMessage": "Доступне нове оновлення", "AddArtistWithName": "Додати {artistName}", "AddNewArtist": "Додати Нового Виконавця", "AddNewArtistSearchForMissingAlbums": "Почніть пошук відсутніх альбомів", diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 88a0ce058..96455b6f8 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -913,7 +913,7 @@ "ThereWasAnErrorLoadingThisPage": "加载此页时出错", "UnableToLoadCustomFormats": "无法加载自定义格式", "UnableToLoadInteractiveSearch": "无法加载该专辑的搜索结果,请稍后重试", - "UpdateAvailable": "有新的更新可用", + "UpdateAvailableHealthCheckMessage": "有新的更新可用", "UpdateCheckStartupNotWritableMessage": "无法安装更新,因为用户“{1}”对于启动文件夹“{0}”没有写入权限。", "UpdateCheckStartupTranslocationMessage": "无法安装更新,因为启动文件夹“{0}”在一个应用程序迁移文件夹。Cannot install update because startup folder '{0}' is in an App Translocation folder.", "UpdateCheckUINotWritableMessage": "无法安装升级,因为用户“{1}”不可写入界面文件夹“{0}”。", From da954dc31e6ddbb934b271db533c8605c0b5a33a Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 10 Aug 2024 20:38:58 -0700 Subject: [PATCH 007/275] Align queue action buttons on right (cherry picked from commit f7a58aab339e2012b6bb91d0b3a38d733ec213c6) Closes #4989 --- frontend/src/Activity/Queue/QueueRow.css | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/Activity/Queue/QueueRow.css b/frontend/src/Activity/Queue/QueueRow.css index 6636f2f9d..2a0df3595 100644 --- a/frontend/src/Activity/Queue/QueueRow.css +++ b/frontend/src/Activity/Queue/QueueRow.css @@ -26,4 +26,5 @@ composes: cell from '~Components/Table/Cells/TableRowCell.css'; width: 90px; + text-align: right; } From 6673d14eddcb4e9f6e2cd47890dd62ec89651b14 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 18 Aug 2024 18:22:08 +0300 Subject: [PATCH 008/275] Fixed: Duplicated changelog lines --- frontend/src/System/Updates/UpdateChanges.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/System/Updates/UpdateChanges.js b/frontend/src/System/Updates/UpdateChanges.js index 3588069a0..6d672682d 100644 --- a/frontend/src/System/Updates/UpdateChanges.js +++ b/frontend/src/System/Updates/UpdateChanges.js @@ -18,12 +18,14 @@ class UpdateChanges extends Component { return null; } + const uniqueChanges = [...new Set(changes)]; + return (
{title}
    { - changes.map((change, index) => { + uniqueChanges.map((change, index) => { return (
  • From b514de2840f80bd6a18c9fc706ef58883b120292 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 18 Aug 2024 20:10:27 +0300 Subject: [PATCH 009/275] Revert "Fixed: Stale formats score after changing quality profile for artists" This reverts commit afbead8a88efbf150ac427f15c5522efa7bc5d7f. --- frontend/src/Artist/Details/ArtistDetailsConnector.js | 2 +- frontend/src/Components/SignalRConnector.js | 2 -- frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/frontend/src/Artist/Details/ArtistDetailsConnector.js b/frontend/src/Artist/Details/ArtistDetailsConnector.js index ec7228b0a..bed30a937 100644 --- a/frontend/src/Artist/Details/ArtistDetailsConnector.js +++ b/frontend/src/Artist/Details/ArtistDetailsConnector.js @@ -166,7 +166,7 @@ class ArtistDetailsConnector extends Component { // Lifecycle componentDidMount() { - registerPagePopulator(this.populate, ['artistUpdated']); + registerPagePopulator(this.populate); this.populate(); } diff --git a/frontend/src/Components/SignalRConnector.js b/frontend/src/Components/SignalRConnector.js index 40c6265c6..db631de6f 100644 --- a/frontend/src/Components/SignalRConnector.js +++ b/frontend/src/Components/SignalRConnector.js @@ -234,8 +234,6 @@ class SignalRConnector extends Component { if (action === 'updated') { this.props.dispatchUpdateItem({ section, ...body.resource }); - - repopulatePage('artistUpdated'); } else if (action === 'deleted') { this.props.dispatchRemoveItem({ section, id: body.resource.id }); } diff --git a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js index d0d5591bc..dbb4f2235 100644 --- a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js +++ b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js @@ -53,7 +53,7 @@ class CutoffUnmetConnector extends Component { gotoCutoffUnmetFirstPage } = this.props; - registerPagePopulator(this.repopulate, ['artistUpdated', 'trackFileUpdated', 'trackFileDeleted']); + registerPagePopulator(this.repopulate, ['trackFileUpdated', 'trackFileDeleted']); if (useCurrentPage) { fetchCutoffUnmet(); From 963ffbea4ec53f1134dcaf8009d4ba3b23952da5 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 25 Aug 2024 10:15:40 +0300 Subject: [PATCH 010/275] Bump version to 2.5.3 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1957d2429..fbb2f5575 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.5.2' + majorVersion: '2.5.3' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 5fed16c38a91a8a85b1aae87feb952029c1bb5dd Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 20 Aug 2024 14:46:36 -0700 Subject: [PATCH 011/275] Fixed: Limit redirects after login to local paths (cherry picked from commit 14005d8d1054eafaba808337a109d5812f3e79e6) --- src/Lidarr.Http/Authentication/AuthenticationController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Lidarr.Http/Authentication/AuthenticationController.cs b/src/Lidarr.Http/Authentication/AuthenticationController.cs index 447ea4c22..2fc588dd2 100644 --- a/src/Lidarr.Http/Authentication/AuthenticationController.cs +++ b/src/Lidarr.Http/Authentication/AuthenticationController.cs @@ -47,7 +47,7 @@ namespace Lidarr.Http.Authentication await HttpContext.SignInAsync(AuthenticationType.Forms.ToString(), new ClaimsPrincipal(new ClaimsIdentity(claims, "Cookies", "user", "identifier")), authProperties); - if (returnUrl.IsNullOrWhiteSpace()) + if (returnUrl.IsNullOrWhiteSpace() || !Url.IsLocalUrl(returnUrl)) { return Redirect(_configFileProvider.UrlBase + "/"); } From 8f9281f91438e5e04211a273a78c7597a6964b85 Mon Sep 17 00:00:00 2001 From: Treycos <19551067+Treycos@users.noreply.github.com> Date: Mon, 26 Aug 2024 02:22:42 +0200 Subject: [PATCH 012/275] Updated code action fixall value for VSCode (cherry picked from commit 8af4246ff9baee4c291550102769a1186f65dc29) --- frontend/.vscode/settings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/.vscode/settings.json b/frontend/.vscode/settings.json index edb88e0e7..8da95337f 100644 --- a/frontend/.vscode/settings.json +++ b/frontend/.vscode/settings.json @@ -9,7 +9,7 @@ "editor.formatOnSave": false, "editor.codeActionsOnSave": { - "source.fixAll": true + "source.fixAll": "explicit" }, "typescript.preferences.quoteStyle": "single", From 88f4c0c6cd65d5129fe12a7e66821239d018a407 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 21 Aug 2024 18:20:05 +0300 Subject: [PATCH 013/275] Fix disabled style for monitor toggle button (cherry picked from commit dde28cbd7e16b85f78d38c8dde7cf6bbb6119bb3) --- frontend/src/Components/MonitorToggleButton.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/Components/MonitorToggleButton.css b/frontend/src/Components/MonitorToggleButton.css index 59376129d..38f26adea 100644 --- a/frontend/src/Components/MonitorToggleButton.css +++ b/frontend/src/Components/MonitorToggleButton.css @@ -3,9 +3,9 @@ padding: 0; font-size: inherit; -} -.isDisabled { - color: var(--disabledColor); - cursor: not-allowed; + &.isDisabled { + color: var(--disabledColor); + cursor: not-allowed; + } } From df09e903d4c7aeed21986725da8a39d28fe13043 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 23 Aug 2024 19:55:16 +0300 Subject: [PATCH 014/275] New: Bypass IP addresses ranges in proxies (cherry picked from commit 402db9128c214d4c5af6583643cb49d3aa7a28b5) --- src/NzbDrone.Common/Lidarr.Common.csproj | 1 + .../Http/HttpProxySettingsProviderFixture.cs | 4 +++- src/NzbDrone.Core/Http/HttpProxySettingsProvider.cs | 12 +++++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Common/Lidarr.Common.csproj b/src/NzbDrone.Common/Lidarr.Common.csproj index 63d812578..405fd553b 100644 --- a/src/NzbDrone.Common/Lidarr.Common.csproj +++ b/src/NzbDrone.Common/Lidarr.Common.csproj @@ -6,6 +6,7 @@ + diff --git a/src/NzbDrone.Core.Test/Http/HttpProxySettingsProviderFixture.cs b/src/NzbDrone.Core.Test/Http/HttpProxySettingsProviderFixture.cs index 067149904..2beeb16f9 100644 --- a/src/NzbDrone.Core.Test/Http/HttpProxySettingsProviderFixture.cs +++ b/src/NzbDrone.Core.Test/Http/HttpProxySettingsProviderFixture.cs @@ -12,7 +12,7 @@ namespace NzbDrone.Core.Test.Http { private HttpProxySettings GetProxySettings() { - return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com", true, null, null); + return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com,172.16.0.0/12", true, null, null); } [Test] @@ -23,6 +23,7 @@ namespace NzbDrone.Core.Test.Http Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://eu.httpbin.org/get")).Should().BeTrue(); Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://google.com/get")).Should().BeTrue(); Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://localhost:8654/get")).Should().BeTrue(); + Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.21.0.1:8989/api/v3/indexer/schema")).Should().BeTrue(); } [Test] @@ -31,6 +32,7 @@ namespace NzbDrone.Core.Test.Http var settings = GetProxySettings(); Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://bing.com/get")).Should().BeFalse(); + Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.3.0.1:8989/api/v3/indexer/schema")).Should().BeFalse(); } } } diff --git a/src/NzbDrone.Core/Http/HttpProxySettingsProvider.cs b/src/NzbDrone.Core/Http/HttpProxySettingsProvider.cs index 33ed6e31d..32beb8080 100644 --- a/src/NzbDrone.Core/Http/HttpProxySettingsProvider.cs +++ b/src/NzbDrone.Core/Http/HttpProxySettingsProvider.cs @@ -1,5 +1,7 @@ using System; +using System.Linq; using System.Net; +using NetTools; using NzbDrone.Common.Http; using NzbDrone.Common.Http.Proxy; using NzbDrone.Core.Configuration; @@ -52,7 +54,15 @@ namespace NzbDrone.Core.Http // We are utilizing the WebProxy implementation here to save us having to re-implement it. This way we use Microsofts implementation var proxy = new WebProxy(proxySettings.Host + ":" + proxySettings.Port, proxySettings.BypassLocalAddress, proxySettings.BypassListAsArray); - return proxy.IsBypassed((Uri)url); + return proxy.IsBypassed((Uri)url) || IsBypassedByIpAddressRange(proxySettings.BypassListAsArray, url.Host); + } + + private static bool IsBypassedByIpAddressRange(string[] bypassList, string host) + { + return bypassList.Any(bypass => + IPAddressRange.TryParse(bypass, out var ipAddressRange) && + IPAddress.TryParse(host, out var ipAddress) && + ipAddressRange.Contains(ipAddress)); } } } From 75551419619f0329bd1125b9185b80c69dad2a39 Mon Sep 17 00:00:00 2001 From: bakerboy448 <55419169+bakerboy448@users.noreply.github.com> Date: Sun, 25 Aug 2024 19:24:16 -0500 Subject: [PATCH 015/275] Fixed: Trim spaces and empty values in Proxy Bypass List (cherry picked from commit 846333ddf0d9da775c80d004fdb9b41e700ef359) Closes #5044 Closes #5045 --- src/NzbDrone.Common/Http/Proxy/HttpProxySettings.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Common/Http/Proxy/HttpProxySettings.cs b/src/NzbDrone.Common/Http/Proxy/HttpProxySettings.cs index 71164b43a..c80044d29 100644 --- a/src/NzbDrone.Common/Http/Proxy/HttpProxySettings.cs +++ b/src/NzbDrone.Common/Http/Proxy/HttpProxySettings.cs @@ -1,3 +1,4 @@ +using System; using NzbDrone.Common.Extensions; namespace NzbDrone.Common.Http.Proxy @@ -29,7 +30,8 @@ namespace NzbDrone.Common.Http.Proxy { if (!string.IsNullOrWhiteSpace(BypassFilter)) { - var hostlist = BypassFilter.Split(','); + var hostlist = BypassFilter.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + for (var i = 0; i < hostlist.Length; i++) { if (hostlist[i].StartsWith("*")) @@ -41,7 +43,7 @@ namespace NzbDrone.Common.Http.Proxy return hostlist; } - return System.Array.Empty(); + return Array.Empty(); } } From 304646f324234ecbecfc8fcef36daed5c9db2291 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 25 Aug 2024 10:33:52 +0300 Subject: [PATCH 016/275] Fixed: Hide reboot and shutdown UI buttons on docker Closes #5048 --- .../src/Components/Page/Header/PageHeader.js | 6 +- .../Page/Header/PageHeaderActionsMenu.js | 90 ------------------- .../Page/Header/PageHeaderActionsMenu.tsx | 87 ++++++++++++++++++ .../Header/PageHeaderActionsMenuConnector.js | 56 ------------ 4 files changed, 91 insertions(+), 148 deletions(-) delete mode 100644 frontend/src/Components/Page/Header/PageHeaderActionsMenu.js create mode 100644 frontend/src/Components/Page/Header/PageHeaderActionsMenu.tsx delete mode 100644 frontend/src/Components/Page/Header/PageHeaderActionsMenuConnector.js diff --git a/frontend/src/Components/Page/Header/PageHeader.js b/frontend/src/Components/Page/Header/PageHeader.js index ef14de22c..0f5d7129a 100644 --- a/frontend/src/Components/Page/Header/PageHeader.js +++ b/frontend/src/Components/Page/Header/PageHeader.js @@ -7,7 +7,7 @@ import { icons } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import ArtistSearchInputConnector from './ArtistSearchInputConnector'; import KeyboardShortcutsModal from './KeyboardShortcutsModal'; -import PageHeaderActionsMenuConnector from './PageHeaderActionsMenuConnector'; +import PageHeaderActionsMenu from './PageHeaderActionsMenu'; import styles from './PageHeader.css'; class PageHeader extends Component { @@ -83,6 +83,7 @@ class PageHeader extends Component { size={14} title={translate('Donate')} /> + -
diff --git a/frontend/src/Components/Page/Header/PageHeaderActionsMenu.js b/frontend/src/Components/Page/Header/PageHeaderActionsMenu.js deleted file mode 100644 index c14617b29..000000000 --- a/frontend/src/Components/Page/Header/PageHeaderActionsMenu.js +++ /dev/null @@ -1,90 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import Icon from 'Components/Icon'; -import Menu from 'Components/Menu/Menu'; -import MenuButton from 'Components/Menu/MenuButton'; -import MenuContent from 'Components/Menu/MenuContent'; -import MenuItem from 'Components/Menu/MenuItem'; -import MenuItemSeparator from 'Components/Menu/MenuItemSeparator'; -import { align, icons, kinds } from 'Helpers/Props'; -import translate from 'Utilities/String/translate'; -import styles from './PageHeaderActionsMenu.css'; - -function PageHeaderActionsMenu(props) { - const { - formsAuth, - onKeyboardShortcutsPress, - onRestartPress, - onShutdownPress - } = props; - - return ( -
- - - - - - - - - {translate('KeyboardShortcuts')} - - - - - - - {translate('Restart')} - - - - - Shutdown - - - { - formsAuth && -
- } - - { - formsAuth && - - - {translate('Logout')} - - } - -
-
- ); -} - -PageHeaderActionsMenu.propTypes = { - formsAuth: PropTypes.bool.isRequired, - onKeyboardShortcutsPress: PropTypes.func.isRequired, - onRestartPress: PropTypes.func.isRequired, - onShutdownPress: PropTypes.func.isRequired -}; - -export default PageHeaderActionsMenu; diff --git a/frontend/src/Components/Page/Header/PageHeaderActionsMenu.tsx b/frontend/src/Components/Page/Header/PageHeaderActionsMenu.tsx new file mode 100644 index 000000000..7a0c35c1c --- /dev/null +++ b/frontend/src/Components/Page/Header/PageHeaderActionsMenu.tsx @@ -0,0 +1,87 @@ +import React, { useCallback } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import AppState from 'App/State/AppState'; +import Icon from 'Components/Icon'; +import Menu from 'Components/Menu/Menu'; +import MenuButton from 'Components/Menu/MenuButton'; +import MenuContent from 'Components/Menu/MenuContent'; +import MenuItem from 'Components/Menu/MenuItem'; +import MenuItemSeparator from 'Components/Menu/MenuItemSeparator'; +import { align, icons, kinds } from 'Helpers/Props'; +import { restart, shutdown } from 'Store/Actions/systemActions'; +import translate from 'Utilities/String/translate'; +import styles from './PageHeaderActionsMenu.css'; + +interface PageHeaderActionsMenuProps { + onKeyboardShortcutsPress(): void; +} + +function PageHeaderActionsMenu(props: PageHeaderActionsMenuProps) { + const { onKeyboardShortcutsPress } = props; + + const dispatch = useDispatch(); + + const { authentication, isDocker } = useSelector( + (state: AppState) => state.system.status.item + ); + + const formsAuth = authentication === 'forms'; + + const handleRestartPress = useCallback(() => { + dispatch(restart()); + }, [dispatch]); + + const handleShutdownPress = useCallback(() => { + dispatch(shutdown()); + }, [dispatch]); + + return ( +
+ + + + + + + + + {translate('KeyboardShortcuts')} + + + {isDocker ? null : ( + <> + + + + + {translate('Restart')} + + + + + {translate('Shutdown')} + + + )} + + {formsAuth ? ( + <> + + + + + {translate('Logout')} + + + ) : null} + + +
+ ); +} + +export default PageHeaderActionsMenu; diff --git a/frontend/src/Components/Page/Header/PageHeaderActionsMenuConnector.js b/frontend/src/Components/Page/Header/PageHeaderActionsMenuConnector.js deleted file mode 100644 index 3aba95065..000000000 --- a/frontend/src/Components/Page/Header/PageHeaderActionsMenuConnector.js +++ /dev/null @@ -1,56 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import { restart, shutdown } from 'Store/Actions/systemActions'; -import PageHeaderActionsMenu from './PageHeaderActionsMenu'; - -function createMapStateToProps() { - return createSelector( - (state) => state.system.status, - (status) => { - return { - formsAuth: status.item.authentication === 'forms' - }; - } - ); -} - -const mapDispatchToProps = { - restart, - shutdown -}; - -class PageHeaderActionsMenuConnector extends Component { - - // - // Listeners - - onRestartPress = () => { - this.props.restart(); - }; - - onShutdownPress = () => { - this.props.shutdown(); - }; - - // - // Render - - render() { - return ( - - ); - } -} - -PageHeaderActionsMenuConnector.propTypes = { - restart: PropTypes.func.isRequired, - shutdown: PropTypes.func.isRequired -}; - -export default connect(createMapStateToProps, mapDispatchToProps)(PageHeaderActionsMenuConnector); From 30ceb776159e4cb07ba197d2cdb774b03f8fd053 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 19 Aug 2024 02:55:13 +0300 Subject: [PATCH 017/275] New: Bulk manage custom formats Closes #5050 --- frontend/src/App/State/SettingsAppState.ts | 8 + .../CustomFormatSettingsPage.tsx | 9 +- .../Edit/ManageCustomFormatsEditModal.tsx | 28 ++ .../ManageCustomFormatsEditModalContent.css | 16 ++ ...nageCustomFormatsEditModalContent.css.d.ts | 8 + .../ManageCustomFormatsEditModalContent.tsx | 125 +++++++++ .../Manage/ManageCustomFormatsModal.tsx | 20 ++ .../ManageCustomFormatsModalContent.css | 16 ++ .../ManageCustomFormatsModalContent.css.d.ts | 9 + .../ManageCustomFormatsModalContent.tsx | 241 ++++++++++++++++++ .../Manage/ManageCustomFormatsModalRow.css | 6 + .../ManageCustomFormatsModalRow.css.d.ts | 8 + .../Manage/ManageCustomFormatsModalRow.tsx | 54 ++++ .../ManageCustomFormatsToolbarButton.tsx | 28 ++ .../ManageDownloadClientsModalContent.css | 2 +- .../ManageDownloadClientsModalContent.tsx | 4 +- .../Manage/ManageImportListsModalContent.css | 2 +- .../Manage/ManageImportListsModalContent.tsx | 4 +- .../Manage/ManageIndexersModalContent.css | 2 +- .../Manage/ManageIndexersModalContent.tsx | 4 +- .../Store/Actions/Settings/customFormats.js | 48 +++- .../Store/Actions/Settings/downloadClients.js | 4 +- .../src/Store/Actions/Settings/indexers.js | 4 +- frontend/src/typings/CustomFormat.ts | 6 +- .../CustomFormats/CustomFormatBulkResource.cs | 10 + .../CustomFormats/CustomFormatController.cs | 39 ++- .../CustomFormats/CustomFormatService.cs | 23 ++ src/NzbDrone.Core/Localization/Core/en.json | 7 + 28 files changed, 702 insertions(+), 33 deletions(-) create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModal.tsx create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.css create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.css.d.ts create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.tsx create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModal.tsx create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.css create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.css.d.ts create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css.d.ts create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.tsx create mode 100644 frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx create mode 100644 src/Lidarr.Api.V1/CustomFormats/CustomFormatBulkResource.cs diff --git a/frontend/src/App/State/SettingsAppState.ts b/frontend/src/App/State/SettingsAppState.ts index 547f353cd..e3f3bbcc5 100644 --- a/frontend/src/App/State/SettingsAppState.ts +++ b/frontend/src/App/State/SettingsAppState.ts @@ -4,6 +4,7 @@ import AppSectionState, { AppSectionSaveState, AppSectionSchemaState, } from 'App/State/AppSectionState'; +import CustomFormat from 'typings/CustomFormat'; import DownloadClient from 'typings/DownloadClient'; import ImportList from 'typings/ImportList'; import Indexer from 'typings/Indexer'; @@ -41,6 +42,11 @@ export interface MetadataProfilesAppState extends AppSectionState, AppSectionSchemaState {} +export interface CustomFormatAppState + extends AppSectionState, + AppSectionDeleteState, + AppSectionSaveState {} + export interface RootFolderAppState extends AppSectionState, AppSectionDeleteState, @@ -50,6 +56,8 @@ export type IndexerFlagSettingsAppState = AppSectionState; export type UiSettingsAppState = AppSectionItemState; interface SettingsAppState { + advancedSettings: boolean; + customFormats: CustomFormatAppState; downloadClients: DownloadClientAppState; importLists: ImportListAppState; indexerFlags: IndexerFlagSettingsAppState; diff --git a/frontend/src/Settings/CustomFormats/CustomFormatSettingsPage.tsx b/frontend/src/Settings/CustomFormats/CustomFormatSettingsPage.tsx index fee176554..66c208f9a 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormatSettingsPage.tsx +++ b/frontend/src/Settings/CustomFormats/CustomFormatSettingsPage.tsx @@ -1,4 +1,4 @@ -import React, { Fragment } from 'react'; +import React from 'react'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; import PageContent from 'Components/Page/PageContent'; @@ -8,6 +8,7 @@ import ParseToolbarButton from 'Parse/ParseToolbarButton'; import SettingsToolbarConnector from 'Settings/SettingsToolbarConnector'; import translate from 'Utilities/String/translate'; import CustomFormatsConnector from './CustomFormats/CustomFormatsConnector'; +import ManageCustomFormatsToolbarButton from './CustomFormats/Manage/ManageCustomFormatsToolbarButton'; function CustomFormatSettingsPage() { return ( @@ -17,11 +18,13 @@ function CustomFormatSettingsPage() { // @ts-ignore showSave={false} additionalButtons={ - + <> - + + + } /> diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModal.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModal.tsx new file mode 100644 index 000000000..3ff5cfa37 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModal.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import Modal from 'Components/Modal/Modal'; +import ManageCustomFormatsEditModalContent from './ManageCustomFormatsEditModalContent'; + +interface ManageCustomFormatsEditModalProps { + isOpen: boolean; + customFormatIds: number[]; + onSavePress(payload: object): void; + onModalClose(): void; +} + +function ManageCustomFormatsEditModal( + props: ManageCustomFormatsEditModalProps +) { + const { isOpen, customFormatIds, onSavePress, onModalClose } = props; + + return ( + + + + ); +} + +export default ManageCustomFormatsEditModal; diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.css b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.css new file mode 100644 index 000000000..ea406894e --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.css @@ -0,0 +1,16 @@ +.modalFooter { + composes: modalFooter from '~Components/Modal/ModalFooter.css'; + + justify-content: space-between; +} + +.selected { + font-weight: bold; +} + +@media only screen and (max-width: $breakpointExtraSmall) { + .modalFooter { + flex-direction: column; + gap: 10px; + } +} diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.css.d.ts b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.css.d.ts new file mode 100644 index 000000000..cbf2d6328 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.css.d.ts @@ -0,0 +1,8 @@ +// This file is automatically generated. +// Please do not change this file! +interface CssExports { + 'modalFooter': string; + 'selected': string; +} +export const cssExports: CssExports; +export default cssExports; diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.tsx new file mode 100644 index 000000000..25a2f85c2 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.tsx @@ -0,0 +1,125 @@ +import React, { useCallback, useState } from 'react'; +import FormGroup from 'Components/Form/FormGroup'; +import FormInputGroup from 'Components/Form/FormInputGroup'; +import FormLabel from 'Components/Form/FormLabel'; +import Button from 'Components/Link/Button'; +import ModalBody from 'Components/Modal/ModalBody'; +import ModalContent from 'Components/Modal/ModalContent'; +import ModalFooter from 'Components/Modal/ModalFooter'; +import ModalHeader from 'Components/Modal/ModalHeader'; +import { inputTypes } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; +import styles from './ManageCustomFormatsEditModalContent.css'; + +interface SavePayload { + includeCustomFormatWhenRenaming?: boolean; +} + +interface ManageCustomFormatsEditModalContentProps { + customFormatIds: number[]; + onSavePress(payload: object): void; + onModalClose(): void; +} + +const NO_CHANGE = 'noChange'; + +const enableOptions = [ + { + key: NO_CHANGE, + get value() { + return translate('NoChange'); + }, + isDisabled: true, + }, + { + key: 'enabled', + get value() { + return translate('Enabled'); + }, + }, + { + key: 'disabled', + get value() { + return translate('Disabled'); + }, + }, +]; + +function ManageCustomFormatsEditModalContent( + props: ManageCustomFormatsEditModalContentProps +) { + const { customFormatIds, onSavePress, onModalClose } = props; + + const [includeCustomFormatWhenRenaming, setIncludeCustomFormatWhenRenaming] = + useState(NO_CHANGE); + + const save = useCallback(() => { + let hasChanges = false; + const payload: SavePayload = {}; + + if (includeCustomFormatWhenRenaming !== NO_CHANGE) { + hasChanges = true; + payload.includeCustomFormatWhenRenaming = + includeCustomFormatWhenRenaming === 'enabled'; + } + + if (hasChanges) { + onSavePress(payload); + } + + onModalClose(); + }, [includeCustomFormatWhenRenaming, onSavePress, onModalClose]); + + const onInputChange = useCallback( + ({ name, value }: { name: string; value: string }) => { + switch (name) { + case 'includeCustomFormatWhenRenaming': + setIncludeCustomFormatWhenRenaming(value); + break; + default: + console.warn( + `EditCustomFormatsModalContent Unknown Input: '${name}'` + ); + } + }, + [] + ); + + const selectedCount = customFormatIds.length; + + return ( + + {translate('EditSelectedCustomFormats')} + + + + {translate('IncludeCustomFormatWhenRenaming')} + + + + + + +
+ {translate('CountCustomFormatsSelected', { + count: selectedCount, + })} +
+ +
+ + + +
+
+
+ ); +} + +export default ManageCustomFormatsEditModalContent; diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModal.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModal.tsx new file mode 100644 index 000000000..dd3456437 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModal.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import Modal from 'Components/Modal/Modal'; +import ManageCustomFormatsModalContent from './ManageCustomFormatsModalContent'; + +interface ManageCustomFormatsModalProps { + isOpen: boolean; + onModalClose(): void; +} + +function ManageCustomFormatsModal(props: ManageCustomFormatsModalProps) { + const { isOpen, onModalClose } = props; + + return ( + + + + ); +} + +export default ManageCustomFormatsModal; diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.css b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.css new file mode 100644 index 000000000..6ea04a0c8 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.css @@ -0,0 +1,16 @@ +.leftButtons, +.rightButtons { + display: flex; + flex: 1 0 50%; + flex-wrap: wrap; +} + +.rightButtons { + justify-content: flex-end; +} + +.deleteButton { + composes: button from '~Components/Link/Button.css'; + + margin-right: 10px; +} diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.css.d.ts b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.css.d.ts new file mode 100644 index 000000000..7b392fff9 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.css.d.ts @@ -0,0 +1,9 @@ +// This file is automatically generated. +// Please do not change this file! +interface CssExports { + 'deleteButton': string; + 'leftButtons': string; + 'rightButtons': string; +} +export const cssExports: CssExports; +export default cssExports; diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx new file mode 100644 index 000000000..eab8a4d67 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx @@ -0,0 +1,241 @@ +import React, { useCallback, useMemo, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { CustomFormatAppState } from 'App/State/SettingsAppState'; +import Alert from 'Components/Alert'; +import Button from 'Components/Link/Button'; +import SpinnerButton from 'Components/Link/SpinnerButton'; +import LoadingIndicator from 'Components/Loading/LoadingIndicator'; +import ConfirmModal from 'Components/Modal/ConfirmModal'; +import ModalBody from 'Components/Modal/ModalBody'; +import ModalContent from 'Components/Modal/ModalContent'; +import ModalFooter from 'Components/Modal/ModalFooter'; +import ModalHeader from 'Components/Modal/ModalHeader'; +import Table from 'Components/Table/Table'; +import TableBody from 'Components/Table/TableBody'; +import useSelectState from 'Helpers/Hooks/useSelectState'; +import { kinds } from 'Helpers/Props'; +import SortDirection from 'Helpers/Props/SortDirection'; +import { + bulkDeleteCustomFormats, + bulkEditCustomFormats, + setManageCustomFormatsSort, +} from 'Store/Actions/settingsActions'; +import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector'; +import { SelectStateInputProps } from 'typings/props'; +import getErrorMessage from 'Utilities/Object/getErrorMessage'; +import translate from 'Utilities/String/translate'; +import getSelectedIds from 'Utilities/Table/getSelectedIds'; +import ManageCustomFormatsEditModal from './Edit/ManageCustomFormatsEditModal'; +import ManageCustomFormatsModalRow from './ManageCustomFormatsModalRow'; +import styles from './ManageCustomFormatsModalContent.css'; + +// TODO: This feels janky to do, but not sure of a better way currently +type OnSelectedChangeCallback = React.ComponentProps< + typeof ManageCustomFormatsModalRow +>['onSelectedChange']; + +const COLUMNS = [ + { + name: 'name', + label: () => translate('Name'), + isSortable: true, + isVisible: true, + }, + { + name: 'includeCustomFormatWhenRenaming', + label: () => translate('IncludeCustomFormatWhenRenaming'), + isSortable: true, + isVisible: true, + }, +]; + +interface ManageCustomFormatsModalContentProps { + onModalClose(): void; + sortKey?: string; + sortDirection?: SortDirection; +} + +function ManageCustomFormatsModalContent( + props: ManageCustomFormatsModalContentProps +) { + const { onModalClose } = props; + + const { + isFetching, + isPopulated, + isDeleting, + isSaving, + error, + items, + sortKey, + sortDirection, + }: CustomFormatAppState = useSelector( + createClientSideCollectionSelector('settings.customFormats') + ); + const dispatch = useDispatch(); + + const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); + const [isEditModalOpen, setIsEditModalOpen] = useState(false); + + const [selectState, setSelectState] = useSelectState(); + + const { allSelected, allUnselected, selectedState } = selectState; + + const selectedIds: number[] = useMemo(() => { + return getSelectedIds(selectedState); + }, [selectedState]); + + const selectedCount = selectedIds.length; + + const onSortPress = useCallback( + (value: string) => { + dispatch(setManageCustomFormatsSort({ sortKey: value })); + }, + [dispatch] + ); + + const onDeletePress = useCallback(() => { + setIsDeleteModalOpen(true); + }, [setIsDeleteModalOpen]); + + const onDeleteModalClose = useCallback(() => { + setIsDeleteModalOpen(false); + }, [setIsDeleteModalOpen]); + + const onEditPress = useCallback(() => { + setIsEditModalOpen(true); + }, [setIsEditModalOpen]); + + const onEditModalClose = useCallback(() => { + setIsEditModalOpen(false); + }, [setIsEditModalOpen]); + + const onConfirmDelete = useCallback(() => { + dispatch(bulkDeleteCustomFormats({ ids: selectedIds })); + setIsDeleteModalOpen(false); + }, [selectedIds, dispatch]); + + const onSavePress = useCallback( + (payload: object) => { + setIsEditModalOpen(false); + + dispatch( + bulkEditCustomFormats({ + ids: selectedIds, + ...payload, + }) + ); + }, + [selectedIds, dispatch] + ); + + const onSelectAllChange = useCallback( + ({ value }: SelectStateInputProps) => { + setSelectState({ type: value ? 'selectAll' : 'unselectAll', items }); + }, + [items, setSelectState] + ); + + const onSelectedChange = useCallback( + ({ id, value, shiftKey = false }) => { + setSelectState({ + type: 'toggleSelected', + items, + id, + isSelected: value, + shiftKey, + }); + }, + [items, setSelectState] + ); + + const errorMessage = getErrorMessage(error, 'Unable to load custom formats.'); + const anySelected = selectedCount > 0; + + return ( + + {translate('ManageCustomFormats')} + + {isFetching ? : null} + + {error ?
{errorMessage}
: null} + + {isPopulated && !error && !items.length ? ( + {translate('NoCustomFormatsFound')} + ) : null} + + {isPopulated && !!items.length && !isFetching && !isFetching ? ( + + + {items.map((item) => { + return ( + + ); + })} + +
+ ) : null} +
+ + +
+ + {translate('Delete')} + + + + {translate('Edit')} + +
+ + +
+ + + + +
+ ); +} + +export default ManageCustomFormatsModalContent; diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css new file mode 100644 index 000000000..a7c85e340 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css @@ -0,0 +1,6 @@ +.name, +.includeCustomFormatWhenRenaming { + composes: cell from '~Components/Table/Cells/TableRowCell.css'; + + word-break: break-all; +} diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css.d.ts b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css.d.ts new file mode 100644 index 000000000..906d2dc54 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css.d.ts @@ -0,0 +1,8 @@ +// This file is automatically generated. +// Please do not change this file! +interface CssExports { + 'includeCustomFormatWhenRenaming': string; + 'name': string; +} +export const cssExports: CssExports; +export default cssExports; diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.tsx new file mode 100644 index 000000000..32b135970 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.tsx @@ -0,0 +1,54 @@ +import React, { useCallback } from 'react'; +import TableRowCell from 'Components/Table/Cells/TableRowCell'; +import TableSelectCell from 'Components/Table/Cells/TableSelectCell'; +import Column from 'Components/Table/Column'; +import TableRow from 'Components/Table/TableRow'; +import { SelectStateInputProps } from 'typings/props'; +import translate from 'Utilities/String/translate'; +import styles from './ManageCustomFormatsModalRow.css'; + +interface ManageCustomFormatsModalRowProps { + id: number; + name: string; + includeCustomFormatWhenRenaming: boolean; + columns: Column[]; + isSelected?: boolean; + onSelectedChange(result: SelectStateInputProps): void; +} + +function ManageCustomFormatsModalRow(props: ManageCustomFormatsModalRowProps) { + const { + id, + isSelected, + name, + includeCustomFormatWhenRenaming, + onSelectedChange, + } = props; + + const onSelectedChangeWrapper = useCallback( + (result: SelectStateInputProps) => { + onSelectedChange({ + ...result, + }); + }, + [onSelectedChange] + ); + + return ( + + + + {name} + + + {includeCustomFormatWhenRenaming ? translate('Yes') : translate('No')} + + + ); +} + +export default ManageCustomFormatsModalRow; diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx new file mode 100644 index 000000000..f27f9e503 --- /dev/null +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton'; +import useModalOpenState from 'Helpers/Hooks/useModalOpenState'; +import { icons } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; +import ManageCustomFormatsModal from './ManageCustomFormatsModal'; + +function ManageCustomFormatsToolbarButton() { + const [isManageModalOpen, openManageModal, closeManageModal] = + useModalOpenState(false); + + return ( + <> + + + + + ); +} + +export default ManageCustomFormatsToolbarButton; diff --git a/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.css b/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.css index c106388ab..6ea04a0c8 100644 --- a/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.css +++ b/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.css @@ -13,4 +13,4 @@ composes: button from '~Components/Link/Button.css'; margin-right: 10px; -} \ No newline at end of file +} diff --git a/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx b/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx index 2722f02fa..734f5efab 100644 --- a/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx +++ b/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx @@ -220,9 +220,9 @@ function ManageDownloadClientsModalContent( {error ?
{errorMessage}
: null} - {isPopulated && !error && !items.length && ( + {isPopulated && !error && !items.length ? ( {translate('NoDownloadClientsFound')} - )} + ) : null} {isPopulated && !!items.length && !isFetching && !isFetching ? ( {errorMessage} : null} - {isPopulated && !error && !items.length && ( + {isPopulated && !error && !items.length ? ( {translate('NoImportListsFound')} - )} + ) : null} {isPopulated && !!items.length && !isFetching && !isFetching ? (
{errorMessage} : null} - {isPopulated && !error && !items.length && ( + {isPopulated && !error && !items.length ? ( {translate('NoIndexersFound')} - )} + ) : null} {isPopulated && !!items.length && !isFetching && !isFetching ? (
{ return { @@ -47,20 +58,30 @@ export default { // State defaultState: { - isSchemaFetching: false, - isSchemaPopulated: false, isFetching: false, isPopulated: false, + error: null, + isSaving: false, + saveError: null, + isDeleting: false, + deleteError: null, + items: [], + pendingChanges: {}, + + isSchemaFetching: false, + isSchemaPopulated: false, + schemaError: null, schema: { includeCustomFormatWhenRenaming: false }, - error: null, - isDeleting: false, - deleteError: null, - isSaving: false, - saveError: null, - items: [], - pendingChanges: {} + + sortKey: 'name', + sortDirection: sortDirections.ASCENDING, + sortPredicates: { + name: ({ name }) => { + return name.toLocaleLowerCase(); + } + } }, // @@ -82,7 +103,10 @@ export default { })); createSaveProviderHandler(section, '/customformat')(getState, payload, dispatch); - } + }, + + [BULK_EDIT_CUSTOM_FORMATS]: createBulkEditItemHandler(section, '/customformat/bulk'), + [BULK_DELETE_CUSTOM_FORMATS]: createBulkRemoveItemHandler(section, '/customformat/bulk') }, // @@ -102,7 +126,9 @@ export default { newState.pendingChanges = pendingChanges; return updateSectionState(state, section, newState); - } + }, + + [SET_MANAGE_CUSTOM_FORMATS_SORT]: createSetClientSideCollectionSortReducer(section) } }; diff --git a/frontend/src/Store/Actions/Settings/downloadClients.js b/frontend/src/Store/Actions/Settings/downloadClients.js index aee945ef5..1113e7daf 100644 --- a/frontend/src/Store/Actions/Settings/downloadClients.js +++ b/frontend/src/Store/Actions/Settings/downloadClients.js @@ -96,8 +96,8 @@ export default { sortKey: 'name', sortDirection: sortDirections.ASCENDING, sortPredicates: { - name: function(item) { - return item.name.toLowerCase(); + name: ({ name }) => { + return name.toLocaleLowerCase(); } } }, diff --git a/frontend/src/Store/Actions/Settings/indexers.js b/frontend/src/Store/Actions/Settings/indexers.js index 1e9aded2f..511a2e475 100644 --- a/frontend/src/Store/Actions/Settings/indexers.js +++ b/frontend/src/Store/Actions/Settings/indexers.js @@ -100,8 +100,8 @@ export default { sortKey: 'name', sortDirection: sortDirections.ASCENDING, sortPredicates: { - name: function(item) { - return item.name.toLowerCase(); + name: ({ name }) => { + return name.toLocaleLowerCase(); } } }, diff --git a/frontend/src/typings/CustomFormat.ts b/frontend/src/typings/CustomFormat.ts index 7cef9f6ef..b3cc2a845 100644 --- a/frontend/src/typings/CustomFormat.ts +++ b/frontend/src/typings/CustomFormat.ts @@ -1,12 +1,14 @@ +import ModelBase from 'App/ModelBase'; + export interface QualityProfileFormatItem { format: number; name: string; score: number; } -interface CustomFormat { - id: number; +interface CustomFormat extends ModelBase { name: string; + includeCustomFormatWhenRenaming: boolean; } export default CustomFormat; diff --git a/src/Lidarr.Api.V1/CustomFormats/CustomFormatBulkResource.cs b/src/Lidarr.Api.V1/CustomFormats/CustomFormatBulkResource.cs new file mode 100644 index 000000000..4542743c6 --- /dev/null +++ b/src/Lidarr.Api.V1/CustomFormats/CustomFormatBulkResource.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace Lidarr.Api.V1.CustomFormats +{ + public class CustomFormatBulkResource + { + public HashSet Ids { get; set; } = new (); + public bool? IncludeCustomFormatWhenRenaming { get; set; } + } +} diff --git a/src/Lidarr.Api.V1/CustomFormats/CustomFormatController.cs b/src/Lidarr.Api.V1/CustomFormats/CustomFormatController.cs index 6885265db..f43fa1e49 100644 --- a/src/Lidarr.Api.V1/CustomFormats/CustomFormatController.cs +++ b/src/Lidarr.Api.V1/CustomFormats/CustomFormatController.cs @@ -47,6 +47,13 @@ namespace Lidarr.Api.V1.CustomFormats return _formatService.GetById(id).ToResource(true); } + [HttpGet] + [Produces("application/json")] + public List GetAll() + { + return _formatService.All().ToResource(true); + } + [RestPostById] [Consumes("application/json")] public ActionResult Create(CustomFormatResource customFormatResource) @@ -71,11 +78,26 @@ namespace Lidarr.Api.V1.CustomFormats return Accepted(model.Id); } - [HttpGet] + [HttpPut("bulk")] + [Consumes("application/json")] [Produces("application/json")] - public List GetAll() + public virtual ActionResult Update([FromBody] CustomFormatBulkResource resource) { - return _formatService.All().ToResource(true); + if (!resource.Ids.Any()) + { + throw new BadRequestException("ids must be provided"); + } + + var customFormats = resource.Ids.Select(id => _formatService.GetById(id)).ToList(); + + customFormats.ForEach(existing => + { + existing.IncludeCustomFormatWhenRenaming = resource.IncludeCustomFormatWhenRenaming ?? existing.IncludeCustomFormatWhenRenaming; + }); + + _formatService.Update(customFormats); + + return Accepted(customFormats.ConvertAll(cf => cf.ToResource(true))); } [RestDeleteById] @@ -84,12 +106,21 @@ namespace Lidarr.Api.V1.CustomFormats _formatService.Delete(id); } + [HttpDelete("bulk")] + [Consumes("application/json")] + public virtual object DeleteFormats([FromBody] CustomFormatBulkResource resource) + { + _formatService.Delete(resource.Ids.ToList()); + + return new { }; + } + [HttpGet("schema")] public object GetTemplates() { var schema = _specifications.OrderBy(x => x.Order).Select(x => x.ToSchema()).ToList(); - var presets = GetPresets(); + var presets = GetPresets().ToList(); foreach (var item in schema) { diff --git a/src/NzbDrone.Core/CustomFormats/CustomFormatService.cs b/src/NzbDrone.Core/CustomFormats/CustomFormatService.cs index 5475ac5b8..f45a46810 100644 --- a/src/NzbDrone.Core/CustomFormats/CustomFormatService.cs +++ b/src/NzbDrone.Core/CustomFormats/CustomFormatService.cs @@ -9,10 +9,12 @@ namespace NzbDrone.Core.CustomFormats public interface ICustomFormatService { void Update(CustomFormat customFormat); + void Update(List customFormat); CustomFormat Insert(CustomFormat customFormat); List All(); CustomFormat GetById(int id); void Delete(int id); + void Delete(List ids); } public class CustomFormatService : ICustomFormatService @@ -51,6 +53,12 @@ namespace NzbDrone.Core.CustomFormats _cache.Clear(); } + public void Update(List customFormat) + { + _formatRepository.UpdateMany(customFormat); + _cache.Clear(); + } + public CustomFormat Insert(CustomFormat customFormat) { // Add to DB then insert into profiles @@ -72,5 +80,20 @@ namespace NzbDrone.Core.CustomFormats _formatRepository.Delete(id); _cache.Clear(); } + + public void Delete(List ids) + { + foreach (var id in ids) + { + var format = _formatRepository.Get(id); + + // Remove from profiles before removing from DB + _eventAggregator.PublishEvent(new CustomFormatDeletedEvent(format)); + + _formatRepository.Delete(id); + } + + _cache.Clear(); + } } } diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 466664174..4ef39994c 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -245,6 +245,7 @@ "CouldntFindAnyResultsForTerm": "Couldn't find any results for '{0}'", "CountAlbums": "{albumCount} albums", "CountArtistsSelected": "{count} artist(s) selected", + "CountCustomFormatsSelected": "{count} custom formats(s) selected", "CountDownloadClientsSelected": "{selectedCount} download client(s) selected", "CountImportListsSelected": "{selectedCount} import list(s) selected", "CountIndexersSelected": "{selectedCount} indexer(s) selected", @@ -333,6 +334,8 @@ "DeleteRootFolderMessageText": "Are you sure you want to delete the root folder '{name}'?", "DeleteSelected": "Delete Selected", "DeleteSelectedArtists": "Delete Selected Artists", + "DeleteSelectedCustomFormats": "Delete Custom Format(s)", + "DeleteSelectedCustomFormatsMessageText": "Are you sure you want to delete {count} selected custom format(s)?", "DeleteSelectedDownloadClients": "Delete Selected Download Client(s)", "DeleteSelectedDownloadClientsMessageText": "Are you sure you want to delete {count} selected download client(s)?", "DeleteSelectedImportLists": "Delete Import List(s)", @@ -418,6 +421,7 @@ "EditRemotePathMapping": "Edit Remote Path Mapping", "EditRootFolder": "Edit Root Folder", "EditSelectedArtists": "Edit Selected Artists", + "EditSelectedCustomFormats": "Edit Selected Custom Formats", "EditSelectedDownloadClients": "Edit Selected Download Clients", "EditSelectedImportLists": "Edit Selected Import Lists", "EditSelectedIndexers": "Edit Selected Indexers", @@ -575,6 +579,7 @@ "ImportedTo": "Imported To", "Importing": "Importing", "Inactive": "Inactive", + "IncludeCustomFormatWhenRenaming": "Include Custom Format when Renaming", "IncludeCustomFormatWhenRenamingHelpText": "'Include in {Custom Formats} renaming format'", "IncludeHealthWarnings": "Include Health Warnings", "IncludeUnknownArtistItemsHelpText": "Show items without a artist in the queue, this could include removed artists, movies or anything else in {appName}'s category", @@ -669,6 +674,7 @@ "MIA": "MIA", "MaintenanceRelease": "Maintenance Release: bug fixes and other improvements. See Github Commit History for more details", "ManageClients": "Manage Clients", + "ManageCustomFormats": "Manage Custom Formats", "ManageDownloadClients": "Manage Download Clients", "ManageImportLists": "Manage Import Lists", "ManageIndexers": "Manage Indexers", @@ -769,6 +775,7 @@ "NoAlbums": "No albums", "NoBackupsAreAvailable": "No backups are available", "NoChange": "No Change", + "NoCustomFormatsFound": "No custom formats found", "NoCutoffUnmetItems": "No cutoff unmet items", "NoDownloadClientsFound": "No download clients found", "NoEventsFound": "No events found", From 34ac9dbfcbe2580cc0bbf43d15973789151808fa Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 16 Aug 2024 16:13:20 +0300 Subject: [PATCH 018/275] Use autoprefixer in UI build (cherry picked from commit 47a05ecb36e5c960b4f6ca7d279df7c281114611) Closes #5024 --- frontend/postcss.config.js | 1 + package.json | 8 +-- yarn.lock | 110 +++++++++++++++++++++++++++---------- 3 files changed, 85 insertions(+), 34 deletions(-) diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js index f657adf28..89db00f8c 100644 --- a/frontend/postcss.config.js +++ b/frontend/postcss.config.js @@ -16,6 +16,7 @@ const mixinsFiles = [ module.exports = { plugins: [ + 'autoprefixer', ['postcss-mixins', { mixinsFiles }], diff --git a/package.json b/package.json index 48e8e843a..251fd2a04 100644 --- a/package.json +++ b/package.json @@ -105,11 +105,11 @@ "@types/redux-actions": "2.6.2", "@typescript-eslint/eslint-plugin": "6.21.0", "@typescript-eslint/parser": "6.21.0", - "autoprefixer": "10.4.14", + "autoprefixer": "10.4.20", "babel-loader": "9.1.3", "babel-plugin-inline-classnames": "2.0.1", "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "core-js": "3.37.0", + "core-js": "3.38.1", "css-loader": "6.7.3", "css-modules-typescript-loader": "4.0.1", "eslint": "8.57.0", @@ -127,11 +127,11 @@ "html-webpack-plugin": "5.5.1", "loader-utils": "^3.2.1", "mini-css-extract-plugin": "2.7.6", - "postcss": "8.4.38", + "postcss": "8.4.41", "postcss-color-function": "4.1.0", "postcss-loader": "7.3.0", "postcss-mixins": "9.0.4", - "postcss-nested": "6.0.1", + "postcss-nested": "6.2.0", "postcss-simple-vars": "7.0.1", "postcss-url": "10.1.3", "prettier": "2.8.8", diff --git a/yarn.lock b/yarn.lock index fda5bca42..c89347738 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2108,16 +2108,16 @@ async@^3.2.4: resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== -autoprefixer@10.4.14: - version "10.4.14" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" - integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== +autoprefixer@10.4.20: + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: - browserslist "^4.21.5" - caniuse-lite "^1.0.30001464" - fraction.js "^4.2.0" + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.0" + picocolors "^1.0.1" postcss-value-parser "^4.2.0" available-typed-arrays@^1.0.7: @@ -2253,7 +2253,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.14.5, browserslist@^4.21.5, browserslist@^4.22.2, browserslist@^4.23.0: +browserslist@^4.14.5, browserslist@^4.22.2, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -2263,6 +2263,16 @@ browserslist@^4.14.5, browserslist@^4.21.5, browserslist@^4.22.2, browserslist@^ node-releases "^2.0.14" update-browserslist-db "^1.0.13" +browserslist@^4.23.3: + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== + dependencies: + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" + buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -2329,10 +2339,10 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001587: - version "1.0.30001611" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz#4dbe78935b65851c2d2df1868af39f709a93a96e" - integrity sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q== +caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001646: + version "1.0.30001653" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz" + integrity sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw== chalk@^1.1.3: version "1.1.3" @@ -2557,10 +2567,10 @@ core-js-compat@^3.31.0, core-js-compat@^3.36.1: dependencies: browserslist "^4.23.0" -core-js@3.37.0: - version "3.37.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.0.tgz#d8dde58e91d156b2547c19d8a4efd5c7f6c426bb" - integrity sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug== +core-js@3.38.1: + version "3.38.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.38.1.tgz#aa375b79a286a670388a1a363363d53677c0383e" + integrity sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw== core-js@^2.4.0: version "2.6.12" @@ -2928,6 +2938,11 @@ electron-to-chromium@^1.4.668: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.745.tgz#9c202ce9cbf18a5b5e0ca47145fd127cc4dd2290" integrity sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA== +electron-to-chromium@^1.5.4: + version "1.5.9" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.9.tgz#3e92950e3a409d109371b7a153a9c5712e2509fd" + integrity sha512-HfkT8ndXR0SEkU8gBQQM3rz035bpE/hxkZ1YIt4KJPEFES68HfIU6LzKukH0H794Lm83WJtkSAMfEToxCs15VA== + element-class@0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/element-class/-/element-class-0.2.2.tgz#9d3bbd0767f9013ef8e1c8ebe722c1402a60050e" @@ -3122,7 +3137,7 @@ es6-promise@^4.2.8: resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== -escalade@^3.1.1: +escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== @@ -3561,7 +3576,7 @@ fork-ts-checker-webpack-plugin@8.0.0: semver "^7.3.5" tapable "^2.2.1" -fraction.js@^4.2.0: +fraction.js@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== @@ -4918,6 +4933,11 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -5210,6 +5230,11 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -5347,12 +5372,12 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nested@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== +postcss-nested@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== dependencies: - postcss-selector-parser "^6.0.11" + postcss-selector-parser "^6.1.1" postcss-resolve-nested-selector@^0.1.1: version "0.1.1" @@ -5364,7 +5389,7 @@ postcss-safe-parser@^6.0.0: resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.12, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: +postcss-selector-parser@^6.0.12, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.16" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== @@ -5372,6 +5397,14 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.12, postcss-select cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-simple-vars@7.0.1, postcss-simple-vars@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz#836b3097a54dcd13dbd3c36a5dbdd512fad2954c" @@ -5402,13 +5435,13 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.38, postcss@^8.0.0, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.23: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== +postcss@8.4.41: + version "8.4.41" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681" + integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== dependencies: nanoid "^3.3.7" - picocolors "^1.0.0" + picocolors "^1.0.1" source-map-js "^1.2.0" postcss@^6.0.23: @@ -5420,6 +5453,15 @@ postcss@^6.0.23: source-map "^0.6.1" supports-color "^5.4.0" +postcss@^8.0.0, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.23: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + prefix-style@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/prefix-style/-/prefix-style-2.0.1.tgz#66bba9a870cfda308a5dc20e85e9120932c95a06" @@ -7010,6 +7052,14 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" From e60a21967112ddc5cb22ff7ee953639b6f722f1b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 26 Aug 2024 06:35:00 +0300 Subject: [PATCH 019/275] Bump babel packages Closes #5025 --- package.json | 12 +- yarn.lock | 1289 ++++++++++++++++++++++++++------------------------ 2 files changed, 688 insertions(+), 613 deletions(-) diff --git a/package.json b/package.json index 251fd2a04..a12d8984f 100644 --- a/package.json +++ b/package.json @@ -90,13 +90,13 @@ "typescript": "5.1.6" }, "devDependencies": { - "@babel/core": "7.24.4", - "@babel/eslint-parser": "7.24.1", - "@babel/plugin-proposal-export-default-from": "7.24.1", + "@babel/core": "7.25.2", + "@babel/eslint-parser": "7.25.1", + "@babel/plugin-proposal-export-default-from": "7.24.7", "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/preset-env": "7.24.4", - "@babel/preset-react": "7.24.1", - "@babel/preset-typescript": "7.24.1", + "@babel/preset-env": "7.25.3", + "@babel/preset-react": "7.24.7", + "@babel/preset-typescript": "7.24.7", "@types/lodash": "4.14.195", "@types/react-lazyload": "3.2.0", "@types/react-router-dom": "5.3.3", diff --git a/yarn.lock b/yarn.lock index c89347738..5ff87fc49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20,7 +20,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": version "7.24.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== @@ -28,47 +28,60 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.4": +"@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== -"@babel/core@7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" - integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== +"@babel/compat-data@^7.25.2": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" + integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== + +"@babel/core@7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.4" - "@babel/parser" "^7.24.4" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/eslint-parser@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz#e27eee93ed1d271637165ef3a86e2b9332395c32" - integrity sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ== +"@babel/eslint-parser@7.25.1": + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz#469cee4bd18a88ff3edbdfbd227bd20e82aa9b82" + integrity sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.24.1", "@babel/generator@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" - integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== +"@babel/generator@^7.25.0", "@babel/generator@^7.25.4": + version "7.25.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.5.tgz#b31cf05b3fe8c32d206b6dad03bb0aacbde73450" + integrity sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w== dependencies: - "@babel/types" "^7.24.0" + "@babel/types" "^7.25.4" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" @@ -80,14 +93,22 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== +"@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" + integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-compilation-targets@^7.22.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== @@ -98,22 +119,31 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3" - integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ== +"@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/compat-data" "^7.25.2" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" + lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0", "@babel/helper-create-class-features-plugin@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz#57eaf1af38be4224a9d9dd01ddde05b741f50e14" + integrity sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/traverse" "^7.25.4" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -122,6 +152,15 @@ regexpu-core "^5.3.1" semver "^6.3.1" +"@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0", "@babel/helper-create-regexp-features-plugin@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" + integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + regexpu-core "^5.3.1" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.6.1": version "0.6.1" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" @@ -133,134 +172,129 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@babel/helper-member-expression-to-functions@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" + integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.8" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== dependencies: - "@babel/types" "^7.23.0" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.2" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== +"@babel/helper-optimise-call-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" + integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== dependencies: - "@babel/types" "^7.24.0" + "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" +"@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== -"@babel/helper-replace-supers@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" - integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== +"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" + integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-wrap-function" "^7.25.0" + "@babel/traverse" "^7.25.0" -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== +"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" + integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== dependencies: - "@babel/types" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/traverse" "^7.25.0" -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== +"@babel/helper-skip-transparent-expression-wrappers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" "@babel/helper-string-parser@^7.23.4": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" +"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== -"@babel/helpers@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" - integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== +"@babel/helper-wrap-function@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" + integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/helpers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" + integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== + dependencies: + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" "@babel/highlight@^7.24.2": version "7.24.2" @@ -272,50 +306,69 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" - integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz#6125f0158543fb4edf1c22f322f3db67f21cb3e1" - integrity sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA== +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" - integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== +"@babel/parser@^7.25.0", "@babel/parser@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.4.tgz#af4f2df7d02440286b7de57b1c21acfb2a6f257a" + integrity sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/types" "^7.25.4" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" - integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" + integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.3" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" - integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" + integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-proposal-export-default-from@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.1.tgz#d242019488277c9a5a8035e5b70de54402644b89" - integrity sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" + integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-export-default-from" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" + integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" + integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.0" + +"@babel/plugin-proposal-export-default-from@7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.7.tgz#0b539c46b8ac804f694e338f803c8354c0f788b6" + integrity sha512-CcmFwUJ3tKhLjPdt4NP+SHMshebytF8ZTYOv5ZDpkzq2sin80Wb5vJrGt8fhPrORQCfoSa0LAxC/DW+GAC5+Hw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-export-default-from" "^7.24.7" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -350,12 +403,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz#a92852e694910ae4295e6e51e87b83507ed5e6e8" - integrity sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA== +"@babel/plugin-syntax-export-default-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz#85dae9098933573aae137fb52141dd3ca52ae7ac" + integrity sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" @@ -364,19 +417,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" - integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== +"@babel/plugin-syntax-import-assertions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" + integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-import-attributes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" - integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" + integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" @@ -392,12 +445,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" - integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== +"@babel/plugin-syntax-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" + integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -455,12 +508,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" - integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== +"@babel/plugin-syntax-typescript@^7.24.7": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz#04db9ce5a9043d9c635e75ae7969a2cd50ca97ff" + integrity sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -470,457 +523,465 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" - integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== +"@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" + integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-async-generator-functions@^7.24.3": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" - integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== +"@babel/plugin-transform-async-generator-functions@^7.25.0": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz#2afd4e639e2d055776c9f091b6c0c180ed8cf083" + integrity sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-remap-async-to-generator" "^7.25.0" "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/traverse" "^7.25.4" -"@babel/plugin-transform-async-to-generator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" - integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== +"@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== dependencies: - "@babel/helper-module-imports" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" -"@babel/plugin-transform-block-scoped-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" - integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== +"@babel/plugin-transform-block-scoped-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" + integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-block-scoping@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012" - integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g== +"@babel/plugin-transform-block-scoping@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" + integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-class-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" - integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== +"@babel/plugin-transform-class-properties@^7.24.7": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz#bae7dbfcdcc2e8667355cd1fb5eda298f05189fd" + integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.25.4" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-class-static-block@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz#1a4653c0cf8ac46441ec406dece6e9bc590356a4" - integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== +"@babel/plugin-transform-class-static-block@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" + integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" - integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== +"@babel/plugin-transform-classes@^7.25.0": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz#d29dbb6a72d79f359952ad0b66d88518d65ef89a" + integrity sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/traverse" "^7.25.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" - integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== +"@babel/plugin-transform-computed-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/template" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" -"@babel/plugin-transform-destructuring@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" - integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== +"@babel/plugin-transform-destructuring@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" + integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-dotall-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" - integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== +"@babel/plugin-transform-dotall-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" + integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-duplicate-keys@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" - integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== +"@babel/plugin-transform-duplicate-keys@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" + integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-dynamic-import@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" - integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" + integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-dynamic-import@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" + integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" - integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== +"@babel/plugin-transform-exponentiation-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" + integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-export-namespace-from@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" - integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== +"@babel/plugin-transform-export-namespace-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" - integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== +"@babel/plugin-transform-for-of@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" + integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-function-name@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" - integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== +"@babel/plugin-transform-function-name@^7.25.1": + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" + integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.1" -"@babel/plugin-transform-json-strings@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" - integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== +"@babel/plugin-transform-json-strings@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" + integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" - integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== +"@babel/plugin-transform-literals@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" + integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-logical-assignment-operators@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" - integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" + integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" - integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== +"@babel/plugin-transform-member-expression-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" + integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-amd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" - integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== +"@babel/plugin-transform-modules-amd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" + integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-commonjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" - integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== +"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" + integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-simple-access" "^7.24.7" -"@babel/plugin-transform-modules-systemjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" - integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== +"@babel/plugin-transform-modules-systemjs@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" + integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-transforms" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.0" -"@babel/plugin-transform-modules-umd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" - integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== +"@babel/plugin-transform-modules-umd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" + integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-new-target@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" - integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== +"@babel/plugin-transform-new-target@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" + integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" - integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" + integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" - integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" + integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" - integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-parameters" "^7.24.7" -"@babel/plugin-transform-object-super@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" - integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== +"@babel/plugin-transform-object-super@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" + integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" -"@babel/plugin-transform-optional-catch-binding@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" - integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" + integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" - integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== +"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" + integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" - integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== +"@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-private-methods@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" - integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== +"@babel/plugin-transform-private-methods@^7.24.7": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz#9bbefbe3649f470d681997e0b64a4b254d877242" + integrity sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.25.4" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-private-property-in-object@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" - integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" - integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== +"@babel/plugin-transform-property-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" + integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-react-display-name@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" - integrity sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw== +"@babel/plugin-transform-react-display-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" + integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-react-jsx-development@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" + integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.24.7" -"@babel/plugin-transform-react-jsx@^7.22.5", "@babel/plugin-transform-react-jsx@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" - integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== +"@babel/plugin-transform-react-jsx@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" + integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/types" "^7.23.4" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/types" "^7.25.2" -"@babel/plugin-transform-react-pure-annotations@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz#c86bce22a53956331210d268e49a0ff06e392470" - integrity sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA== +"@babel/plugin-transform-react-pure-annotations@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" + integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-regenerator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" - integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" + integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" - integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== +"@babel/plugin-transform-reserved-words@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" + integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-shorthand-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" - integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== +"@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" + integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" - integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== +"@babel/plugin-transform-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-sticky-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" - integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== +"@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-template-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" - integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== +"@babel/plugin-transform-template-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" + integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-typeof-symbol@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" - integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== +"@babel/plugin-transform-typeof-symbol@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" + integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-typescript@^7.24.1": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz#03e0492537a4b953e491f53f2bc88245574ebd15" - integrity sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g== +"@babel/plugin-transform-typescript@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" + integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-typescript" "^7.24.1" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-typescript" "^7.24.7" -"@babel/plugin-transform-unicode-escapes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" - integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== +"@babel/plugin-transform-unicode-escapes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" + integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-property-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" - integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== +"@babel/plugin-transform-unicode-property-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" + integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" - integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== +"@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-sets-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" - integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== +"@babel/plugin-transform-unicode-sets-regex@^7.24.7": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz#be664c2a0697ffacd3423595d5edef6049e8946c" + integrity sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/preset-env@7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.4.tgz#46dbbcd608771373b88f956ffb67d471dce0d23b" - integrity sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A== +"@babel/preset-env@7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.3.tgz#0bf4769d84ac51d1073ab4a86f00f30a3a83c67c" + integrity sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g== dependencies: - "@babel/compat-data" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.4" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" + "@babel/compat-data" "^7.25.2" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.1" - "@babel/plugin-syntax-import-attributes" "^7.24.1" + "@babel/plugin-syntax-import-assertions" "^7.24.7" + "@babel/plugin-syntax-import-attributes" "^7.24.7" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -932,59 +993,60 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.1" - "@babel/plugin-transform-async-generator-functions" "^7.24.3" - "@babel/plugin-transform-async-to-generator" "^7.24.1" - "@babel/plugin-transform-block-scoped-functions" "^7.24.1" - "@babel/plugin-transform-block-scoping" "^7.24.4" - "@babel/plugin-transform-class-properties" "^7.24.1" - "@babel/plugin-transform-class-static-block" "^7.24.4" - "@babel/plugin-transform-classes" "^7.24.1" - "@babel/plugin-transform-computed-properties" "^7.24.1" - "@babel/plugin-transform-destructuring" "^7.24.1" - "@babel/plugin-transform-dotall-regex" "^7.24.1" - "@babel/plugin-transform-duplicate-keys" "^7.24.1" - "@babel/plugin-transform-dynamic-import" "^7.24.1" - "@babel/plugin-transform-exponentiation-operator" "^7.24.1" - "@babel/plugin-transform-export-namespace-from" "^7.24.1" - "@babel/plugin-transform-for-of" "^7.24.1" - "@babel/plugin-transform-function-name" "^7.24.1" - "@babel/plugin-transform-json-strings" "^7.24.1" - "@babel/plugin-transform-literals" "^7.24.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" - "@babel/plugin-transform-member-expression-literals" "^7.24.1" - "@babel/plugin-transform-modules-amd" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-modules-systemjs" "^7.24.1" - "@babel/plugin-transform-modules-umd" "^7.24.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.24.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" - "@babel/plugin-transform-numeric-separator" "^7.24.1" - "@babel/plugin-transform-object-rest-spread" "^7.24.1" - "@babel/plugin-transform-object-super" "^7.24.1" - "@babel/plugin-transform-optional-catch-binding" "^7.24.1" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - "@babel/plugin-transform-parameters" "^7.24.1" - "@babel/plugin-transform-private-methods" "^7.24.1" - "@babel/plugin-transform-private-property-in-object" "^7.24.1" - "@babel/plugin-transform-property-literals" "^7.24.1" - "@babel/plugin-transform-regenerator" "^7.24.1" - "@babel/plugin-transform-reserved-words" "^7.24.1" - "@babel/plugin-transform-shorthand-properties" "^7.24.1" - "@babel/plugin-transform-spread" "^7.24.1" - "@babel/plugin-transform-sticky-regex" "^7.24.1" - "@babel/plugin-transform-template-literals" "^7.24.1" - "@babel/plugin-transform-typeof-symbol" "^7.24.1" - "@babel/plugin-transform-unicode-escapes" "^7.24.1" - "@babel/plugin-transform-unicode-property-regex" "^7.24.1" - "@babel/plugin-transform-unicode-regex" "^7.24.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.0" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoped-functions" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.25.0" + "@babel/plugin-transform-class-properties" "^7.24.7" + "@babel/plugin-transform-class-static-block" "^7.24.7" + "@babel/plugin-transform-classes" "^7.25.0" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.8" + "@babel/plugin-transform-dotall-regex" "^7.24.7" + "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" + "@babel/plugin-transform-dynamic-import" "^7.24.7" + "@babel/plugin-transform-exponentiation-operator" "^7.24.7" + "@babel/plugin-transform-export-namespace-from" "^7.24.7" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.25.1" + "@babel/plugin-transform-json-strings" "^7.24.7" + "@babel/plugin-transform-literals" "^7.25.2" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-member-expression-literals" "^7.24.7" + "@babel/plugin-transform-modules-amd" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.8" + "@babel/plugin-transform-modules-systemjs" "^7.25.0" + "@babel/plugin-transform-modules-umd" "^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-new-target" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-object-super" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.8" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-property-literals" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-reserved-words" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-template-literals" "^7.24.7" + "@babel/plugin-transform-typeof-symbol" "^7.24.8" + "@babel/plugin-transform-unicode-escapes" "^7.24.7" + "@babel/plugin-transform-unicode-property-regex" "^7.24.7" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.4" babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.31.0" + core-js-compat "^3.37.1" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -996,28 +1058,28 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.1.tgz#2450c2ac5cc498ef6101a6ca5474de251e33aa95" - integrity sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA== +"@babel/preset-react@7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" + integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-transform-react-display-name" "^7.24.1" - "@babel/plugin-transform-react-jsx" "^7.23.4" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx-development" "^7.24.7" + "@babel/plugin-transform-react-pure-annotations" "^7.24.7" -"@babel/preset-typescript@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" - integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== +"@babel/preset-typescript@7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" + integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-syntax-jsx" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-typescript" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.24.7" "@babel/regjsgen@^0.8.0": version "0.8.0" @@ -1031,32 +1093,29 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== +"@babel/template@^7.24.7", "@babel/template@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" -"@babel/traverse@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" - integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== +"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.4.tgz#648678046990f2957407e3086e97044f13c3e18e" + integrity sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg== dependencies: - "@babel/code-frame" "^7.24.1" - "@babel/generator" "^7.24.1" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.4" + "@babel/parser" "^7.25.4" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.4" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.4.4": +"@babel/types@^7.22.5", "@babel/types@^7.4.4": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== @@ -1065,6 +1124,15 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.4.tgz#6bcb46c72fdf1012a209d016c07f769e10adcb5f" + integrity sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + "@csstools/css-parser-algorithms@^2.1.1": version "2.6.1" resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz#c45440d1efa2954006748a01697072dae5881bcd" @@ -2263,7 +2331,7 @@ browserslist@^4.14.5, browserslist@^4.22.2, browserslist@^4.23.0: node-releases "^2.0.14" update-browserslist-db "^1.0.13" -browserslist@^4.23.3: +browserslist@^4.23.1, browserslist@^4.23.3: version "4.23.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== @@ -2560,13 +2628,20 @@ copy-anything@^2.0.1: dependencies: is-what "^3.14.1" -core-js-compat@^3.31.0, core-js-compat@^3.36.1: +core-js-compat@^3.36.1: version "3.37.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.0.tgz#d9570e544163779bb4dff1031c7972f44918dc73" integrity sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA== dependencies: browserslist "^4.23.0" +core-js-compat@^3.37.1: + version "3.38.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" + integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== + dependencies: + browserslist "^4.23.3" + core-js@3.38.1: version "3.38.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.38.1.tgz#aa375b79a286a670388a1a363363d53677c0383e" From 281bcb28fe967bb240310b0334edd97d8c2e3d5b Mon Sep 17 00:00:00 2001 From: martylukyy <35452459+martylukyy@users.noreply.github.com> Date: Mon, 19 Aug 2024 03:59:43 +0200 Subject: [PATCH 020/275] New: Configure log file size limit in UI (cherry picked from commit 35baebaf7280749d5dfe5440e28b425e45a22d21) Closes #5023 --- .../src/Settings/General/GeneralSettings.js | 1 + .../src/Settings/General/LoggingSettings.js | 23 ++++++++++++++++++- .../Config/HostConfigController.cs | 2 ++ .../Config/HostConfigResource.cs | 2 ++ src/NzbDrone.Core/Localization/Core/en.json | 2 ++ 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/frontend/src/Settings/General/GeneralSettings.js b/frontend/src/Settings/General/GeneralSettings.js index 91e7287ee..39340c856 100644 --- a/frontend/src/Settings/General/GeneralSettings.js +++ b/frontend/src/Settings/General/GeneralSettings.js @@ -156,6 +156,7 @@ class GeneralSettings extends Component { /> diff --git a/frontend/src/Settings/General/LoggingSettings.js b/frontend/src/Settings/General/LoggingSettings.js index 93918a3d2..043867853 100644 --- a/frontend/src/Settings/General/LoggingSettings.js +++ b/frontend/src/Settings/General/LoggingSettings.js @@ -15,12 +15,14 @@ const logLevelOptions = [ function LoggingSettings(props) { const { + advancedSettings, settings, onInputChange } = props; const { - logLevel + logLevel, + logSizeLimit } = settings; return ( @@ -39,11 +41,30 @@ function LoggingSettings(props) { {...logLevel} /> + + + {translate('LogSizeLimit')} + + + ); } LoggingSettings.propTypes = { + advancedSettings: PropTypes.bool.isRequired, settings: PropTypes.object.isRequired, onInputChange: PropTypes.func.isRequired }; diff --git a/src/Lidarr.Api.V1/Config/HostConfigController.cs b/src/Lidarr.Api.V1/Config/HostConfigController.cs index 3184a1a83..ca3f88fc2 100644 --- a/src/Lidarr.Api.V1/Config/HostConfigController.cs +++ b/src/Lidarr.Api.V1/Config/HostConfigController.cs @@ -61,6 +61,8 @@ namespace Lidarr.Api.V1.Config .Must((resource, path) => IsValidSslCertificate(resource)).WithMessage("Invalid SSL certificate file or password") .When(c => c.EnableSsl); + SharedValidator.RuleFor(c => c.LogSizeLimit).InclusiveBetween(1, 10); + SharedValidator.RuleFor(c => c.Branch).NotEmpty().WithMessage("Branch name is required, 'master' is the default"); SharedValidator.RuleFor(c => c.UpdateScriptPath).IsValidPath().When(c => c.UpdateMechanism == UpdateMechanism.Script); diff --git a/src/Lidarr.Api.V1/Config/HostConfigResource.cs b/src/Lidarr.Api.V1/Config/HostConfigResource.cs index 9182901cb..596b77c73 100644 --- a/src/Lidarr.Api.V1/Config/HostConfigResource.cs +++ b/src/Lidarr.Api.V1/Config/HostConfigResource.cs @@ -21,6 +21,7 @@ namespace Lidarr.Api.V1.Config public string Password { get; set; } public string PasswordConfirmation { get; set; } public string LogLevel { get; set; } + public int LogSizeLimit { get; set; } public string ConsoleLogLevel { get; set; } public string Branch { get; set; } public string ApiKey { get; set; } @@ -65,6 +66,7 @@ namespace Lidarr.Api.V1.Config // Username // Password LogLevel = model.LogLevel, + LogSizeLimit = model.LogSizeLimit, ConsoleLogLevel = model.ConsoleLogLevel, Branch = model.Branch, ApiKey = model.ApiKey, diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 4ef39994c..abdd53139 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -666,6 +666,8 @@ "LogFiles": "Log Files", "LogLevel": "Log Level", "LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "Trace logging should only be enabled temporarily", + "LogSizeLimit": "Log Size Limit", + "LogSizeLimitHelpText": "Maximum log file size in MB before archiving. Default is 1MB.", "Logging": "Logging", "Logout": "Logout", "Logs": "Logs", From 8ff8c27e24113b178ab65386d847d66260e51b1e Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 9 May 2024 20:09:45 +0300 Subject: [PATCH 021/275] New: Root folder exists validation for import lists Closes #4820 --- .../ImportLists/ImportListController.cs | 17 +++++++++---- .../MetadataProfileExistsValidator.cs | 15 ++++------- .../Paths/RootFolderExistsValidator.cs | 25 +++++++++++++++++++ 3 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 src/NzbDrone.Core/Validation/Paths/RootFolderExistsValidator.cs diff --git a/src/Lidarr.Api.V1/ImportLists/ImportListController.cs b/src/Lidarr.Api.V1/ImportLists/ImportListController.cs index f98c841f9..ff2ed98db 100644 --- a/src/Lidarr.Api.V1/ImportLists/ImportListController.cs +++ b/src/Lidarr.Api.V1/ImportLists/ImportListController.cs @@ -1,3 +1,4 @@ +using FluentValidation; using Lidarr.Http; using NzbDrone.Core.ImportLists; using NzbDrone.Core.Validation; @@ -12,16 +13,22 @@ namespace Lidarr.Api.V1.ImportLists public static readonly ImportListBulkResourceMapper BulkResourceMapper = new (); public ImportListController(IImportListFactory importListFactory, + RootFolderExistsValidator rootFolderExistsValidator, QualityProfileExistsValidator qualityProfileExistsValidator, MetadataProfileExistsValidator metadataProfileExistsValidator) : base(importListFactory, "importlist", ResourceMapper, BulkResourceMapper) { - Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.QualityProfileId)); - Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.MetadataProfileId)); + SharedValidator.RuleFor(c => c.RootFolderPath).Cascade(CascadeMode.Stop) + .IsValidPath() + .SetValidator(rootFolderExistsValidator); - SharedValidator.RuleFor(c => c.RootFolderPath).IsValidPath(); - SharedValidator.RuleFor(c => c.QualityProfileId).SetValidator(qualityProfileExistsValidator); - SharedValidator.RuleFor(c => c.MetadataProfileId).SetValidator(metadataProfileExistsValidator); + SharedValidator.RuleFor(c => c.QualityProfileId).Cascade(CascadeMode.Stop) + .ValidId() + .SetValidator(qualityProfileExistsValidator); + + SharedValidator.RuleFor(c => c.MetadataProfileId).Cascade(CascadeMode.Stop) + .ValidId() + .SetValidator(metadataProfileExistsValidator); } } } diff --git a/src/NzbDrone.Core/Validation/MetadataProfileExistsValidator.cs b/src/NzbDrone.Core/Validation/MetadataProfileExistsValidator.cs index 328d7f8c3..e0df1569e 100644 --- a/src/NzbDrone.Core/Validation/MetadataProfileExistsValidator.cs +++ b/src/NzbDrone.Core/Validation/MetadataProfileExistsValidator.cs @@ -5,28 +5,23 @@ namespace NzbDrone.Core.Validation { public class MetadataProfileExistsValidator : PropertyValidator { - private readonly IMetadataProfileService _profileService; + private readonly IMetadataProfileService _metadataProfileService; - public MetadataProfileExistsValidator(IMetadataProfileService profileService) + public MetadataProfileExistsValidator(IMetadataProfileService metadataProfileService) { - _profileService = profileService; + _metadataProfileService = metadataProfileService; } protected override string GetDefaultMessageTemplate() => "Metadata profile does not exist"; protected override bool IsValid(PropertyValidatorContext context) { - if (context.PropertyValue == null) + if (context?.PropertyValue == null || (int)context.PropertyValue == 0) { return true; } - if ((int)context.PropertyValue == 0) - { - return true; - } - - return _profileService.Exists((int)context.PropertyValue); + return _metadataProfileService.Exists((int)context.PropertyValue); } } } diff --git a/src/NzbDrone.Core/Validation/Paths/RootFolderExistsValidator.cs b/src/NzbDrone.Core/Validation/Paths/RootFolderExistsValidator.cs new file mode 100644 index 000000000..8b4c4e7a0 --- /dev/null +++ b/src/NzbDrone.Core/Validation/Paths/RootFolderExistsValidator.cs @@ -0,0 +1,25 @@ +using FluentValidation.Validators; +using NzbDrone.Common.Extensions; +using NzbDrone.Core.RootFolders; + +namespace NzbDrone.Core.Validation.Paths +{ + public class RootFolderExistsValidator : PropertyValidator + { + private readonly IRootFolderService _rootFolderService; + + public RootFolderExistsValidator(IRootFolderService rootFolderService) + { + _rootFolderService = rootFolderService; + } + + protected override string GetDefaultMessageTemplate() => "Root folder '{path}' does not exist"; + + protected override bool IsValid(PropertyValidatorContext context) + { + context.MessageFormatter.AppendArgument("path", context.PropertyValue?.ToString()); + + return context.PropertyValue == null || _rootFolderService.All().Exists(r => r.Path.PathEquals(context.PropertyValue.ToString())); + } + } +} From f49388f3c4e78f776a729285050e4c46c79735ff Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 26 Aug 2024 03:23:24 +0300 Subject: [PATCH 022/275] Fixed: Ensure Root Folder exists when Adding Artist Closes #5041 --- src/Lidarr.Api.V1/Artist/ArtistController.cs | 4 ++++ .../Validation/Paths/RootFolderExistsValidator.cs | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Lidarr.Api.V1/Artist/ArtistController.cs b/src/Lidarr.Api.V1/Artist/ArtistController.cs index e5829ff96..b31698541 100644 --- a/src/Lidarr.Api.V1/Artist/ArtistController.cs +++ b/src/Lidarr.Api.V1/Artist/ArtistController.cs @@ -63,6 +63,7 @@ namespace Lidarr.Api.V1.Artist SystemFolderValidator systemFolderValidator, QualityProfileExistsValidator qualityProfileExistsValidator, MetadataProfileExistsValidator metadataProfileExistsValidator, + RootFolderExistsValidator rootFolderExistsValidator, ArtistFolderAsRootFolderValidator artistFolderAsRootFolderValidator) : base(signalRBroadcaster) { @@ -95,6 +96,7 @@ namespace Lidarr.Api.V1.Artist PostValidator.RuleFor(s => s.Path).IsValidPath().When(s => s.RootFolderPath.IsNullOrWhiteSpace()); PostValidator.RuleFor(s => s.RootFolderPath) .IsValidPath() + .SetValidator(rootFolderExistsValidator) .SetValidator(artistFolderAsRootFolderValidator) .When(s => s.Path.IsNullOrWhiteSpace()); PostValidator.RuleFor(s => s.ArtistName).NotEmpty(); @@ -154,6 +156,7 @@ namespace Lidarr.Api.V1.Artist [RestPostById] [Consumes("application/json")] + [Produces("application/json")] public ActionResult AddArtist(ArtistResource artistResource) { var artist = _addArtistService.AddArtist(artistResource.ToModel()); @@ -163,6 +166,7 @@ namespace Lidarr.Api.V1.Artist [RestPutById] [Consumes("application/json")] + [Produces("application/json")] public ActionResult UpdateArtist(ArtistResource artistResource, bool moveFiles = false) { var artist = _artistService.GetArtist(artistResource.Id); diff --git a/src/NzbDrone.Core/Validation/Paths/RootFolderExistsValidator.cs b/src/NzbDrone.Core/Validation/Paths/RootFolderExistsValidator.cs index 8b4c4e7a0..d879af0d9 100644 --- a/src/NzbDrone.Core/Validation/Paths/RootFolderExistsValidator.cs +++ b/src/NzbDrone.Core/Validation/Paths/RootFolderExistsValidator.cs @@ -1,4 +1,5 @@ using FluentValidation.Validators; +using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.RootFolders; @@ -19,7 +20,7 @@ namespace NzbDrone.Core.Validation.Paths { context.MessageFormatter.AppendArgument("path", context.PropertyValue?.ToString()); - return context.PropertyValue == null || _rootFolderService.All().Exists(r => r.Path.PathEquals(context.PropertyValue.ToString())); + return context.PropertyValue == null || _rootFolderService.All().Exists(r => r.Path.IsPathValid(PathValidationType.CurrentOs) && r.Path.PathEquals(context.PropertyValue.ToString())); } } } From bb6528c104ecb722e85b8f5f74d8f64dd6a967aa Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 26 Aug 2024 06:50:53 +0300 Subject: [PATCH 023/275] Upgrade nlog to 5.3.3 Closes #4980 --- src/Lidarr.Api.V1/Lidarr.Api.V1.csproj | 2 +- src/Lidarr.Http/Lidarr.Http.csproj | 2 +- .../Extensions/SentryLoggerExtensions.cs | 2 +- .../Instrumentation/NzbDroneFileTarget.cs | 2 +- .../Instrumentation/NzbDroneLogger.cs | 22 +++++++++---------- src/NzbDrone.Common/Lidarr.Common.csproj | 2 +- .../Instrumentation/ReconfigureLogging.cs | 1 + src/NzbDrone.Core/Lidarr.Core.csproj | 4 ++-- src/NzbDrone.Host/Startup.cs | 4 ++-- src/NzbDrone.Mono/Lidarr.Mono.csproj | 2 +- .../Lidarr.Test.Common.csproj | 2 +- src/NzbDrone.Update/Lidarr.Update.csproj | 2 +- src/NzbDrone.Windows/Lidarr.Windows.csproj | 2 +- 13 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj b/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj index da4390af4..7ad7f394f 100644 --- a/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj +++ b/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/Lidarr.Http/Lidarr.Http.csproj b/src/Lidarr.Http/Lidarr.Http.csproj index 5f2136f70..180b3d08f 100644 --- a/src/Lidarr.Http/Lidarr.Http.csproj +++ b/src/Lidarr.Http/Lidarr.Http.csproj @@ -5,7 +5,7 @@ - + diff --git a/src/NzbDrone.Common/Instrumentation/Extensions/SentryLoggerExtensions.cs b/src/NzbDrone.Common/Instrumentation/Extensions/SentryLoggerExtensions.cs index 417ee4a59..68201d62c 100644 --- a/src/NzbDrone.Common/Instrumentation/Extensions/SentryLoggerExtensions.cs +++ b/src/NzbDrone.Common/Instrumentation/Extensions/SentryLoggerExtensions.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using NLog; diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs index 26c98968b..84658cf74 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs +++ b/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs @@ -1,4 +1,4 @@ -using System.Text; +using System.Text; using NLog; using NLog.Targets; diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs index f9276a873..b4ccf5580 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs +++ b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs @@ -103,17 +103,6 @@ namespace NzbDrone.Common.Instrumentation LogManager.Configuration.LoggingRules.Add(loggingRule); } - private static void RegisterGlobalFilters() - { - LogManager.Setup().LoadConfiguration(c => - { - c.ForLogger("System.*").WriteToNil(LogLevel.Warn); - c.ForLogger("Microsoft.*").WriteToNil(LogLevel.Warn); - c.ForLogger("Microsoft.Hosting.Lifetime*").WriteToNil(LogLevel.Info); - c.ForLogger("Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware").WriteToNil(LogLevel.Fatal); - }); - } - private static void RegisterConsole() { var level = LogLevel.Trace; @@ -195,6 +184,17 @@ namespace NzbDrone.Common.Instrumentation LogManager.Configuration.LoggingRules.Insert(0, rule); } + private static void RegisterGlobalFilters() + { + LogManager.Setup().LoadConfiguration(c => + { + c.ForLogger("System.*").WriteToNil(LogLevel.Warn); + c.ForLogger("Microsoft.*").WriteToNil(LogLevel.Warn); + c.ForLogger("Microsoft.Hosting.Lifetime*").WriteToNil(LogLevel.Info); + c.ForLogger("Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware").WriteToNil(LogLevel.Fatal); + }); + } + public static Logger GetLogger(Type obj) { return LogManager.GetLogger(obj.Name.Replace("NzbDrone.", "")); diff --git a/src/NzbDrone.Common/Lidarr.Common.csproj b/src/NzbDrone.Common/Lidarr.Common.csproj index 405fd553b..5c4e52495 100644 --- a/src/NzbDrone.Common/Lidarr.Common.csproj +++ b/src/NzbDrone.Common/Lidarr.Common.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs index 38d4e627a..08cb4ca60 100644 --- a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs +++ b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs @@ -117,6 +117,7 @@ namespace NzbDrone.Core.Instrumentation syslogTarget.MessageSend.Protocol = ProtocolType.Udp; syslogTarget.MessageSend.Udp.Port = syslogPort; syslogTarget.MessageSend.Udp.Server = syslogServer; + syslogTarget.MessageSend.Retry.ConstantBackoff.BaseDelay = 500; syslogTarget.MessageCreation.Rfc = RfcNumber.Rfc5424; syslogTarget.MessageCreation.Rfc5424.AppName = _configFileProvider.InstanceName; diff --git a/src/NzbDrone.Core/Lidarr.Core.csproj b/src/NzbDrone.Core/Lidarr.Core.csproj index db63f4608..52c13c291 100644 --- a/src/NzbDrone.Core/Lidarr.Core.csproj +++ b/src/NzbDrone.Core/Lidarr.Core.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/src/NzbDrone.Host/Startup.cs b/src/NzbDrone.Host/Startup.cs index 0d264734b..84f2a3fb6 100644 --- a/src/NzbDrone.Host/Startup.cs +++ b/src/NzbDrone.Host/Startup.cs @@ -50,8 +50,8 @@ namespace NzbDrone.Host services.AddLogging(b => { b.ClearProviders(); - b.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); - b.AddFilter("Microsoft.AspNetCore", Microsoft.Extensions.Logging.LogLevel.Warning); + b.SetMinimumLevel(LogLevel.Trace); + b.AddFilter("Microsoft.AspNetCore", LogLevel.Warning); b.AddFilter("Lidarr.Http.Authentication", LogLevel.Information); b.AddFilter("Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager", LogLevel.Error); b.AddNLog(); diff --git a/src/NzbDrone.Mono/Lidarr.Mono.csproj b/src/NzbDrone.Mono/Lidarr.Mono.csproj index b9b88b769..58a854266 100644 --- a/src/NzbDrone.Mono/Lidarr.Mono.csproj +++ b/src/NzbDrone.Mono/Lidarr.Mono.csproj @@ -4,7 +4,7 @@ true - + diff --git a/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj b/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj index 4a0de4fad..be32c0129 100644 --- a/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj +++ b/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/NzbDrone.Update/Lidarr.Update.csproj b/src/NzbDrone.Update/Lidarr.Update.csproj index 9cc456585..84c50115a 100644 --- a/src/NzbDrone.Update/Lidarr.Update.csproj +++ b/src/NzbDrone.Update/Lidarr.Update.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/NzbDrone.Windows/Lidarr.Windows.csproj b/src/NzbDrone.Windows/Lidarr.Windows.csproj index 6eeee23d4..f6ed590d0 100644 --- a/src/NzbDrone.Windows/Lidarr.Windows.csproj +++ b/src/NzbDrone.Windows/Lidarr.Windows.csproj @@ -4,7 +4,7 @@ true - + From 828e04bcadf474614739207e8f7876e8035d28c9 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 31 Jul 2024 21:42:07 -0700 Subject: [PATCH 024/275] New: Add Compact Log Event Format option for console logging (cherry picked from commit 0d914f4c53876540ed2df83ad3d71615c013856f) Closes #4981 --- .../Instrumentation/NzbDroneLogger.cs | 20 ++++++++++++++++++- src/NzbDrone.Common/Lidarr.Common.csproj | 1 + src/NzbDrone.Common/Options/LogOptions.cs | 1 + .../Configuration/ConfigFileProvider.cs | 7 +++++++ .../Instrumentation/ReconfigureLogging.cs | 18 +++++++++++++++++ 5 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs index b4ccf5580..b055c907b 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs +++ b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.IO; using NLog; using NLog.Config; +using NLog.Layouts.ClefJsonLayout; using NLog.Targets; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; @@ -13,6 +14,8 @@ namespace NzbDrone.Common.Instrumentation public static class NzbDroneLogger { private const string FILE_LOG_LAYOUT = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; + public const string ConsoleLogLayout = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; + public static CompactJsonLayout ClefLogLayout = new CompactJsonLayout(); private static bool _isConfigured; @@ -110,7 +113,16 @@ namespace NzbDrone.Common.Instrumentation var coloredConsoleTarget = new ColoredConsoleTarget(); coloredConsoleTarget.Name = "consoleLogger"; - coloredConsoleTarget.Layout = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; + + var logFormat = Enum.TryParse(Environment.GetEnvironmentVariable("LIDARR__LOG__CONSOLEFORMAT"), out var formatEnumValue) + ? formatEnumValue + : ConsoleLogFormat.Standard; + + coloredConsoleTarget.Layout = logFormat switch + { + ConsoleLogFormat.Clef => ClefLogLayout, + _ => ConsoleLogLayout + }; var loggingRule = new LoggingRule("*", level, coloredConsoleTarget); @@ -205,4 +217,10 @@ namespace NzbDrone.Common.Instrumentation return GetLogger(obj.GetType()); } } + + public enum ConsoleLogFormat + { + Standard, + Clef + } } diff --git a/src/NzbDrone.Common/Lidarr.Common.csproj b/src/NzbDrone.Common/Lidarr.Common.csproj index 5c4e52495..4054a5d0d 100644 --- a/src/NzbDrone.Common/Lidarr.Common.csproj +++ b/src/NzbDrone.Common/Lidarr.Common.csproj @@ -11,6 +11,7 @@ + diff --git a/src/NzbDrone.Common/Options/LogOptions.cs b/src/NzbDrone.Common/Options/LogOptions.cs index c36533cb4..b24398b46 100644 --- a/src/NzbDrone.Common/Options/LogOptions.cs +++ b/src/NzbDrone.Common/Options/LogOptions.cs @@ -7,6 +7,7 @@ public class LogOptions public int? Rotate { get; set; } public bool? Sql { get; set; } public string ConsoleLevel { get; set; } + public string ConsoleFormat { get; set; } public bool? AnalyticsEnabled { get; set; } public string SyslogServer { get; set; } public int? SyslogPort { get; set; } diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 5fe1c4f1b..53c1fa092 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -9,6 +9,7 @@ using NzbDrone.Common.Cache; using NzbDrone.Common.Disk; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; +using NzbDrone.Common.Instrumentation; using NzbDrone.Common.Options; using NzbDrone.Core.Authentication; using NzbDrone.Core.Configuration.Events; @@ -38,6 +39,7 @@ namespace NzbDrone.Core.Configuration bool AnalyticsEnabled { get; } string LogLevel { get; } string ConsoleLogLevel { get; } + ConsoleLogFormat ConsoleLogFormat { get; } bool LogSql { get; } int LogRotate { get; } bool FilterSentryEvents { get; } @@ -221,6 +223,11 @@ namespace NzbDrone.Core.Configuration public string LogLevel => _logOptions.Level ?? GetValue("LogLevel", "debug").ToLowerInvariant(); public string ConsoleLogLevel => _logOptions.ConsoleLevel ?? GetValue("ConsoleLogLevel", string.Empty, persist: false); + public ConsoleLogFormat ConsoleLogFormat => + Enum.TryParse(_logOptions.ConsoleFormat, out var enumValue) + ? enumValue + : GetValueEnum("ConsoleLogFormat", ConsoleLogFormat.Standard, false); + public string Theme => _appOptions.Theme ?? GetValue("Theme", "auto", persist: false); public string PostgresHost => _postgresOptions?.Host ?? GetValue("PostgresHost", string.Empty, persist: false); diff --git a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs index 08cb4ca60..5785662d9 100644 --- a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs +++ b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using NLog; using NLog.Config; +using NLog.Targets; using NLog.Targets.Syslog; using NLog.Targets.Syslog.Settings; using NzbDrone.Common.EnvironmentInfo; @@ -51,6 +52,7 @@ namespace NzbDrone.Core.Instrumentation var rules = LogManager.Configuration.LoggingRules; // Console + ReconfigureConsole(); SetMinimumLogLevel(rules, "consoleLogger", minimumConsoleLogLevel); // Log Files @@ -109,6 +111,22 @@ namespace NzbDrone.Core.Instrumentation } } + private void ReconfigureConsole() + { + var consoleTarget = LogManager.Configuration.AllTargets.OfType().FirstOrDefault(); + + if (consoleTarget != null) + { + var format = _configFileProvider.ConsoleLogFormat; + + consoleTarget.Layout = format switch + { + ConsoleLogFormat.Clef => NzbDroneLogger.ClefLogLayout, + _ => NzbDroneLogger.ConsoleLogLayout + }; + } + } + private void SetSyslogParameters(string syslogServer, int syslogPort, LogLevel minimumLogLevel) { var syslogTarget = new SyslogTarget(); From 2b8b8ed147c76d6fa1b5078d4ca0f3712824369e Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 31 Jul 2024 22:03:23 -0700 Subject: [PATCH 025/275] New: Configurable log file size limit (cherry picked from commit 813965e6a20edef2772d68eaa7646af33028425a) Closes #4982 --- ...onFixture.cs => NumberExtensionFixture.cs} | 4 +- .../Extensions/Int64Extensions.cs | 30 ---------- .../Extensions/NumberExtensions.cs | 60 +++++++++++++++++++ .../Instrumentation/NzbDroneLogger.cs | 2 +- src/NzbDrone.Common/Options/LogOptions.cs | 1 + .../AcceptableSizeSpecificationFixture.cs | 1 + .../DownloadedTracksImportServiceFixture.cs | 1 + .../MediaFiles/ImportApprovedTracksFixture.cs | 1 + .../FreeSpaceSpecificationFixture.cs | 1 + .../Configuration/ConfigFileProvider.cs | 2 + .../Specifications/SizeSpecification.cs | 1 + .../DownloadDecisionComparer.cs | 1 + .../Specifications/NotSampleSpecification.cs | 1 + .../Consumers/Xbmc/XbmcNfoDetector.cs | 1 + src/NzbDrone.Core/Fluent.cs | 30 ---------- .../Instrumentation/ReconfigureLogging.cs | 5 +- .../Specifications/FreeSpaceSpecification.cs | 1 + 17 files changed, 78 insertions(+), 65 deletions(-) rename src/NzbDrone.Common.Test/ExtensionTests/{Int64ExtensionFixture.cs => NumberExtensionFixture.cs} (91%) delete mode 100644 src/NzbDrone.Common/Extensions/Int64Extensions.cs create mode 100644 src/NzbDrone.Common/Extensions/NumberExtensions.cs diff --git a/src/NzbDrone.Common.Test/ExtensionTests/Int64ExtensionFixture.cs b/src/NzbDrone.Common.Test/ExtensionTests/NumberExtensionFixture.cs similarity index 91% rename from src/NzbDrone.Common.Test/ExtensionTests/Int64ExtensionFixture.cs rename to src/NzbDrone.Common.Test/ExtensionTests/NumberExtensionFixture.cs index 76e28f3f7..c51ab7ad4 100644 --- a/src/NzbDrone.Common.Test/ExtensionTests/Int64ExtensionFixture.cs +++ b/src/NzbDrone.Common.Test/ExtensionTests/NumberExtensionFixture.cs @@ -1,11 +1,11 @@ -using FluentAssertions; +using FluentAssertions; using NUnit.Framework; using NzbDrone.Common.Extensions; namespace NzbDrone.Common.Test.ExtensionTests { [TestFixture] - public class Int64ExtensionFixture + public class NumberExtensionFixture { [TestCase(0, "0 B")] [TestCase(1000, "1,000.0 B")] diff --git a/src/NzbDrone.Common/Extensions/Int64Extensions.cs b/src/NzbDrone.Common/Extensions/Int64Extensions.cs deleted file mode 100644 index bfca7f66c..000000000 --- a/src/NzbDrone.Common/Extensions/Int64Extensions.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Globalization; - -namespace NzbDrone.Common.Extensions -{ - public static class Int64Extensions - { - private static readonly string[] SizeSuffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; - - public static string SizeSuffix(this long bytes) - { - const int bytesInKb = 1024; - - if (bytes < 0) - { - return "-" + SizeSuffix(-bytes); - } - - if (bytes == 0) - { - return "0 B"; - } - - var mag = (int)Math.Log(bytes, bytesInKb); - var adjustedSize = bytes / (decimal)Math.Pow(bytesInKb, mag); - - return string.Format(CultureInfo.InvariantCulture, "{0:n1} {1}", adjustedSize, SizeSuffixes[mag]); - } - } -} diff --git a/src/NzbDrone.Common/Extensions/NumberExtensions.cs b/src/NzbDrone.Common/Extensions/NumberExtensions.cs new file mode 100644 index 000000000..b3e3c7dd7 --- /dev/null +++ b/src/NzbDrone.Common/Extensions/NumberExtensions.cs @@ -0,0 +1,60 @@ +using System; +using System.Globalization; + +namespace NzbDrone.Common.Extensions +{ + public static class NumberExtensions + { + private static readonly string[] SizeSuffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; + + public static string SizeSuffix(this long bytes) + { + const int bytesInKb = 1024; + + if (bytes < 0) + { + return "-" + SizeSuffix(-bytes); + } + + if (bytes == 0) + { + return "0 B"; + } + + var mag = (int)Math.Log(bytes, bytesInKb); + var adjustedSize = bytes / (decimal)Math.Pow(bytesInKb, mag); + + return string.Format(CultureInfo.InvariantCulture, "{0:n1} {1}", adjustedSize, SizeSuffixes[mag]); + } + + public static long Kilobits(this int kilobits) + { + return Convert.ToInt64(kilobits * 128L); + } + + public static long Megabytes(this int megabytes) + { + return Convert.ToInt64(megabytes * 1024L * 1024L); + } + + public static long Gigabytes(this int gigabytes) + { + return Convert.ToInt64(gigabytes * 1024L * 1024L * 1024L); + } + + public static long Kilobits(this double kilobits) + { + return Convert.ToInt64(kilobits * 128L); + } + + public static long Megabytes(this double megabytes) + { + return Convert.ToInt64(megabytes * 1024L * 1024L); + } + + public static long Gigabytes(this double gigabytes) + { + return Convert.ToInt64(gigabytes * 1024L * 1024L * 1024L); + } + } +} diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs index b055c907b..74883c959 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs +++ b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs @@ -148,7 +148,7 @@ namespace NzbDrone.Common.Instrumentation fileTarget.ConcurrentWrites = false; fileTarget.ConcurrentWriteAttemptDelay = 50; fileTarget.ConcurrentWriteAttempts = 10; - fileTarget.ArchiveAboveSize = 1024000; + fileTarget.ArchiveAboveSize = 1.Megabytes(); fileTarget.MaxArchiveFiles = maxArchiveFiles; fileTarget.EnableFileDelete = true; fileTarget.ArchiveNumbering = ArchiveNumberingMode.Rolling; diff --git a/src/NzbDrone.Common/Options/LogOptions.cs b/src/NzbDrone.Common/Options/LogOptions.cs index b24398b46..421059381 100644 --- a/src/NzbDrone.Common/Options/LogOptions.cs +++ b/src/NzbDrone.Common/Options/LogOptions.cs @@ -5,6 +5,7 @@ public class LogOptions public string Level { get; set; } public bool? FilterSentryEvents { get; set; } public int? Rotate { get; set; } + public int? SizeLimit { get; set; } public bool? Sql { get; set; } public string ConsoleLevel { get; set; } public string ConsoleFormat { get; set; } diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs index 06f3ad8a0..d34a4007c 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs @@ -4,6 +4,7 @@ using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; +using NzbDrone.Common.Extensions; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Music; using NzbDrone.Core.Parser.Model; diff --git a/src/NzbDrone.Core.Test/MediaFiles/DownloadedTracksImportServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DownloadedTracksImportServiceFixture.cs index 3c0707ad9..555a7492c 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DownloadedTracksImportServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DownloadedTracksImportServiceFixture.cs @@ -8,6 +8,7 @@ using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; +using NzbDrone.Common.Extensions; using NzbDrone.Core.Download; using NzbDrone.Core.Download.TrackedDownloads; using NzbDrone.Core.MediaFiles; diff --git a/src/NzbDrone.Core.Test/MediaFiles/ImportApprovedTracksFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/ImportApprovedTracksFixture.cs index 913e2b5ad..1b9bda1c1 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/ImportApprovedTracksFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/ImportApprovedTracksFixture.cs @@ -5,6 +5,7 @@ using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; +using NzbDrone.Common.Extensions; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Download; using NzbDrone.Core.MediaFiles; diff --git a/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs index 73073f617..5e5f2b1b4 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs @@ -5,6 +5,7 @@ using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; +using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaFiles.TrackImport.Specifications; using NzbDrone.Core.Music; diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 53c1fa092..67896db77 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -42,6 +42,7 @@ namespace NzbDrone.Core.Configuration ConsoleLogFormat ConsoleLogFormat { get; } bool LogSql { get; } int LogRotate { get; } + int LogSizeLimit { get; } bool FilterSentryEvents { get; } string Branch { get; } string ApiKey { get; } @@ -239,6 +240,7 @@ namespace NzbDrone.Core.Configuration public bool LogSql => _logOptions.Sql ?? GetValueBoolean("LogSql", false, persist: false); public int LogRotate => _logOptions.Rotate ?? GetValueInt("LogRotate", 50, persist: false); + public int LogSizeLimit => Math.Min(Math.Max(_logOptions.SizeLimit ?? GetValueInt("LogSizeLimit", 1, persist: false), 0), 10); public bool FilterSentryEvents => _logOptions.FilterSentryEvents ?? GetValueBoolean("FilterSentryEvents", true, persist: false); public string SslCertPath => _serverOptions.SslCertPath ?? GetValue("SslCertPath", ""); public string SslCertPassword => _serverOptions.SslCertPassword ?? GetValue("SslCertPassword", ""); diff --git a/src/NzbDrone.Core/CustomFormats/Specifications/SizeSpecification.cs b/src/NzbDrone.Core/CustomFormats/Specifications/SizeSpecification.cs index 257904a30..fe873f9ec 100644 --- a/src/NzbDrone.Core/CustomFormats/Specifications/SizeSpecification.cs +++ b/src/NzbDrone.Core/CustomFormats/Specifications/SizeSpecification.cs @@ -1,4 +1,5 @@ using FluentValidation; +using NzbDrone.Common.Extensions; using NzbDrone.Core.Annotations; using NzbDrone.Core.Validation; diff --git a/src/NzbDrone.Core/DecisionEngine/DownloadDecisionComparer.cs b/src/NzbDrone.Core/DecisionEngine/DownloadDecisionComparer.cs index 97e8eb889..7fe5ec1fc 100644 --- a/src/NzbDrone.Core/DecisionEngine/DownloadDecisionComparer.cs +++ b/src/NzbDrone.Core/DecisionEngine/DownloadDecisionComparer.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; using NzbDrone.Core.Parser.Model; diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/NotSampleSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/NotSampleSpecification.cs index 6f7b454b4..11d3291d8 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/NotSampleSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/NotSampleSpecification.cs @@ -1,4 +1,5 @@ using NLog; +using NzbDrone.Common.Extensions; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Parser.Model; diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcNfoDetector.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcNfoDetector.cs index 4132602ec..07cd62089 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcNfoDetector.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcNfoDetector.cs @@ -1,5 +1,6 @@ using System.Text.RegularExpressions; using NzbDrone.Common.Disk; +using NzbDrone.Common.Extensions; namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc { diff --git a/src/NzbDrone.Core/Fluent.cs b/src/NzbDrone.Core/Fluent.cs index 1e04fc227..cc0dcfc4a 100644 --- a/src/NzbDrone.Core/Fluent.cs +++ b/src/NzbDrone.Core/Fluent.cs @@ -20,36 +20,6 @@ namespace NzbDrone.Core return actual; } - public static long Kilobits(this int kilobits) - { - return Convert.ToInt64(kilobits * 128L); - } - - public static long Megabytes(this int megabytes) - { - return Convert.ToInt64(megabytes * 1024L * 1024L); - } - - public static long Gigabytes(this int gigabytes) - { - return Convert.ToInt64(gigabytes * 1024L * 1024L * 1024L); - } - - public static long Kilobits(this double kilobits) - { - return Convert.ToInt64(kilobits * 128L); - } - - public static long Megabytes(this double megabytes) - { - return Convert.ToInt64(megabytes * 1024L * 1024L); - } - - public static long Gigabytes(this double gigabytes) - { - return Convert.ToInt64(gigabytes * 1024L * 1024L * 1024L); - } - public static long Round(this long number, long level) { return Convert.ToInt64(Math.Floor((decimal)number / level) * level); diff --git a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs index 5785662d9..1310255fd 100644 --- a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs +++ b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs @@ -59,7 +59,7 @@ namespace NzbDrone.Core.Instrumentation SetMinimumLogLevel(rules, "appFileInfo", minimumLogLevel <= LogLevel.Info ? LogLevel.Info : LogLevel.Off); SetMinimumLogLevel(rules, "appFileDebug", minimumLogLevel <= LogLevel.Debug ? LogLevel.Debug : LogLevel.Off); SetMinimumLogLevel(rules, "appFileTrace", minimumLogLevel <= LogLevel.Trace ? LogLevel.Trace : LogLevel.Off); - SetLogRotation(); + ReconfigureFile(); // Log Sql SqlBuilderExtensions.LogSql = _configFileProvider.LogSql; @@ -93,11 +93,12 @@ namespace NzbDrone.Core.Instrumentation } } - private void SetLogRotation() + private void ReconfigureFile() { foreach (var target in LogManager.Configuration.AllTargets.OfType()) { target.MaxArchiveFiles = _configFileProvider.LogRotate; + target.ArchiveAboveSize = _configFileProvider.LogSizeLimit.Megabytes(); } } diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs index 37b310cc1..2781d13a2 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs @@ -2,6 +2,7 @@ using System; using System.IO; using NLog; using NzbDrone.Common.Disk; +using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Download; From 8d3dc0a470707fd6df0d7d18bd55cc0ef690b641 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 26 Aug 2024 07:07:20 +0300 Subject: [PATCH 026/275] Validation for bulk series editor Closes #4983 --- .../Artist/ArtistEditorController.cs | 12 ++++++++- .../Artist/ArtistEditorValidator.cs | 26 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/Lidarr.Api.V1/Artist/ArtistEditorValidator.cs diff --git a/src/Lidarr.Api.V1/Artist/ArtistEditorController.cs b/src/Lidarr.Api.V1/Artist/ArtistEditorController.cs index e7c69ab20..c4eedb3d4 100644 --- a/src/Lidarr.Api.V1/Artist/ArtistEditorController.cs +++ b/src/Lidarr.Api.V1/Artist/ArtistEditorController.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using FluentValidation; using Lidarr.Api.V1.Albums; using Lidarr.Http; using Microsoft.AspNetCore.Mvc; @@ -16,12 +17,14 @@ namespace Lidarr.Api.V1.Artist private readonly IArtistService _artistService; private readonly IAlbumService _albumService; private readonly IManageCommandQueue _commandQueueManager; + private readonly ArtistEditorValidator _artistEditorValidator; - public ArtistEditorController(IArtistService artistService, IAlbumService albumService, IManageCommandQueue commandQueueManager) + public ArtistEditorController(IArtistService artistService, IAlbumService albumService, IManageCommandQueue commandQueueManager, ArtistEditorValidator artistEditorValidator) { _artistService = artistService; _albumService = albumService; _commandQueueManager = commandQueueManager; + _artistEditorValidator = artistEditorValidator; } [HttpPut] @@ -80,6 +83,13 @@ namespace Lidarr.Api.V1.Artist break; } } + + var validationResult = _artistEditorValidator.Validate(artist); + + if (!validationResult.IsValid) + { + throw new ValidationException(validationResult.Errors); + } } if (artistToMove.Any()) diff --git a/src/Lidarr.Api.V1/Artist/ArtistEditorValidator.cs b/src/Lidarr.Api.V1/Artist/ArtistEditorValidator.cs new file mode 100644 index 000000000..05677a5c9 --- /dev/null +++ b/src/Lidarr.Api.V1/Artist/ArtistEditorValidator.cs @@ -0,0 +1,26 @@ +using FluentValidation; +using NzbDrone.Common.Extensions; +using NzbDrone.Core.Validation; +using NzbDrone.Core.Validation.Paths; + +namespace Lidarr.Api.V1.Artist +{ + public class ArtistEditorValidator : AbstractValidator + { + public ArtistEditorValidator(RootFolderExistsValidator rootFolderExistsValidator, QualityProfileExistsValidator qualityProfileExistsValidator, MetadataProfileExistsValidator metadataProfileExistsValidator) + { + RuleFor(a => a.RootFolderPath).Cascade(CascadeMode.Stop) + .IsValidPath() + .SetValidator(rootFolderExistsValidator) + .When(a => a.RootFolderPath.IsNotNullOrWhiteSpace()); + + RuleFor(c => c.QualityProfileId).Cascade(CascadeMode.Stop) + .ValidId() + .SetValidator(qualityProfileExistsValidator); + + RuleFor(c => c.MetadataProfileId).Cascade(CascadeMode.Stop) + .ValidId() + .SetValidator(metadataProfileExistsValidator); + } + } +} From 7738ee78c81ad68cb8d5ed8b34945e065269fc61 Mon Sep 17 00:00:00 2001 From: Servarr Date: Mon, 26 Aug 2024 04:14:01 +0000 Subject: [PATCH 027/275] Automated API Docs update --- src/Lidarr.Api.V1/openapi.json | 102 ++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 26 deletions(-) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index b48424105..512e014e2 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -439,20 +439,10 @@ "200": { "description": "OK", "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/ArtistResource" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/ArtistResource" } - }, - "text/json": { - "schema": { - "$ref": "#/components/schemas/ArtistResource" - } } } } @@ -544,20 +534,10 @@ "200": { "description": "OK", "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/ArtistResource" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/ArtistResource" } - }, - "text/json": { - "schema": { - "$ref": "#/components/schemas/ArtistResource" - } } } } @@ -1633,6 +1613,26 @@ } }, "/api/v1/customformat": { + "get": { + "tags": [ + "CustomFormat" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFormatResource" + } + } + } + } + } + } + }, "post": { "tags": [ "CustomFormat" @@ -1668,26 +1668,53 @@ } } } - }, - "get": { + } + }, + "/api/v1/customformat/bulk": { + "put": { "tags": [ "CustomFormat" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFormatBulkResource" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFormatResource" - } + "$ref": "#/components/schemas/CustomFormatResource" } } } } } + }, + "delete": { + "tags": [ + "CustomFormat" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFormatBulkResource" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } } }, "/api/v1/customformat/schema": { @@ -9296,6 +9323,25 @@ }, "additionalProperties": false }, + "CustomFormatBulkResource": { + "type": "object", + "properties": { + "ids": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "includeCustomFormatWhenRenaming": { + "type": "boolean", + "nullable": true + } + }, + "additionalProperties": false + }, "CustomFormatResource": { "type": "object", "properties": { @@ -9877,6 +9923,10 @@ "type": "string", "nullable": true }, + "logSizeLimit": { + "type": "integer", + "format": "int32" + }, "consoleLogLevel": { "type": "string", "nullable": true From af4eeeb8931f1148d10254507a6eea86da754ba7 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 27 Aug 2024 00:27:34 +0300 Subject: [PATCH 028/275] Don't persist value for SslCertHash when checking for existence (cherry picked from commit 98c4cbdd13dc49ad30e91343897b8bd006002489) --- src/NzbDrone.Core/Configuration/ConfigFileProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 67896db77..04b4b339e 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -365,7 +365,7 @@ namespace NzbDrone.Core.Configuration } // If SSL is enabled and a cert hash is still in the config file or cert path is empty disable SSL - if (EnableSsl && (GetValue("SslCertHash", null).IsNotNullOrWhiteSpace() || SslCertPath.IsNullOrWhiteSpace())) + if (EnableSsl && (GetValue("SslCertHash", string.Empty, false).IsNotNullOrWhiteSpace() || SslCertPath.IsNullOrWhiteSpace())) { SetValue("EnableSsl", false); } From ef3b644d52a81f92666e7bddf6b61d35fb19b8a2 Mon Sep 17 00:00:00 2001 From: Erik Lentz <7536439+ErikLentz@users.noreply.github.com> Date: Wed, 28 Aug 2024 13:37:32 -0500 Subject: [PATCH 029/275] Fixed: Update English Localization reference to Movies (#5061) --- src/NzbDrone.Core/Localization/Core/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index abdd53139..0936742c7 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -750,7 +750,7 @@ "MonitoringOptions": "Monitoring Options", "MonitoringOptionsHelpText": "Which albums should be monitored after the artist is added (one-time adjustment)", "MoreInfo": "More Info", - "MountCheckMessage": "Mount containing a movie path is mounted read-only: ", + "MountCheckMessage": "Mount containing music path is mounted read-only: ", "MoveAutomatically": "Move Automatically", "MoveFiles": "Move Files", "MultiDiscTrackFormat": "Multi Disc Track Format", @@ -951,7 +951,7 @@ "RemotePathHelpText": "Root path to the directory that the Download Client accesses", "RemotePathMappingCheckBadDockerPath": "You are using docker; download client {0} places downloads in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.", "RemotePathMappingCheckDockerFolderMissing": "You are using docker; download client {0} places downloads in {1} but this directory does not appear to exist inside the container. Review your remote path mappings and container volume settings.", - "RemotePathMappingCheckDownloadPermissions": "{appName} can see but not access downloaded movie {0}. Likely permissions error.", + "RemotePathMappingCheckDownloadPermissions": "{appName} can see but not access downloaded music {0}. Likely permissions error.", "RemotePathMappingCheckFileRemoved": "File {0} was removed part way through processing.", "RemotePathMappingCheckFilesBadDockerPath": "You are using docker; download client {0} reported files in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.", "RemotePathMappingCheckFilesGenericPermissions": "Download client {0} reported files in {1} but {appName} cannot see this directory. You may need to adjust the folder's permissions.", @@ -959,7 +959,7 @@ "RemotePathMappingCheckFilesWrongOSPath": "Remote download client {0} reported files in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.", "RemotePathMappingCheckFolderPermissions": "{appName} can see but not access download directory {0}. Likely permissions error.", "RemotePathMappingCheckGenericPermissions": "Download client {0} places downloads in {1} but {appName} cannot see this directory. You may need to adjust the folder's permissions.", - "RemotePathMappingCheckImportFailed": "{appName} failed to import a movie. Check your logs for details.", + "RemotePathMappingCheckImportFailed": "{appName} failed to import music. Check your logs for details.", "RemotePathMappingCheckLocalFolderMissing": "Remote download client {0} places downloads in {1} but this directory does not appear to exist. Likely missing or incorrect remote path mapping.", "RemotePathMappingCheckLocalWrongOSPath": "Local download client {0} places downloads in {1} but this is not a valid {2} path. Review your download client settings.", "RemotePathMappingCheckRemoteDownloadClient": "Remote download client {0} reported files in {1} but this directory does not appear to exist. Likely missing remote path mapping.", From f024dad65f6288c66ff98b28f07bd086a7e29097 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 1 Sep 2024 08:13:39 +0300 Subject: [PATCH 030/275] Bump workflow actions --- .github/workflows/label-actions.yml | 2 +- .github/workflows/lock.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/label-actions.yml b/.github/workflows/label-actions.yml index a7fc89446..a6246a6b3 100644 --- a/.github/workflows/label-actions.yml +++ b/.github/workflows/label-actions.yml @@ -12,6 +12,6 @@ jobs: action: runs-on: ubuntu-latest steps: - - uses: dessant/label-actions@v3 + - uses: dessant/label-actions@v4 with: process-only: 'issues' diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index cf38066c5..1d50cb1f1 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -9,7 +9,7 @@ jobs: lock: runs-on: ubuntu-latest steps: - - uses: dessant/lock-threads@v4 + - uses: dessant/lock-threads@v5 with: github-token: ${{ github.token }} issue-inactive-days: '90' From 1dee2aaf808d65021750e6c0baff89245fd597a8 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 1 Sep 2024 08:19:58 +0300 Subject: [PATCH 031/275] Fix tests --- .../MetadataSource/SkyHook/SkyHookProxySearchFixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core.Test/MetadataSource/SkyHook/SkyHookProxySearchFixture.cs b/src/NzbDrone.Core.Test/MetadataSource/SkyHook/SkyHookProxySearchFixture.cs index 460a5aded..ebe3a88a5 100644 --- a/src/NzbDrone.Core.Test/MetadataSource/SkyHook/SkyHookProxySearchFixture.cs +++ b/src/NzbDrone.Core.Test/MetadataSource/SkyHook/SkyHookProxySearchFixture.cs @@ -107,7 +107,7 @@ namespace NzbDrone.Core.Test.MetadataSource.SkyHook [TestCase("Eminem", 0, typeof(Artist), "Eminem")] [TestCase("Eminem Kamikaze", 0, typeof(Artist), "Eminem")] - [TestCase("Eminem Kamikaze", 2, typeof(Album), "Kamikaze")] + [TestCase("Eminem Kamikaze", 1, typeof(Album), "Kamikaze")] [TestCase("lidarr:f59c5520-5f46-4d2c-b2c4-822eabf53419", 0, typeof(Artist), "Linkin Park")] [TestCase("lidarr: d77df681-b779-3d6d-b66a-3bfd15985e3e", 0, typeof(Album), "Pyromania")] public void successful_combined_search(string query, int position, Type resultType, string expected) From bd5f171fa9642bfe460395ad6219f2f86a3fa48a Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 1 Sep 2024 10:29:06 +0300 Subject: [PATCH 032/275] Bump version to 2.6.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fbb2f5575..502abca26 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.5.3' + majorVersion: '2.6.0' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 8efb6025310152291ddd73ce3945994aa0df512b Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 4 Sep 2024 16:45:04 +0000 Subject: [PATCH 033/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Anonymous Co-authored-by: Dream Co-authored-by: FloatStream <1213193613@qq.com> Co-authored-by: Gabriel Markowski Co-authored-by: GkhnGRBZ Co-authored-by: Havok Dan Co-authored-by: Jason54 Co-authored-by: Kerk en IT Co-authored-by: Lizandra Candido da Silva Co-authored-by: MattiaPell Co-authored-by: Nota Inutilis Co-authored-by: Weblate Co-authored-by: fordas Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ar/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/de/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/el/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/he/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hu/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/is/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/it/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ja/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nb_NO/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ro/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sv/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/th/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/uk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/vi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ar.json | 4 +- src/NzbDrone.Core/Localization/Core/bg.json | 4 +- src/NzbDrone.Core/Localization/Core/ca.json | 5 +- src/NzbDrone.Core/Localization/Core/cs.json | 5 +- src/NzbDrone.Core/Localization/Core/da.json | 4 +- src/NzbDrone.Core/Localization/Core/de.json | 5 +- src/NzbDrone.Core/Localization/Core/el.json | 4 +- src/NzbDrone.Core/Localization/Core/es.json | 17 ++- src/NzbDrone.Core/Localization/Core/fi.json | 5 +- src/NzbDrone.Core/Localization/Core/fr.json | 21 ++- src/NzbDrone.Core/Localization/Core/he.json | 4 +- src/NzbDrone.Core/Localization/Core/hi.json | 4 +- src/NzbDrone.Core/Localization/Core/hr.json | 3 +- src/NzbDrone.Core/Localization/Core/hu.json | 5 +- src/NzbDrone.Core/Localization/Core/is.json | 4 +- src/NzbDrone.Core/Localization/Core/it.json | 45 ++++-- src/NzbDrone.Core/Localization/Core/ja.json | 4 +- src/NzbDrone.Core/Localization/Core/ko.json | 3 +- .../Localization/Core/nb_NO.json | 4 +- src/NzbDrone.Core/Localization/Core/nl.json | 25 +++- src/NzbDrone.Core/Localization/Core/pl.json | 57 ++++++-- src/NzbDrone.Core/Localization/Core/pt.json | 5 +- .../Localization/Core/pt_BR.json | 23 +++- src/NzbDrone.Core/Localization/Core/ro.json | 6 +- src/NzbDrone.Core/Localization/Core/ru.json | 15 +- src/NzbDrone.Core/Localization/Core/sk.json | 3 +- src/NzbDrone.Core/Localization/Core/sv.json | 4 +- src/NzbDrone.Core/Localization/Core/th.json | 4 +- src/NzbDrone.Core/Localization/Core/tr.json | 16 ++- src/NzbDrone.Core/Localization/Core/uk.json | 5 +- src/NzbDrone.Core/Localization/Core/vi.json | 4 +- .../Localization/Core/zh_CN.json | 128 +++++++++++------- 32 files changed, 324 insertions(+), 121 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 40942c94e..398c4f6f1 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -740,5 +740,7 @@ "InteractiveSearchModalHeader": "بحث تفاعلي", "IndexerPriorityHelpText": "أولوية المفهرس من 1 (الأعلى) إلى 50 (الأدنى). الافتراضي: 25.", "BuiltIn": "مدمج", - "Script": "النصي" + "Script": "النصي", + "DeleteSelectedCustomFormats": "حذف التنسيق المخصص", + "IncludeCustomFormatWhenRenaming": "قم بتضمين تنسيق مخصص عند إعادة التسمية" } diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index 4c65d16f3..e6666c83d 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -740,5 +740,7 @@ "InteractiveSearchModalHeader": "Интерактивно търсене", "IndexerPriorityHelpText": "Приоритет на индексатора от 1 (най-висок) до 50 (най-нисък). По подразбиране: 25.", "BuiltIn": "Вграден", - "Script": "Сценарий" + "Script": "Сценарий", + "DeleteSelectedCustomFormats": "Изтриване на потребителски формат", + "IncludeCustomFormatWhenRenaming": "Включете персонализиран формат при преименуване" } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 87b07c05f..91a358536 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -949,5 +949,8 @@ "Repack": "Tornat a empaquetar", "Any": "Qualsevol", "BuiltIn": "Integrat", - "Script": "Script" + "Script": "Script", + "DeleteSelectedCustomFormats": "Suprimeix el format personalitzat", + "DeleteSelectedCustomFormatsMessageText": "Esteu segur que voleu suprimir {count} llista(es) d'importació seleccionada(es)?", + "IncludeCustomFormatWhenRenaming": "Inclou el format personalitzat en canviar el nom" } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 5cecbf705..550abf7ac 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -872,5 +872,8 @@ "BlocklistOnlyHint": "Blokovat a nehledat náhradu", "Any": "Jakákoliv", "BuiltIn": "Vestavěný", - "Script": "Skript" + "Script": "Skript", + "DeleteSelectedCustomFormats": "Odstranění vlastního formátu", + "DeleteSelectedCustomFormatsMessageText": "Opravdu chcete smazat {count} vybraných seznamů k importu?", + "IncludeCustomFormatWhenRenaming": "Při přejmenování zahrnout vlastní formát" } diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index ad940ed1c..8b973fe6d 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -768,5 +768,7 @@ "IndexerPriorityHelpText": "Indekseringsprioritet fra 1 (højest) til 50 (lavest). Standard: 25.", "AutoTaggingNegateHelpText": "Hvis dette er markeret, gælder det tilpassede format ikke, hvis denne {0} betingelse stemmer overens.", "BuiltIn": "Indbygget", - "Script": "Manuskript" + "Script": "Manuskript", + "DeleteSelectedCustomFormats": "Slet brugerdefineret format", + "IncludeCustomFormatWhenRenaming": "Inkluder brugerdefineret format, når du omdøber" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index 1df123ee4..cab4111c2 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -1182,5 +1182,8 @@ "WithFiles": "Mit Dateien", "Any": "Beliebig", "BuiltIn": "Eingebaut", - "Script": "Skript" + "Script": "Skript", + "DeleteSelectedCustomFormats": "Benutzerdefiniertes Format löschen", + "IncludeCustomFormatWhenRenaming": "Eigenes Format beim umbennen einfügen", + "DeleteSelectedCustomFormatsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Importliste(n) löschen möchten?" } diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index d14c8c527..6bf94e9a8 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -1108,5 +1108,7 @@ "IndexerPriorityHelpText": "Προτεραιότητα δείκτη από 1 (υψηλότερη) έως 50 (χαμηλότερη). Προεπιλογή: 25. Χρησιμοποιείται κατά την κατάκτηση εκδόσεων ως ισοπαλία για ίσες εκδόσεις, το {appName} θα εξακολουθεί να χρησιμοποιεί όλα τα ενεργοποιημένα ευρετήρια για RSS Sync και Search", "AutoTaggingNegateHelpText": "Εάν επιλεγεί, η προσαρμοσμένη μορφή δεν θα εφαρμοστεί εάν αντιστοιχεί σε αυτήν την {0} συνθήκη.", "BuiltIn": "Ενσωματωμένο", - "Script": "Γραφή" + "Script": "Γραφή", + "DeleteSelectedCustomFormats": "Διαγραφή προσαρμοσμένης μορφής", + "IncludeCustomFormatWhenRenaming": "Συμπεριλάβετε προσαρμοσμένη μορφή κατά τη μετονομασία" } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 2cbcc7f3a..8141748a2 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -644,7 +644,7 @@ "ProxyCheckResolveIpMessage": "No se pudo resolver la dirección IP del Host Proxy configurado {0}", "RemotePathMappingCheckBadDockerPath": "Está utilizando docker; el cliente de descarga {0} coloca las descargas en {1} pero esta no es una ruta válida {2}. Revisa tus mapeos de rutas remotas y la configuración del cliente de descarga.", "RemotePathMappingCheckDockerFolderMissing": "Está utilizando docker; el cliente de descarga {0} coloca las descargas en {1} pero este directorio no parece existir dentro del contenedor. Revisa tus mapeos de rutas remotas y la configuración del volumen del contenedor.", - "RemotePathMappingCheckDownloadPermissions": "{appName} puede ver pero no acceder a la película descargada {0}. Probablemente sea un error de permisos.", + "RemotePathMappingCheckDownloadPermissions": "{appName} puede ver pero no acceder a la música descargada {0}. Probablemente sea un error de permisos.", "RemotePathMappingCheckFileRemoved": "El archivo {0} fue eliminado a mitad del proceso.", "RemotePathMappingCheckFilesBadDockerPath": "Está utilizando docker; el cliente de descarga {0} informó de archivos en {1} pero esta no es una ruta válida {2}. Revise sus mapeos de rutas remotas y la configuración del cliente de descarga.", "RemotePathMappingCheckFilesWrongOSPath": "El cliente de descarga remota {0} informó de la existencia de archivos en {1}, pero ésta no es una ruta válida de {2}. Revise los mapeos de la ruta remota y la configuración del cliente de descarga.", @@ -664,11 +664,11 @@ "DownloadClientCheckNoneAvailableMessage": "Ningún cliente de descarga disponible", "DownloadClientCheckUnableToCommunicateMessage": "No se pudo comunicar con {0}.", "IndexerStatusCheckSingleClientMessage": "Indexadores no disponibles debido a errores: {0}", - "MountCheckMessage": "El punto de montaje que contiene la ruta de una película es de read-only: ", + "MountCheckMessage": "El punto de montaje que contiene la ruta de música está montado como solo lectura: ", "RemotePathMappingCheckFilesGenericPermissions": "El cliente de descarga {0} informó de la existencia de archivos en {1} pero {appName} no puede ver este directorio. Es posible que tenga que ajustar los permisos de la carpeta.", "RemotePathMappingCheckFilesLocalWrongOSPath": "El cliente de descarga local {0} informó de la existencia de archivos en {1}, pero no es una ruta válida {2}. Revise la configuración de su cliente de descarga.", "RemotePathMappingCheckGenericPermissions": "El cliente de descarga {0} coloca las descargas en {1} pero {appName} no puede ver este directorio. Es posible que tenga que ajustar los permisos de la carpeta.", - "RemotePathMappingCheckImportFailed": "{appName} no pudo importar una película. Comprueba los detalles en tus registros.", + "RemotePathMappingCheckImportFailed": "{appName} falló al importar música. Comprueba tus registros para más detalles.", "RemotePathMappingCheckLocalFolderMissing": "El cliente de descarga remota {0} coloca las descargas en {1} pero este directorio no parece existir. Probablemente falta o el mapeo de la ruta remota es incorrecto.", "RemotePathMappingCheckLocalWrongOSPath": "El cliente de descarga local {0} coloca las descargas en {1} pero ésta no es una ruta válida {2}. Revise la configuración de su cliente de descarga.", "RemotePathMappingCheckWrongOSPath": "El cliente de descarga remota {0} coloca las descargas en {1} pero esta no es una ruta válida {2}. Revise los mapeos de las rutas remotas y la configuración del cliente de descarga.", @@ -1305,5 +1305,14 @@ "WithFiles": "Con archivos", "Any": "Cualquiera", "BuiltIn": "Integrado", - "Script": "Script" + "Script": "Script", + "CountCustomFormatsSelected": "{count} formato(s) personalizado(s) seleccionado(s)", + "DeleteSelectedCustomFormats": "Borrar formato(s) personalizado(s)", + "EditSelectedCustomFormats": "Editar formatos personalizados seleccionados", + "IncludeCustomFormatWhenRenaming": "Incluir formato personalizado cuando se renombra", + "ManageCustomFormats": "Gestionar formatos personalizados", + "NoCustomFormatsFound": "Ningún formato personalizado encontrado", + "DeleteSelectedCustomFormatsMessageText": "¿Estás seguro que quieres borrar los {count} formato(s) personalizado(s) seleccionado(s)?", + "LogSizeLimit": "Límite de tamaño de registro", + "LogSizeLimitHelpText": "Máximo tamaño de archivo de registro en MB antes de archivarlo. Predeterminado es 1MB." } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index f51f129f8..1e8019263 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -1251,5 +1251,8 @@ "True": "Tosi", "Any": "Mikä vain", "BuiltIn": "Sisäänrakennettu", - "Script": "Skripti" + "Script": "Skripti", + "DeleteSelectedCustomFormats": "Poista mukautettu muoto", + "DeleteSelectedCustomFormatsMessageText": "Haluatko varmasti poistaa valitut {count} tuontilistaa?", + "IncludeCustomFormatWhenRenaming": "Sisällytä mukautetut muodot uudelleennimetessä" } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 6be83438d..7d80be0f7 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -745,7 +745,7 @@ "ThereWasAnErrorLoadingThisItem": "Une erreur s'est produite lors du chargement de cet élément", "ThereWasAnErrorLoadingThisPage": "Une erreur s'est produite lors du chargement de cette page", "UpdateCheckUINotWritableMessage": "Impossible d'installer la mise à jour car le dossier d'interface utilisateur '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.", - "UpdateAvailableHealthCheckMessage": "Une nouvelle mise à jour est disponible", + "UpdateAvailableHealthCheckMessage": "Une nouvelle mise à jour est disponible : {version}", "UpdateCheckStartupNotWritableMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.", "UpdateCheckStartupTranslocationMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' se trouve dans un dossier App Translocation.", "DeleteRemotePathMapping": "Supprimer la correspondance de chemin distant", @@ -855,7 +855,7 @@ "HideTracks": "Masquer les traces", "ShowAlbumCount": "Afficher le nombre d'albums", "DeleteSelectedImportLists": "Supprimer la ou les listes d'importation", - "DeleteSelected": "Supprimer sélectionnée", + "DeleteSelected": "Supprimer la sélection", "DeleteArtist": "Supprimer l'artiste sélectionné", "DeleteEmptyFoldersHelpText": "Supprimez les dossiers d'artistes et d'albums vides pendant l'analyse du disque et lorsque les fichiers de piste sont supprimés", "DownloadPropersAndRepacksHelpTexts2": "Utilisez « Ne pas préférer » pour trier par score de mot préféré par rapport aux propriétés/repacks", @@ -968,7 +968,7 @@ "MonitoringOptions": "Options de surveillance", "MusicBrainzArtistID": "Identifiant d'artiste MusicBrainz", "NewAlbums": "Nouveaux albums", - "NoAlbums": "Aucuns albums", + "NoAlbums": "Aucun album", "PathHelpTextWarning": "Cela doit être différent du répertoire dans lequel votre client de téléchargement place les fichiers", "Proceed": "Procéder", "RemoveFailedDownloads": "Supprimer les téléchargements ayant échoué", @@ -1287,8 +1287,8 @@ "IndexerSettingsSeedTimeHelpText": "Durée pendant laquelle un torrent doit être envoyé avant de s'arrêter, vide utilise la valeur par défaut du client de téléchargement", "UiSettingsSummary": "Calendrier, date et les options d'altération des couleurs", "MonitorFutureAlbums": "Futurs albums", - "IndexerSettingsSeedRatio": "Ratio d'envoie", - "IndexerSettingsSeedTime": "Temps d'envoie", + "IndexerSettingsSeedRatio": "Ratio d'envoi", + "IndexerSettingsSeedTime": "Temps d'envoi", "NoTracksInThisMedium": "Aucune piste sur ce support", "False": "Faux", "Parse": "Analyser", @@ -1305,5 +1305,14 @@ "BuiltIn": "Intégré", "AlbumInfo": "Informations sur l'album", "MatchedToAlbums": "Correspondant aux albums", - "MatchedToArtist": "Correspondant à l'artiste" + "MatchedToArtist": "Correspondant à l'artiste", + "CountCustomFormatsSelected": "{count} format(s) personnalisé(s) sélectionné(s)", + "DeleteSelectedCustomFormats": "Supprimer le format personnalisé", + "DeleteSelectedCustomFormatsMessageText": "Êtes-vous sûr de vouloir supprimer {count} liste(s) d'importation sélectionnée(s) ?", + "EditSelectedCustomFormats": "Modifier les formats personnalisés sélectionnés", + "IncludeCustomFormatWhenRenaming": "Inclure un format personnalisé lors du changement de nom", + "ManageCustomFormats": "Gérer les formats personnalisés", + "NoCustomFormatsFound": "Aucun format personnalisé n'a été trouvé", + "LogSizeLimit": "Limite de taille du journal", + "LogSizeLimitHelpText": "Taille maximale du fichier journal en Mo avant archivage. La valeur par défaut est de 1 Mo." } diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index 7a90662a8..f72031b4e 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -777,5 +777,7 @@ "FormatAgeMinutes": "דקות", "AddImportListExclusionAlbumHelpText": "מנע מלהוסיף סרט לרדאר על ידי רשימות", "BuiltIn": "נִבנָה בְּ", - "Script": "תַסרִיט" + "Script": "תַסרִיט", + "DeleteSelectedCustomFormats": "מחק פורמט מותאם אישית", + "IncludeCustomFormatWhenRenaming": "כלול פורמט מותאם אישית בעת שינוי שם" } diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index b41c1943e..ef1526ae6 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -735,5 +735,7 @@ "Absolute": "पूर्ण", "AddImportListExclusionAlbumHelpText": "मूवी को रेडर से सूचियों में जोड़े जाने से रोकें", "BuiltIn": "में निर्मित", - "Script": "लिपि" + "Script": "लिपि", + "DeleteSelectedCustomFormats": "कस्टम प्रारूप हटाएं", + "IncludeCustomFormatWhenRenaming": "नाम बदलने पर कस्टम प्रारूप शामिल करें" } diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index 94a9e3b38..f30598785 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -254,5 +254,6 @@ "AddedToDownloadQueue": "Dodano u red za preuzimanje", "EditRootFolder": "asdf", "AddImportListExclusionAlbumHelpText": "Spriječi dodavanje ovog filma na {appName} preko listi", - "BuiltIn": "Ugrađeno" + "BuiltIn": "Ugrađeno", + "DeleteSelectedCustomFormats": "Kloniraj Prilagođeni Format" } diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index 7b3da4338..f53f36006 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -1211,5 +1211,8 @@ "TestParsing": "Tesztelemzés", "Any": "Bármi", "BuiltIn": "Beépített", - "Script": "Szkript" + "Script": "Szkript", + "DeleteSelectedCustomFormats": "Egyéni formátum törlése", + "DeleteSelectedCustomFormatsMessageText": "Biztosan törölni szeretne {count} kiválasztott importlistát?", + "IncludeCustomFormatWhenRenaming": "Átnevezéskor adja meg az Egyéni formátumot" } diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index aa6590336..720eb9ab8 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -735,5 +735,7 @@ "AddImportListExclusionAlbumHelpText": "Koma í veg fyrir að kvikmyndum verði bætt við {appName} af listum", "DeleteArtistFoldersHelpText": "Eyddu kvikmyndamöppunni og innihaldi hennar", "BuiltIn": "Innbyggð", - "Script": "Handrit" + "Script": "Handrit", + "DeleteSelectedCustomFormats": "Eyða sérsniðnu sniði", + "IncludeCustomFormatWhenRenaming": "Láttu sérsniðið snið fylgja með þegar þú endurnefnir" } diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index e44e32c90..644f3e461 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -84,20 +84,20 @@ "DelayProfiles": "Profili di Ritardo", "Delete": "Cancella", "DeleteBackup": "Cancella Backup", - "DeleteBackupMessageText": "Sei sicuro di voler cancellare il backup '{0}'?", + "DeleteBackupMessageText": "Sei sicuro di voler eliminare il backup '{name}'?", "DeleteDelayProfile": "Cancellare il profilo di ritardo", "DeleteDelayProfileMessageText": "Sei sicuro di voler cancellare questo profilo di ritardo?", "DeleteDownloadClient": "Cancella Client di Download", - "DeleteDownloadClientMessageText": "Sei sicuro di voler eliminare il client di download '{0}'?", + "DeleteDownloadClientMessageText": "Sei sicuro di voler eliminare il client di download '{name}'?", "DeleteEmptyFolders": "Cancellare le cartelle vuote", "DeleteImportListExclusion": "Cancellare la lista delle esclusioni", "DeleteImportListExclusionMessageText": "Sei sicuro di voler cancellare questa lista di esclusioni delle importazioni?", - "DeleteImportListMessageText": "Sei sicuro di voler eliminare la lista '{0}'?", + "DeleteImportListMessageText": "Sei sicuro di voler eliminare la lista '{name}'?", "DeleteIndexer": "Cancella Indicizzatore", - "DeleteIndexerMessageText": "Sei sicuro di voler eliminare l'indexer '{0}'?", + "DeleteIndexerMessageText": "Sei sicuro di voler eliminare l'indicizzatore '{name}'?", "DeleteMetadataProfileMessageText": "Sicuro di voler cancellare il profilo di qualità {0}", "DeleteNotification": "Cancella Notifica", - "DeleteNotificationMessageText": "Sei sicuro di voler eliminare la notifica '{0}'?", + "DeleteNotificationMessageText": "Sei sicuro di voler eliminare la notifica '{name}'?", "DeleteQualityProfile": "Cancellare il profilo di qualità", "DeleteQualityProfileMessageText": "Sicuro di voler cancellare il profilo di qualità {0}", "DeleteReleaseProfile": "Cancellare il profilo di ritardo", @@ -667,7 +667,7 @@ "Customformat": "Formati Personalizzati", "CutoffFormatScoreHelpText": "Una volta raggiunto questo formato personalizzato, {appName} non scaricherà più i film", "DeleteCustomFormat": "Cancella Formato Personalizzato", - "DeleteCustomFormatMessageText": "Sei sicuro di voler eliminare il formato personalizzato '{0}'?", + "DeleteCustomFormatMessageText": "Sei sicuro di voler eliminare il formato personalizzato '{name}'?", "DeleteFormatMessageText": "Sei sicuro di voler cancellare il formato etichetta {0} ?", "DownloadPropersAndRepacksHelpTextWarning": "Usa i formati personalizzati per aggiornare automaticamente ai Proper/Repack", "DownloadedUnableToImportCheckLogsForDetails": "Scaricato - Impossibile importare: controlla i log per i dettagli", @@ -740,8 +740,8 @@ "Negated": "Negato", "RemoveSelectedItems": "Rimuovi elementi selezionati", "Required": "necessario", - "CountIndexersSelected": "{0} indicizzatore(i) selezionato(i)", - "DeleteSelectedDownloadClients": "Cancella i Client di Download", + "CountIndexersSelected": "{selectedCount} indicizzatori selezionati", + "DeleteSelectedDownloadClients": "Cancella i Client di Download Selezionati", "DeleteSelectedImportLists": "Cancella la lista di importazione", "DeleteSelectedIndexers": "Cancella Indexer", "ExistingTag": "Etichetta esistente", @@ -1003,5 +1003,32 @@ "WithFiles": "Con i File", "Any": "Qualunque", "BuiltIn": "Incorporato", - "Script": "Script" + "Script": "Script", + "DeleteSelectedCustomFormats": "Cancella Formato Personalizzato", + "IncludeCustomFormatWhenRenaming": "Includi formati personalizzati quando rinomini", + "DeleteSelectedCustomFormatsMessageText": "Sei sicuro di voler eliminare {count} applicazione(i) selezionata(e)?", + "FilterAlbumPlaceholder": "Filtra album", + "CountCustomFormatsSelected": "{count} formati personalizzati selezionati", + "EditSelectedArtists": "Modifica Artisti Selezionati", + "FilterArtistPlaceholder": "Filtra artisti", + "FirstAlbum": "Primo Album", + "AddNewArtist": "Aggiungi Nuovo Artista", + "AddNewAlbum": "Aggiungi Nuovo Album", + "CountAlbums": "{albumCount} album", + "AlbumDetails": "Dettagli Album", + "ArtistProgressBarText": "{trackFileCount} / {trackCount} (Totale: {totalTrackCount}, In download: {downloadingCount})", + "AddAlbumWithTitle": "Aggiungi {albumTitle}", + "AddArtistWithName": "Aggiungi {artistName}", + "AddNewAlbumSearchForNewAlbum": "Inizia a cercare per il nuovo album", + "AlbumStudioTracksDownloaded": "{trackFileCount}/{totalTrackCount} tracce scaricate", + "DeleteArtistFolders": "Elimina Cartelle degli Artisti", + "ExpandEPByDefaultHelpText": "EP", + "CountArtistsSelected": "{count} artisti selezionati", + "DeleteArtistFolder": "Elimina Cartella dell'Artista", + "ExpandSingleByDefaultHelpText": "Singoli", + "AlbumInfo": "Info Album", + "DownloadClientDelugeSettingsDirectory": "Cartella Download", + "DownloadedImporting": "'Scaricato - Importando'", + "DownloadedWaitingToImport": "'Scaricato - In attesa di Importazione'", + "MonitorFirstAlbum": "Primo Album" } diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index 1d024f006..a07623bfd 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -735,5 +735,7 @@ "Yesterday": "昨日", "BuiltIn": "ビルトイン", "Script": "脚本", - "AddCondition": "条件の追加" + "AddCondition": "条件の追加", + "DeleteSelectedCustomFormats": "カスタムフォーマットを削除する", + "IncludeCustomFormatWhenRenaming": "名前を変更するときにカスタム形式を含める" } diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 4290d1fec..75f6e0e5c 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -708,5 +708,6 @@ "AddToDownloadQueue": "다운로드 대기열에 추가됨", "AddedToDownloadQueue": "다운로드 대기열에 추가됨", "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName}는 이 출시의 영화를 확인할 수 없습니다. {appName}는 이 출시를 자동으로 가져오지 못할 수 있습니다. '{0}'을(를) 잡으시겠습니까?", - "BuiltIn": "내장" + "BuiltIn": "내장", + "DeleteSelectedCustomFormats": "사용자 지정 형식 삭제" } diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index 38cd3abb1..7f68f0bf3 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -270,5 +270,7 @@ "UnableToAddANewImportListExclusionPleaseTryAgain": "Ikke mulig å legge til ny betingelse, vennligst prøv igjen", "UnableToAddANewMetadataProfilePleaseTryAgain": "Ikke mulig å legge til ny betingelse, vennligst prøv igjen", "UnableToAddANewQualityProfilePleaseTryAgain": "Ikke mulig å legge til ny betingelse, vennligst prøv igjen", - "BuiltIn": "Bygget inn" + "BuiltIn": "Bygget inn", + "DeleteSelectedCustomFormats": "Klon egendefinert format", + "DeleteSelectedCustomFormatsMessageText": "Er du sikker på at du vil slette formattaggen {0}?" } diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index d86944eff..f73b734a9 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -867,5 +867,28 @@ "Tomorrow": "Morgen", "Any": "Elke", "BuiltIn": "Ingebouwd", - "Script": "Script" + "Script": "Script", + "ClickToChangeIndexerFlags": "Klik om indexeringsvlaggen te wijzigen", + "BlocklistAndSearch": "Blokkeerlijst en zoeken", + "ChangeCategoryMultipleHint": "Wijzigt downloads naar de 'Post-Import Categorie' van Downloadclient", + "ConnectionSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de {connectionName} url, zoals {url}", + "CustomFormatsSpecificationFlag": "Vlag", + "AutoTaggingRequiredHelpText": "Deze {implementationName} voorwaarde moet overeenkomen om de auto tagging regel toe te passen. Anders is een enkele {implementationName} voldoende.", + "BlocklistAndSearchHint": "Een vervanger zoeken na het blokkeren", + "BlocklistAndSearchMultipleHint": "Zoekopdrachten voor vervangers starten na het blokkeren van de lijst", + "BlocklistOnlyHint": "Blokkeer lijst zonder te zoeken naar een vervanger", + "BlocklistMultipleOnlyHint": "Blocklist zonder te zoeken naar vervangers", + "BlocklistOnly": "Alleen bloklijst", + "ChangeCategoryHint": "Verandert download naar de 'Post-Import Categorie' van Downloadclient", + "ClearBlocklist": "Blokkeerlijst wissen", + "Clone": "Kloon", + "CustomFormatsSpecificationRegularExpression": "Reguliere expressie", + "CustomFormatsSpecificationRegularExpressionHelpText": "Aangepaste opmaak RegEx is hoofdletterongevoelig", + "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.", + "DeleteSelectedCustomFormats": "Verwijder Eigen Formaat", + "IncludeCustomFormatWhenRenaming": "Eigen Formaat toevoegen bij het hernoemen", + "CountArtistsSelected": "{count} importeer lijst(en) geselecteerd", + "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", + "MinimumCustomFormatScoreHelpText": "Minimumscore aangepast formaat vereist om vertraging voor het voorkeursprotocol te omzeilen" } diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 332a43d3a..b8a15162b 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -8,7 +8,7 @@ "BackupRetentionHelpText": "Automatyczne kopie zapasowe starsze niż okres przechowywania zostaną automatycznie wyczyszczone", "Backups": "Kopie zapasowe", "BindAddress": "Adres powiązania", - "BindAddressHelpText": "Prawidłowy adres IP4 lub „*” dla wszystkich interfejsów", + "BindAddressHelpText": "Prawidłowy adres IP, localhost lub '*' dla wszystkich interfejsów", "BindAddressHelpTextWarning": "Wymaga ponownego uruchomienia, aby odniosło skutek", "Blocklist": "Czarna lista", "BlocklistRelease": "Dodaj wersję do czarnej listy", @@ -43,15 +43,15 @@ "DelayProfiles": "Profile opóźnień", "Delete": "Usunąć", "DeleteBackup": "Usuń kopię zapasową", - "DeleteBackupMessageText": "Czy na pewno chcesz usunąć kopię zapasową „{0}”?", + "DeleteBackupMessageText": "Czy na pewno chcesz usunąć kopię zapasową „{name}”?", "DeleteDelayProfile": "Usuń profil opóźnienia", "DeleteDelayProfileMessageText": "Czy na pewno chcesz usunąć ten profil opóźnienia?", "DeleteDownloadClient": "Usuń klienta pobierania", - "DeleteDownloadClientMessageText": "Czy na pewno chcesz usunąć klienta pobierania „{0}”?", + "DeleteDownloadClientMessageText": "Czy na pewno chcesz usunąć klienta pobierania „{name}”?", "DeleteEmptyFolders": "Usuń puste foldery", "DeleteImportListExclusionMessageText": "Czy na pewno chcesz usunąć to wykluczenie listy importu?", "DeleteImportListMessageText": "Czy na pewno chcesz usunąć listę „{0}”?", - "DeleteIndexerMessageText": "Czy na pewno chcesz usunąć indeksator „{0}”?", + "DeleteIndexerMessageText": "Czy na pewno chcesz usunąć indeksator „{name}”?", "DeleteMetadataProfileMessageText": "Czy na pewno usunąć informacje dodatkowe '{0name}'?", "DeleteNotification": "Usuń powiadomienie", "DeleteNotificationMessageText": "Czy na pewno chcesz usunąć powiadomienie „{0}”?", @@ -159,7 +159,7 @@ "RefreshInformationAndScanDisk": "Odśwież informacje i przeskanuj dysk", "RefreshScan": "Odśwież i skanuj", "ReleaseDate": "Daty wydania", - "RemoveFromDownloadClient": "Usuń z klienta pobierania", + "RemoveFromDownloadClient": "Usuń z Klienta Pobierania", "RemoveFromQueue": "Usuń z kolejki", "RemoveSelected": "Usuń zaznaczone", "RemoveTagExistingTag": "Istniejący tag", @@ -228,7 +228,7 @@ "APIKey": "Klucz API", "AddListExclusion": "Dodaj wykluczenie z listy", "AddingTag": "Dodawanie tagu", - "AgeWhenGrabbed": "Wiek (po złapaniu)", + "AgeWhenGrabbed": "Wiek (przy złapaniu)", "AlbumIsDownloadingInterp": "Film jest pobierany - {0}% {1}", "AlreadyInYourLibrary": "Już w Twojej bibliotece", "AlternateTitles": "Alternatywny tytuł", @@ -398,7 +398,7 @@ "SslPortHelpTextWarning": "Wymaga ponownego uruchomienia, aby odniosło skutek", "StandardTrackFormat": "Standardowy format filmu", "StartTypingOrSelectAPathBelow": "Zacznij pisać lub wybierz ścieżkę poniżej", - "StartupDirectory": "Katalog startowy", + "StartupDirectory": "Katalog Startowy", "Status": "Status", "Style": "Styl", "SuccessMyWorkIsDoneNoFilesToRename": "Powodzenie! Moja praca jest skończona, brak plików do zmiany nazwy.", @@ -461,7 +461,7 @@ "AddIndexer": "Dodaj indekser", "AddNew": "Dodaj nowy", "AddQualityProfile": "Dodaj profil jakości", - "AddRemotePathMapping": "Dodaj zdalne mapowanie ścieżki", + "AddRemotePathMapping": "Dodaj mapowanie ścieżek zdalnych", "AddRootFolder": "Dodaj folder główny", "AfterManualRefresh": "Po ręcznym odświeżeniu", "Age": "Wiek", @@ -762,7 +762,7 @@ "AutoRedownloadFailed": "Pobieranie nie udane", "EditDownloadClientImplementation": "Dodaj klienta pobierania - {implementationName}", "EditConditionImplementation": "Dodaj condition - {implementationName}", - "AddIndexerImplementation": "Dodaj condition - {implementationName}", + "AddIndexerImplementation": "Dodaj indeks - {implementationName}", "IncludeHealthWarnings": "Uwzględnij ostrzeżenia zdrowotne", "EditConnectionImplementation": "Dodaj Connection - {implementationName}", "RemoveQueueItemConfirmation": "Czy na pewno chcesz usunąć elementy ({0}) z kolejki?", @@ -802,5 +802,42 @@ "InteractiveSearchModalHeader": "Wyszukiwanie interaktywne", "IndexerPriorityHelpText": "Priorytet indeksera od 1 (najwyższy) do 50 (najniższy). Domyślnie: 25. Używany podczas pobierania wydań przy wystąpieniu równoważnych wydań. Przy synchronizacji RSS i wyszukiwaniu, Radarr wciąż będzie korzystał ze wszystkich indekserów", "BuiltIn": "Wbudowany", - "Script": "Scenariusz" + "Script": "Scenariusz", + "AppUpdated": "{appName} Zaktualizowany", + "AppUpdatedVersion": "{appName} został zaktualizowany do wersji `{version}`, by uzyskać nowe zmiany należy przeładować {appName}", + "AddImportList": "Dodaj listę importu", + "AddImportListImplementation": "Dodaj Listę Importu - {implementationName}", + "Absolute": "Absolutny", + "AddReleaseProfile": "Dodaj Profil Wydania", + "Any": "Dowolny", + "AuthenticationRequired": "Wymagana Autoryzacja", + "AuthenticationMethod": "Metoda Autoryzacji", + "AuthenticationMethodHelpTextWarning": "Wybierz prawidłową metodę autoryzacji", + "Artists": "artysta", + "PreferredProtocol": "Preferowany protokół", + "MetadataProfiles": "profil metadanych", + "AutoTaggingSpecificationTag": "Etykieta", + "Label": "Etykieta", + "ReleaseProfiles": "profil wydania", + "DeleteSelectedCustomFormats": "Usuń format niestandardowy", + "EditImportListImplementation": "Dodaj Listę Importu - {implementationName}", + "EditReleaseProfile": "Dodaj Profil Wydania", + "IncludeCustomFormatWhenRenaming": "Uwzględnij format niestandardowy podczas zmiany nazwy", + "MetadataProfile": "profil metadanych", + "Theme": "Motyw", + "CatalogNumber": "numer katalogowy", + "TBA": "Do ogłoszenia", + "Album": "album", + "Albums": "album", + "ReleaseProfile": "profil wydania", + "Artist": "artysta", + "AutoTaggingRequiredHelpText": "Warunek {implementationName} musi być zgodny, aby format niestandardowy został zastosowany. W przeciwnym razie wystarczy jedno dopasowanie {implementationName}.", + "Discography": "dyskografia", + "ExpandAlbumByDefaultHelpText": "album", + "Library": "Biblioteka", + "ProfilesSettingsArtistSummary": "Profile jakości, języka, opóźnienia i wydania", + "Season": "Sezon", + "Episode": "odcinek", + "AddMetadataProfile": "profil metadanych", + "EditMetadataProfile": "profil metadanych" } diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index e0d38c9a0..4ba653590 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -1007,5 +1007,8 @@ "DeleteSelectedArtists": "Eliminar artista selecionado", "Any": "Quaisquer", "Script": "Script", - "BuiltIn": "Incorporado" + "BuiltIn": "Incorporado", + "DeleteSelectedCustomFormats": "Eliminar formato personalizado", + "DeleteSelectedCustomFormatsMessageText": "Tem a certeza de que pretende eliminar a(s) lista(s) de {count} importação selecionada(s)?", + "IncludeCustomFormatWhenRenaming": "Incluir formato personalizado ao renomear" } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index aa79380fb..895cac712 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -118,7 +118,7 @@ "UnmonitoredHelpText": "Incluir filmes não monitorados no feed do iCal", "UpdateAll": "Atualizar Tudo", "UpdateAutomaticallyHelpText": "Baixe e instale atualizações automaticamente. Você ainda poderá instalar a partir do Sistema: Atualizações", - "UpdateMechanismHelpText": "Use o atualizador integrado do {appName} ou um script", + "UpdateMechanismHelpText": "Usar o atualizador integrado do {appName} ou um script", "Updates": "Atualizações", "UpdateScriptPathHelpText": "Caminho para um script personalizado que usa um pacote de atualização extraído e lida com o restante do processo de atualização", "UpdatingIsDisabledInsideADockerContainerUpdateTheContainerImageInstead": "A atualização está desabilitada no contêiner do Docker. Atualize a imagem do contêiner.", @@ -898,24 +898,24 @@ "IndexerRssHealthCheckNoIndexers": "Nenhum indexador disponível com a sincronização RSS habilitada, {appName} não capturará novos lançamentos automaticamente", "IndexerSearchCheckNoAutomaticMessage": "Nenhum indexador disponível com a Pesquisa Automática habilitada, {appName} não fornecerá nenhum resultado de pesquisa automática", "IndexerSearchCheckNoAvailableIndexersMessage": "Todos os indexadores com capacidade de pesquisa estão temporariamente indisponíveis devido a erros recentes do indexador", - "IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, {appName} não fornecerá resultados de pesquisa interativas", + "IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, {appName} não fornecerá resultados para pesquisas interativas", "IndexerStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a falhas", "IndexerStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a falhas: {0}", "Loading": "carregando", "MonitorAlbum": "Monitorar Álbum", - "MountCheckMessage": "A montagem que contém um caminho de filme é montada somente para leitura: ", + "MountCheckMessage": "A montagem que contém o caminho da música é montada somente para leitura: ", "OnHealthRestored": "Com a Saúde Restaurada", "ProxyCheckBadRequestMessage": "Falha ao testar o proxy. Código de status: {0}", "ProxyCheckFailedToTestMessage": "Falha ao testar o proxy: {0}", "ProxyCheckResolveIpMessage": "Falha ao resolver o endereço IP do host de proxy configurado {0}", "RemotePathMappingCheckDockerFolderMissing": "Você está usando o docker; o cliente de download {0} coloca os downloads em {1}, mas esse diretório parece não existir dentro do contêiner. Revise seus mapeamentos de caminho remoto e configurações de volume do contêiner.", - "RemotePathMappingCheckDownloadPermissions": "{appName} pode ver, mas não acessar o filme baixado {0}. Provável erro de permissão.", + "RemotePathMappingCheckDownloadPermissions": "{appName} pode ver, mas não acessar músicas baixadas {0}. Provavelmente erro de permissão.", "RemotePathMappingCheckFileRemoved": "O arquivo {0} foi removido no meio do processamento.", "RemotePathMappingCheckFilesGenericPermissions": "Baixe os arquivos relatados do cliente {0} em {1}, mas o {appName} não pode ver este diretório. Pode ser necessário ajustar as permissões da pasta.", "RemotePathMappingCheckFilesLocalWrongOSPath": "O cliente de download local {0} relatou arquivos em {1}, mas este não é um caminho {2} válido. Revise as configurações do cliente de download.", "RemotePathMappingCheckFolderPermissions": "{appName} pode ver, mas não acessar o diretório de download {0}. Provável erro de permissão.", "RemotePathMappingCheckGenericPermissions": "O cliente de download {0} coloca os downloads em {1}, mas o {appName} não pode ver este diretório. Pode ser necessário ajustar as permissões da pasta.", - "RemotePathMappingCheckImportFailed": "{appName} falhou ao importar um filme. Verifique seus logs para obter detalhes.", + "RemotePathMappingCheckImportFailed": "{appName} não conseguiu importar músicas. Verifique seus registros para obter detalhes.", "RemotePathMappingCheckLocalWrongOSPath": "O cliente de download local {0} coloca os downloads em {1}, mas este não é um caminho {2} válido. Revise as configurações do cliente de download.", "RemotePathMappingCheckRemoteDownloadClient": "O cliente de download remoto {0} relatou arquivos em {1}, mas este diretório parece não existir. Provavelmente faltando mapeamento de caminho remoto.", "RemotePathMappingCheckWrongOSPath": "O cliente de download remoto {0} coloca os downloads em {1}, mas este não é um caminho {2} válido. Revise seus mapeamentos de caminho remoto e baixe as configurações do cliente.", @@ -928,7 +928,7 @@ "SystemTimeCheckMessage": "A hora do sistema está desligada por mais de 1 dia. Tarefas agendadas podem não ser executadas corretamente até que o horário seja corrigido", "ThereWasAnErrorLoadingThisItem": "Ocorreu um erro ao carregar este item", "ThereWasAnErrorLoadingThisPage": "Ocorreu um erro ao carregar esta página", - "UpdateAvailableHealthCheckMessage": "Nova atualização está disponível", + "UpdateAvailableHealthCheckMessage": "Nova atualização está disponível: {version}", "UpdateCheckStartupNotWritableMessage": "Não é possível instalar a atualização porque a pasta de inicialização '{0}' não pode ser gravada pelo usuário '{1}'.", "UpdateCheckStartupTranslocationMessage": "Não é possível instalar a atualização porque a pasta de inicialização '{0}' está em uma pasta de translocação de aplicativo.", "Total": "Total", @@ -1305,5 +1305,14 @@ "WithFiles": "Com Arquivos", "Script": "Script", "BuiltIn": "Embutido", - "Any": "Quaisquer" + "Any": "Quaisquer", + "DeleteSelectedCustomFormats": "Excluir formato(s) personalizado(s)", + "EditSelectedCustomFormats": "Editar formatos personalizados selecionados", + "ManageCustomFormats": "Gerenciar formatos personalizados", + "CountCustomFormatsSelected": "{count} formato(s) personalizado(s) selecionado(s)", + "DeleteSelectedCustomFormatsMessageText": "Tem certeza que deseja excluir o(s) {count} formato(s) personalizado(s) selecionado(s)?", + "IncludeCustomFormatWhenRenaming": "Incluir formato personalizado ao renomear", + "NoCustomFormatsFound": "Nenhum formato personalizado encontrado", + "LogSizeLimit": "Limite de Tamanho do Registro", + "LogSizeLimitHelpText": "Tamanho máximo do arquivo de registro em MB antes do arquivamento. O padrão é 1 MB." } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 98af47d51..2570908fb 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -777,5 +777,9 @@ "ParseModalUnableToParse": "Nu se poate analiza titlul furnizat, vă rugăm să încercați din nou.", "True": "Adevărat", "BuiltIn": "Incorporat", - "Script": "Script" + "Script": "Script", + "UpdateAvailableHealthCheckMessage": "O nouă versiune este disponibilă: {version}", + "DeleteSelectedCustomFormats": "Ștergeți formatul personalizat", + "DeleteSelectedCustomFormatsMessageText": "Sigur doriți să ștergeți {count} clienți de descărcare selectați?", + "IncludeCustomFormatWhenRenaming": "Includeți format personalizat la redenumire" } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index 7951f1741..1a61708a7 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -50,7 +50,7 @@ "Permissions": "Разрешения", "PortNumber": "Номер порта", "PosterSize": "Размер постера", - "PreviewRename": "Предварительный просмотр переименования", + "PreviewRename": "Предпросмотр\nпереименования", "Profiles": "Профили", "Proper": "Пропер (Proper)", "PropersAndRepacks": "Проперы и репаки", @@ -299,7 +299,7 @@ "Downloading": "Скачивается", "DownloadPropersAndRepacksHelpTexts1": "Следует ли автоматически обновляться до Propers / Repacks", "DownloadWarningCheckDownloadClientForMoreDetails": "Предупреждения по скачиванию: подробности в программе для скачивания", - "Edit": "Редактирование", + "Edit": "Изменить", "Enable": "Включить", "EnableAutomaticAdd": "Включить автоматическое добавление", "EnableAutomaticSearch": "Включить автоматический поиск", @@ -562,7 +562,7 @@ "TotalSpace": "Общее сводное место", "Ui": "Пользовательский интерфейс", "UnmappedFilesOnly": "Только несопоставленные файлы", - "UnmonitoredOnly": "Только отслеживаемые", + "UnmonitoredOnly": "Только не отслеживаемые", "UpgradesAllowed": "Обновления разрешены", "Wanted": "Разыскиваемые", "Warn": "Предупреждение", @@ -673,7 +673,7 @@ "SystemTimeCheckMessage": "Расхождение системного времени более чем на 1 день. Запланированные задачи могут работать некорректно, пока не будет исправлено время", "UnableToLoadCustomFormats": "Невозможно загрузить пользовательские форматы", "UnableToLoadInteractiveSearch": "Невозможно загрузить результаты поиска по этому фильму. Попробуйте позже", - "UpdateAvailableHealthCheckMessage": "Доступно новое обновление", + "UpdateAvailableHealthCheckMessage": "Доступно новое обновление: {version}", "UpdateCheckStartupNotWritableMessage": "Невозможно установить обновление так как загрузочная папка '{0}' недоступна для записи для пользователя '{1}'.", "UpdateCheckStartupTranslocationMessage": "Не удается установить обновление, поскольку папка автозагрузки \"{0}\" находится в папке перемещения приложений.", "ApiKeyValidationHealthCheckMessage": "Пожалуйста, обновите свой ключ API, чтобы он был длиной не менее {0} символов. Вы можете сделать это через настройки или файл конфигурации", @@ -891,7 +891,7 @@ "ParseModalUnableToParse": "Невозможно распознать данное название, попробуйте еще раз.", "TestParsing": "Тест сбора данных", "True": "Правильно", - "SearchMonitored": "Искать отслеживаемое", + "SearchMonitored": "Искать сериал", "ClickToChangeIndexerFlags": "Нажмите, чтобы изменить флаги индексатора", "CustomFormatsSpecificationFlag": "Флаг", "FormatDateTime": "{formattedDate} {formattedTime}", @@ -1053,5 +1053,8 @@ "MetadataProfileIdHelpText": "Элементы списка профиля качества будут добавлены с помощью", "MissingAlbumsData": "Отслеживать эпизоды, у которых нет файлов или которые еще не вышли в эфир", "MassAlbumsCutoffUnmetWarning": "Вы уверены, что хотите найти все {totalRecords}, не достигшие указанного качества эпизоды ?", - "EndedAllTracksDownloaded": "Завершено (Все эпизоды скачаны)" + "EndedAllTracksDownloaded": "Завершено (Все эпизоды скачаны)", + "DeleteSelectedCustomFormatsMessageText": "Вы уверены, что хотите удалить {count} выбранных списков импорта?", + "IncludeCustomFormatWhenRenaming": "Включить пользовательский формат при переименовании", + "DeleteSelectedCustomFormats": "Удалить пользовательский формат" } diff --git a/src/NzbDrone.Core/Localization/Core/sk.json b/src/NzbDrone.Core/Localization/Core/sk.json index 7be7a07b7..ac3c2e6b8 100644 --- a/src/NzbDrone.Core/Localization/Core/sk.json +++ b/src/NzbDrone.Core/Localization/Core/sk.json @@ -289,5 +289,6 @@ "BlocklistReleases": "Blocklistnúť vydanie", "UnableToAddANewMetadataProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.", "UnableToAddANewQualityProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.", - "BuiltIn": "Vstavaný" + "BuiltIn": "Vstavaný", + "DeleteSelectedCustomFormats": "Klonovať vlastný formát" } diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 53ef1ad75..9a14d210e 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -906,5 +906,7 @@ "AddImportListExclusionAlbumHelpText": "Förhindra TV-serie att läggas till i {appName} från listor", "ArtistIsMonitored": "Författare är obevakad", "BuiltIn": "Inbyggd", - "Script": "Skript" + "Script": "Skript", + "DeleteSelectedCustomFormats": "Ta bort anpassat format", + "IncludeCustomFormatWhenRenaming": "Inkludera anpassat format när du byter namn" } diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index e118964fa..bb67038fb 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -732,5 +732,7 @@ "TagsSettingsSummary": "ดูแท็กทั้งหมดและวิธีการใช้งาน แท็กที่ไม่ได้ใช้สามารถลบออกได้", "AddImportListExclusionAlbumHelpText": "ป้องกันไม่ให้เพิ่มภาพยนตร์ไปยัง {appName} ตามรายการ", "BuiltIn": "สร้างขึ้นใน", - "Script": "สคริปต์" + "Script": "สคริปต์", + "DeleteSelectedCustomFormats": "ลบรูปแบบที่กำหนดเอง", + "IncludeCustomFormatWhenRenaming": "รวมรูปแบบที่กำหนดเองเมื่อเปลี่ยนชื่อ" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 6d6d9e4f4..050a67ad7 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -607,7 +607,7 @@ "IndexerRssHealthCheckNoIndexers": "RSS senkronizasyonunun etkin olduğu dizinleyici yok, {appName} yeni yayınlar otomatik olarak almayacak", "IndexerSearchCheckNoAutomaticMessage": "Otomatik Arama etkinken indeksleyici yok, {appName} herhangi bir otomatik arama sonucu sağlamayacak", "IndexerSearchCheckNoAvailableIndexersMessage": "Son indeksleyici hataları nedeniyle arama özellikli indeksleyicilerin tümü geçici olarak kullanılamıyor", - "IndexerSearchCheckNoInteractiveMessage": "Etkileşimli Arama etkinken indeksleyici yok, {appName} herhangi bir etkileşimli arama sonucu sağlamayacaktır", + "IndexerSearchCheckNoInteractiveMessage": "Etkileşimli Arama etkinleştirilmiş fakat dizinleyici mevcut değil; {appName} herhangi bir etkileşimli arama sonucu sağlayamayacaktır", "IndexerStatusCheckAllClientMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor", "IndexerStatusCheckSingleClientMessage": "Hatalar nedeniyle dizinleyiciler kullanılamıyor: {0}", "MountCheckMessage": "Bir film yolu içeren bağlama, salt okunur olarak bağlanır: ", @@ -926,7 +926,7 @@ "SizeLimit": "Boyut Limiti", "OnHealthRestored": "Sağlığın İyileştirilmesi Hakkında", "RemoveTagsAutomaticallyHelpText": "Koşullar karşılanmazsa otomatik etiketlemeyi kaldırın", - "UpdateAvailableHealthCheckMessage": "Yeni güncelleme mevcut", + "UpdateAvailableHealthCheckMessage": "Yeni güncelleme mevcut: {version}", "NotificationsTelegramSettingsIncludeAppName": "{appName}'i Başlığa dahil et", "NotificationsTelegramSettingsIncludeAppNameHelpText": "Farklı uygulamalardan gelen bildirimleri ayırt etmek için isteğe bağlı olarak mesaj başlığının önüne {appName} ekleyin", "RemotePathMappingCheckImportFailed": "{appName} filmi içe aktaramadı. Ayrıntılar için günlüklerinizi kontrol edin.", @@ -1016,5 +1016,15 @@ "True": "Aktif", "BuiltIn": "Dahili", "Script": "Hazır Metin", - "Any": "Herhangi" + "Any": "Herhangi", + "DeleteSelected": "Seçileni Sil", + "CountCustomFormatsSelected": "{count} özel biçim seçildi", + "EditSelectedCustomFormats": "Seçilen Özel Formatları Düzenle", + "IncludeCustomFormatWhenRenaming": "Yeniden Adlandırırken Özel Formatı Dahil Et", + "ManageCustomFormats": "Özel Formatları Yönet", + "NoCustomFormatsFound": "Özel format bulunamadı", + "DeleteSelectedCustomFormats": "Özel Formatı Sil", + "DeleteSelectedCustomFormatsMessageText": "Seçilen {count} içe aktarma listesini silmek istediğinizden emin misiniz?", + "LogSizeLimit": "Log Boyutu Sınırı", + "LogSizeLimitHelpText": "Arşivlemeden önce MB cinsinden maksimum log dosya boyutu. Varsayılan 1 MB'tır." } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 8c6874cf2..c6dcd7d2c 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -897,5 +897,8 @@ "BypassIfAboveCustomFormatScore": "Пропустити, якщо перевищено оцінку користувацького формату", "Any": "Будь-який", "BuiltIn": "Вбудований", - "Script": "Сценарій" + "Script": "Сценарій", + "DeleteSelectedCustomFormatsMessageText": "Ви впевнені, що хочете видалити тег {0} ?", + "DeleteSelectedCustomFormats": "Видалити спеціальний формат", + "IncludeCustomFormatWhenRenaming": "Включати спеціальний формат під час перейменування" } diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index 11e6b483a..223cdbdda 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -742,5 +742,7 @@ "IndexerPriorityHelpText": "Mức độ ưu tiên của người lập chỉ mục từ 1 (Cao nhất) đến 50 (Thấp nhất). Mặc định: 25.", "FormatAgeHour": "Giờ", "Script": "Kịch bản", - "BuiltIn": "Được xây dựng trong" + "BuiltIn": "Được xây dựng trong", + "DeleteSelectedCustomFormats": "Xóa định dạng tùy chỉnh", + "IncludeCustomFormatWhenRenaming": "Bao gồm định dạng tùy chỉnh khi đổi tên" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 96455b6f8..2f950988f 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -36,7 +36,7 @@ "UpdateAutomaticallyHelpText": "自动下载并安装更新。你还可以在“系统:更新”中安装", "Version": "版本", "ApplyTags": "应用标签", - "AppDataDirectory": "AppData目录", + "AppDataDirectory": "AppData 目录", "Backups": "历史备份", "BindAddress": "绑定地址", "BindAddressHelpText": "有效的 IP 地址、localhost、或以'*'代表所有接口", @@ -60,7 +60,7 @@ "DeleteDownloadClient": "删除下载客户端", "DeleteDownloadClientMessageText": "你确定要删除下载客户端 “{name}” 吗?", "DeleteIndexer": "删除索引器", - "DeleteIndexerMessageText": "您确定要删除索引器“{name}”吗?", + "DeleteIndexerMessageText": "您确定要删除索引器 “{name}” 吗?", "DeleteNotification": "删除消息推送", "DeleteTag": "删除标签", "DeleteTagMessageText": "您确定要删除标签 '{label}' 吗?", @@ -168,9 +168,9 @@ "AddingTag": "添加标签", "Analytics": "分析", "Automatic": "自动化", - "AlreadyInYourLibrary": "已经在你的库中", + "AlreadyInYourLibrary": "已在你的资源库中", "Actions": "动作", - "AddListExclusion": "新增 列表", + "AddListExclusion": "添加列表排除", "MinimumAge": "最低间隔", "MinimumFreeSpaceWhenImportingHelpText": "如果导入的磁盘空间不足,则禁止导入", "Absolute": "绝对", @@ -186,8 +186,8 @@ "45MinutesFourtyFive": "45 分钟:{0}", "60MinutesSixty": "60 分钟:{0}", "AllArtistAlbums": "所有艺术家专辑", - "AllExpandedCollapseAll": "收缩所有", - "AllExpandedExpandAll": "展开所有", + "AllExpandedCollapseAll": "全部收起", + "AllExpandedExpandAll": "全部展开", "AllowArtistChangeClickToChangeArtist": "更改艺术家", "AllowFingerprinting": "允许指纹识别", "AllowFingerprintingHelpText": "利用指纹技术提高航迹匹配的准确性", @@ -205,7 +205,7 @@ "AnchorTooltip": "此文件已在您的库中,用于您当前正在导入的版本", "RemotePath": "远程路径", "GrabSelected": "抓取已选", - "Year": "年", + "Year": "年份", "BackupIntervalHelpText": "备份 {appName} 数据库和设置的时间间隔", "CalendarWeekColumnHeaderHelpText": "当使用周视图时显示上面的每一列", "APIKey": "API Key", @@ -238,7 +238,7 @@ "Missing": "缺失", "Monitored": "已监控", "MustContain": "必须包含", - "MustNotContain": "必须不包含", + "MustNotContain": "不得包含", "NamingSettings": "命名设置", "NETCore": ".NET", "NoHistory": "无历史记录。", @@ -319,7 +319,7 @@ "SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "该索引器不支持搜索", "SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByLidarr": "当自动搜索通过UI或{appName}执行时将被使用", "SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "当手动搜索启用时使用", - "TestAllIndexers": "测试全部搜刮器", + "TestAllIndexers": "测试全部索引器", "TestAllLists": "测试全部列表", "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "这将适用于所有搜刮器,请遵循他们所制定的规则", "TimeFormat": "时间格式", @@ -424,8 +424,8 @@ "ImportExtraFilesHelpText": "导入歌曲后导入匹配的额外文件(字幕/nfo等)", "ImportFailedInterp": "导入失败: {0}", "IncludeUnknownArtistItemsHelpText": "显示队列中没有艺术家的项目,这可能包括被删除的艺术家,影片以及{appName}类别中的任何其他内容", - "IncludeUnmonitored": "包含未监控的", - "IndexerSettings": "搜刮器设置", + "IncludeUnmonitored": "包含未追踪的", + "IndexerSettings": "索引器设置", "IsCutoffCutoff": "截止", "IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "升级直至达到或超过此质量", "IsTagUsedCannotBeDeletedWhileInUse": "使用中无法删除", @@ -464,7 +464,7 @@ "ShowCutoffUnmetIconHelpText": "终止监控条件未满足前为文件显示图标", "UiLanguageHelpText": "{appName}使用的UI界面语言", "CutoffUnmet": "未达设定标准", - "AgeWhenGrabbed": "发布时长", + "AgeWhenGrabbed": "年龄(获取后)", "AnyReleaseOkHelpText": "{appName} 将会自动切换到与已下载文件最匹配的版本", "DelayingDownloadUntil": "延时下载直到 {1} 在 {0} 之前 Delaying download until {0} at {1}", "SetPermissions": "设定权限", @@ -487,10 +487,10 @@ "MetadataProfile": "元数据配置", "MetadataProfiles": "元数据配置", "AddMetadataProfile": "元数据配置", - "AddNew": "添加", + "AddNew": "添加新项目", "AddRootFolder": "添加根目录", "Albums": "专辑", - "Connect": "通知连接", + "Connect": "连接", "DoNotPrefer": "不要首选", "ExistingAlbumsData": "监控专辑有文件或尚未发布", "Ignored": "已忽略", @@ -555,7 +555,7 @@ "AllMonitoringOptionHelpText": "监控艺术家们及导入列表中每个艺术家的所有专辑", "Always": "总是", "ApplicationURL": "应用程序 URL", - "ApplicationUrlHelpText": "此应用的外部URL,包含 http(s)://、端口和基本URL", + "ApplicationUrlHelpText": "此应用的外部 URL,包含 http(s)://、端口和基本 URL", "Apply": "应用", "ArtistNameHelpText": "要排除的艺术家/专辑的名称(任何有含义的均可)", "AudioInfo": "音频信息", @@ -610,7 +610,7 @@ "ImportLists": "导入列表", "ImportListSettings": "常规导入列表设置", "ImportListSpecificSettings": "导入列表特定设置", - "IndexerDownloadClientHelpText": "指定索引器的下载客户端", + "IndexerDownloadClientHelpText": "指定从此索引器抓取的下载客户端", "IndexerIdHelpText": "指定配置文件应用于哪个索引器", "IndexerIdHelpTextWarning": "使用带有首字母的特定索引器可能会导致复制版本被抓取", "IndexerTagHelpText": "仅对至少有一个匹配标记的电影使用此索引器。留空则适用于所有电影。", @@ -827,9 +827,9 @@ "EnableRssHelpText": "当{appName}定期通过RSS同步查找发布时使用", "SelectReleaseGroup": "选择发布组", "BypassIfAboveCustomFormatScore": "若高于自定义格式分数则绕过", - "CloneCustomFormat": "复制自定义命名格式", + "CloneCustomFormat": "复制自定义格式", "Conditions": "条件", - "CouldntFindAnyResultsForTerm": "无法找到 '{0}' 的结果", + "CouldntFindAnyResultsForTerm": "未找到 '{0}' 的任何结果", "DownloadClientCheckDownloadingToRoot": "下载客户端{0}将下载内容放在根文件夹{1}中。您不应该下载到根文件夹。", "DownloadClientCheckNoneAvailableMessage": "无可用的下载客户端", "DownloadClientCheckUnableToCommunicateMessage": "无法与{0}进行通讯。", @@ -837,16 +837,16 @@ "DownloadPropersAndRepacksHelpTextWarning": "使用自定义格式自动升级到合适的或者Repack", "DownloadClientStatusCheckSingleClientMessage": "所有下载客户端都不可用: {0}", "DownloadedUnableToImportCheckLogsForDetails": "已下载 - 无法导入:查看日志获取详细信息", - "ExportCustomFormat": "已有自定义格式", + "ExportCustomFormat": "导出自定义格式", "FailedDownloadHandling": "下载失败处理", "FailedLoadingSearchResults": "读取搜索结果失败,请稍后重试。", "ForeignId": "国外 ID", "Formats": "格式", "HiddenClickToShow": "隐藏,点击显示", "IncludeCustomFormatWhenRenamingHelpText": "在 {Custom Formats} 中包含重命名格式", - "IndexerRssHealthCheckNoAvailableIndexers": "由于索引器错误,所有支持rss的索引器暂时不可用", - "IndexerRssHealthCheckNoIndexers": "没有任何索引器开启了RSS同步,{appName}不会自动抓取新发布的专辑", - "IndexerSearchCheckNoInteractiveMessage": "没有可用的交互式搜索的索引器,因此 {appName} 不会提供任何交互式搜索的结果", + "IndexerRssHealthCheckNoAvailableIndexers": "由于最近索引器错误,所有支持 RSS 的索引器暂时不可用", + "IndexerRssHealthCheckNoIndexers": "没有索引器开启 RSS 同步,{appName} 将不会自动抓取新版本", + "IndexerSearchCheckNoInteractiveMessage": "没有索引器开启手动搜索,{appName} 将不会提供任何手动搜索结果", "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "添加新的艺术家很容易,只需开始输入要添加的艺术家的名称即可。", "Loading": "加载中", "Monitor": "是否监控", @@ -861,7 +861,7 @@ "RemotePathMappingCheckBadDockerPath": "您正在使用docker;下载客户端 {0} 的下载目录为 {1} ,但是该地址 {2} 不合法。请检查您的远程地址映射和下载客户端设置。", "RemotePathMappingCheckLocalWrongOSPath": "本地下载客户端 {0} 报告文件在目录 {1} 中,但是该地址 {2} 非法。请检查您的下载客户端设置。", "ShownClickToHide": "显示,点击隐藏", - "CustomFormat": "自定义命名格式", + "CustomFormat": "自定义格式", "CustomFormatRequiredHelpText": "此{0}条件必须匹配才能应用自定义格式。否则,单个{1}匹配就足够了。", "CustomFormatSettings": "自定义格式设置", "CustomFormats": "自定义命名格式", @@ -872,7 +872,7 @@ "ImportListStatusCheckAllClientMessage": "所有的列表因错误不可用", "ImportListStatusCheckSingleClientMessage": "列表因错误不可用:{0}", "ImportMechanismHealthCheckMessage": "启用下载完成处理", - "IndexerStatusCheckAllClientMessage": "所有搜刮器都因错误不可用", + "IndexerStatusCheckAllClientMessage": "所有索引器都因错误不可用", "IndexerStatusCheckSingleClientMessage": "搜刮器因错误不可用:{0}", "RemotePathMappingCheckDockerFolderMissing": "您正在使用docker;下载客户端 {0} 报告文件在 {1} 中,但是该目录似乎不存在docker容器中。请检查您的远程地址映射和容器的卷设置。", "RemotePathMappingCheckDownloadPermissions": "{appName}可以找到但无法访问已下载的电影 {0} ,可能是权限错误。", @@ -886,7 +886,7 @@ "RemotePathMappingCheckLocalFolderMissing": "远程客户端 {0} 将下载文件放置在 {1} 中,但该目录似乎不存在,可能目录确实或远程地址映射错误。", "RemotePathMappingCheckRemoteDownloadClient": "远程客户端 {0} 将下载文件放置在 {1} 中,但该目录似乎不存在,可能目录确实或远程地址映射错误。", "RemotePathMappingCheckWrongOSPath": "远程下载客户端 {0} 报告文件在 {1} 中,但是该地址 {2} 非法。请检查您的远程地址映射和下载客户端设置。", - "AppDataLocationHealthCheckMessage": "正在更新期间的 AppData 不会被更新删除", + "AppDataLocationHealthCheckMessage": "无法更新,以防止在更新时删除 AppData", "ColonReplacement": "替换冒号", "CopyToClipboard": "复制到剪贴板", "DeleteCustomFormat": "删除自定义命名格式", @@ -894,8 +894,8 @@ "IndexerJackettAll": "使用 Jackett 不受支持的“全部”终点的索引器:{0}", "IndexerLongTermStatusCheckAllClientMessage": "由于故障超过6小时,所有索引器均不可用", "IndexerLongTermStatusCheckSingleClientMessage": "由于故障6小时,下列索引器都已不可用:{0}", - "IndexerSearchCheckNoAvailableIndexersMessage": "由于最近的索引器错误,所有支持搜索的索引器暂时不可用", - "IndexerSearchCheckNoAutomaticMessage": "没有索引器开启自动搜索,{appName}不会提供任何自动搜索结果", + "IndexerSearchCheckNoAvailableIndexersMessage": "由于最近索引器错误,所有支持搜索的索引器暂时不可用", + "IndexerSearchCheckNoAutomaticMessage": "没有索引器开启自动搜索,{appName} 将不会提供任何自动搜索结果", "MinFormatScoreHelpText": "允许下载的最小自定义格式分数", "Monitoring": "监控中", "RemotePathMappingCheckFolderPermissions": "{appName}可以找到但是无法访问已下载的目录 {0} ,可能是权限错误。", @@ -920,7 +920,7 @@ "DeleteRemotePathMappingMessageText": "你确定要删除此远程路径映射吗?", "DeleteCondition": "删除条件", "ListRefreshInterval": "列表刷新间隔", - "ApiKeyValidationHealthCheckMessage": "请将API密钥更新为至少{0}个字符长。您可以通过设置或配置文件执行此操作", + "ApiKeyValidationHealthCheckMessage": "请将 API 密钥更新为至少 {0} 个字符长度。您可以通过设置页面或修改配置文件完成此操作", "ApplyChanges": "应用更改", "CountDownloadClientsSelected": "{selectedCount}下载客户端已选中", "CountImportListsSelected": "{selectedCount}导入列表已选中", @@ -930,13 +930,13 @@ "DeleteSelectedImportLists": "删除导入列表", "DeleteSelectedImportListsMessageText": "您确定要删除选定的{count}导入列表吗?", "DeleteSelectedIndexers": "删除索引器", - "DeleteSelectedIndexersMessageText": "您确定要删除{count}选定的索引器吗?", + "DeleteSelectedIndexersMessageText": "您确定要删除选定的 {count} 个索引器吗?", "ManageClients": "管理客户", "ListWillRefreshEveryInterp": "列表将每 {0} 刷新一次", "AutomaticAdd": "自动添加", "EditSelectedDownloadClients": "编辑选定的下载客户端", "EditSelectedImportLists": "编辑选定的导入列表", - "EditSelectedIndexers": "编辑选定的索引器", + "EditSelectedIndexers": "编辑选定索引器", "Implementation": "执行", "ManageDownloadClients": "管理下载客户端", "ManageImportLists": "管理导入列表", @@ -954,7 +954,7 @@ "ApplyTagsHelpTextReplace": "替换: 用输入的标签替换当前标签 (不输入将会清除所有标签)", "ApplyTagsHelpTextHowToApplyDownloadClients": "如何将标签应用到已选择的下载客户端", "ApplyTagsHelpTextHowToApplyImportLists": "如何将标签应用到已选择的导入列表", - "ApplyTagsHelpTextHowToApplyIndexers": "如何将标签应用到已选择的索引器", + "ApplyTagsHelpTextHowToApplyIndexers": "如何将标签应用到已选中的索引器", "Negated": "无效的", "No": "否", "NoChange": "无修改", @@ -1004,7 +1004,7 @@ "AddIndexerImplementation": "添加索引器 - {implementationName}", "AutomaticUpdatesDisabledDocker": "不支持在使用 Docker 容器时直接升级。你需要升级 {appName} 容器镜像或使用脚本(script)", "Clone": "复制", - "AppUpdated": "{appName} 升级", + "AppUpdated": "{appName} 已升级", "AddConditionImplementation": "添加条件 - {implementationName}", "AddImportList": "添加导入列表", "AddImportListImplementation": "添加导入列表- {implementationName}", @@ -1017,7 +1017,7 @@ "BypassIfHighestQualityHelpText": "当发布版本在使用首选协议的质量配置文件中具有最高启用质量时,跳过延迟", "PreferProtocol": "首选 {preferredProtocol}", "SkipRedownloadHelpText": "阻止 {appName} 尝试下载已删除项目的替代版本", - "AppUpdatedVersion": "{appName} 已经更新到 {version} 版本,重新加载 {appName} 使更新生效", + "AppUpdatedVersion": "{appName} 已经更新到版本 {version} ,重新加载 {appName} 使更新生效", "DeleteFormat": "删除格式", "CloneCondition": "克隆条件", "DashOrSpaceDashDependingOnName": "破折号或空格破折号取决于名字", @@ -1059,16 +1059,16 @@ "InfoUrl": "信息 URL", "GrabId": "抓取ID", "InvalidUILanguage": "您的UI设置为无效语言,请纠正并保存设置", - "AuthenticationMethod": "认证方式", - "AuthenticationMethodHelpTextWarning": "请选择一个有效的身份验证方式", - "AuthenticationRequired": "需要身份验证", + "AuthenticationMethod": "身份认证方式", + "AuthenticationMethodHelpTextWarning": "请选择一个有效的认证方式", + "AuthenticationRequired": "需要认证", "Auto": "自动", "Banners": "横幅", "BannerOptions": "横幅选项", "AuthenticationRequiredPasswordHelpTextWarning": "请输入新密码", "AuthenticationRequiredUsernameHelpTextWarning": "请输入新用户名", - "AuthenticationRequiredHelpText": "修改哪些请求需要认证。除非你了解其中的风险,否则不要更改。", - "AuthenticationRequiredWarning": "为了防止未经身份验证的远程访问,{appName} 现在需要启用身份验证。您可以禁用本地地址的身份验证。", + "AuthenticationRequiredHelpText": "修改这些请求需要认证。除非你了解其中的风险,否则不要进行更改。", + "AuthenticationRequiredWarning": "为防止未经认证的远程访问,{appName} 现需要启用身份认证。您可以选择禁用本地地址的身份认证。", "DisabledForLocalAddresses": "在本地地址上禁用", "Overview": "概览", "OverviewOptions": "概览选项", @@ -1093,7 +1093,7 @@ "ConditionUsingRegularExpressions": "此条件使用正则表达式匹配。请注意字符 `\\^$.|?*+()[{` 具有特殊含义,需要用转义符 `\\`", "DeleteSpecification": "删除规范", "Large": "大", - "Negate": "相反的", + "Negate": "反选", "QueueFilterHasNoItems": "选定的队列过滤器没有项目", "RegularExpressionsCanBeTested": "正则表达式可在[此处](http://regexstorm.net/tester)测试。", "ReleaseProfile": "发行配置文件", @@ -1103,7 +1103,7 @@ "AutoTagging": "自动标记", "AutoTaggingLoadError": "无法加载自动标记", "AutoTaggingNegateHelpText": "如果选中,当 {implementationName} 条件匹配时,自动标记不会应用。", - "AutoTaggingRequiredHelpText": "这个{0}条件必须匹配自动标记规则才能应用。否则,一个{0}匹配就足够了。", + "AutoTaggingRequiredHelpText": "此 {implementationName} 条件必须匹配才能应用自动标记规则。否则,单个 {implementationName} 匹配就足够了。", "CloneAutoTag": "复制自动标签", "Connection": "连接", "DeleteArtistFolderCountConfirmation": "确定要删除选定的 {count} 个的网站吗?", @@ -1145,7 +1145,7 @@ "IncludeHealthWarnings": "包含健康度警告", "RemoveQueueItem": "移除 - {sourceTitle}", "AutoRedownloadFailedFromInteractiveSearchHelpText": "当从手动搜索中获取失败的发行版时,自动搜索并尝试下载不同的发行版", - "DownloadClientAriaSettingsDirectoryHelpText": "可选的下载位置,留空使用 Aria2 默认位置", + "DownloadClientAriaSettingsDirectoryHelpText": "下载位置可选择,留空使用 Aria2 默认位置", "CustomFormatsSpecificationRegularExpression": "正则表达式", "RemoveQueueItemConfirmation": "您确定要从队列中移除“{sourceTitle}”吗?", "AutoRedownloadFailed": "重新下载失败", @@ -1160,11 +1160,11 @@ "KeyboardShortcuts": "快捷键", "Links": "链接", "Period": "时期", - "Space": "空间", + "Space": "空格", "MonitoredStatus": "已监控的/状态", "Logout": "注销", "Lowercase": "小写字母", - "MassSearchCancelWarning": "一旦启动,如果不重启{appName}或禁用所有索引器,就无法取消此操作。", + "MassSearchCancelWarning": "在不重启 {appName} 或禁用所有索引器的情况下,一旦启动便无法取消此操作。", "Underscore": "下划线", "Uppercase": "大写字母", "Donate": "捐赠", @@ -1175,7 +1175,7 @@ "MediaManagementSettingsSummary": "命名,文件管理和根文件夹设置", "MetadataSettingsArtistSummary": "在导入专辑或刷新艺术家时创建元数据文件", "QualitySettingsSummary": "质量尺寸和命名", - "ConnectSettingsSummary": "通知、与媒体服务器/播放器的链接、自定义脚本", + "ConnectSettingsSummary": "通知、与媒体服务器/播放器的连接及自定义脚本", "CustomFormatsSettings": "自定义格式设置", "CustomFormatsSettingsSummary": "自定义格式和设置", "ImportListsSettingsSummary": "从另一个 {appName} 实例或 Trakt 列表导入并管理列表排除项", @@ -1253,26 +1253,26 @@ "CustomFilter": "自定义过滤器", "AddToDownloadQueue": "添加到下载队列", "AddedToDownloadQueue": "已加入下载队列", - "IndexerFlags": "搜刮器标记", + "IndexerFlags": "索引器标志", "NotificationsEmbySettingsSendNotifications": "发送通知", "NotificationsKodiSettingAlwaysUpdateHelpText": "即使有视频正在播放也更新资源库?", "NotificationsKodiSettingsCleanLibrary": "清理资源库", "NotificationsKodiSettingsDisplayTimeHelpText": "通知显示时长(秒)", "NotificationsKodiSettingsUpdateLibraryHelpText": "导入和重命名时更新资源库?", - "ConnectionSettingsUrlBaseHelpText": "向 {clientName} url 添加前缀,例如 {url}", - "DownloadClientDelugeSettingsDirectoryHelpText": "可选的下载位置,留空使用 Aria2 默认位置", + "ConnectionSettingsUrlBaseHelpText": "向 {connectionName} URL 添加前缀,例如 {url}", + "DownloadClientDelugeSettingsDirectoryHelpText": "下载位置可选择,留空使用 Deluge 默认位置", "UseSsl": "使用 SSL", "CustomFormatsSpecificationFlag": "标记", "AutoTaggingSpecificationTag": "标签", "AddAutoTagError": "无法添加新的自动标签,请重试。", "ClickToChangeIndexerFlags": "点击修改索引器标志", - "CustomFormatsSettingsTriggerInfo": "当一个发布版本或文件至少匹配其中一个条件时,自定义格式将会被应用到这个版本或文件上。", - "IndexerPriorityHelpText": "索引器优先级从1(最高)到50(最低),默认25。当资源连接中断时寻找同等资源时使用,否则{appName}将依旧使用已启用的索引器进行RSS同步并搜索", + "CustomFormatsSettingsTriggerInfo": "当一个发布版本或文件至少匹配其中一个条件时,自定义格式将会被应用到此版本或文件上。", + "IndexerPriorityHelpText": "索引器优先级从1(最高)到50(最低),默认25。当资源连接中断时寻找同等资源时使用,否则 {appName} 将依旧使用已启用的索引器进行 RSS 同步与搜索", "IndexerSettingsSeedRatio": "做种比率", - "IndexerSettingsSeedRatioHelpText": "种子在停止之前应达到的比率,留空使用下载客户端的默认值。 比率应至少为 1.0 并遵循索引器规则", + "IndexerSettingsSeedRatioHelpText": "停止之前应达到的做种比率,留空使用下载客户端的默认值。 比率应至少为 1.0 并遵循索引器规则", "IndexerSettingsSeedTimeHelpText": "停止前应做种的时间,留空使用下载客户端的默认值", "InteractiveSearchModalHeader": "手动搜索", - "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "可选的下载位置,留空使用 Aria2 默认位置", + "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "下载完成后移动的位置可选择,留空使用 Deluge 默认位置", "IndexerSettingsSeedTime": "做种时间", "Parse": "解析", "Repack": "重新打包", @@ -1282,5 +1282,29 @@ "ParseModalHelpTextDetails": "{appName} 将尝试解析标题并向您显示有关详情", "ParseModalUnableToParse": "无法解析提供的标题,请重试。", "TestParsing": "测试解析", - "True": "是" + "True": "是", + "Any": "任何", + "BuiltIn": "内置的", + "Script": "脚本", + "WithFiles": "带文件", + "IncludeCustomFormatWhenRenaming": "重命名时包含自定义格式", + "DeleteSelectedCustomFormats": "删除自定义命名格式", + "DeleteSelectedCustomFormatsMessageText": "您确定要删除选定的{count}导入列表吗?", + "InteractiveSearchModalHeaderTitle": "手动搜索 - {title}", + "NotificationsSettingsUpdateMapPathsFrom": "路径映射自", + "NotificationsSettingsUseSslHelpText": "使用 HTTPS 而非 HTTP 连接至 {serviceName}", + "CountCustomFormatsSelected": "已选择 {count} 自定义格式", + "DownloadClientDelugeSettingsDirectory": "下载目录", + "EditSelectedCustomFormats": "编辑选择的自定义格式", + "LabelIsRequired": "需要标签", + "LogSizeLimit": "日志大小限制", + "LogSizeLimitHelpText": "存档前的最大日志文件大小(MB)。默认值为 1 MB。", + "ManageCustomFormats": "管理自定义格式", + "SetIndexerFlags": "设置索引器标志", + "SelectIndexerFlags": "选择索引器标志", + "NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName} 路径,当 {serviceName} 与 {appName} 对资源库路径的识别不一致时,可以使用此设置修改系列路径(需要`更新资源库`)", + "NotificationsSettingsUpdateMapPathsTo": "路径映射到", + "DownloadClientDelugeSettingsDirectoryCompleted": "完成后移动至目录", + "NotificationsSettingsUpdateLibrary": "更新资源库", + "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} 路径,当 {serviceName} 与 {appName} 对资源库路径的识别不一致时,可以使用此设置修改系列路径(需要`更新资源库`)" } From 21344361e4964d79db04d7a29762051cf5134941 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 8 Sep 2024 11:29:00 +0300 Subject: [PATCH 034/275] Add weblate widget --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f5c8cdf84..4aa47575c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Lidarr [![Build Status](https://dev.azure.com/Lidarr/Lidarr/_apis/build/status/lidarr.Lidarr?branchName=develop)](https://dev.azure.com/Lidarr/Lidarr/_build/latest?definitionId=1&branchName=develop) +[![Translation status](https://translate.servarr.com/widget/servarr/lidarr/svg-badge.svg)](https://translate.servarr.com/engage/servarr/?utm_source=widget) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/lidarr.svg)](https://wiki.servarr.com/lidarr/installation#docker) ![Github Downloads](https://img.shields.io/github/downloads/lidarr/lidarr/total.svg) [![Backers on Open Collective](https://opencollective.com/lidarr/backers/badge.svg)](#backers) From af6c0cc6f5c33e91a5239b41acfa282049141037 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 8 Sep 2024 17:12:30 +0300 Subject: [PATCH 035/275] Display secondary types on album details --- frontend/src/Album/Details/AlbumDetails.css | 2 + .../src/Album/Details/AlbumDetails.css.d.ts | 2 + frontend/src/Album/Details/AlbumDetails.js | 118 +++++++++++------- frontend/src/Artist/Details/AlbumRow.js | 4 +- 4 files changed, 78 insertions(+), 48 deletions(-) diff --git a/frontend/src/Album/Details/AlbumDetails.css b/frontend/src/Album/Details/AlbumDetails.css index d87920074..a676ae574 100644 --- a/frontend/src/Album/Details/AlbumDetails.css +++ b/frontend/src/Album/Details/AlbumDetails.css @@ -121,6 +121,8 @@ .releaseDate, .sizeOnDisk, +.albumType, +.secondaryTypes, .qualityProfileName, .links, .tags { diff --git a/frontend/src/Album/Details/AlbumDetails.css.d.ts b/frontend/src/Album/Details/AlbumDetails.css.d.ts index 4c126c8b5..1d14a0ccf 100644 --- a/frontend/src/Album/Details/AlbumDetails.css.d.ts +++ b/frontend/src/Album/Details/AlbumDetails.css.d.ts @@ -3,6 +3,7 @@ interface CssExports { 'albumNavigationButton': string; 'albumNavigationButtons': string; + 'albumType': string; 'alternateTitlesIconContainer': string; 'backdrop': string; 'backdropOverlay': string; @@ -20,6 +21,7 @@ interface CssExports { 'overview': string; 'qualityProfileName': string; 'releaseDate': string; + 'secondaryTypes': string; 'sizeOnDisk': string; 'tags': string; 'title': string; diff --git a/frontend/src/Album/Details/AlbumDetails.js b/frontend/src/Album/Details/AlbumDetails.js index 783216a61..b581c1d77 100644 --- a/frontend/src/Album/Details/AlbumDetails.js +++ b/frontend/src/Album/Details/AlbumDetails.js @@ -192,6 +192,7 @@ class AlbumDetails extends Component { duration, overview, albumType, + secondaryTypes, statistics = {}, monitored, releaseDate, @@ -396,10 +397,11 @@ class AlbumDetails extends Component {
{ - !!duration && + duration ? {formatDuration(duration)} - + : + null } - - - - {moment(releaseDate).format(shortDateFormat)} - +
+ + + {moment(releaseDate).format(shortDateFormat)} + +
- - - - { - formatBytes(sizeOnDisk || 0) - } - +
+ + + {formatBytes(sizeOnDisk)} + +
} tooltip={ @@ -459,32 +461,55 @@ class AlbumDetails extends Component { className={styles.detailsLabel} size={sizes.LARGE} > - - - - {monitored ? translate('Monitored') : translate('Unmonitored')} - +
+ + + {monitored ? translate('Monitored') : translate('Unmonitored')} + +
{ - !!albumType && + albumType ? : + null + } - - {albumType} - - + { + secondaryTypes.length ? + : + null } - - - - {translate('Links')} - +
+ + + {translate('Links')} + +
} tooltip={ @@ -632,6 +658,7 @@ AlbumDetails.propTypes = { duration: PropTypes.number, overview: PropTypes.string, albumType: PropTypes.string.isRequired, + secondaryTypes: PropTypes.arrayOf(PropTypes.string).isRequired, statistics: PropTypes.object.isRequired, releaseDate: PropTypes.string.isRequired, ratings: PropTypes.object.isRequired, @@ -658,6 +685,7 @@ AlbumDetails.propTypes = { }; AlbumDetails.defaultProps = { + secondaryTypes: [], isSaving: false }; diff --git a/frontend/src/Artist/Details/AlbumRow.js b/frontend/src/Artist/Details/AlbumRow.js index 75170ed6c..b5c8fa2cf 100644 --- a/frontend/src/Artist/Details/AlbumRow.js +++ b/frontend/src/Artist/Details/AlbumRow.js @@ -149,9 +149,7 @@ class AlbumRow extends Component { if (name === 'secondaryTypes') { return ( - { - secondaryTypes - } + {secondaryTypes.join(', ')} ); } From d17c6a9b3e5dcf62d86cffe9d347452c54f2c1e8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 10 Sep 2024 01:25:24 +0000 Subject: [PATCH 036/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Anonymous Co-authored-by: FloatStream <1213193613@qq.com> Co-authored-by: Kuzmich55 Co-authored-by: Lizandra Candido da Silva Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translation: Servarr/Lidarr --- .../Localization/Core/pt_BR.json | 2 +- src/NzbDrone.Core/Localization/Core/ru.json | 201 ++++++++-------- .../Localization/Core/zh_CN.json | 227 +++++++++--------- 3 files changed, 219 insertions(+), 211 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 895cac712..2959011df 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -898,7 +898,7 @@ "IndexerRssHealthCheckNoIndexers": "Nenhum indexador disponível com a sincronização RSS habilitada, {appName} não capturará novos lançamentos automaticamente", "IndexerSearchCheckNoAutomaticMessage": "Nenhum indexador disponível com a Pesquisa Automática habilitada, {appName} não fornecerá nenhum resultado de pesquisa automática", "IndexerSearchCheckNoAvailableIndexersMessage": "Todos os indexadores com capacidade de pesquisa estão temporariamente indisponíveis devido a erros recentes do indexador", - "IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, {appName} não fornecerá resultados para pesquisas interativas", + "IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, {appName} não fornecerá resultados de pesquisa interativas", "IndexerStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a falhas", "IndexerStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a falhas: {0}", "Loading": "carregando", diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index 1a61708a7..b502beb0e 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -20,18 +20,18 @@ "RemoveTagRemovingTag": "Удаление тега", "RequiredHelpText": "Релиз должен содержать хотя бы одно из этих условий (без учета регистра)", "Restore": "Восстановить", - "RestoreBackup": "Восстановить из резервной копии", + "RestoreBackup": "Восстановить резервную копию", "RssSyncIntervalHelpText": "Интервал в минутах. Установите 0, чтобы отключить (это остановит все автоматические захваты релизов)", "Settings": "Настройки", "ShowMonitored": "Показать отслеживаемые", "ShowMonitoredHelpText": "Показывать статус отслеживания под постером", "ShownAboveEachColumnWhenWeekIsTheActiveView": "Отображается над каждым столбцом, когда неделя активна", - "SSLCertPassword": "Пароль SSL сертификата", - "TestAllClients": "Тестировать всех клиентов", + "SSLCertPassword": "Пароль сертификата SSL", + "TestAllClients": "Тестировать все клиенты", "TestAllIndexers": "Тестировать все индексаторы", "TestAllLists": "Тестировать все листы", "UpdateAll": "Обновить всё", - "UpdateMechanismHelpText": "Используйте встроенную в {appName} функцию обновления или скрипт", + "UpdateMechanismHelpText": "Использовать встроенный инструмент обновления {appName} или скрипт.", "MaximumSizeHelpText": "Максимальный размер релиза в МВ. Установите 0 чтобы снять все ограничения", "Message": "Сообщение", "MinimumAge": "Минимальный возраст", @@ -40,11 +40,11 @@ "MinimumFreeSpaceWhenImportingHelpText": "Не импортировать, если останется меньше указанного места на диске", "MinimumLimits": "Минимальные ограничения", "Missing": "Отсутствующий", - "MoreInfo": "Ещё инфо", - "None": "Ничто", + "MoreInfo": "Больше информации", + "None": "Ничего", "NotificationTriggers": "Триггеры уведомления", - "OpenBrowserOnStart": "Открывать браузер при запуске", - "Options": "Опции", + "OpenBrowserOnStart": "Открыть браузер при запуске", + "Options": "Параметры", "Original": "Оригинал", "Path": "Путь", "Permissions": "Разрешения", @@ -56,9 +56,9 @@ "PropersAndRepacks": "Проперы и репаки", "Protocol": "Протокол", "ProtocolHelpText": "Выберите, какой протокол(ы) использовать и какой из них предпочтительнее при выборе между одинаковыми в остальном релизами", - "ProxyBypassFilterHelpText": "Используйте ',' в качестве разделителя и '*.' как подстановочный знак для субдоменов", - "ProxyPasswordHelpText": "Вам нужно только ввести имя пользователя и пароль, если они необходимы. В противном случае оставьте их пустыми.", - "ProxyUsernameHelpText": "Вам нужно только ввести имя пользователя и пароль, если они необходимы. В противном случае оставьте их пустыми.", + "ProxyBypassFilterHelpText": "Используйте ',' как разделитель и '*.' как подстановочный знак для поддоменов", + "ProxyPasswordHelpText": "Вы должны указать имя пользователя и пароль только если они необходимы. В противном случае оставьте эти поля пустыми.", + "ProxyUsernameHelpText": "Вы должны указать имя пользователя и пароль только если они необходимы. В противном случае оставьте эти поля пустыми.", "PublishedDate": "Дата публикации", "QualityProfile": "Профиль качества", "QualityProfiles": "Профили качества", @@ -93,7 +93,7 @@ "RescanArtistFolderAfterRefresh": "Повторно сканировать папку с фильмом после обновления", "Reset": "Сброс", "ResetAPIKey": "Сбросить API ключ", - "ResetAPIKeyMessageText": "Вы уверены, что хотите сбросить Ваш API ключ?", + "ResetAPIKeyMessageText": "Вы уверены, что хотите сбросить ключ API?", "Restart": "Перезапустить", "RestartLidarr": "Перезапустить {appName}", "Result": "Результат", @@ -131,23 +131,23 @@ "SkipFreeSpaceCheckWhenImportingHelpText": "Используйте, когда {appName} не может обнаружить свободное место в вашей корневой папке во время импорта файлов", "SorryThatAlbumCannotBeFound": "Извините, этот фильм не найден.", "SorryThatArtistCannotBeFound": "Извините, этот фильм не найден.", - "Source": "Источник", + "Source": "Исходный код", "SourcePath": "Исходный путь", "SslCertPasswordHelpText": "Пароль для файла pfx", "SslCertPasswordHelpTextWarning": "Для вступления в силу требуется перезапуск", - "SSLCertPath": "Путь SSL сертификата", + "SSLCertPath": "Путь к сертификату SSL", "SslCertPathHelpText": "Путь к pfx файлу", "SslPortHelpTextWarning": "Для вступления в силу требуется перезапуск", "StandardTrackFormat": "Стандартный формат фильма", "StartTypingOrSelectAPathBelow": "Начните вводить или выберите путь ниже", - "StartupDirectory": "Каталог автозагрузки", + "StartupDirectory": "Каталог автозапуска", "Style": "Стиль", "SuccessMyWorkIsDoneNoFilesToRename": "Успех! Моя работа сделана, файлов для переименования нет.", "SuccessMyWorkIsDoneNoFilesToRetag": "Успех! Моя работа сделана, файлов для переименования нет.", "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS не поддерживается этим индексатором", "SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Поиск не поддерживается с этим индексатором", "SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByLidarr": "Будет использовано для автоматических поисков через интерфейс или {appName}", - "TagIsNotUsedAndCanBeDeleted": "Тег не используется и может быть удален", + "TagIsNotUsedAndCanBeDeleted": "Тег не используется и может быть удалён", "Tags": "Теги", "Tasks": "Задачи", "TestAll": "Тестировать все", @@ -157,15 +157,15 @@ "TorrentDelayHelpText": "Задержка в минутах перед скачиванием торрента", "Torrents": "Торренты", "TotalFileSize": "Общий объем файла", - "Track": "След", + "Track": "Трек", "Type": "Тип", "UiSettings": "Настройки пользовательского интерфейса", - "UnableToAddANewDownloadClientPleaseTryAgain": "Не удалось добавить новый клиент загрузки, попробуйте еще раз.", + "UnableToAddANewDownloadClientPleaseTryAgain": "Не удалось добавить новый клиент загрузки, попробуйте ещё раз.", "UnableToAddANewImportListExclusionPleaseTryAgain": "Не удалось добавить новое исключение в список, попробуйте еще раз.", - "UnableToAddANewIndexerPleaseTryAgain": "Не удалось добавить новый индексатор, повторите попытку.", + "UnableToAddANewIndexerPleaseTryAgain": "Не удалось добавить новый индексатор, попробуйте ещё раз.", "UnableToAddANewListPleaseTryAgain": "Не удалось добавить новый список, попробуйте еще раз.", "UnableToAddANewMetadataProfilePleaseTryAgain": "Не удалось добавить новый профиль качества. Повторите попытку.", - "UnableToAddANewNotificationPleaseTryAgain": "Невозможно добавить новое уведомление, попробуйте еще раз.", + "UnableToAddANewNotificationPleaseTryAgain": "Не удалось добавить новое уведомление, попробуйте ещё раз.", "UnableToAddANewQualityProfilePleaseTryAgain": "Не удалось добавить новый профиль качества. Повторите попытку.", "UnableToAddANewRemotePathMappingPleaseTryAgain": "Не удалось добавить новый удаленный путь, попробуйте еще раз.", "UnableToAddANewRootFolderPleaseTryAgain": "Невозможно добавить новый пользовательский формат, попробуйте ещё раз.", @@ -175,28 +175,28 @@ "UnableToLoadMetadata": "Невозможно загрузить метаданные", "UnableToLoadMetadataProfiles": "Невозможно загрузить профили задержки", "UnableToLoadNamingSettings": "Не удалось загрузить настройки именования", - "UnableToLoadNotifications": "Невозможно загрузить уведомления", + "UnableToLoadNotifications": "Не удалось загрузить уведомления", "UnableToLoadQualities": "Невозможно загрузить качества", "UnableToLoadQualityDefinitions": "Не удалось загрузить определения качества", "UnableToLoadQualityProfiles": "Не удалось загрузить профили качества", "UnableToLoadTheCalendar": "Не удалось загрузить календарь", - "UnableToLoadUISettings": "Не удалось загрузить настройки пользовательского интерфейса", + "UnableToLoadUISettings": "Не удалось загрузить настройки интерфейса", "Unmonitored": "Не отслеживается", "UnmonitoredHelpText": "Включите неконтролируемые фильмы в ленту iCal", - "UpdateAutomaticallyHelpText": "Автоматически загружать и устанавливать обновления. Вы так же можете установить в Система: Обновления", - "UpdateScriptPathHelpText": "Путь к пользовательскому скрипту, который обрабатывает остатки после процесса обновления", + "UpdateAutomaticallyHelpText": "Автоматически загружать и устанавливать обновления Вы по-прежнему сможете выполнить установку из раздела Система: Обновления", + "UpdateScriptPathHelpText": "Путь к пользовательскому скрипту, который извлекает пакет обновления и обрабатывает оставшуюся часть процесса обновления", "UpgradeAllowedHelpText": "Если отключено, то качества не будут обновляться", "Uptime": "Время работы", - "URLBase": "Базовый URL", - "UrlBaseHelpText": "Для поддержки обратного прокси, по умолчанию пусто", - "YesCancel": "Да, отменить", + "URLBase": "Базовый URL-адрес", + "UrlBaseHelpText": "Для поддержки обратного прокси, значение по умолчанию - пустая строка", + "YesCancel": "Да, Отмена", "OnGrab": "При захвате", - "OnHealthIssue": "О проблемах в системе", + "OnHealthIssue": "При проблемах с состоянием", "OnRename": "При переименовании", "OnUpgrade": "При обновлении", "PackageVersion": "Версия пакета", "PageSize": "Размер страницы", - "PageSizeHelpText": "Количество показываемое на каждой страницы", + "PageSizeHelpText": "Количество элементов, отображаемых на каждой странице", "Password": "Пароль", "ProxyType": "Тип прокси", "Reorder": "Изменение порядка", @@ -205,8 +205,8 @@ "UsenetDelay": "Usenet задержки", "UsenetDelayHelpText": "Задержка в минутах перед получением релиза из Usenet", "UseProxy": "Использовать прокси", - "UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent, представленный приложением, который вызывает API", - "Username": "Пользователь", + "UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent, предоставленный приложением, вызвавшим API", + "Username": "Имя пользователя", "UsingExternalUpdateMechanismBranchToUseToUpdateLidarr": "Ветвь для обновления {appName}", "UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Ветвь, используемая внешним механизмом обновления", "Version": "Версия", @@ -214,13 +214,13 @@ "UnableToLoadBlocklist": "Не удалось загрузить черный список", "UnableToLoadDelayProfiles": "Невозможно загрузить профили задержки", "UnableToLoadDownloadClientOptions": "Не удалось загрузить параметры клиента загрузки", - "AddingTag": "Добавить тэг", + "AddingTag": "Добавление тега", "AddListExclusion": "Добавить исключение из списка", - "ApplyTags": "Применить тэги", - "ApplyTagsHelpTextReplace": "Заменить: заменить теги введенными тегами (оставьте поле пустым, чтобы удалить все теги)", + "ApplyTags": "Применить теги", + "ApplyTagsHelpTextReplace": "Заменить: Заменить теги введёнными тегами (оставьте поле пустым, чтобы удалить все теги)", "ArtistAlbumClickToChangeTrack": "Нажать для смены фильма", - "Authentication": "Аутентификация", - "AuthenticationMethodHelpText": "Необходим логин и пароль для доступа в {appName}", + "Authentication": "Авторизация", + "AuthenticationMethodHelpText": "Необходимо ввести имя пользователя и пароль для доступа к {appName}", "AutoRedownloadFailedHelpText": "Автоматически искать и пытаться скачать разные релизы", "BackupFolderHelpText": "Относительные пути будут в каталоге AppData {appName}", "BackupNow": "Создать резервную копию", @@ -234,7 +234,7 @@ "BypassProxyForLocalAddresses": "Обход прокси для локальных адресов", "Calendar": "Календарь", "CalendarWeekColumnHeaderHelpText": "Отображается над каждым столбцом, когда неделя активна", - "Cancel": "Отменить", + "Cancel": "Отмена", "CancelMessageText": "Вы уверены, что хотите убрать данную задачу из очереди?", "CertificateValidation": "Проверка сертификата", "ChangeFileDate": "Изменить дату файла", @@ -267,7 +267,7 @@ "DeleteBackupMessageText": "Вы уверены, что хотите удалить резервную копию '{name}'?", "DeleteDelayProfile": "Удалить профиль задержки", "DeleteDelayProfileMessageText": "Вы уверены, что хотите удалить этот профиль задержки?", - "DeleteDownloadClient": "Удалить программу для скачивания", + "DeleteDownloadClient": "Удалить клиент загрузки", "DeleteDownloadClientMessageText": "Вы уверены, что хотите удалить клиент загрузки '{name}'?", "DeleteEmptyFolders": "Удалить пустые папки", "DeleteImportListExclusion": "Удалить лист исключения для импорта", @@ -285,21 +285,21 @@ "DeleteRootFolderMessageText": "Вы уверены что хотите удалить индексер '{0}'?", "DeleteSelectedTrackFiles": "Удалить выбранные файлы фильма", "DeleteSelectedTrackFilesMessageText": "Вы уверены, что хотите удалить выбранные файлы?", - "DeleteTag": "Удалить тэг", - "DeleteTagMessageText": "Вы уверены, что хотите удалить тэг '{0}'?", + "DeleteTag": "Удалить тег", + "DeleteTagMessageText": "Вы уверены, что хотите удалить тег '{label}'?", "DestinationPath": "Путь назначения", "DetailedProgressBar": "Подробный индикатор выполнения", "DetailedProgressBarHelpText": "Показать текст на индикаторе выполнения", "DiskSpace": "Дисковое пространство", - "DownloadClient": "Загрузочный клиент", - "DownloadClients": "Клиенты для скачивания", - "DownloadClientSettings": "Настройки клиента скачиваний", + "DownloadClient": "Клиент загрузки", + "DownloadClients": "Клиенты загрузки", + "DownloadClientSettings": "Настройки клиента загрузки", "DownloadFailedCheckDownloadClientForMoreDetails": "Неудачное скачивание: подробности в программе для скачивания", "DownloadFailedInterp": "Неудачное скачивание: {0}", "Downloading": "Скачивается", "DownloadPropersAndRepacksHelpTexts1": "Следует ли автоматически обновляться до Propers / Repacks", "DownloadWarningCheckDownloadClientForMoreDetails": "Предупреждения по скачиванию: подробности в программе для скачивания", - "Edit": "Изменить", + "Edit": "Редактировать", "Enable": "Включить", "EnableAutomaticAdd": "Включить автоматическое добавление", "EnableAutomaticSearch": "Включить автоматический поиск", @@ -310,13 +310,13 @@ "EnableInteractiveSearch": "Включить интерактивный поиск", "EnableRSS": "Включить RSS", "EnableSSL": "Включить SSL", - "EnableSslHelpText": " Требуется перезапуск от администратора", - "Ended": "Завершен", + "EnableSslHelpText": " Для применения изменений требуется перезапуск с правами администратора", + "Ended": "Завершён", "ErrorLoadingContents": "Ошибка при загрузке контента", "ErrorLoadingPreviews": "Ошибка при загрузке предпросмотра", "Exception": "Исключение", "Fixed": "Исправлено", - "Folder": "Папка", + "Folder": "Каталог", "Folders": "Папки", "ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Для дополнительной информации по индексаторам нажмите кнопку с информацией.", "ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Для дополнительной информации по спискам импорта нажмите эту кнопку.", @@ -361,7 +361,7 @@ "Remove": "Удалить", "RemovedFromTaskQueue": "Удалено из очереди задач", "Analytics": "Аналитика", - "AnalyticsEnabledHelpText": "Отправлять в {appName} анонимную информацию об использовании и ошибках. Анонимная статистика включает в себя информацию о браузере, какие страницы веб-интерфейса {appName} загружены, сообщения об ошибках, а также операционной системе. Мы используем эту информацию для выявления ошибок, а также для разработки нового функционала.", + "AnalyticsEnabledHelpText": "Отправлять анонимную информацию об использовании и ошибках на серверы {appName}. Анонимная статистика включает в себя информацию о вашем браузере, какие страницы веб-интерфейса {appName} вы используете, отчёты об ошибках, а также версию операционной системы и среды выполнения. Мы будем использовать эту информацию для разработки нового функционала и исправления ошибок.", "AnalyticsEnabledHelpTextWarning": "Для вступления в силу требуется перезапуск", "RestartNow": "Перезапустить сейчас", "ShowUnknownArtistItems": "Показать неизвестные элементы фильма", @@ -376,39 +376,39 @@ "MIA": "MIA", "Mode": "Режим", "Monitored": "Отслеживается", - "NoLogFiles": "Нет файлов журнала", - "NoUpdatesAreAvailable": "Нет обновлений", + "NoLogFiles": "Файлов журнала нет", + "NoUpdatesAreAvailable": "Обновления отсутствуют", "Tracks": "След", "OnApplicationUpdate": "При обновлении приложения", "Proxy": "Прокси", "RemoveFromBlocklist": "Удалить из черного списка", "RemoveSelected": "Удалить выбранное", "SslCertPathHelpTextWarning": "Для вступления в силу требуется перезапуск", - "SSLPort": "SSL порт", + "SSLPort": "Порт SSL", "Time": "Время", "UrlBaseHelpTextWarning": "Для вступления в силу требуется перезапуск", "UiLanguageHelpText": "Язык, который {appName} будет использовать для пользовательского интерфейса", "UiLanguageHelpTextWarning": "Требуется перезагрузка браузера", - "UnableToLoadBackups": "Невозможно загрузить резервные копии", + "UnableToLoadBackups": "Не удалось загрузить резервные копии", "UnableToLoadDownloadClients": "Невозможно загрузить загрузчики", - "UnableToLoadGeneralSettings": "Невозможно загрузить общие настройки", + "UnableToLoadGeneralSettings": "Не удалось загрузить общие настройки", "UnableToLoadHistory": "Не удалось загрузить историю", "UnableToLoadImportListExclusions": "Не удалось загрузить исключения из списка", "UnableToLoadReleaseProfiles": "Невозможно загрузить профили задержки", "UnableToLoadRemotePathMappings": "Не удалось загрузить сопоставления удаленного пути", "UnableToLoadRootFolders": "Невозможно загрузить корневые папки", - "UnableToLoadTags": "Невозможно загрузить теги", + "UnableToLoadTags": "Не удалось загрузить теги", "Ungroup": "Разгруппировать", "Actions": "Действия", "ApiKeyHelpTextWarning": "Для вступления в силу требуется перезапуск", - "AppDataDirectory": "Директория AppData", + "AppDataDirectory": "Каталог AppData", "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Для получения дополнительной информации о каждом из клиентов загрузки нажмите на кнопки с дополнительной информацией.", "FileManagement": "Управление файлами", "Filename": "Имя файла", "FileNames": "Имена файлов", "Files": "Файлы", "FirstDayOfWeek": "Первый день недели", - "GeneralSettings": "Основные настройки", + "GeneralSettings": "Общие настройки", "IndexerPriority": "Приоритет индексатора", "Indexers": "Индексаторы", "IndexerSettings": "Настройки индексатора", @@ -416,8 +416,8 @@ "Local": "Локальный", "LocalPathHelpText": "Путь, который {appName} должен использовать для локального доступа к удаленному пути", "LogFiles": "Файлы журнала", - "Logging": "Ведение журнала", - "LogLevel": "Уровень журнала", + "Logging": "Журналирование", + "LogLevel": "Уровень журналирования", "LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "Отслеживание журнала желательно включать только на короткое время", "LongDateFormat": "Длинный формат даты", "ManualImport": "Ручной импорт", @@ -439,12 +439,12 @@ "ReleaseWillBeProcessedInterp": "Выпуск будет обработан {0}", "Status": "Статус", "CutoffUnmet": "Порог невыполнен", - "DatabaseMigration": "Перенос БД", + "DatabaseMigration": "Миграция базы данных", "20MinutesTwenty": "60 минут: {0}", "45MinutesFourtyFive": "60 минут: {0}", "60MinutesSixty": "60 минут: {0}", "APIKey": "API ключ", - "About": "Об", + "About": "О программе", "AgeWhenGrabbed": "Возраст (когда захвачен)", "AlbumIsDownloadingInterp": "Фильм скачивается - {0}% {1}", "AlreadyInYourLibrary": "Уже в вашей библиотеке", @@ -501,7 +501,7 @@ "EventType": "Тип события", "Filters": "Фильтры", "FreeSpace": "Свободное место", - "General": "Основное", + "General": "Общие", "Genres": "Жанры", "Grabbed": "Захвачено", "HardlinkCopyFiles": "Жесткая ссылка/Копирование файлов", @@ -526,9 +526,9 @@ "MoveAutomatically": "Перемещать автоматически", "MoveFiles": "Переместить файлы", "Never": "Никогда", - "NextExecution": "Следующее выполнение", - "NoTagsHaveBeenAddedYet": "Теги еще не добавлены", - "Ok": "Хорошо", + "NextExecution": "Следующий запуск", + "NoTagsHaveBeenAddedYet": "Теги ещё не добавлены", + "Ok": "Ок", "OnlyTorrent": "Только торрент", "OnlyUsenet": "Только Usenet", "Organize": "Организовать", @@ -547,7 +547,7 @@ "RestartRequiredHelpTextWarning": "Для применения изменений, требуется перезапуск", "RestoreBackupAdditionalInfo": "Примечание: {appName} автоматически перезапустится и перезагрузит пользовательский интерфейс во время процесса восстановления.", "Save": "Сохранить", - "Seeders": "Сиды", + "Seeders": "Сидеры", "Select...": "Выбрать...", "SelectFolder": "Выбрать папку", "SelectQuality": "Выбрать качество", @@ -570,7 +570,7 @@ "Backup": "Резервное копирование", "Details": "Подробности", "TimeLeft": "Оставшееся время", - "AddConnection": "Добавить соединение", + "AddConnection": "Добавить подключение", "AddImportListExclusion": "Добавить исключение из списка импорта", "Date": "Дата", "Manual": "Ручной", @@ -612,9 +612,9 @@ "RemotePathMappingCheckGenericPermissions": "Клиент загрузки {0} загружает файлы в {1}, но {appName} не может видеть этот каталог. Возможно, вам нужно настроить права доступа к данной директории.", "RootFolderCheckSingleMessage": "Отсутствует корневая папка: {0}", "ShownClickToHide": "Показано, нажмите, чтобы скрыть", - "MaintenanceRelease": "Техническая версия: исправлены ошибки и другие улучшения. Дополнительную информацию см. в истории коммитов Github", + "MaintenanceRelease": "Технический релиз: исправление ошибок и другие улучшения. Подробнее см. в истории коммитов Github.", "TheArtistFolderStrongpathstrongAndAllOfItsContentWillBeDeleted": "Папка '{0}' и всё её содержимое будет удалено.", - "AppDataLocationHealthCheckMessage": "Обновление будет не возможно, во избежание удаления данных программы во время обновления", + "AppDataLocationHealthCheckMessage": "Обновление не позволит сохранить AppData при обновлении", "CustomFormats": "Пользовательский формат", "Customformat": "Настраиваемый формат", "CutoffFormatScoreHelpText": "{appName} перестанет скачивать фильмы после достижения указанного количества очков", @@ -670,7 +670,7 @@ "ResetDefinitionTitlesHelpText": "Сбросить названия определений, а также значения", "ResetDefinitions": "Сбросить определения", "ResetTitles": "Сбросить заголовки", - "SystemTimeCheckMessage": "Расхождение системного времени более чем на 1 день. Запланированные задачи могут работать некорректно, пока не будет исправлено время", + "SystemTimeCheckMessage": "Системное время отклонилось более чем на 1 день. Запланированные задания могут не работать правильно, пока время не будет исправлено", "UnableToLoadCustomFormats": "Невозможно загрузить пользовательские форматы", "UnableToLoadInteractiveSearch": "Невозможно загрузить результаты поиска по этому фильму. Попробуйте позже", "UpdateAvailableHealthCheckMessage": "Доступно новое обновление: {version}", @@ -680,7 +680,7 @@ "DeleteRemotePathMapping": "Удалить сопоставление удаленного пути", "BlocklistReleaseHelpText": "Запрещает {appName} автоматически получать этот релиз повторно", "FailedToLoadQueue": "Не удалось загрузить очередность", - "ApplyTagsHelpTextAdd": "Добавить: Добавьте теги в существующий список тегов", + "ApplyTagsHelpTextAdd": "Добавить: Добавить теги к существующему списку тегов", "BlocklistReleases": "Релиз из черного списка", "ApplyChanges": "Применить изменения", "RemoveSelectedItem": "Удалить выбранный элемент", @@ -689,7 +689,7 @@ "DeleteSelectedIndexers": "Удалить индексатор(ы)", "EditSelectedDownloadClients": "Редактировать выбранные клиенты загрузки", "EditSelectedImportLists": "Редактировать выбранные списки импорта", - "ExistingTag": "Существующий тэг", + "ExistingTag": "Существующий тег", "No": "Нет", "NoChange": "Нет изменений", "DownloadClientSortingCheckMessage": "В загрузочном клиенте {0} включена {1} сортировка для категории {appName}. Вам следует отключить сортировку в вашем клиенте загрузки, чтобы избежать проблем с импортом.", @@ -697,7 +697,7 @@ "RemoveSelectedItems": "Удалить выбранные элементы", "Required": "Необходимо", "ResetTitlesHelpText": "Сбросить заголовки определений, а также значения", - "ApplyTagsHelpTextRemove": "Удалить: удалить введенные теги", + "ApplyTagsHelpTextRemove": "Удалить: Удалить введённые теги", "RemoveSelectedItemQueueMessageText": "Вы уверены, что хотите удалить 1 элемент из очереди?", "RemoveSelectedItemsQueueMessageText": "Вы действительно хотите удалить {0} из очереди?", "SetTags": "Установить теги", @@ -712,8 +712,8 @@ "ApplyTagsHelpTextHowToApplyDownloadClients": "Как применить теги к выбранным клиентам загрузки", "ApplyTagsHelpTextHowToApplyImportLists": "Как применить теги к выбранным спискам импорта", "ApplyTagsHelpTextHowToApplyIndexers": "Как применить теги к выбранным индексаторам", - "DeleteSelectedIndexersMessageText": "Вы уверены, что хотите удалить {count} выбранных индексатора?", - "DeleteSelectedDownloadClientsMessageText": "Вы уверены, что хотите удалить {count} выбранных клиента загрузки?", + "DeleteSelectedIndexersMessageText": "Вы уверены, что хотите удалить выбранные индексаторы: {count}?", + "DeleteSelectedDownloadClientsMessageText": "Вы уверены, что хотите удалить выбранные клиенты загрузки: {count}?", "RemoveFailedDownloads": "Удаление неудачных загрузок", "SkipRedownload": "Пропустить повторное скачивание", "ThereWasAnErrorLoadingThisPage": "Произошла ошибка при загрузке этой страницы", @@ -724,7 +724,7 @@ "DeleteSelectedImportLists": "Удалить списки импорта", "EditSelectedIndexers": "Редактировать выбранный индексатор", "ManageLists": "Управление листами", - "NoDownloadClientsFound": "Клиенты для загрузки не найдены", + "NoDownloadClientsFound": "Клиенты загрузки не найдены", "NoHistoryBlocklist": "Нет истории блокировок", "RemoveSelectedItemBlocklistMessageText": "Вы уверены, что хотите удалить выбранные элементы из списка заблокированных?", "ThereWasAnErrorLoadingThisItem": "Произошла ошибка при загрузке этого элемента", @@ -736,7 +736,7 @@ "IndexerDownloadClientHealthCheckMessage": "Индексаторы с недопустимыми клиентами загрузки: {0}.", "AddDownloadClientImplementation": "Добавить клиент загрузки - {implementationName}", "AddConditionImplementation": "Добавить условие - {implementationName}", - "AddConnectionImplementation": "Добавить соединение - {implementationName}", + "AddConnectionImplementation": "Добавить подключение - {implementationName}", "AddImportList": "Добавить список импорта", "AddImportListImplementation": "Добавить список импорта - {implementationName}", "AddIndexerImplementation": "Добавить индексатор - {implementationName}", @@ -750,12 +750,12 @@ "Implementation": "Реализация", "ListRefreshInterval": "Интервал обновления списка", "ListWillRefreshEveryInterp": "Список будет обновляться каждые {0}", - "ManageDownloadClients": "Менеджер клиентов загрузки", - "NotificationStatusAllClientHealthCheckMessage": "Все уведомления недоступны из-за сбоев", + "ManageDownloadClients": "Управление клиентами загрузки", + "NotificationStatusAllClientHealthCheckMessage": "Все уведомления недоступны из-за ошибок", "NotificationStatusSingleClientHealthCheckMessage": "Уведомления недоступны из-за сбоев: {0}", "DeleteRemotePathMappingMessageText": "Вы уверены, что хотите удалить это сопоставление удаленного пути?", "ResetQualityDefinitionsMessageText": "Вы уверены, что хотите сбросить определения качества?", - "OnHealthRestored": "При восстановлении работоспособности", + "OnHealthRestored": "При восстановлении состояния", "AllResultsAreHiddenByTheAppliedFilter": "Все результаты скрыты фильтром", "CustomFormatsSettings": "Настройки пользовательских форматов", "CustomFormatsSpecificationRegularExpression": "Регулярное выражение", @@ -768,7 +768,7 @@ "Posters": "Постеры", "DefaultCase": "Случай по умолчанию", "DeleteArtistFoldersHelpText": "Удалить папку и её содержимое", - "ConnectionLostReconnect": "{appName} попытается соединиться автоматически или нажмите кнопку внизу.", + "ConnectionLostReconnect": "{appName} попытается соединиться автоматически или нажмите кнопку ниже.", "DeleteSpecificationHelpText": "Вы уверены, что хотите удалить уведомление '{name}'?", "EditAutoTag": "Редактировать автоматическую маркировку", "FileNameTokens": "Токены имени файла", @@ -786,7 +786,7 @@ "Priority": "Приоритет", "OverviewOptions": "Опции обзора", "CountDownloadClientsSelected": "{count} выбранных клиентов загрузки", - "CustomFilter": "Настраиваемые фильтры", + "CustomFilter": "Настраиваемый фильтр", "DeleteAutoTag": "Удалить автоматическую маркировку", "DisabledForLocalAddresses": "Отключено для локальных адресов", "ExtraFileExtensionsHelpTextsExamples": "Например: '.sub, .nfo' или 'sub,nfo'", @@ -837,7 +837,7 @@ "RecycleBinUnableToWriteHealthCheck": "Не удается выполнить запись в настроенную папку корзины: {path}. Убедитесь, что этот путь существует и доступен для записи пользователем, запускающим {appName}", "AddListExclusionHelpText": "Запретить добавление серий в {appName} по спискам", "AddNewArtistRootFolderHelpText": "Подпапка \"{0}\" будет создана автоматически", - "AuthenticationRequiredHelpText": "Отредактируйте, для каких запросов требуется аутентификация. Не меняйте, пока не поймете все риски.", + "AuthenticationRequiredHelpText": "Отредактируйте, для каких запросов требуется авторизация. Не изменяйте, если не понимаете риски.", "DeleteArtistFolderCountConfirmation": "Вы уверены, что хотите удалить {count} выбранных индексатора?", "RenameFiles": "Переименовать файлы", "Table": "Таблица", @@ -846,25 +846,25 @@ "NoResultsFound": "Нет результатов", "UiSettingsSummary": "Параметры календаря, даты и опции для слабовидящих", "Yesterday": "Вчера", - "EditConnectionImplementation": "Добавить соединение - {implementationName}", + "EditConnectionImplementation": "Редактировать соединение - {implementationName}", "ExpandAlbumByDefaultHelpText": "альбом", "AddCondition": "Добавить условие", "AddConditionError": "Не удалось добавить новое условие, попробуйте еще раз.", "AddImportListExclusionArtistHelpText": "Запретить добавление серий в {appName} по спискам", "AddNewArtistSearchForMissingAlbums": "Начать поиск пропавшего фильма", - "Album": "альбом", + "Album": "Альбом", "AlbumsLoadError": "Невозможно загрузить резервные копии", "CountArtistsSelected": "{count} выбранных списков импорта", "AddToDownloadQueue": "Добавить в очередь загрузки", "AddedToDownloadQueue": "Добавлено в очередь на скачивание", "AuthenticationRequired": "Требуется авторизация", - "AuthenticationRequiredWarning": "Чтобы предотвратить удаленный доступ без авторизации, {appName} теперь требует, чтобы авторизация была включена. При желании вы можете отключить авторизацию с локальных адресов.", + "AuthenticationRequiredWarning": "Чтобы предотвратить удалённый доступ без авторизации, {appName} теперь требует включения авторизации. Вы можете опционально отключить авторизацию для локальных адресов.", "Auto": "Авто", "AutoTaggingNegateHelpText": "Если отмечено, то настроенный формат не будет применён при условии {implementationName} .", "CloneAutoTag": "Автоматическое клонирование метки", "CloneCondition": "Условие клонирования", "ArtistIndexFooterDownloading": "Скачивается", - "AuthBasic": "Базовый (всплывающее окно браузера)", + "AuthBasic": "Базовый (Всплывающее окно браузера)", "AuthenticationMethod": "Способ авторизации", "UpdateFiltered": "Фильтр обновлений", "DeleteAutoTagHelpText": "Вы уверены, что хотите удалить автоматическую метку '{name}'?", @@ -903,7 +903,7 @@ "SelectIndexerFlags": "Выбор флагов индексатора", "Total": "Общий", "Dash": "Тире", - "AppUpdated": "{appName} обновлен", + "AppUpdated": "{appName} обновлён", "DoNotBlocklist": "Не вносить в черный список", "EndedOnly": "Только завершенные", "Period": "Период", @@ -912,7 +912,7 @@ "SmartReplace": "Умная замена", "Underscore": "Нижнее подчеркивание", "Episode": "Эпизод", - "DownloadClientAriaSettingsDirectoryHelpText": "Опциональное местоположение для загрузок. Оставьте пустым, чтобы использовать местоположение Aria2 по умолчанию", + "DownloadClientAriaSettingsDirectoryHelpText": "Необязательное место для сохранения загрузок, оставьте поле пустым, чтобы использовать расположение Aria2 по умолчанию", "QueueFilterHasNoItems": "В выбранном фильтре очереди нет элементов", "MonitoringOptions": "Опции отслеживания", "CustomFormatsSpecificationRegularExpressionHelpText": "RegEx пользовательского формата не чувствителен к регистру", @@ -926,7 +926,7 @@ "ReleaseProfiles": "Профили релизов", "AutoRedownloadFailedFromInteractiveSearch": "Не удалось выполнить повторную загрузку из интерактивного поиска", "ConditionUsingRegularExpressions": "Это условие соответствует использованию регулярных выражений. Обратите внимание, что символы `\\^$.|?*+()[{` имеют особое значение и требуют экранирования с помощью `\\`", - "AppUpdatedVersion": "Приложение {appName} обновлено до версии `{version}`. Чтобы получить последние изменения, вам необходимо перезагрузить приложение {appName}", + "AppUpdatedVersion": "{appName} обновлён до версии `{version}`, для получения последних изменений необходимо перезагрузить {appName}", "Clone": "Клонировать", "ChownGroup": "chown группа", "MediaManagementSettingsSummary": "Именование, настройки управления файлами и корневыми папками", @@ -935,12 +935,12 @@ "NotificationsKodiSettingsCleanLibraryHelpText": "Очистить библиотеку после обновления", "NotificationsKodiSettingAlwaysUpdateHelpText": "Обновлять библиотеку даже во время воспроизведения видео?", "NotificationsKodiSettingsDisplayTime": "Отображать время", - "NotificationsTelegramSettingsIncludeAppNameHelpText": "При необходимости добавьте к заголовку сообщения префикс {appName}, чтобы отличать уведомления от разных приложений", + "NotificationsTelegramSettingsIncludeAppNameHelpText": "При необходимости добавить к заголовку сообщения префикс {appName}, чтобы различать уведомления от разных приложений", "NotificationsTelegramSettingsIncludeAppName": "Включить {appName} в заголовок", "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Если торрент заблокирован хешем, он может не быть должным образом отклонен во время RSS/поиска для некоторых индексаторов. Включение этого параметра позволит отклонить его после захвата торрента, но до его отправки клиенту.", "IndexerSettingsRejectBlocklistedTorrentHashes": "Отклонять хэши торрентов из черного списка при захвате", "IgnoreDownloadHint": "Не позволяет приложению {appName} продолжать обработку этой загрузки", - "HealthMessagesInfoBox": "Дополнительную информацию о причине появления этих сообщений о проверке работоспособности можно найти, щелкнув вики-ссылку (значок книги) в конце строки или проверив свои [журналы]({link}). Если у вас возникли трудности с пониманием этих сообщений, вы можете обратиться в нашу службу поддержки по ссылкам ниже.", + "HealthMessagesInfoBox": "Дополнительную информацию о причине появления этих сообщений о проверке работоспособности можно найти, перейдя по ссылке wiki (значок книги) в конце строки или проверить [журналы]({link}). Если у вас возникли трудности с пониманием этих сообщений, вы можете обратиться в нашу службу поддержки по ссылкам ниже.", "Logout": "Выйти", "MassSearchCancelWarning": "Это нельзя отменить после запуска без перезапуска {appName} или отключения всех индексаторов.", "NotificationsKodiSettingsDisplayTimeHelpText": "Как долго будет отображаться уведомление (в секундах)", @@ -956,7 +956,7 @@ "ChangeCategoryHint": "Перенести загружаемое в «Категорию после импорта» из клиента загрузки", "ChangeCategory": "Изменить категорию", "EditReleaseProfile": "Редактировать профиль релиза", - "AuthenticationMethodHelpTextWarning": "Пожалуйста, выберите действительный метод аутентификации", + "AuthenticationMethodHelpTextWarning": "Пожалуйста, выберите допустимый метод авторизации", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Подтвердите новый пароль", "ClearBlocklist": "Очистить черный список", "ClearBlocklistMessageText": "Вы уверены, что хотите удалить выбранные элементы из черного списка?", @@ -979,10 +979,10 @@ "DownloadClientDelugeSettingsDirectory": "Каталог загрузки", "DownloadClientDelugeSettingsDirectoryCompleted": "Переместить каталог по завершении", "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Опциональное место для перемещения завершенных загрузок. Оставьте пустым, чтобы использовать местоположение Deluge по умолчанию", - "IndexerSettingsSeedRatio": "Рейтинг", - "IndexerSettingsSeedTimeHelpText": "Время, в течение которого торрент должен оставаться на раздаче перед остановкой, пусто: используется значение по умолчанию клиента загрузки", + "IndexerSettingsSeedRatio": "Коэффициент раздачи", + "IndexerSettingsSeedTimeHelpText": "Время, в течение которого торрент должен оставаться на раздаче перед остановкой, пусто — используется значение клиента загрузки по умолчанию", "IndexerSettingsSeedTime": "Время сидирования", - "IndexerSettingsSeedRatioHelpText": "Рейтинг, которого должен достичь торрент перед остановкой, пустой использует значение по умолчанию клиента загрузки. Рейтинг должен быть не менее 1,0 и соответствовать правилам индексаторов", + "IndexerSettingsSeedRatioHelpText": "Рейтинг, которого должен достичь торрент перед остановкой, пусто — используется значение по умолчанию клиента загрузки. Рейтинг должен быть не менее 1,0 и соответствовать правилам индексаторов", "ChangeCategoryMultipleHint": "Перенести загружаемое в «Категорию после импорта» из клиента загрузки", "DoNotBlocklistHint": "Удалить без внесения в черный список", "IgnoreDownloadsHint": "Не позволяет приложению {appName} обрабатывать эти загрузки", @@ -1012,7 +1012,7 @@ "AutoRedownloadFailedFromInteractiveSearchHelpText": "Автоматический поиск и попытка загрузки другого релиза, если неудачный релиз был получен из интерактивного поиска", "AutoTaggingRequiredHelpText": "Это условие {implementationName} должно соответствовать правилу автоматической пометки. В противном случае достаточно одного совпадения {implementationName}.", "DownloadClientPriorityHelpText": "Приоритет клиента загрузки от 1 (самый высокий) до 50 (самый низкий). По умолчанию: 1. Для клиентов с одинаковым приоритетом используется циклический перебор.", - "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Использовать ли настроенный макет контента qBittorrent, исходный макет из торрента или всегда создавать подпапку (qBittorrent 4.3.2+)", + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Выбрать расположение контента: настроенное в qBittorrent, исходный макет из торрента или всегда создавать подкаталог (qBittorrent 4.3.2+)", "CustomFormatsSettingsTriggerInfo": "Пользовательский формат будет применен к релизу или файлу, если он соответствует хотя бы одному из каждого из выбранных типов условий.", "RegularExpressionsCanBeTested": "Регулярные выражения можно проверить.", "EpisodeDoesNotHaveAnAbsoluteEpisodeNumber": "Эпизод не имеет абсолютного номера эпизода", @@ -1036,7 +1036,7 @@ "Any": "Любой", "AlbumStudioTruncated": "Показаны только последние 25 сезонов. Чтобы просмотреть все сезоны, перейдите к подробной информации", "AllAlbumsData": "Следите за всеми эпизодами, кроме специальных", - "BuiltIn": "Встроено", + "BuiltIn": "Встроенный", "DashOrSpaceDashDependingOnName": "Тире или пробел в зависимости от имени", "TBA": "Будет объявлено позже", "DeleteArtistFolderCountWithFilesConfirmation": "Вы уверены, что хотите удалить {count} выбранных сериалов и все их содержимое?", @@ -1056,5 +1056,10 @@ "EndedAllTracksDownloaded": "Завершено (Все эпизоды скачаны)", "DeleteSelectedCustomFormatsMessageText": "Вы уверены, что хотите удалить {count} выбранных списков импорта?", "IncludeCustomFormatWhenRenaming": "Включить пользовательский формат при переименовании", - "DeleteSelectedCustomFormats": "Удалить пользовательский формат" + "DeleteSelectedCustomFormats": "Удалить пользовательский формат", + "Menu": "Меню", + "Artist": "Исполнитель", + "LogSizeLimit": "Ограничение размера журнала", + "LogSizeLimitHelpText": "Максимальный размер файла журнала в МБ перед архивированием. По умолчанию - 1 МБ.", + "Artists": "Исполнитель" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 2f950988f..5c2dd1de0 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -2,7 +2,7 @@ "Language": "语言", "UiLanguage": "UI界面语言", "About": "关于", - "BackupNow": "马上备份", + "BackupNow": "立即备份", "BackupRetentionHelpText": "早于保留周期的自动备份将被自动清除", "Authentication": "认证", "Dates": "日期", @@ -32,12 +32,12 @@ "UiSettings": "UI设置", "UnableToAddANewDownloadClientPleaseTryAgain": "无法添加下载客户端,请稍后重试。", "UnableToLoadBackups": "无法加载备份", - "UnableToLoadIndexers": "无法加载搜刮器", - "UpdateAutomaticallyHelpText": "自动下载并安装更新。你还可以在“系统:更新”中安装", + "UnableToLoadIndexers": "无法加载索引器", + "UpdateAutomaticallyHelpText": "自动下载并安装更新。您还可以在 “系统:更新” 中安装", "Version": "版本", "ApplyTags": "应用标签", "AppDataDirectory": "AppData 目录", - "Backups": "历史备份", + "Backups": "备份", "BindAddress": "绑定地址", "BindAddressHelpText": "有效的 IP 地址、localhost、或以'*'代表所有接口", "Branch": "分支", @@ -58,7 +58,7 @@ "Delete": "删除", "DeleteBackup": "删除备份", "DeleteDownloadClient": "删除下载客户端", - "DeleteDownloadClientMessageText": "你确定要删除下载客户端 “{name}” 吗?", + "DeleteDownloadClientMessageText": "您确认要删除下载客户端 “{name}” 吗?", "DeleteIndexer": "删除索引器", "DeleteIndexerMessageText": "您确定要删除索引器 “{name}” 吗?", "DeleteNotification": "删除消息推送", @@ -115,13 +115,13 @@ "Protocol": "协议", "Proxy": "代理", "ProxyPasswordHelpText": "如果需要,您只需要输入用户名和密码,否则就让它们为空。", - "QualityDefinitions": "媒体质量定义", - "QualitySettings": "媒体质量设置", + "QualityDefinitions": "质量定义", + "QualitySettings": "质量设置", "Queue": "队列", - "ReadTheWikiForMoreInformation": "查阅Wiki获得更多信息", + "ReadTheWikiForMoreInformation": "请查阅 Wiki 获取更多信息", "Refresh": "刷新", "Reload": "重新加载", - "RemovedFromTaskQueue": "从任务队列中移除", + "RemovedFromTaskQueue": "已从任务队列移除", "RemoveFilter": "移除过滤器", "Reset": "重置", "Restart": "重启", @@ -148,7 +148,7 @@ "TestAllClients": "测试全部客户端", "Torrents": "种子", "Type": "类型", - "UnableToAddANewIndexerPleaseTryAgain": "无法添加搜刮器,请稍后重试。", + "UnableToAddANewIndexerPleaseTryAgain": "无法添加索引器,请稍后重试。", "UnableToAddANewNotificationPleaseTryAgain": "无法添加新通知,请稍后重试。", "URLBase": "基本URL", "UnableToLoadDownloadClients": "无法加载下载客户端", @@ -168,9 +168,9 @@ "AddingTag": "添加标签", "Analytics": "分析", "Automatic": "自动化", - "AlreadyInYourLibrary": "已在你的资源库中", + "AlreadyInYourLibrary": "已在您的资源库中", "Actions": "动作", - "AddListExclusion": "添加列表排除", + "AddListExclusion": "添加列表排除项", "MinimumAge": "最低间隔", "MinimumFreeSpaceWhenImportingHelpText": "如果导入的磁盘空间不足,则禁止导入", "Absolute": "绝对", @@ -193,7 +193,7 @@ "AllowFingerprintingHelpText": "利用指纹技术提高航迹匹配的准确性", "AllowFingerprintingHelpTextWarning": "这需要{appName}读取部分文件,这将减慢扫描速度,并可能导致磁盘或网络活动频繁。", "AlternateTitles": "别名", - "MinimumAgeHelpText": "仅限Usenet:抓取NewzBin文件的最小时间间隔(分钟)。开启此功能会让新版本有时间传播到你的usenet提供商。", + "MinimumAgeHelpText": "仅限 Usenet:抓取 NewzBin 文件的最小时间间隔(分钟)。开启此功能会让新发布资源有时间传播到您的 Usenet 提供商。", "OnApplicationUpdate": "程序更新时", "Duration": "时长", "LocalPath": "本地路径", @@ -201,7 +201,7 @@ "AlternateTitleslength1Title": "标题", "AlternateTitleslength1Titles": "标题", "AnalyticsEnabledHelpText": "将匿名使用情况和错误信息发送到{appName}的服务器。这包括有关您的浏览器的信息、您使用的{appName} WebUI页面、错误报告以及操作系统和运行时版本。我们将使用此信息来确定功能和错误修复的优先级。", - "AnalyticsEnabledHelpTextWarning": "需要重启才能生效", + "AnalyticsEnabledHelpTextWarning": "重启后生效", "AnchorTooltip": "此文件已在您的库中,用于您当前正在导入的版本", "RemotePath": "远程路径", "GrabSelected": "抓取已选", @@ -218,11 +218,11 @@ "ArtistEditor": "艺术家编辑器", "ArtistAlbumClickToChangeTrack": "单击以修改曲目", "ArtistClickToChangeAlbum": "单击以修改专辑", - "AutoRedownloadFailedHelpText": "自动搜索并尝试下载不同的版本", + "AutoRedownloadFailedHelpText": "自动搜索并尝试下载不同的发布资源", "BackupFolderHelpText": "相对路径将在 {appName} 的 AppData 目录下", - "BindAddressHelpTextWarning": "需重启以生效", + "BindAddressHelpTextWarning": "重启后生效", "Blocklist": "黑名单", - "BlocklistRelease": "黑名单版本", + "BlocklistRelease": "发布资源黑名单", "Calendar": "日历", "ClickToChangeQuality": "点击更改质量", "CancelMessageText": "您确定要取消这个挂起的任务吗?", @@ -236,7 +236,7 @@ "MetadataSettings": "元数据设置", "MinimumFreeSpace": "最小剩余空间", "Missing": "缺失", - "Monitored": "已监控", + "Monitored": "已追踪", "MustContain": "必须包含", "MustNotContain": "不得包含", "NamingSettings": "命名设置", @@ -245,12 +245,12 @@ "None": "无", "OnRename": "重命名中", "OnUpgrade": "升级中", - "Original": "原始的", + "Original": "原始", "PosterSize": "海报大小", "Proper": "合适的", "PropersAndRepacks": "适合的和重封装的Propers and Repacks", "ProtocolHelpText": "在其他相同版本之间进行选择时,选择要使用的协议以及首选的协议", - "QualityProfiles": "媒体质量配置", + "QualityProfiles": "质量配置", "Reason": "季", "RecycleBinCleanupDaysHelpText": "设置为0关闭自动清理", "RecycleBinCleanupDaysHelpTextWarning": "回收站中的文件在超出选择的天数后会被自动清理", @@ -262,27 +262,27 @@ "RefreshScan": "刷新&扫描", "ReleaseDate": "发布日期", "ReleaseGroup": "发布组", - "ReleaseRejected": "发布被拒绝", + "ReleaseRejected": "发布资源已拒绝", "ReleaseStatuses": "发布状态", "ReleaseWillBeProcessedInterp": "发布将被处理{0}", "RemotePathHelpText": "下载客户端访问的目录的根路径", "RemotePathMappings": "远程路径映射", "Remove": "移除", - "RemoveCompleted": "移除已完成", - "RemoveCompletedDownloadsHelpText": "从下载客户端记录中移除已导入的下载", + "RemoveCompleted": "移除成功", + "RemoveCompletedDownloadsHelpText": "从下载客户端记录中移除已导入的下载记录", "RemoveDownloadsAlert": "移除设置被移至上表中的单个下载客户端设置。", - "RemoveFailed": "删除失败", - "RemoveFailedDownloadsHelpText": "从下载客户端中删除已失败的下载", + "RemoveFailed": "移除失败", + "RemoveFailedDownloadsHelpText": "从下载客户端的历史记录中移除失败的下载记录", "RemoveFromBlocklist": "从黑名单中移除", "RemoveFromDownloadClient": "从下载客户端中移除", "RemoveFromQueue": "从队列中移除", - "RemoveSelected": "移除已选", + "RemoveSelected": "移除选中项", "RemoveTagExistingTag": "已有标签", "RemoveTagRemovingTag": "移除标签", "RenameTracksHelpText": "如果重命名未启用,{appName}会使用现有文件名", - "Reorder": "重新排序Reorder", + "Reorder": "重新排序", "ReplaceIllegalCharacters": "替换非法字符", - "ReplaceIllegalCharactersHelpText": "替换非法字符,如未勾选,则会被{appName}移除", + "ReplaceIllegalCharactersHelpText": "替换非法字符。如未勾选,则字符会被 {appName} 移除", "RequiredHelpText": "发布的歌曲必须至少包含一个这些项目(不区分大小写)", "RequiredPlaceHolder": "添加新限制", "RequiresRestartToTakeEffect": "需重启以生效", @@ -294,7 +294,7 @@ "RootFolders": "根目录", "RSSSync": "RSS同步", "RSSSyncInterval": "RSS同步间隔", - "RssSyncIntervalHelpText": "间隔时间以分钟为单位,设置为0则关闭该功能(会停止所有歌曲的自动抓取下载)", + "RssSyncIntervalHelpText": "间隔时间(以分钟为单位),设置为零则禁用(这会停止自动抓取发布资源)", "SearchAll": "搜索全部", "ShowQualityProfile": "显示质量配置文件", "ShowQualityProfileHelpText": "在海报下方显示媒体质量配置", @@ -315,13 +315,13 @@ "StandardTrackFormat": "标准歌曲格式", "SuccessMyWorkIsDoneNoFilesToRename": "成功了!任务已完成,所有文件已重命名。", "SuccessMyWorkIsDoneNoFilesToRetag": "成功了!任务已完成,所有文件已重命名。", - "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "该搜刮器不支持RSS", + "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "该索引器不支持RSS", "SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "该索引器不支持搜索", "SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByLidarr": "当自动搜索通过UI或{appName}执行时将被使用", "SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "当手动搜索启用时使用", "TestAllIndexers": "测试全部索引器", "TestAllLists": "测试全部列表", - "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "这将适用于所有搜刮器,请遵循他们所制定的规则", + "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "这将适用于所有索引器,请遵循他们所制定的规则", "TimeFormat": "时间格式", "TorrentDelay": "Torrent延时", "TorrentDelayHelpText": "延迟几分钟等待获取洪流", @@ -337,7 +337,7 @@ "UnableToLoadDelayProfiles": "无法加载延时配置", "UnableToLoadDownloadClientOptions": "无法加载下载客户端选项", "UnableToLoadImportListExclusions": "无法加载排除列表", - "UnableToLoadIndexerOptions": "无法加载搜刮器选项", + "UnableToLoadIndexerOptions": "无法加载索引器选项", "UnableToLoadLists": "无法加载列表", "UnableToLoadMediaManagementSettings": "无法加载媒体管理设置", "UnableToLoadMetadata": "无法加载元数据", @@ -348,24 +348,24 @@ "UnableToLoadReleaseProfiles": "无法加载延时配置", "UnableToLoadRemotePathMappings": "无法加载远程路径映射", "Ungroup": "未分组", - "Unmonitored": "未监控", + "Unmonitored": "未追踪", "UnmonitoredHelpText": "在iCal订阅中包含未监控的电影", "UpdateAll": "全部更新", "PublishedDate": "发布日期", - "Quality": "媒体质量", + "Quality": "质量", "QualityProfile": "质量配置", "RescanArtistFolderAfterRefresh": "刷新后重新扫描歌手文件夹", "ResetAPIKeyMessageText": "您确定要重置您的 API 密钥吗?", "SearchForMissing": "搜索缺少", "ShowDateAdded": "显示加入时间", - "ShowMonitored": "显示监控中的歌曲", - "ShowMonitoredHelpText": "在海报下显示监控状态", + "ShowMonitored": "显示已追踪项", + "ShowMonitoredHelpText": "在海报下显示追踪状态", "ShownAboveEachColumnWhenWeekIsTheActiveView": "当使用周视图时显示上面的每一列", "ShowPath": "显示路径", "Time": "时间", "ChmodFolderHelpTextWarning": "仅当运行 {appName} 程序的用户是文件所有者的情况下才有效。最好确保下载客户端正确设置权限。", "ChownGroupHelpTextWarning": "仅当运行 {appName} 程序的用户是文件所有者的情况下才有效。最好确保下载客户端使用与 {appName} 相同的用户组。", - "CompletedDownloadHandling": "完成下载处理", + "CompletedDownloadHandling": "已完成下载处理", "Component": "组件", "CopyUsingHardlinksHelpText": "硬链接允许{appName}导入torrents种子到剧集文件夹,而无需占用额外的磁盘空间或复制文件的整个内容。只有当源和目标在同一卷上时,硬链接才会起作用", "CopyUsingHardlinksHelpTextWarning": "有时候,文件锁可能会阻止对正在做种的文件进行重命名。您可以暂时禁用做种功能,并使用{appName}的重命名功能作为解决方案。", @@ -375,15 +375,15 @@ "CutoffHelpText": "一旦满足质量则{appName} 不会再下载专辑", "DelayProfiles": "延迟配置", "DeleteDelayProfile": "删除延迟配置", - "DeleteDelayProfileMessageText": "你确定要删除此延迟配置吗?", - "DeleteEmptyFolders": "删除空目录", + "DeleteDelayProfileMessageText": "您确认要删除此延迟配置吗?", + "DeleteEmptyFolders": "删除空文件夹", "DeleteImportListExclusion": "删除导入排除列表", - "DeleteImportListExclusionMessageText": "你确定要删除这个导入排除列表吗?", + "DeleteImportListExclusionMessageText": "您确认要删除此导入排除列表吗?", "DeleteImportListMessageText": "您确定要删除列表 “{name}” 吗?", "DeleteMetadataProfileMessageText": "您确定要删除元数据配置文件“{name}”吗?", "DeleteQualityProfile": "删除质量配置", "DeleteQualityProfileMessageText": "您确定要删除质量配置“{name}”吗?", - "DeleteReleaseProfile": "删除发布组配置", + "DeleteReleaseProfile": "删除发布资源配置", "DeleteReleaseProfileMessageText": "你确定你要删除这个发行版配置文件?", "DeleteRootFolderMessageText": "您确定要删除根文件夹“{name}”吗?", "DeleteSelectedTrackFiles": "删除选择的电影文件", @@ -417,14 +417,14 @@ "ICalFeed": "iCal订阅地址", "ICalHttpUrlHelpText": "将此URL复制到您的客户端,如果您的浏览器支持webcal,请直接点击右侧订阅按钮", "ICalLink": "iCal链接", - "IconForCutoffUnmet": "未达设定标准的图标", + "IconForCutoffUnmet": "未达阈值的图标", "IgnoredHelpText": "如版本包含一个或多个条件则丢弃(无视大小写)", "ImportedTo": "导入到", "ImportExtraFiles": "导入额外文件", "ImportExtraFilesHelpText": "导入歌曲后导入匹配的额外文件(字幕/nfo等)", "ImportFailedInterp": "导入失败: {0}", "IncludeUnknownArtistItemsHelpText": "显示队列中没有艺术家的项目,这可能包括被删除的艺术家,影片以及{appName}类别中的任何其他内容", - "IncludeUnmonitored": "包含未追踪的", + "IncludeUnmonitored": "包含未追踪项", "IndexerSettings": "索引器设置", "IsCutoffCutoff": "截止", "IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "升级直至达到或超过此质量", @@ -463,8 +463,8 @@ "ShortDateFormat": "短日期格式", "ShowCutoffUnmetIconHelpText": "终止监控条件未满足前为文件显示图标", "UiLanguageHelpText": "{appName}使用的UI界面语言", - "CutoffUnmet": "未达设定标准", - "AgeWhenGrabbed": "年龄(获取后)", + "CutoffUnmet": "未达阈值项", + "AgeWhenGrabbed": "年龄(抓取后)", "AnyReleaseOkHelpText": "{appName} 将会自动切换到与已下载文件最匹配的版本", "DelayingDownloadUntil": "延时下载直到 {1} 在 {0} 之前 Delaying download until {0} at {1}", "SetPermissions": "设定权限", @@ -508,7 +508,7 @@ "MissingAlbumsData": "监控没有文件或尚未发布的专辑", "OnReleaseImport": "在发行导入时", "QualityProfileIdHelpText": "质量配置列表项应该被添加", - "ReleaseProfiles": "发行版概要", + "ReleaseProfiles": "发布资源配置", "RootFolderPathHelpText": "根目录文件夹列表项需添加", "ScrubAudioTagsHelpText": "从文件中删除现有标签,只留下{appName}添加的标签。", "ScrubExistingTags": "覆盖现有标签", @@ -547,7 +547,7 @@ "AddImportListExclusion": "添加导入排除列表", "AddIndexer": "添加索引器", "AddQualityProfile": "添加质量配置", - "AddRemotePathMapping": "添加远程目录映射", + "AddRemotePathMapping": "添加远程路径映射", "AfterManualRefresh": "在手动更新之后", "Age": "年龄", "All": "全部", @@ -629,7 +629,7 @@ "MediaManagement": "媒体管理", "Metadata": "元数据", "MonitorAlbumExistingOnlyWarning": "这是对每张专辑的监控设置的一次性调整 使用艺术家/编辑下的选项来控制新添加的专辑将如何", - "MonitoredOnly": "仅监控", + "MonitoredOnly": "仅追踪", "MonitoringOptions": "监控选项", "MonitoringOptionsHelpText": "添加艺术家后应该监控哪些专辑(一次性调整)", "MonitorNewItemsHelpText": "哪些新专辑应被监控", @@ -655,7 +655,7 @@ "Queued": "队列中", "Rating": "评分", "RejectionCount": "拒绝次数", - "ReleaseTitle": "发布标题", + "ReleaseTitle": "发布资源标题", "Renamed": "已重命名", "Replace": "替换", "RestartRequiredHelpTextWarning": "需重启以生效", @@ -688,7 +688,7 @@ "UnmappedFilesOnly": "仅限未映射的文件", "UnmonitoredOnly": "监控中", "UpgradesAllowed": "允许升级", - "Wanted": "待获取", + "Wanted": "待寻", "Warn": "警告", "WouldYouLikeToRestoreBackup": "是否要还原备份“{name}”?", "WriteMetadataTags": "编写元数据标签", @@ -709,7 +709,7 @@ "Organize": "整理", "Other": "其他", "OutputPath": "输出路径", - "QualitiesHelpText": "即使未选中,列表中的质量排序越高优先级也越高。同组内的质量优先级相同。质量只有选中才标记为需要", + "QualitiesHelpText": "即使未勾选,列表中靠前的质量优先级更高。同组内的质量优先级相同。仅需勾选需要的质量", "ImportFailed": "导入失败", "TrackArtist": "歌曲歌手", "OnAlbumDelete": "当专辑删除时", @@ -732,7 +732,7 @@ "TrackStatus": "歌曲状态", "Database": "数据库", "EditMetadata": "编辑元数据", - "EditReleaseProfile": "编辑发布信息", + "EditReleaseProfile": "编辑发布资源配置", "LatestAlbumData": "监控最近和未来的专辑", "Disambiguation": "消除歧义", "IsExpandedHideAlbums": "隐藏专辑", @@ -771,7 +771,7 @@ "HideTracks": "隐藏歌曲", "LatestAlbum": "最近的专辑", "FutureAlbums": "未来专辑", - "AddReleaseProfile": "添加发布组配置", + "AddReleaseProfile": "添加发布资源配置", "AlbumRelease": "专辑发布", "AlbumReleaseDate": "专辑发布日期", "AlbumStatus": "专辑状态", @@ -832,10 +832,10 @@ "CouldntFindAnyResultsForTerm": "未找到 '{0}' 的任何结果", "DownloadClientCheckDownloadingToRoot": "下载客户端{0}将下载内容放在根文件夹{1}中。您不应该下载到根文件夹。", "DownloadClientCheckNoneAvailableMessage": "无可用的下载客户端", - "DownloadClientCheckUnableToCommunicateMessage": "无法与{0}进行通讯。", - "DownloadClientStatusCheckAllClientMessage": "所有下载客户端都不可用", + "DownloadClientCheckUnableToCommunicateMessage": "无法与 {0} 进行通讯。", + "DownloadClientStatusCheckAllClientMessage": "下载客户端因故障均不可用", "DownloadPropersAndRepacksHelpTextWarning": "使用自定义格式自动升级到合适的或者Repack", - "DownloadClientStatusCheckSingleClientMessage": "所有下载客户端都不可用: {0}", + "DownloadClientStatusCheckSingleClientMessage": "下载客户端因故障不可用: {0}", "DownloadedUnableToImportCheckLogsForDetails": "已下载 - 无法导入:查看日志获取详细信息", "ExportCustomFormat": "导出自定义格式", "FailedDownloadHandling": "下载失败处理", @@ -849,7 +849,7 @@ "IndexerSearchCheckNoInteractiveMessage": "没有索引器开启手动搜索,{appName} 将不会提供任何手动搜索结果", "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "添加新的艺术家很容易,只需开始输入要添加的艺术家的名称即可。", "Loading": "加载中", - "Monitor": "是否监控", + "Monitor": "追踪", "MountCheckMessage": "挂载的电影目录包含只读的目录: ", "NegateHelpText": "如勾选,当条件 {0} 满足时不会应用自定义格式。", "PreferTorrent": "首选Torrent", @@ -858,13 +858,13 @@ "ProxyCheckFailedToTestMessage": "测试代理失败: {0}", "ProxyCheckResolveIpMessage": "无法解析已设置的代理服务器主机{0}的IP地址", "RecycleBinUnableToWriteHealthCheck": "无法写入配置的回收站文件夹:{0}。确保此路径存在,并且可由运行{appName}的用户写入", - "RemotePathMappingCheckBadDockerPath": "您正在使用docker;下载客户端 {0} 的下载目录为 {1} ,但是该地址 {2} 不合法。请检查您的远程地址映射和下载客户端设置。", + "RemotePathMappingCheckBadDockerPath": "您正在使用 docker;下载客户端 {0} 的下载目录为 {1} ,但该路径 {2} 无效。请检查您的远程路径映射和下载客户端设置。", "RemotePathMappingCheckLocalWrongOSPath": "本地下载客户端 {0} 报告文件在目录 {1} 中,但是该地址 {2} 非法。请检查您的下载客户端设置。", "ShownClickToHide": "显示,点击隐藏", "CustomFormat": "自定义格式", "CustomFormatRequiredHelpText": "此{0}条件必须匹配才能应用自定义格式。否则,单个{1}匹配就足够了。", "CustomFormatSettings": "自定义格式设置", - "CustomFormats": "自定义命名格式", + "CustomFormats": "自定义格式", "Customformat": "自定义命名格式", "CutoffFormatScoreHelpText": "一旦自定义格式分数满足则{appName}不会再抓取专辑", "DeleteCustomFormatMessageText": "您确定要删除自定义格式“{name}”吗?", @@ -873,24 +873,24 @@ "ImportListStatusCheckSingleClientMessage": "列表因错误不可用:{0}", "ImportMechanismHealthCheckMessage": "启用下载完成处理", "IndexerStatusCheckAllClientMessage": "所有索引器都因错误不可用", - "IndexerStatusCheckSingleClientMessage": "搜刮器因错误不可用:{0}", - "RemotePathMappingCheckDockerFolderMissing": "您正在使用docker;下载客户端 {0} 报告文件在 {1} 中,但是该目录似乎不存在docker容器中。请检查您的远程地址映射和容器的卷设置。", + "IndexerStatusCheckSingleClientMessage": "索引器因错误不可用:{0}", + "RemotePathMappingCheckDockerFolderMissing": "您正在使用 docker;下载客户端 {0} 的下载目录为 {1} ,但该目录似乎不存在于 docker 容器内。请检查您的远程路径映射和容器卷设置。", "RemotePathMappingCheckDownloadPermissions": "{appName}可以找到但无法访问已下载的电影 {0} ,可能是权限错误。", "RemotePathMappingCheckFileRemoved": "文件{0} 在处理的过程中被部分删除。", - "RemotePathMappingCheckFilesBadDockerPath": "您正在使用docker;下载客户端 {0} 的下载目录为 {1} ,但是该地址 {2} 不合法。请检查您的远程地址映射和下载客户端设置。", + "RemotePathMappingCheckFilesBadDockerPath": "您正在使用 docker;下载客户端 {0} 的下载目录为 {1} ,但该路径 {2} 无效。请检查您的远程路径映射和下载客户端设置。", "RemotePathMappingCheckFilesGenericPermissions": "下载{1}中客户端{0}报告的文件,但{appName}无法看到此目录。您可能需要调整文件夹的权限。", "RemotePathMappingCheckFilesLocalWrongOSPath": "本地下载客户端 {0} 报告文件在目录 {1} 中,但是该地址 {2} 非法。请检查您的下载客户端设置。", - "RemotePathMappingCheckFilesWrongOSPath": "远程下载客户端 {0} 报告文件在 {1} 中,但是该地址 {2} 非法。请检查您的远程地址映射和下载客户端设置。", + "RemotePathMappingCheckFilesWrongOSPath": "远程下载客户端 {0} 的下载目录为 {1} ,但该路径 {2} 无效。请检查您的远程路径映射和下载客户端设置。", "RemotePathMappingCheckGenericPermissions": "下载客户端{0}将下载放置在{1}中,但 {appName} 无法看到此目录。您可能需要调整文件夹的权限。", "RemotePathMappingCheckImportFailed": "{appName}导入电影失败,请查看日志文件获取详细信息。", - "RemotePathMappingCheckLocalFolderMissing": "远程客户端 {0} 将下载文件放置在 {1} 中,但该目录似乎不存在,可能目录确实或远程地址映射错误。", - "RemotePathMappingCheckRemoteDownloadClient": "远程客户端 {0} 将下载文件放置在 {1} 中,但该目录似乎不存在,可能目录确实或远程地址映射错误。", - "RemotePathMappingCheckWrongOSPath": "远程下载客户端 {0} 报告文件在 {1} 中,但是该地址 {2} 非法。请检查您的远程地址映射和下载客户端设置。", + "RemotePathMappingCheckLocalFolderMissing": "远程下载客户端 {0} 的下载目录为 {1} ,但该目录似乎不存在。可能是远程路径映射缺失或错误。", + "RemotePathMappingCheckRemoteDownloadClient": "远程下载客户端 {0} 的下载目录为 {1} ,但该目录似乎不存在。可能是远程路径映射缺失。", + "RemotePathMappingCheckWrongOSPath": "远程下载客户端 {0} 的下载目录为 {1} ,但该路径 {2} 无效。请检查您的远程路径映射和下载客户端设置。", "AppDataLocationHealthCheckMessage": "无法更新,以防止在更新时删除 AppData", "ColonReplacement": "替换冒号", "CopyToClipboard": "复制到剪贴板", - "DeleteCustomFormat": "删除自定义命名格式", - "Disabled": "禁用", + "DeleteCustomFormat": "删除自定义格式", + "Disabled": "已禁用", "IndexerJackettAll": "使用 Jackett 不受支持的“全部”终点的索引器:{0}", "IndexerLongTermStatusCheckAllClientMessage": "由于故障超过6小时,所有索引器均不可用", "IndexerLongTermStatusCheckSingleClientMessage": "由于故障6小时,下列索引器都已不可用:{0}", @@ -899,9 +899,9 @@ "MinFormatScoreHelpText": "允许下载的最小自定义格式分数", "Monitoring": "监控中", "RemotePathMappingCheckFolderPermissions": "{appName}可以找到但是无法访问已下载的目录 {0} ,可能是权限错误。", - "ReplaceWithDash": "使用破折号替换", - "ReplaceWithSpaceDash": "使用空格破折号替换", - "ReplaceWithSpaceDashSpace": "使用空格破折号空格替换", + "ReplaceWithDash": "使用破折号(xx-xx)替换", + "ReplaceWithSpaceDash": "使用空格破折号(xx -xx)替换", + "ReplaceWithSpaceDashSpace": "使用空格破折号空格(xx - xx)替换", "ResetDefinitionTitlesHelpText": "重置定义标题和值", "ResetDefinitions": "重置定义", "ResetTitles": "重置标题", @@ -913,11 +913,11 @@ "ThereWasAnErrorLoadingThisPage": "加载此页时出错", "UnableToLoadCustomFormats": "无法加载自定义格式", "UnableToLoadInteractiveSearch": "无法加载该专辑的搜索结果,请稍后重试", - "UpdateAvailableHealthCheckMessage": "有新的更新可用", + "UpdateAvailableHealthCheckMessage": "有新的更新可用:{version}", "UpdateCheckStartupNotWritableMessage": "无法安装更新,因为用户“{1}”对于启动文件夹“{0}”没有写入权限。", "UpdateCheckStartupTranslocationMessage": "无法安装更新,因为启动文件夹“{0}”在一个应用程序迁移文件夹。Cannot install update because startup folder '{0}' is in an App Translocation folder.", "UpdateCheckUINotWritableMessage": "无法安装升级,因为用户“{1}”不可写入界面文件夹“{0}”。", - "DeleteRemotePathMappingMessageText": "你确定要删除此远程路径映射吗?", + "DeleteRemotePathMappingMessageText": "您确认要删除此远程路径映射吗?", "DeleteCondition": "删除条件", "ListRefreshInterval": "列表刷新间隔", "ApiKeyValidationHealthCheckMessage": "请将 API 密钥更新为至少 {0} 个字符长度。您可以通过设置页面或修改配置文件完成此操作", @@ -952,21 +952,21 @@ "ApplyTagsHelpTextRemove": "移除: 移除已输入的标签", "ApplyTagsHelpTextAdd": "添加: 添加标签至已有的标签列表中", "ApplyTagsHelpTextReplace": "替换: 用输入的标签替换当前标签 (不输入将会清除所有标签)", - "ApplyTagsHelpTextHowToApplyDownloadClients": "如何将标签应用到已选择的下载客户端", - "ApplyTagsHelpTextHowToApplyImportLists": "如何将标签应用到已选择的导入列表", + "ApplyTagsHelpTextHowToApplyDownloadClients": "如何将标签应用到已选中的下载客户端", + "ApplyTagsHelpTextHowToApplyImportLists": "如何将标签应用到已选中的导入列表", "ApplyTagsHelpTextHowToApplyIndexers": "如何将标签应用到已选中的索引器", "Negated": "无效的", "No": "否", "NoChange": "无修改", "AutoAdd": "自动添加", - "BlocklistReleases": "黑名单版本", - "Required": "必须的", + "BlocklistReleases": "发布资源黑名单", + "Required": "强制匹配", "SetTags": "设置标签", "ExistingTag": "已有标签", "NoEventsFound": "无事件", - "RemoveSelectedItem": "删除所选项目", - "RemoveSelectedItems": "删除所选项目", - "RemovingTag": "移除标签", + "RemoveSelectedItem": "移除选中项", + "RemoveSelectedItems": "移除选中项", + "RemovingTag": "正在移除标签", "Yes": "确定", "ResetQualityDefinitions": "重置质量定义", "Album": "专辑", @@ -984,9 +984,9 @@ "DownloadClientTagHelpText": "仅将此下载客户端用于至少具有一个匹配标签的电影。留空可用于所有电影。", "QueueIsEmpty": "空队列", "ResetTitlesHelpText": "重置定义标题和值", - "RemoveCompletedDownloads": "删除已完成的下载", - "RemoveFailedDownloads": "删除失败的下载", - "RemoveSelectedItemQueueMessageText": "您确定要从队列中删除 1 项吗?", + "RemoveCompletedDownloads": "移除已完成的下载记录", + "RemoveFailedDownloads": "移除失败下载记录", + "RemoveSelectedItemQueueMessageText": "您确认要从队列中移除 1 项吗?", "RemoveSelectedItemsQueueMessageText": "您确定要从队列中删除 {0} 个项目吗?", "ShowNextAlbum": "显示最后专辑", "CountArtistsSelected": "{count}位艺术家已选中", @@ -1002,14 +1002,14 @@ "AddConnectionImplementation": "添加连接- {implementationName}", "AddDownloadClientImplementation": "添加下载客户端- {implementationName}", "AddIndexerImplementation": "添加索引器 - {implementationName}", - "AutomaticUpdatesDisabledDocker": "不支持在使用 Docker 容器时直接升级。你需要升级 {appName} 容器镜像或使用脚本(script)", + "AutomaticUpdatesDisabledDocker": "使用 Docker 更新机制时,自动更新不被直接支持。您需要在 {appName} 之外更新容器镜像,或使用脚本进行更新", "Clone": "复制", - "AppUpdated": "{appName} 已升级", + "AppUpdated": "{appName} 已更新", "AddConditionImplementation": "添加条件 - {implementationName}", "AddImportList": "添加导入列表", "AddImportListImplementation": "添加导入列表- {implementationName}", "ErrorLoadingContent": "加载此内容时出现错误", - "HealthMessagesInfoBox": "您可以通过单击行尾的wiki链接(图书图标)或检查[日志]({link})来查找有关这些运行状况检查消息原因的更多信息。如果你在理解这些信息方面有困难,你可以通过下面的链接联系我们的支持。", + "HealthMessagesInfoBox": "您可以通过单击行尾的 wiki 链接(图书图标)或检查 [日志]({link}) 来获取导致此类运行状态消息的更多信息。如果您在理解此类信息方面有困难,您可以通过以下链接联系我们以获得支持。", "ImportListRootFolderMissingRootHealthCheckMessage": "在导入列表中缺少根目录文件夹:{0}", "ImportListRootFolderMultipleMissingRootsHealthCheckMessage": "导入列表中缺失多个根目录文件夹", "NoCutoffUnmetItems": "没有未达截止条件的项目", @@ -1059,7 +1059,7 @@ "InfoUrl": "信息 URL", "GrabId": "抓取ID", "InvalidUILanguage": "您的UI设置为无效语言,请纠正并保存设置", - "AuthenticationMethod": "身份认证方式", + "AuthenticationMethod": "认证方式", "AuthenticationMethodHelpTextWarning": "请选择一个有效的认证方式", "AuthenticationRequired": "需要认证", "Auto": "自动", @@ -1067,7 +1067,7 @@ "BannerOptions": "横幅选项", "AuthenticationRequiredPasswordHelpTextWarning": "请输入新密码", "AuthenticationRequiredUsernameHelpTextWarning": "请输入新用户名", - "AuthenticationRequiredHelpText": "修改这些请求需要认证。除非你了解其中的风险,否则不要进行更改。", + "AuthenticationRequiredHelpText": "更改需要进行验证的请求。除非您了解其中的风险,否则请勿更改。", "AuthenticationRequiredWarning": "为防止未经认证的远程访问,{appName} 现需要启用身份认证。您可以选择禁用本地地址的身份认证。", "DisabledForLocalAddresses": "在本地地址上禁用", "Overview": "概览", @@ -1094,10 +1094,10 @@ "DeleteSpecification": "删除规范", "Large": "大", "Negate": "反选", - "QueueFilterHasNoItems": "选定的队列过滤器没有项目", - "RegularExpressionsCanBeTested": "正则表达式可在[此处](http://regexstorm.net/tester)测试。", + "QueueFilterHasNoItems": "所选的队列过滤器中无项目", + "RegularExpressionsCanBeTested": "正则表达式可在 [此处](http://regexstorm.net/tester) 测试。", "ReleaseProfile": "发行配置文件", - "RemoveTagsAutomatically": "自动删除标签", + "RemoveTagsAutomatically": "自动移除标签", "RemoveTagsAutomaticallyHelpText": "如果条件不满足,则自动移除标签", "RenameFiles": "重命名文件", "AutoTagging": "自动标记", @@ -1114,13 +1114,13 @@ "RegularExpressionsTutorialLink": "有关正则表达式的更多详细信息,请参阅[此处](https://www.regular-expressions.info/tutorial.html)。", "DeleteArtistFolderHelpText": "删除站点文件夹及其内容", "DeleteArtistFoldersHelpText": "删除剧集文件夹及其所含文件", - "DeleteAutoTagHelpText": "你确定要删除 “{name}” 自动标签吗?", + "DeleteAutoTagHelpText": "您确认要删除 “{name}” 自动标签吗?", "DeleteSelectedArtists": "删除所选的歌手", "DeleteSpecificationHelpText": "您确定要删除规范 '{name}' 吗?", "EditAutoTag": "编辑自动标签", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "确认新密码", "ClearBlocklist": "清空黑名单", - "ClearBlocklistMessageText": "你确定要将黑名单中的所有项目清空吗?", + "ClearBlocklistMessageText": "您确认要将黑名单中的所有项目清空吗?", "PasswordConfirmation": "确认密码", "Small": "小", "AlbumStudioTruncated": "只显示最新的25季,点击详情查看所有的季", @@ -1134,20 +1134,20 @@ "ExtraFileExtensionsHelpTextsExamples": "示例:’.sub,.nfo‘ 或 ’sub,nfo‘", "ExtraFileExtensionsHelpText": "要导入的额外文件列表,以逗号分隔(.nfo 文件会被导入为 .nfo-orig)", "DownloadClientQbittorrentSettingsContentLayout": "内容布局", - "DownloadClientQbittorrentSettingsContentLayoutHelpText": "是否使用 qBittorrent 配置的内容布局,使用种子的原始布局或始终创建子文件夹(qBittorrent 4.3.2+)", + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "是否使用 qBittorrent 的已配置内容布局、种子的原始布局或始终创建子文件夹(qBittorrent 4.3.2+)", "NoLimitForAnyDuration": "不限制任何运行环境", "NoMinimumForAnyDuration": "运行环境没有最小限制", "PreferredSize": "首选专辑大小", "Unlimited": "无限制", "DownloadClientPriorityHelpText": "下载客户端优先级,从1(最高)到50(最低),默认为1。具有相同优先级的客户端将轮换使用。", - "IndexerSettingsRejectBlocklistedTorrentHashes": "抓取时舍弃列入黑名单的种子散列值", - "AutoRedownloadFailedFromInteractiveSearch": "手动搜索重新下载失败", + "IndexerSettingsRejectBlocklistedTorrentHashes": "抓取时拒绝列入黑名单的种子散列值", + "AutoRedownloadFailedFromInteractiveSearch": "来自手动搜索的资源重新下载失败", "IncludeHealthWarnings": "包含健康度警告", "RemoveQueueItem": "移除 - {sourceTitle}", - "AutoRedownloadFailedFromInteractiveSearchHelpText": "当从手动搜索中获取失败的发行版时,自动搜索并尝试下载不同的发行版", + "AutoRedownloadFailedFromInteractiveSearchHelpText": "当从手动搜索中抓取的发布资源下载失败时,自动搜索并尝试下载不同的发布资源", "DownloadClientAriaSettingsDirectoryHelpText": "下载位置可选择,留空使用 Aria2 默认位置", "CustomFormatsSpecificationRegularExpression": "正则表达式", - "RemoveQueueItemConfirmation": "您确定要从队列中移除“{sourceTitle}”吗?", + "RemoveQueueItemConfirmation": "您确认要从队列中移除 “{sourceTitle}” 吗?", "AutoRedownloadFailed": "重新下载失败", "AlbumStudioTracksDownloaded": "{trackFileCount}/{totalTrackCount} 首曲目已下载", "ArtistProgressBarText": "{trackFileCount} / {trackCount} (共: {totalTrackCount}, 正在下载: {downloadingCount})", @@ -1161,20 +1161,20 @@ "Links": "链接", "Period": "时期", "Space": "空格", - "MonitoredStatus": "已监控的/状态", + "MonitoredStatus": "已追踪/状态", "Logout": "注销", "Lowercase": "小写字母", "MassSearchCancelWarning": "在不重启 {appName} 或禁用所有索引器的情况下,一旦启动便无法取消此操作。", "Underscore": "下划线", "Uppercase": "大写字母", "Donate": "捐赠", - "DownloadClientsSettingsSummary": "下载客户端,下载处理和远程地址映射", + "DownloadClientsSettingsSummary": "下载客户端、下载处理和远程路径映射", "FileNameTokens": "文件名标记", "GeneralSettingsSummary": "端口、SSL、用户名/密码、代理、分析、更新", "IndexersSettingsSummary": "索引器和索引器选项", "MediaManagementSettingsSummary": "命名,文件管理和根文件夹设置", "MetadataSettingsArtistSummary": "在导入专辑或刷新艺术家时创建元数据文件", - "QualitySettingsSummary": "质量尺寸和命名", + "QualitySettingsSummary": "质量标准和命名", "ConnectSettingsSummary": "通知、与媒体服务器/播放器的连接及自定义脚本", "CustomFormatsSettings": "自定义格式设置", "CustomFormatsSettingsSummary": "自定义格式和设置", @@ -1190,22 +1190,22 @@ "IgnoreDownloads": "忽略下载", "IgnoreDownloadHint": "阻止 {appName} 进一步处理此下载", "IgnoreDownload": "忽略下载", - "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "如果 torrent 的哈希被屏蔽了,某些索引器在使用RSS或者搜索期间可能无法正确拒绝它,启用此功能将允许在抓取 torrent 之后但在将其发送到客户端之前拒绝它。", + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "即使种子的散列值被列入黑名单,某些索引器在 RSS 同步或者搜索期间可能无法正确拒绝它,启用此功能将允许在抓取种子之后但在将其发送到下载客户端之前拒绝它。", "Menu": "菜单", "RemoveMultipleFromDownloadClientHint": "从下载客户端删除下载和文件", - "RemoveQueueItemsRemovalMethodHelpTextWarning": "“从下载客户端移除”将从下载客户端移除下载内容和文件。", + "RemoveQueueItemsRemovalMethodHelpTextWarning": "“从下载客户端中移除” 将从下载客户端中移除下载记录和文件。", "SetAppTags": "设置 {appName} 标签", "TrackFileDeletedTooltip": "曲目文件已删除", "TrackFileMissingTooltip": "曲目文件丢失", "RetagSelectedArtists": "重新标记选定的艺术家", "TrackFilesLoadError": "无法加载曲目文件", - "RemoveQueueItemRemovalMethod": "删除方法", - "RemoveQueueItemRemovalMethodHelpTextWarning": "“从下载客户端移除”将从下载客户端移除下载内容和文件。", + "RemoveQueueItemRemovalMethod": "移除方法", + "RemoveQueueItemRemovalMethodHelpTextWarning": "“从下载客户端中移除”将从下载客户端中移除下载记录和文件。", "TrackFileRenamedTooltip": "曲目文件已被重命名", "EmbedCoverArtHelpText": "编写标签时将 {appName} 专辑封面嵌入到音频文件中", "EmbedCoverArtInAudioFiles": "在音频文件中嵌入封面艺术", "IgnoreDownloadsHint": "阻止 {appName} 进一步处理这些下载", - "RemoveFromDownloadClientHint": "从下载客户端删除下载和文件", + "RemoveFromDownloadClientHint": "从下载客户端中移除下载记录和文件", "TrackFileTagsUpdatedTooltip": "曲目文件标签已更新", "EditSelectedArtists": "编辑所选艺术家", "NoTracksInThisMedium": "该媒体中没有曲目", @@ -1237,11 +1237,11 @@ "ChangeCategoryHint": "将下载从下载客户端更改为“导入后类别”", "OnArtistAdd": "在添加艺术家时", "BlocklistAndSearch": "黑名单和搜索", - "BlocklistAndSearchHint": "列入黑名单后开始寻找一个替代版本", - "BlocklistAndSearchMultipleHint": "列入黑名单后开始搜索替代版本", + "BlocklistAndSearchHint": "列入黑名单后开始一次搜索替换", + "BlocklistAndSearchMultipleHint": "列入黑名单后开始多次搜索替换", "BlocklistMultipleOnlyHint": "无需搜索替换的黑名单", "BlocklistOnly": "仅限黑名单", - "BlocklistOnlyHint": "无需寻找替代版本的黑名单", + "BlocklistOnlyHint": "无需一次搜索替换的黑名单", "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName}无法确定这个发布版本是哪部剧集的哪一集,{appName}可能无法自动导入此版本,你想要获取“{title}”吗?", "NotificationsKodiSettingAlwaysUpdate": "总是更新", "NotificationsKodiSettingsCleanLibraryHelpText": "更新后清理资源库", @@ -1272,13 +1272,13 @@ "IndexerSettingsSeedRatioHelpText": "停止之前应达到的做种比率,留空使用下载客户端的默认值。 比率应至少为 1.0 并遵循索引器规则", "IndexerSettingsSeedTimeHelpText": "停止前应做种的时间,留空使用下载客户端的默认值", "InteractiveSearchModalHeader": "手动搜索", - "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "下载完成后移动的位置可选择,留空使用 Deluge 默认位置", + "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "下载完成后移动至可选位置,留空使用 Deluge 默认位置", "IndexerSettingsSeedTime": "做种时间", "Parse": "解析", "Repack": "重新打包", "False": "否", "ParseModalErrorParsing": "解析错误,请重试。", - "ParseModalHelpText": "在上面的输入框中输入一个发行版标题", + "ParseModalHelpText": "在上面的输入框中输入一个发布资源标题", "ParseModalHelpTextDetails": "{appName} 将尝试解析标题并向您显示有关详情", "ParseModalUnableToParse": "无法解析提供的标题,请重试。", "TestParsing": "测试解析", @@ -1306,5 +1306,8 @@ "NotificationsSettingsUpdateMapPathsTo": "路径映射到", "DownloadClientDelugeSettingsDirectoryCompleted": "完成后移动至目录", "NotificationsSettingsUpdateLibrary": "更新资源库", - "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} 路径,当 {serviceName} 与 {appName} 对资源库路径的识别不一致时,可以使用此设置修改系列路径(需要`更新资源库`)" + "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} 路径,当 {serviceName} 与 {appName} 对资源库路径的识别不一致时,可以使用此设置修改系列路径(需要`更新资源库`)", + "NoCustomFormatsFound": "未找到自定义格式", + "NotificationsTelegramSettingsIncludeAppName": "标题中包含 {appName}", + "NotificationsTelegramSettingsIncludeAppNameHelpText": "可选,在消息标题前加上 {appName} 以区分来自不同应用的通知" } From c26c0d5bd6352470bb4bd0ad89c5cc9ae9beefb3 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 15 Sep 2024 15:55:04 +0300 Subject: [PATCH 037/275] Bump version to 2.6.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 502abca26..cac455b91 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.6.0' + majorVersion: '2.6.1' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 2170ada8a2db9595834c559abb97cc574c823892 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 5 Sep 2024 14:54:39 +0300 Subject: [PATCH 038/275] Fixed: Linking autotags with tag specification to all tags (cherry picked from commit a929548ae38d2c5504b961f22131897508d26470) --- src/NzbDrone.Core/Tags/TagService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Tags/TagService.cs b/src/NzbDrone.Core/Tags/TagService.cs index 78137a125..890921963 100644 --- a/src/NzbDrone.Core/Tags/TagService.cs +++ b/src/NzbDrone.Core/Tags/TagService.cs @@ -200,7 +200,7 @@ namespace NzbDrone.Core.Tags { foreach (var specification in autoTag.Specifications) { - if (specification is TagSpecification) + if (specification is TagSpecification tagSpecification && tagSpecification.Value == tag.Id) { autoTagIds.Add(autoTag.Id); } From 60fe75877b7d0e5b554a9957a64117c934788443 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 16 Sep 2024 14:03:54 +0000 Subject: [PATCH 039/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Weblate Co-authored-by: fordas Co-authored-by: genoher Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/es.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 8141748a2..90d2f995a 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -238,7 +238,7 @@ "UnmonitoredHelpText": "Incluir los álbumes no monitorizados en el canal de iCal", "UpdateAll": "Actualizar todo", "UpdateAutomaticallyHelpText": "Descargar e instalar actualizaciones automáticamente. Todavía puedes instalar desde Sistema: Actualizaciones", - "UpdateMechanismHelpText": "Usar el actualizador integrado de {appName} o un script", + "UpdateMechanismHelpText": "Usa el actualizador integrado de {appName} o un script", "Updates": "Actualizaciones", "UpdateScriptPathHelpText": "Ruta a un script personalizado que toma un paquete de actualización extraído y gestiona el resto del proceso de actualización", "UpgradeAllowedHelpText": "Si está desactivado las calidades no serán actualizadas", @@ -656,7 +656,7 @@ "RootFolderCheckMultipleMessage": "Varias carpetas de origen no existen: {0}", "RootFolderCheckSingleMessage": "La carpeta de origen no existe: {0}", "SystemTimeCheckMessage": "El reloj del sistema está retrasado más de un día. Las tareas de mantenimiento no se ejecutarán correctamente hasta que se haya corregido", - "UpdateAvailableHealthCheckMessage": "La nueva actualización está disponible", + "UpdateAvailableHealthCheckMessage": "Una nueva actualización está disponible: {version}", "UpdateCheckStartupNotWritableMessage": "No se puede instalar la actualización porque la carpeta de arranque '{0}' no tiene permisos de escritura para el usuario '{1}'.", "UpdateCheckStartupTranslocationMessage": "No se puede instalar la actualización porque la carpeta de arranque '{0}' está en una carpeta de \"App Translocation\".", "ShownClickToHide": "Mostrado, haz clic para ocultar", @@ -878,7 +878,7 @@ "ExtraFileExtensionsHelpTextsExamples": "Ejemplos: '.sub, .nfo' o 'sub,nfo'", "TBA": "Por determinar", "DeleteArtistFoldersHelpText": "Eliminar la carpeta de películas y su contenido", - "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El cliente de descarga {downloadClientName} está configurado para eliminar las descargas completadas. Esto puede causar que las descargas sean eliminadas de tu cliente antes de que {1} pueda importarlas.", + "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El cliente de descarga {0} está configurado para eliminar las descargas completadas. Esto puede causar que las descargas sean eliminadas de tu cliente antes de que {1} pueda importarlas.", "DownloadClientAriaSettingsDirectoryHelpText": "Ubicación opcional en la que poner las descargas, dejar en blanco para usar la ubicación de Aria2 predeterminada", "DownloadClientPriorityHelpText": "Prioridad del cliente de descarga desde 1 (la más alta) hasta 50 (la más baja). Por defecto: 1. Se usa Round-Robin para clientes con la misma prioridad.", "AutomaticallySwitchRelease": "Desbloqueo automático", From 2818f4e0732edeef63cd271875a88e663194fbef Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 14 Sep 2024 12:47:42 -0700 Subject: [PATCH 040/275] New: Use instance name in forms authentication cookie name (cherry picked from commit 97ebaf279650082c6baee9563ef179921c5ed25a) Closes #5102 --- .../AuthenticationBuilderExtensions.cs | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Lidarr.Http/Authentication/AuthenticationBuilderExtensions.cs b/src/Lidarr.Http/Authentication/AuthenticationBuilderExtensions.cs index ce8a2b652..752e39ce6 100644 --- a/src/Lidarr.Http/Authentication/AuthenticationBuilderExtensions.cs +++ b/src/Lidarr.Http/Authentication/AuthenticationBuilderExtensions.cs @@ -1,7 +1,10 @@ using System; +using System.Web; using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.Extensions.DependencyInjection; using NzbDrone.Core.Authentication; +using NzbDrone.Core.Configuration; namespace Lidarr.Http.Authentication { @@ -29,19 +32,25 @@ namespace Lidarr.Http.Authentication public static AuthenticationBuilder AddAppAuthentication(this IServiceCollection services) { - return services.AddAuthentication() - .AddNone(AuthenticationType.None.ToString()) - .AddExternal(AuthenticationType.External.ToString()) - .AddBasic(AuthenticationType.Basic.ToString()) - .AddCookie(AuthenticationType.Forms.ToString(), options => + services.AddOptions(AuthenticationType.Forms.ToString()) + .Configure((options, configFileProvider) => { - options.Cookie.Name = "LidarrAuth"; + // Url Encode the cookie name to account for spaces or other invalid characters in the configured instance name + var instanceName = HttpUtility.UrlEncode(configFileProvider.InstanceName); + + options.Cookie.Name = $"{instanceName}Auth"; options.AccessDeniedPath = "/login?loginFailed=true"; options.LoginPath = "/login"; options.ExpireTimeSpan = TimeSpan.FromDays(7); options.SlidingExpiration = true; options.ReturnUrlParameter = "returnUrl"; - }) + }); + + return services.AddAuthentication() + .AddNone(AuthenticationType.None.ToString()) + .AddExternal(AuthenticationType.External.ToString()) + .AddBasic(AuthenticationType.Basic.ToString()) + .AddCookie(AuthenticationType.Forms.ToString()) .AddApiKey("API", options => { options.HeaderName = "X-Api-Key"; From b2a4c75cce80ad763d691d04bd8d47b0e59ab753 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 5 Sep 2024 14:56:36 +0300 Subject: [PATCH 041/275] Fixed: Refresh tags after updating autotags (cherry picked from commit 6a332b40ac94e6e7c23217074da8e18e0ca3a319) Closes #5093 --- src/Lidarr.Api.V1/Tags/TagController.cs | 11 ++++++++++- src/NzbDrone.Core/AutoTagging/AutoTaggingService.cs | 11 +++++++++++ src/NzbDrone.Core/AutoTagging/AutoTagsUpdatedEvent.cs | 8 ++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/NzbDrone.Core/AutoTagging/AutoTagsUpdatedEvent.cs diff --git a/src/Lidarr.Api.V1/Tags/TagController.cs b/src/Lidarr.Api.V1/Tags/TagController.cs index fa2081a54..a0e76335e 100644 --- a/src/Lidarr.Api.V1/Tags/TagController.cs +++ b/src/Lidarr.Api.V1/Tags/TagController.cs @@ -3,6 +3,7 @@ using Lidarr.Http; using Lidarr.Http.REST; using Lidarr.Http.REST.Attributes; using Microsoft.AspNetCore.Mvc; +using NzbDrone.Core.AutoTagging; using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Tags; @@ -11,7 +12,9 @@ using NzbDrone.SignalR; namespace Lidarr.Api.V1.Tags { [V1ApiController] - public class TagController : RestControllerWithSignalR, IHandle + public class TagController : RestControllerWithSignalR, + IHandle, + IHandle { private readonly ITagService _tagService; @@ -60,5 +63,11 @@ namespace Lidarr.Api.V1.Tags { BroadcastResourceChange(ModelAction.Sync); } + + [NonAction] + public void Handle(AutoTagsUpdatedEvent message) + { + BroadcastResourceChange(ModelAction.Sync); + } } } diff --git a/src/NzbDrone.Core/AutoTagging/AutoTaggingService.cs b/src/NzbDrone.Core/AutoTagging/AutoTaggingService.cs index aaa01e2a8..5c3c23899 100644 --- a/src/NzbDrone.Core/AutoTagging/AutoTaggingService.cs +++ b/src/NzbDrone.Core/AutoTagging/AutoTaggingService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using NzbDrone.Common.Cache; using NzbDrone.Common.Extensions; +using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Music; using NzbDrone.Core.RootFolders; @@ -22,14 +23,18 @@ namespace NzbDrone.Core.AutoTagging { private readonly IAutoTaggingRepository _repository; private readonly RootFolderService _rootFolderService; + private readonly IEventAggregator _eventAggregator; private readonly ICached> _cache; public AutoTaggingService(IAutoTaggingRepository repository, RootFolderService rootFolderService, + IEventAggregator eventAggregator, ICacheManager cacheManager) { _repository = repository; _rootFolderService = rootFolderService; + _eventAggregator = eventAggregator; + _cache = cacheManager.GetCache>(typeof(AutoTag), "autoTags"); } @@ -51,13 +56,17 @@ namespace NzbDrone.Core.AutoTagging public void Update(AutoTag autoTag) { _repository.Update(autoTag); + _cache.Clear(); + _eventAggregator.PublishEvent(new AutoTagsUpdatedEvent()); } public AutoTag Insert(AutoTag autoTag) { var result = _repository.Insert(autoTag); + _cache.Clear(); + _eventAggregator.PublishEvent(new AutoTagsUpdatedEvent()); return result; } @@ -65,7 +74,9 @@ namespace NzbDrone.Core.AutoTagging public void Delete(int id) { _repository.Delete(id); + _cache.Clear(); + _eventAggregator.PublishEvent(new AutoTagsUpdatedEvent()); } public List AllForTag(int tagId) diff --git a/src/NzbDrone.Core/AutoTagging/AutoTagsUpdatedEvent.cs b/src/NzbDrone.Core/AutoTagging/AutoTagsUpdatedEvent.cs new file mode 100644 index 000000000..730e3423d --- /dev/null +++ b/src/NzbDrone.Core/AutoTagging/AutoTagsUpdatedEvent.cs @@ -0,0 +1,8 @@ +using NzbDrone.Common.Messaging; + +namespace NzbDrone.Core.AutoTagging +{ + public class AutoTagsUpdatedEvent : IEvent + { + } +} From 856ac2ffa5344b9d2fb0f54a12abf935b8bad9ca Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 14 Sep 2024 13:40:02 -0700 Subject: [PATCH 042/275] New: Add exception to SSL Certificate validation message (cherry picked from commit d84c4500949a530fac92d73f7f2f8e8462b37244) Closes #5103 --- .../Config/CertificateValidator.cs | 52 +++++++++++++++++++ .../Config/HostConfigController.cs | 18 +------ 2 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 src/Lidarr.Api.V1/Config/CertificateValidator.cs diff --git a/src/Lidarr.Api.V1/Config/CertificateValidator.cs b/src/Lidarr.Api.V1/Config/CertificateValidator.cs new file mode 100644 index 000000000..5dee51e89 --- /dev/null +++ b/src/Lidarr.Api.V1/Config/CertificateValidator.cs @@ -0,0 +1,52 @@ +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using FluentValidation; +using FluentValidation.Validators; +using NLog; +using NzbDrone.Common.Instrumentation; + +namespace Lidarr.Api.V1.Config +{ + public static class CertificateValidation + { + public static IRuleBuilderOptions IsValidCertificate(this IRuleBuilder ruleBuilder) + { + return ruleBuilder.SetValidator(new CertificateValidator()); + } + } + + public class CertificateValidator : PropertyValidator + { + protected override string GetDefaultMessageTemplate() => "Invalid SSL certificate file or password. {message}"; + + private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(CertificateValidator)); + + protected override bool IsValid(PropertyValidatorContext context) + { + if (context.PropertyValue == null) + { + return false; + } + + if (context.InstanceToValidate is not HostConfigResource resource) + { + return true; + } + + try + { + new X509Certificate2(resource.SslCertPath, resource.SslCertPassword, X509KeyStorageFlags.DefaultKeySet); + + return true; + } + catch (CryptographicException ex) + { + Logger.Debug(ex, "Invalid SSL certificate file or password. {0}", ex.Message); + + context.MessageFormatter.AppendArgument("message", ex.Message); + + return false; + } + } + } +} diff --git a/src/Lidarr.Api.V1/Config/HostConfigController.cs b/src/Lidarr.Api.V1/Config/HostConfigController.cs index ca3f88fc2..9046943e8 100644 --- a/src/Lidarr.Api.V1/Config/HostConfigController.cs +++ b/src/Lidarr.Api.V1/Config/HostConfigController.cs @@ -1,7 +1,6 @@ using System.IO; using System.Linq; using System.Reflection; -using System.Security.Cryptography.X509Certificates; using FluentValidation; using Lidarr.Http; using Lidarr.Http.REST; @@ -58,7 +57,7 @@ namespace Lidarr.Api.V1.Config .NotEmpty() .IsValidPath() .SetValidator(fileExistsValidator) - .Must((resource, path) => IsValidSslCertificate(resource)).WithMessage("Invalid SSL certificate file or password") + .IsValidCertificate() .When(c => c.EnableSsl); SharedValidator.RuleFor(c => c.LogSizeLimit).InclusiveBetween(1, 10); @@ -71,21 +70,6 @@ namespace Lidarr.Api.V1.Config SharedValidator.RuleFor(c => c.BackupRetention).InclusiveBetween(1, 90); } - private bool IsValidSslCertificate(HostConfigResource resource) - { - X509Certificate2 cert; - try - { - cert = new X509Certificate2(resource.SslCertPath, resource.SslCertPassword, X509KeyStorageFlags.DefaultKeySet); - } - catch - { - return false; - } - - return cert != null; - } - private bool IsMatchingPassword(HostConfigResource resource) { var user = _userService.FindUser(); From 5947b4642c65f7541d8e808254440e645cd8392d Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 15 Sep 2024 10:20:42 -0700 Subject: [PATCH 043/275] New: Check for available space before grabbing (cherry picked from commit 4b5ff3927d3c123f9e3a2bc74328323fab1b0745) Closes #5095 --- .../MediaManagement/MediaManagement.js | 33 +++---- .../FreeSpaceSpecificationFixture.cs | 95 +++++++++++++++++++ .../Configuration/ConfigService.cs | 1 + .../Specifications/FreeSpaceSpecification.cs | 66 +++++++++++++ src/NzbDrone.Core/Localization/Core/en.json | 2 +- 5 files changed, 177 insertions(+), 20 deletions(-) create mode 100644 src/NzbDrone.Core.Test/DecisionEngineTests/FreeSpaceSpecificationFixture.cs create mode 100644 src/NzbDrone.Core/DecisionEngine/Specifications/FreeSpaceSpecification.cs diff --git a/frontend/src/Settings/MediaManagement/MediaManagement.js b/frontend/src/Settings/MediaManagement/MediaManagement.js index d1881c068..627263fff 100644 --- a/frontend/src/Settings/MediaManagement/MediaManagement.js +++ b/frontend/src/Settings/MediaManagement/MediaManagement.js @@ -191,26 +191,21 @@ class MediaManagement extends Component {
- { - !isWindows && - - - {translate('SkipFreeSpaceCheck')} - + + {translate('SkipFreeSpaceCheck')} - - - } + + + { + private RemoteAlbum _remoteAlbum; + + [SetUp] + public void Setup() + { + _remoteAlbum = new RemoteAlbum() { Release = new ReleaseInfo(), Artist = new Artist { Path = @"C:\Test\Music\Artist".AsOsAgnostic() } }; + } + + private void WithMinimumFreeSpace(int size) + { + Mocker.GetMock().SetupGet(c => c.MinimumFreeSpaceWhenImporting).Returns(size); + } + + private void WithAvailableSpace(int size) + { + Mocker.GetMock().Setup(s => s.GetAvailableSpace(It.IsAny())).Returns(size.Megabytes()); + } + + private void WithSize(int size) + { + _remoteAlbum.Release.Size = size.Megabytes(); + } + + [Test] + public void should_return_true_when_available_space_is_more_than_size() + { + WithMinimumFreeSpace(0); + WithAvailableSpace(200); + WithSize(100); + + Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue(); + } + + [Test] + public void should_return_true_when_available_space_minus_size_is_more_than_minimum_free_space() + { + WithMinimumFreeSpace(50); + WithAvailableSpace(200); + WithSize(100); + + Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue(); + } + + [Test] + public void should_return_false_available_space_is_less_than_size() + { + WithMinimumFreeSpace(0); + WithAvailableSpace(200); + WithSize(1000); + + Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse(); + } + + [Test] + public void should_return_false_when_available_space_minus_size_is_less_than_minimum_free_space() + { + WithMinimumFreeSpace(150); + WithAvailableSpace(200); + WithSize(100); + + Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse(); + } + + [Test] + public void should_return_true_if_skip_free_space_check_is_true() + { + Mocker.GetMock() + .Setup(s => s.SkipFreeSpaceCheckWhenImporting) + .Returns(true); + + WithMinimumFreeSpace(150); + WithAvailableSpace(200); + WithSize(100); + + Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue(); + } + } +} diff --git a/src/NzbDrone.Core/Configuration/ConfigService.cs b/src/NzbDrone.Core/Configuration/ConfigService.cs index 6aa7c5448..239f000d6 100644 --- a/src/NzbDrone.Core/Configuration/ConfigService.cs +++ b/src/NzbDrone.Core/Configuration/ConfigService.cs @@ -185,6 +185,7 @@ namespace NzbDrone.Core.Configuration set { SetValue("DownloadClientHistoryLimit", value); } } + // TODO: Rename to 'Skip Free Space Check' public bool SkipFreeSpaceCheckWhenImporting { get { return GetValueBoolean("SkipFreeSpaceCheckWhenImporting", false); } diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/FreeSpaceSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/FreeSpaceSpecification.cs new file mode 100644 index 000000000..d83629e08 --- /dev/null +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/FreeSpaceSpecification.cs @@ -0,0 +1,66 @@ +using NLog; +using NzbDrone.Common.Disk; +using NzbDrone.Common.Extensions; +using NzbDrone.Core.Configuration; +using NzbDrone.Core.IndexerSearch.Definitions; +using NzbDrone.Core.Parser.Model; + +namespace NzbDrone.Core.DecisionEngine.Specifications +{ + public class FreeSpaceSpecification : IDecisionEngineSpecification + { + private readonly IConfigService _configService; + private readonly IDiskProvider _diskProvider; + private readonly Logger _logger; + + public FreeSpaceSpecification(IConfigService configService, IDiskProvider diskProvider, Logger logger) + { + _configService = configService; + _diskProvider = diskProvider; + _logger = logger; + } + + public SpecificationPriority Priority => SpecificationPriority.Default; + public RejectionType Type => RejectionType.Permanent; + + public Decision IsSatisfiedBy(RemoteAlbum subject, SearchCriteriaBase searchCriteria) + { + if (_configService.SkipFreeSpaceCheckWhenImporting) + { + _logger.Debug("Skipping free space check"); + return Decision.Accept(); + } + + var size = subject.Release.Size; + var freeSpace = _diskProvider.GetAvailableSpace(subject.Artist.Path); + + if (!freeSpace.HasValue) + { + _logger.Debug("Unable to get available space for {0}. Skipping", subject.Artist.Path); + + return Decision.Accept(); + } + + var minimumSpace = _configService.MinimumFreeSpaceWhenImporting.Megabytes(); + var remainingSpace = freeSpace.Value - size; + + if (remainingSpace <= 0) + { + var message = "Importing after download will exceed available disk space"; + + _logger.Debug(message); + return Decision.Reject(message); + } + + if (remainingSpace < minimumSpace) + { + var message = $"Not enough free space ({minimumSpace.SizeSuffix()}) to import after download: {remainingSpace.SizeSuffix()}. (Settings: Media Management: Minimum Free Space)"; + + _logger.Debug(message); + return Decision.Reject(message); + } + + return Decision.Accept(); + } + } +} diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 0936742c7..81cdb9c3f 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -1127,7 +1127,7 @@ "SizeLimit": "Size Limit", "SizeOnDisk": "Size on Disk", "SkipFreeSpaceCheck": "Skip Free Space Check", - "SkipFreeSpaceCheckWhenImportingHelpText": "Use when {appName} is unable to detect free space of your root folder during file import", + "SkipFreeSpaceCheckHelpText": "Use when {appName} is unable to detect free space of your root folder", "SkipRedownload": "Skip Redownload", "SkipRedownloadHelpText": "Prevents {appName} from trying download alternative releases for the removed items", "Small": "Small", From ccce4f5cc0d43888c28fc771dba6febfff05bba4 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 18 Sep 2024 01:26:48 +0300 Subject: [PATCH 044/275] New: Show warning in queue if download contains executable or archive file and no audio file was detected (#5106) * Improve handling of releases without audio files New: Show warning in queue if download contains executable or archive file and no audio file was detected (cherry picked from commit b15b6a079846b21cac8476820fce9cde81732291) * New: Add additional archive exentions (cherry picked from commit 750a9353f82da4e016bee25e0c625cd6d8613b57) --------- Co-authored-by: Mark McDowall --- .../DownloadedTracksImportServiceFixture.cs | 68 +++++++++++++++++++ .../Download/CompletedDownloadService.cs | 12 ++++ .../DownloadedTracksImportService.cs | 32 ++++++++- .../MediaFiles/FileExtensions.cs | 36 ++++++++++ 4 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 src/NzbDrone.Core/MediaFiles/FileExtensions.cs diff --git a/src/NzbDrone.Core.Test/MediaFiles/DownloadedTracksImportServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DownloadedTracksImportServiceFixture.cs index 555a7492c..9b433b553 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DownloadedTracksImportServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DownloadedTracksImportServiceFixture.cs @@ -336,6 +336,74 @@ namespace NzbDrone.Core.Test.MediaFiles DiskProvider.FolderExists(_subFolders[0]).Should().BeTrue(); } + [Test] + public void should_return_rejection_if_nothing_imported_and_contains_rar_file() + { + GivenValidArtist(); + + var path = @"C:\Test\Unsorted\Artist.Title-Album.Title.2017-Lidarr".AsOsAgnostic(); + var imported = new List>(); + + Mocker.GetMock() + .Setup(s => s.FolderExists(path)) + .Returns(true); + + Mocker.GetMock() + .Setup(s => s.GetDirectoryInfo(It.IsAny())) + .Returns(DiskProvider.GetDirectoryInfo(path)); + + Mocker.GetMock() + .Setup(v => v.GetImportDecisions(It.IsAny>(), It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(imported); + + Mocker.GetMock() + .Setup(s => s.Import(It.IsAny>>(), true, null, ImportMode.Auto)) + .Returns(imported.Select(i => new ImportResult(i)).ToList()); + + Mocker.GetMock() + .Setup(s => s.GetFiles(It.IsAny(), true)) + .Returns(new[] { _audioFiles.First().Replace(".ext", ".rar") }); + + var result = Subject.ProcessPath(path); + + result.Count.Should().Be(1); + result.First().Result.Should().Be(ImportResultType.Rejected); + } + + [Test] + public void should_return_rejection_if_nothing_imported_and_contains_executable_file() + { + GivenValidArtist(); + + var path = @"C:\Test\Unsorted\Artist.Title-Album.Title.2017-Lidarr".AsOsAgnostic(); + var imported = new List>(); + + Mocker.GetMock() + .Setup(s => s.FolderExists(path)) + .Returns(true); + + Mocker.GetMock() + .Setup(s => s.GetDirectoryInfo(It.IsAny())) + .Returns(DiskProvider.GetDirectoryInfo(path)); + + Mocker.GetMock() + .Setup(v => v.GetImportDecisions(It.IsAny>(), It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(imported); + + Mocker.GetMock() + .Setup(s => s.Import(It.IsAny>>(), true, null, ImportMode.Auto)) + .Returns(imported.Select(i => new ImportResult(i)).ToList()); + + Mocker.GetMock() + .Setup(s => s.GetFiles(It.IsAny(), true)) + .Returns(new[] { _audioFiles.First().Replace(".ext", ".exe") }); + + var result = Subject.ProcessPath(path); + + result.Count.Should().Be(1); + result.First().Result.Should().Be(ImportResultType.Rejected); + } + private void VerifyNoImport() { Mocker.GetMock().Verify(c => c.Import(It.IsAny>>(), true, null, ImportMode.Auto), diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index 0f27bda99..eca048e78 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -135,6 +135,18 @@ namespace NzbDrone.Core.Download return; } + if (importResults.Count == 1) + { + var firstResult = importResults.First(); + + if (firstResult.Result == ImportResultType.Rejected && firstResult.ImportDecision.Item == null) + { + trackedDownload.Warn(new TrackedDownloadStatusMessage(firstResult.Errors.First(), new List())); + + return; + } + } + var statusMessages = new List { new TrackedDownloadStatusMessage("One or more albums expected in this release were not imported or missing", new List()) diff --git a/src/NzbDrone.Core/MediaFiles/DownloadedTracksImportService.cs b/src/NzbDrone.Core/MediaFiles/DownloadedTracksImportService.cs index bf64d64fa..b3ea932d8 100644 --- a/src/NzbDrone.Core/MediaFiles/DownloadedTracksImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/DownloadedTracksImportService.cs @@ -177,10 +177,12 @@ namespace NzbDrone.Core.MediaFiles if (_artistService.ArtistPathExists(directoryInfo.FullName)) { _logger.Warn("Unable to process folder that is mapped to an existing artist"); - return new List(); + return new List + { + RejectionResult("Import path is mapped to an artist folder") + }; } - var cleanedUpName = GetCleanedUpFolderName(directoryInfo.Name); var folderInfo = Parser.Parser.ParseAlbumTitle(directoryInfo.Name); var audioFiles = _diskScanService.FilterFiles(directoryInfo.FullName, _diskScanService.GetAudioFiles(directoryInfo.FullName)); @@ -240,6 +242,10 @@ namespace NzbDrone.Core.MediaFiles _logger.Debug(e, "Unable to delete folder after importing: {0}", e.Message); } } + else if (importResults.Empty()) + { + importResults.AddIfNotNull(CheckEmptyResultForIssue(directoryInfo.FullName)); + } return importResults; } @@ -341,6 +347,28 @@ namespace NzbDrone.Core.MediaFiles return new ImportResult(new ImportDecision(localTrack, new Rejection("Unknown Artist")), message); } + private ImportResult RejectionResult(string message) + { + return new ImportResult(new ImportDecision(null, new Rejection(message)), message); + } + + private ImportResult CheckEmptyResultForIssue(string folder) + { + var files = _diskProvider.GetFiles(folder, true).ToList(); + + if (files.Any(file => FileExtensions.ExecutableExtensions.Contains(Path.GetExtension(file)))) + { + return RejectionResult("Caution: Found executable file"); + } + + if (files.Any(file => FileExtensions.ArchiveExtensions.Contains(Path.GetExtension(file)))) + { + return RejectionResult("Found archive file, might need to be extracted"); + } + + return null; + } + private void LogInaccessiblePathError(string path) { if (_runtimeInfo.IsWindowsService) diff --git a/src/NzbDrone.Core/MediaFiles/FileExtensions.cs b/src/NzbDrone.Core/MediaFiles/FileExtensions.cs new file mode 100644 index 000000000..77d787645 --- /dev/null +++ b/src/NzbDrone.Core/MediaFiles/FileExtensions.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; + +namespace NzbDrone.Core.MediaFiles +{ + internal static class FileExtensions + { + private static List _archiveExtensions = new List + { + ".7z", + ".bz2", + ".gz", + ".r00", + ".rar", + ".tar.bz2", + ".tar.gz", + ".tar", + ".tb2", + ".tbz2", + ".tgz", + ".zip", + ".zipx" + }; + + private static List _executableExtensions = new List + { + ".exe", + ".bat", + ".cmd", + ".sh" + }; + + public static HashSet ArchiveExtensions => new HashSet(_archiveExtensions, StringComparer.OrdinalIgnoreCase); + public static HashSet ExecutableExtensions => new HashSet(_executableExtensions, StringComparer.OrdinalIgnoreCase); + } +} From 3e5af06622bf84e543374cbc3a1fe2547b5f8d94 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 19 Sep 2024 19:28:07 -0700 Subject: [PATCH 045/275] Fixed: Unable to login when instance name contained brackets --- .../Authentication/AuthenticationBuilderExtensions.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Lidarr.Http/Authentication/AuthenticationBuilderExtensions.cs b/src/Lidarr.Http/Authentication/AuthenticationBuilderExtensions.cs index 752e39ce6..f73bbeb13 100644 --- a/src/Lidarr.Http/Authentication/AuthenticationBuilderExtensions.cs +++ b/src/Lidarr.Http/Authentication/AuthenticationBuilderExtensions.cs @@ -1,5 +1,6 @@ using System; -using System.Web; +using System.Text.RegularExpressions; +using Diacritical; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.Extensions.DependencyInjection; @@ -10,6 +11,8 @@ namespace Lidarr.Http.Authentication { public static class AuthenticationBuilderExtensions { + private static readonly Regex CookieNameRegex = new Regex(@"[^a-z0-9]+", RegexOptions.Compiled | RegexOptions.IgnoreCase); + public static AuthenticationBuilder AddApiKey(this AuthenticationBuilder authenticationBuilder, string name, Action options) { return authenticationBuilder.AddScheme(name, options); @@ -35,8 +38,10 @@ namespace Lidarr.Http.Authentication services.AddOptions(AuthenticationType.Forms.ToString()) .Configure((options, configFileProvider) => { - // Url Encode the cookie name to account for spaces or other invalid characters in the configured instance name - var instanceName = HttpUtility.UrlEncode(configFileProvider.InstanceName); + // Replace diacritics and replace non-word characters to ensure cookie name doesn't contain any valid URL characters not allowed in cookie names + var instanceName = configFileProvider.InstanceName; + instanceName = instanceName.RemoveDiacritics(); + instanceName = CookieNameRegex.Replace(instanceName, string.Empty); options.Cookie.Name = $"{instanceName}Auth"; options.AccessDeniedPath = "/login?loginFailed=true"; From 34c9300cbf8958a4dc56143775324a88aa56104b Mon Sep 17 00:00:00 2001 From: momo Date: Sat, 21 Sep 2024 19:15:51 +0200 Subject: [PATCH 046/275] Fix description for API key as query parameter (cherry picked from commit 30c36fdc3baa686102ff124833c7963fc786f251) --- src/NzbDrone.Host/Startup.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Host/Startup.cs b/src/NzbDrone.Host/Startup.cs index 84f2a3fb6..35e5d7861 100644 --- a/src/NzbDrone.Host/Startup.cs +++ b/src/NzbDrone.Host/Startup.cs @@ -136,7 +136,7 @@ namespace NzbDrone.Host Name = "apikey", Type = SecuritySchemeType.ApiKey, Scheme = "apiKey", - Description = "Apikey passed as header", + Description = "Apikey passed as query parameter", In = ParameterLocation.Query, Reference = new OpenApiReference { From 21d9ecccd6a409fad8881fe81d75f9e5f1ddd100 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 22 Sep 2024 04:38:55 +0300 Subject: [PATCH 047/275] Fixed: Improve validation for individual album adding --- src/Lidarr.Api.V1/Albums/AlbumController.cs | 41 ++++++++++++++++--- src/Lidarr.Api.V1/Albums/AlbumResource.cs | 4 +- .../Validation/Paths/AlbumExistsValidator.cs | 29 +++++++++++++ 3 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 src/NzbDrone.Core/Validation/Paths/AlbumExistsValidator.cs diff --git a/src/Lidarr.Api.V1/Albums/AlbumController.cs b/src/Lidarr.Api.V1/Albums/AlbumController.cs index 7028e8d6d..82f8bc068 100644 --- a/src/Lidarr.Api.V1/Albums/AlbumController.cs +++ b/src/Lidarr.Api.V1/Albums/AlbumController.cs @@ -42,6 +42,14 @@ namespace Lidarr.Api.V1.Albums IMapCoversToLocal coverMapper, IUpgradableSpecification upgradableSpecification, IBroadcastSignalRMessage signalRBroadcaster, + RootFolderValidator rootFolderValidator, + MappedNetworkDriveValidator mappedNetworkDriveValidator, + ArtistPathValidator artistPathValidator, + ArtistAncestorValidator artistAncestorValidator, + RecycleBinValidator recycleBinValidator, + SystemFolderValidator systemFolderValidator, + AlbumExistsValidator albumExistsValidator, + RootFolderExistsValidator rootFolderExistsValidator, QualityProfileExistsValidator qualityProfileExistsValidator, MetadataProfileExistsValidator metadataProfileExistsValidator) @@ -51,11 +59,34 @@ namespace Lidarr.Api.V1.Albums _releaseService = releaseService; _addAlbumService = addAlbumService; - PostValidator.RuleFor(s => s.ForeignAlbumId).NotEmpty(); - PostValidator.RuleFor(s => s.Artist.QualityProfileId).SetValidator(qualityProfileExistsValidator); - PostValidator.RuleFor(s => s.Artist.MetadataProfileId).SetValidator(metadataProfileExistsValidator); - PostValidator.RuleFor(s => s.Artist.RootFolderPath).IsValidPath().When(s => s.Artist.Path.IsNullOrWhiteSpace()); - PostValidator.RuleFor(s => s.Artist.ForeignArtistId).NotEmpty(); + PostValidator.RuleFor(s => s.ForeignAlbumId).NotEmpty().SetValidator(albumExistsValidator); + PostValidator.RuleFor(s => s.Artist).NotNull(); + PostValidator.RuleFor(s => s.Artist.ForeignArtistId).NotEmpty().When(s => s.Artist != null); + + PostValidator.RuleFor(s => s.Artist.QualityProfileId).Cascade(CascadeMode.Stop) + .ValidId() + .SetValidator(qualityProfileExistsValidator) + .When(s => s.Artist != null); + + PostValidator.RuleFor(s => s.Artist.MetadataProfileId).Cascade(CascadeMode.Stop) + .ValidId() + .SetValidator(metadataProfileExistsValidator) + .When(s => s.Artist != null); + + PostValidator.RuleFor(s => s.Artist.Path).Cascade(CascadeMode.Stop) + .IsValidPath() + .SetValidator(rootFolderValidator) + .SetValidator(mappedNetworkDriveValidator) + .SetValidator(artistPathValidator) + .SetValidator(artistAncestorValidator) + .SetValidator(recycleBinValidator) + .SetValidator(systemFolderValidator) + .When(s => s.Artist != null && s.Artist.Path.IsNotNullOrWhiteSpace()); + + PostValidator.RuleFor(s => s.Artist.RootFolderPath) + .IsValidPath() + .SetValidator(rootFolderExistsValidator) + .When(s => s.Artist != null && s.Artist.Path.IsNullOrWhiteSpace()); } [HttpGet] diff --git a/src/Lidarr.Api.V1/Albums/AlbumResource.cs b/src/Lidarr.Api.V1/Albums/AlbumResource.cs index 072fb2d27..33ff026c9 100644 --- a/src/Lidarr.Api.V1/Albums/AlbumResource.cs +++ b/src/Lidarr.Api.V1/Albums/AlbumResource.cs @@ -110,8 +110,8 @@ namespace Lidarr.Api.V1.Albums AlbumType = resource.AlbumType, Monitored = resource.Monitored, AnyReleaseOk = resource.AnyReleaseOk, - AlbumReleases = resource.Releases.ToModel(), - AddOptions = resource.AddOptions, + AlbumReleases = resource.Releases?.ToModel() ?? new List(), + AddOptions = resource.AddOptions ?? new AddAlbumOptions(), Artist = artist, ArtistMetadata = artist.Metadata.Value }; diff --git a/src/NzbDrone.Core/Validation/Paths/AlbumExistsValidator.cs b/src/NzbDrone.Core/Validation/Paths/AlbumExistsValidator.cs new file mode 100644 index 000000000..6b583cbf0 --- /dev/null +++ b/src/NzbDrone.Core/Validation/Paths/AlbumExistsValidator.cs @@ -0,0 +1,29 @@ +using FluentValidation.Validators; +using NzbDrone.Core.Music; + +namespace NzbDrone.Core.Validation.Paths +{ + public class AlbumExistsValidator : PropertyValidator + { + private readonly IAlbumService _albumService; + + public AlbumExistsValidator(IAlbumService albumService) + { + _albumService = albumService; + } + + protected override string GetDefaultMessageTemplate() => "This album has already been added."; + + protected override bool IsValid(PropertyValidatorContext context) + { + if (context.PropertyValue == null) + { + return true; + } + + var foreignAlbumId = context.PropertyValue.ToString(); + + return _albumService.FindById(foreignAlbumId) == null; + } + } +} From b67533bccff38bed0a138a55e10732ce9750193b Mon Sep 17 00:00:00 2001 From: Servarr Date: Sun, 22 Sep 2024 01:55:25 +0000 Subject: [PATCH 048/275] Automated API Docs update --- src/Lidarr.Api.V1/openapi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index 512e014e2..047dac7b6 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -13048,7 +13048,7 @@ }, "apikey": { "type": "apiKey", - "description": "Apikey passed as header", + "description": "Apikey passed as query parameter", "name": "apikey", "in": "query" } From b7e5a745a1e4e9279a302f4bac7176d3af1a7376 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 22 Sep 2024 07:45:45 +0300 Subject: [PATCH 049/275] Bump version to 2.6.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index cac455b91..e7877cc46 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.6.1' + majorVersion: '2.6.2' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 73fddd5201c6bf7e8663a950800debc91040c2f3 Mon Sep 17 00:00:00 2001 From: Emmanuel Ferdman Date: Sun, 22 Sep 2024 17:15:08 +0300 Subject: [PATCH 050/275] Update license reference Signed-off-by: Emmanuel Ferdman --- src/Lidarr.Api.V1/openapi.json | 2 +- src/NzbDrone.Host/Startup.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index 047dac7b6..3ee3b6367 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -5,7 +5,7 @@ "description": "Lidarr API docs", "license": { "name": "GPL-3.0", - "url": "https://github.com/Lidarr/Lidarr/blob/develop/LICENSE" + "url": "https://github.com/Lidarr/Lidarr/blob/develop/LICENSE.md" }, "version": "1.0.0" }, diff --git a/src/NzbDrone.Host/Startup.cs b/src/NzbDrone.Host/Startup.cs index 35e5d7861..75f393726 100644 --- a/src/NzbDrone.Host/Startup.cs +++ b/src/NzbDrone.Host/Startup.cs @@ -106,7 +106,7 @@ namespace NzbDrone.Host License = new OpenApiLicense { Name = "GPL-3.0", - Url = new Uri("https://github.com/Lidarr/Lidarr/blob/develop/LICENSE") + Url = new Uri("https://github.com/Lidarr/Lidarr/blob/develop/LICENSE.md") } }); From 00cca22dc7957a6475331836e6e0f31ae6616b50 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 23 Sep 2024 03:47:55 +0300 Subject: [PATCH 051/275] Fixed: Adding individual albums for existing artists --- src/Lidarr.Api.V1/Albums/AlbumController.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Lidarr.Api.V1/Albums/AlbumController.cs b/src/Lidarr.Api.V1/Albums/AlbumController.cs index 82f8bc068..149ca51fd 100644 --- a/src/Lidarr.Api.V1/Albums/AlbumController.cs +++ b/src/Lidarr.Api.V1/Albums/AlbumController.cs @@ -44,7 +44,6 @@ namespace Lidarr.Api.V1.Albums IBroadcastSignalRMessage signalRBroadcaster, RootFolderValidator rootFolderValidator, MappedNetworkDriveValidator mappedNetworkDriveValidator, - ArtistPathValidator artistPathValidator, ArtistAncestorValidator artistAncestorValidator, RecycleBinValidator recycleBinValidator, SystemFolderValidator systemFolderValidator, @@ -77,7 +76,6 @@ namespace Lidarr.Api.V1.Albums .IsValidPath() .SetValidator(rootFolderValidator) .SetValidator(mappedNetworkDriveValidator) - .SetValidator(artistPathValidator) .SetValidator(artistAncestorValidator) .SetValidator(recycleBinValidator) .SetValidator(systemFolderValidator) From b14c647c86b3276ee44b82309f227d4328559572 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 25 Sep 2024 05:08:51 +0300 Subject: [PATCH 052/275] Display naming example errors when all fields are empty (cherry picked from commit 768af433d1655c587a9eee9b100f306ba4345f88) --- .../src/Settings/MediaManagement/Naming/NamingConnector.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js b/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js index 914e8d4c5..8f96fabfb 100644 --- a/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js +++ b/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js @@ -1,4 +1,3 @@ -import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; @@ -15,11 +14,11 @@ function createMapStateToProps() { (state) => state.settings.advancedSettings, (state) => state.settings.namingExamples, createSettingsSectionSelector(SECTION), - (advancedSettings, examples, sectionSettings) => { + (advancedSettings, namingExamples, sectionSettings) => { return { advancedSettings, - examples: examples.item, - examplesPopulated: !_.isEmpty(examples.item), + examples: namingExamples.item, + examplesPopulated: namingExamples.isPopulated, ...sectionSettings }; } From af4ff004768800440de3c06af8aa7bd2b1f4cdcd Mon Sep 17 00:00:00 2001 From: Robin Dadswell <19610103+RobinDadswell@users.noreply.github.com> Date: Sat, 28 Sep 2024 01:26:29 +0100 Subject: [PATCH 053/275] Fixed: Telegram log message including token (cherry picked from commit a7cb264cc8013d9a56aee7d5e41acfd76cde5f96) --- .../InstrumentationTests/CleanseLogMessageFixture.cs | 4 ++++ src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs b/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs index 8f9db6b06..3ee34afef 100644 --- a/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs +++ b/src/NzbDrone.Common.Test/InstrumentationTests/CleanseLogMessageFixture.cs @@ -101,6 +101,10 @@ namespace NzbDrone.Common.Test.InstrumentationTests [TestCase(@"https://discord.com/api/webhooks/mySecret")] [TestCase(@"https://discord.com/api/webhooks/mySecret/01233210")] + // Telegram + [TestCase(@"https://api.telegram.org/bot1234567890:mySecret/sendmessage: chat_id=123456&parse_mode=HTML&text=")] + [TestCase(@"https://api.telegram.org/bot1234567890:mySecret/")] + public void should_clean_message(string message) { var cleansedMessage = CleanseLogMessage.Cleanse(message); diff --git a/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs b/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs index afa9154ce..f619497d3 100644 --- a/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs +++ b/src/NzbDrone.Common/Instrumentation/CleanseLogMessage.cs @@ -63,7 +63,10 @@ namespace NzbDrone.Common.Instrumentation new (@",""rss[- _]?key"":""(?[^&=]+?)"",", RegexOptions.Compiled | RegexOptions.IgnoreCase), // Discord - new (@"discord.com/api/webhooks/((?[\w-]+)/)?(?[\w-]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase) + new (@"discord.com/api/webhooks/((?[\w-]+)/)?(?[\w-]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase), + + // Telegram + new (@"api.telegram.org/bot(?[\d]+):(?[\w-]+)/", RegexOptions.Compiled | RegexOptions.IgnoreCase) }; private static readonly Regex CleanseRemoteIPRegex = new (@"(?:Auth-\w+(? Date: Sun, 29 Sep 2024 08:19:05 +0300 Subject: [PATCH 054/275] Bump version to 2.6.3 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e7877cc46..75f1b81c7 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.6.2' + majorVersion: '2.6.3' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 715274bcc7d489346faafc4cbb89d64a1151bffe Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 2 Oct 2024 09:35:45 +0300 Subject: [PATCH 055/275] Improve indexer name for RED --- .../Indexers/FileList/FileListSettings.cs | 14 +++++++------- src/NzbDrone.Core/Indexers/Gazelle/Gazelle.cs | 1 - src/NzbDrone.Core/Indexers/Redacted/Redacted.cs | 2 +- .../Indexers/Redacted/RedactedParser.cs | 3 ++- .../Indexers/Redacted/RedactedSettings.cs | 6 +++++- src/NzbDrone.Core/Localization/Core/en.json | 2 ++ 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/FileList/FileListSettings.cs b/src/NzbDrone.Core/Indexers/FileList/FileListSettings.cs index 09eca5d4f..2f587e6ef 100644 --- a/src/NzbDrone.Core/Indexers/FileList/FileListSettings.cs +++ b/src/NzbDrone.Core/Indexers/FileList/FileListSettings.cs @@ -19,7 +19,7 @@ namespace NzbDrone.Core.Indexers.FileList public class FileListSettings : ITorrentIndexerSettings { - private static readonly FileListSettingsValidator Validator = new FileListSettingsValidator(); + private static readonly FileListSettingsValidator Validator = new (); public FileListSettings() { @@ -33,15 +33,15 @@ namespace NzbDrone.Core.Indexers.FileList }; } - [FieldDefinition(0, Label = "Username", Privacy = PrivacyLevel.UserName)] + [FieldDefinition(0, Label = "IndexerSettingsApiUrl", Advanced = true, HelpTextWarning = "IndexerSettingsApiUrlHelpText")] + public string BaseUrl { get; set; } + + [FieldDefinition(1, Label = "Username", Privacy = PrivacyLevel.UserName)] public string Username { get; set; } - [FieldDefinition(1, Label = "Passkey", Privacy = PrivacyLevel.ApiKey)] + [FieldDefinition(2, Label = "Passkey", Privacy = PrivacyLevel.ApiKey)] public string Passkey { get; set; } - [FieldDefinition(3, Label = "API URL", Advanced = true, HelpText = "Do not change this unless you know what you're doing. Since your API key will be sent to that host.")] - public string BaseUrl { get; set; } - [FieldDefinition(4, Label = "Categories", Type = FieldType.Select, SelectOptions = typeof(FileListCategories), HelpText = "Categories for use in search and feeds")] public IEnumerable Categories { get; set; } @@ -52,7 +52,7 @@ namespace NzbDrone.Core.Indexers.FileList public int MinimumSeeders { get; set; } [FieldDefinition(7)] - public SeedCriteriaSettings SeedCriteria { get; set; } = new SeedCriteriaSettings(); + public SeedCriteriaSettings SeedCriteria { get; set; } = new (); [FieldDefinition(8, Type = FieldType.Checkbox, Label = "IndexerSettingsRejectBlocklistedTorrentHashes", HelpText = "IndexerSettingsRejectBlocklistedTorrentHashesHelpText", Advanced = true)] public bool RejectBlocklistedTorrentHashesWhileGrabbing { get; set; } diff --git a/src/NzbDrone.Core/Indexers/Gazelle/Gazelle.cs b/src/NzbDrone.Core/Indexers/Gazelle/Gazelle.cs index 3ed452a57..dac760cb7 100644 --- a/src/NzbDrone.Core/Indexers/Gazelle/Gazelle.cs +++ b/src/NzbDrone.Core/Indexers/Gazelle/Gazelle.cs @@ -68,7 +68,6 @@ namespace NzbDrone.Core.Indexers.Gazelle get { yield return GetDefinition("Orpheus Network", GetSettings("https://orpheus.network")); - yield return GetDefinition("Not What CD", GetSettings("https://notwhat.cd")); } } diff --git a/src/NzbDrone.Core/Indexers/Redacted/Redacted.cs b/src/NzbDrone.Core/Indexers/Redacted/Redacted.cs index 997a16923..871e0f8bb 100644 --- a/src/NzbDrone.Core/Indexers/Redacted/Redacted.cs +++ b/src/NzbDrone.Core/Indexers/Redacted/Redacted.cs @@ -11,7 +11,7 @@ namespace NzbDrone.Core.Indexers.Redacted { public class Redacted : HttpIndexerBase { - public override string Name => "Redacted"; + public override string Name => "Redacted.ch"; public override DownloadProtocol Protocol => DownloadProtocol.Torrent; public override bool SupportsRss => true; public override bool SupportsSearch => true; diff --git a/src/NzbDrone.Core/Indexers/Redacted/RedactedParser.cs b/src/NzbDrone.Core/Indexers/Redacted/RedactedParser.cs index c3f09baa3..6cdf8c7a0 100644 --- a/src/NzbDrone.Core/Indexers/Redacted/RedactedParser.cs +++ b/src/NzbDrone.Core/Indexers/Redacted/RedactedParser.cs @@ -55,12 +55,13 @@ namespace NzbDrone.Core.Indexers.Redacted var id = torrent.TorrentId; var title = WebUtility.HtmlDecode(GetTitle(result, torrent)); var infoUrl = GetInfoUrl(result.GroupId, id); + var isFreeLeech = torrent.IsFreeLeech || torrent.IsNeutralLeech || torrent.IsFreeload || torrent.IsPersonalFreeLeech; torrentInfos.Add(new GazelleInfo { Guid = infoUrl, InfoUrl = infoUrl, - DownloadUrl = GetDownloadUrl(id, !torrent.IsFreeLeech && !torrent.IsNeutralLeech && !torrent.IsFreeload && !torrent.IsPersonalFreeLeech), + DownloadUrl = GetDownloadUrl(id, torrent.CanUseToken && !isFreeLeech), Title = title, Artist = WebUtility.HtmlDecode(result.Artist), Album = WebUtility.HtmlDecode(result.GroupName), diff --git a/src/NzbDrone.Core/Indexers/Redacted/RedactedSettings.cs b/src/NzbDrone.Core/Indexers/Redacted/RedactedSettings.cs index ed0001780..6fad07bed 100644 --- a/src/NzbDrone.Core/Indexers/Redacted/RedactedSettings.cs +++ b/src/NzbDrone.Core/Indexers/Redacted/RedactedSettings.cs @@ -20,10 +20,14 @@ namespace NzbDrone.Core.Indexers.Redacted public RedactedSettings() { BaseUrl = "https://redacted.ch"; - Categories = new[] { (int)RedactedCategory.Music }; + Categories = new[] + { + (int)RedactedCategory.Music + }; MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS; } + [FieldDefinition(0, Label = "IndexerSettingsApiUrl", Advanced = true, HelpTextWarning = "IndexerSettingsApiUrlHelpText")] public string BaseUrl { get; set; } [FieldDefinition(1, Label = "ApiKey", HelpText = "Generate this in 'Access Settings' in your Redacted profile", Privacy = PrivacyLevel.ApiKey)] diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 81cdb9c3f..56ce142b4 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -601,6 +601,8 @@ "IndexerSearchCheckNoAvailableIndexersMessage": "All search-capable indexers are temporarily unavailable due to recent indexer errors", "IndexerSearchCheckNoInteractiveMessage": "No indexers available with Interactive Search enabled, {appName} will not provide any interactive search results", "IndexerSettings": "Indexer Settings", + "IndexerSettingsApiUrl": "API URL", + "IndexerSettingsApiUrlHelpText": "Do not change this unless you know what you're doing. Since your API key will be sent to that host.", "IndexerSettingsRejectBlocklistedTorrentHashes": "Reject Blocklisted Torrent Hashes While Grabbing", "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "If a torrent is blocked by hash it may not properly be rejected during RSS/Search for some indexers, enabling this will allow it to be rejected after the torrent is grabbed, but before it is sent to the client.", "IndexerSettingsSeedRatio": "Seed Ratio", From f705603211d6ddbf9a4eb430844644db06c792d8 Mon Sep 17 00:00:00 2001 From: ManiMatter <124743318+ManiMatter@users.noreply.github.com> Date: Wed, 2 Oct 2024 21:50:43 +0200 Subject: [PATCH 056/275] Updated .gitignore to remove duplications and add '_temp*' (#5142) --- .gitignore | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 05531517e..ceb71fe1a 100644 --- a/.gitignore +++ b/.gitignore @@ -121,6 +121,7 @@ _artifacts _rawPackage/ _dotTrace* _tests/ +_temp* *.Result.xml coverage*.xml coverage*.json @@ -139,12 +140,6 @@ project.fragment.lock.json artifacts/ **/Properties/launchSettings.json -#VS outout folders -bin -obj -output/* - - # macOS metadata files ._* .DS_Store From 3381ffc311f10029d387b84ee356390b682f0bcb Mon Sep 17 00:00:00 2001 From: ManiMatter <124743318+ManiMatter@users.noreply.github.com> Date: Wed, 2 Oct 2024 21:52:27 +0200 Subject: [PATCH 057/275] New: Last Searched column on Wanted screens (#5084) * Added lastSearchTime to API & Wanted Screens. --- frontend/src/Album/Album.ts | 1 + frontend/src/Store/Actions/wantedActions.js | 12 ++++++++++++ .../src/Wanted/CutoffUnmet/CutoffUnmetConnector.js | 6 ++++-- frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js | 11 +++++++++++ frontend/src/Wanted/Missing/MissingConnector.js | 6 ++++-- frontend/src/Wanted/Missing/MissingRow.js | 11 +++++++++++ src/Lidarr.Api.V1/Albums/AlbumResource.cs | 4 +++- src/NzbDrone.Core/Localization/Core/en.json | 1 + 8 files changed, 47 insertions(+), 5 deletions(-) diff --git a/frontend/src/Album/Album.ts b/frontend/src/Album/Album.ts index 7a645efee..86f1ed5fe 100644 --- a/frontend/src/Album/Album.ts +++ b/frontend/src/Album/Album.ts @@ -20,6 +20,7 @@ interface Album extends ModelBase { monitored: boolean; releaseDate: string; statistics: Statistics; + lastSearchTime?: string; isSaving?: boolean; } diff --git a/frontend/src/Store/Actions/wantedActions.js b/frontend/src/Store/Actions/wantedActions.js index 35aa162d4..61d6f7752 100644 --- a/frontend/src/Store/Actions/wantedActions.js +++ b/frontend/src/Store/Actions/wantedActions.js @@ -52,6 +52,12 @@ export const defaultState = { isSortable: true, isVisible: true }, + { + name: 'albums.lastSearchTime', + label: () => translate('LastSearched'), + isSortable: true, + isVisible: false + }, // { // name: 'status', // label: 'Status', @@ -131,6 +137,12 @@ export const defaultState = { // label: 'Status', // isVisible: true // }, + { + name: 'albums.lastSearchTime', + label: () => translate('LastSearched'), + isSortable: true, + isVisible: false + }, { name: 'actions', columnLabel: () => translate('Actions'), diff --git a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js index dbb4f2235..1dd9870d1 100644 --- a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js +++ b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js @@ -131,13 +131,15 @@ class CutoffUnmetConnector extends Component { onSearchSelectedPress = (selected) => { this.props.executeCommand({ name: commandNames.ALBUM_SEARCH, - albumIds: selected + albumIds: selected, + commandFinished: this.repopulate }); }; onSearchAllCutoffUnmetPress = () => { this.props.executeCommand({ - name: commandNames.CUTOFF_UNMET_ALBUM_SEARCH + name: commandNames.CUTOFF_UNMET_ALBUM_SEARCH, + commandFinished: this.repopulate }); }; diff --git a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js index 785b9b1c1..452e2947a 100644 --- a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js +++ b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js @@ -20,6 +20,7 @@ function CutoffUnmetRow(props) { foreignAlbumId, albumType, title, + lastSearchTime, disambiguation, isSelected, columns, @@ -89,6 +90,15 @@ function CutoffUnmetRow(props) { ); } + if (name === 'albums.lastSearchTime') { + return ( + + ); + } + if (name === 'status') { return ( { this.props.executeCommand({ name: commandNames.ALBUM_SEARCH, - albumIds: selected + albumIds: selected, + commandFinished: this.repopulate }); }; onSearchAllMissingPress = () => { this.props.executeCommand({ - name: commandNames.MISSING_ALBUM_SEARCH + name: commandNames.MISSING_ALBUM_SEARCH, + commandFinished: this.repopulate }); }; diff --git a/frontend/src/Wanted/Missing/MissingRow.js b/frontend/src/Wanted/Missing/MissingRow.js index 0eb1a0452..6c0b5a0c6 100644 --- a/frontend/src/Wanted/Missing/MissingRow.js +++ b/frontend/src/Wanted/Missing/MissingRow.js @@ -17,6 +17,7 @@ function MissingRow(props) { albumType, foreignAlbumId, title, + lastSearchTime, disambiguation, isSelected, columns, @@ -86,6 +87,15 @@ function MissingRow(props) { ); } + if (name === 'albums.lastSearchTime') { + return ( + + ); + } + if (name === 'actions') { return ( Images { get; set; } public List Links { get; set; } + public DateTime? LastSearchTime { get; set; } public AlbumStatisticsResource Statistics { get; set; } public AddAlbumOptions AddOptions { get; set; } public string RemoteCover { get; set; } @@ -86,7 +87,8 @@ namespace Lidarr.Api.V1.Albums SecondaryTypes = model.SecondaryTypes.Select(s => s.Name).ToList(), Releases = model.AlbumReleases?.Value.ToResource() ?? new List(), Media = selectedRelease?.Media.ToResource() ?? new List(), - Artist = model.Artist?.Value.ToResource() + Artist = model.Artist?.Value.ToResource(), + LastSearchTime = model.LastSearchTime }; } diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 56ce142b4..4280a6933 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -646,6 +646,7 @@ "LastAlbum": "Last Album", "LastDuration": "Last Duration", "LastExecution": "Last Execution", + "LastSearched": "Last Searched", "LastUsed": "Last Used", "LastWriteTime": "Last Write Time", "LatestAlbum": "Latest Album", From 4588bc4a7e9809cfa735068128020a6e19588a6d Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 3 Oct 2024 14:47:13 +0300 Subject: [PATCH 058/275] Fixed: Manual importing to nested artist folders --- .../MediaFiles/TrackFileMovingService.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/TrackFileMovingService.cs b/src/NzbDrone.Core/MediaFiles/TrackFileMovingService.cs index fe48b4d6d..68bc6c21d 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackFileMovingService.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackFileMovingService.cs @@ -4,6 +4,7 @@ using System.IO; using NLog; using NzbDrone.Common.Disk; using NzbDrone.Common.EnsureThat; +using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.MediaFiles.TrackImport; @@ -11,6 +12,7 @@ using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Music; using NzbDrone.Core.Organizer; using NzbDrone.Core.Parser.Model; +using NzbDrone.Core.RootFolders; namespace NzbDrone.Core.MediaFiles { @@ -31,6 +33,7 @@ namespace NzbDrone.Core.MediaFiles private readonly IDiskProvider _diskProvider; private readonly IRootFolderWatchingService _rootFolderWatchingService; private readonly IMediaFileAttributeService _mediaFileAttributeService; + private readonly IRootFolderService _rootFolderService; private readonly IEventAggregator _eventAggregator; private readonly IConfigService _configService; private readonly Logger _logger; @@ -43,6 +46,7 @@ namespace NzbDrone.Core.MediaFiles IDiskProvider diskProvider, IRootFolderWatchingService rootFolderWatchingService, IMediaFileAttributeService mediaFileAttributeService, + IRootFolderService rootFolderService, IEventAggregator eventAggregator, IConfigService configService, Logger logger) @@ -55,6 +59,7 @@ namespace NzbDrone.Core.MediaFiles _diskProvider = diskProvider; _rootFolderWatchingService = rootFolderWatchingService; _mediaFileAttributeService = mediaFileAttributeService; + _rootFolderService = rootFolderService; _eventAggregator = eventAggregator; _configService = configService; _logger = logger; @@ -148,11 +153,16 @@ namespace NzbDrone.Core.MediaFiles { var trackFolder = Path.GetDirectoryName(filePath); var artistFolder = artist.Path; - var rootFolder = new OsPath(artistFolder).Directory.FullPath; + var rootFolder = _rootFolderService.GetBestRootFolder(artistFolder); - if (!_diskProvider.FolderExists(rootFolder)) + if (rootFolder == null || rootFolder.Path.IsNullOrWhiteSpace()) { - throw new RootFolderNotFoundException(string.Format("Root folder '{0}' was not found.", rootFolder)); + throw new RootFolderNotFoundException($"Root folder was not found, '{artistFolder}' is not a subdirectory of a defined root folder."); + } + + if (!_diskProvider.FolderExists(rootFolder.Path)) + { + throw new RootFolderNotFoundException($"Root folder '{rootFolder.Path}' was not found."); } var changed = false; From 2caba01123d7585817c32b190365d2f85d7e8366 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 3 Oct 2024 15:18:59 +0300 Subject: [PATCH 059/275] Fix tests for nested artist folders --- .../TrackFileMovingServiceTests/MoveTrackFileFixture.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/NzbDrone.Core.Test/MediaFiles/TrackFileMovingServiceTests/MoveTrackFileFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/TrackFileMovingServiceTests/MoveTrackFileFixture.cs index 41955ea53..4365d0b7b 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/TrackFileMovingServiceTests/MoveTrackFileFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/TrackFileMovingServiceTests/MoveTrackFileFixture.cs @@ -14,6 +14,7 @@ using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Music; using NzbDrone.Core.Organizer; using NzbDrone.Core.Parser.Model; +using NzbDrone.Core.RootFolders; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; @@ -48,6 +49,11 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackFileMovingServiceTests .Returns(@"C:\Test\Music\Artist\Album\File Name.mp3".AsOsAgnostic()); var rootFolder = @"C:\Test\Music\".AsOsAgnostic(); + + Mocker.GetMock() + .Setup(s => s.GetBestRootFolder(It.IsAny())) + .Returns(new RootFolder { Path = rootFolder }); + Mocker.GetMock() .Setup(s => s.FolderExists(rootFolder)) .Returns(true); From ff91589f735ecf093dd201202b5fcbf0af3d4c52 Mon Sep 17 00:00:00 2001 From: Servarr Date: Thu, 3 Oct 2024 12:25:17 +0000 Subject: [PATCH 060/275] Automated API Docs update --- src/Lidarr.Api.V1/openapi.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index 3ee3b6367..12b61c143 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -8490,6 +8490,11 @@ }, "nullable": true }, + "lastSearchTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, "statistics": { "$ref": "#/components/schemas/AlbumStatisticsResource" }, From ba55a4778aa86e66cf94ade8280ffcaa71b20729 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 6 Oct 2024 12:03:57 +0300 Subject: [PATCH 061/275] Bump version to 2.6.4 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 75f1b81c7..d5e25a590 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.6.3' + majorVersion: '2.6.4' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 3a5012655e94d5cc927c3be3dd82ee0661c50325 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 6 Oct 2024 12:38:46 +0300 Subject: [PATCH 062/275] Bump macOS runner version to 13 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d5e25a590..e63a0f130 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -20,7 +20,7 @@ variables: innoVersion: '6.2.0' windowsImage: 'windows-2022' linuxImage: 'ubuntu-20.04' - macImage: 'macOS-12' + macImage: 'macOS-13' trigger: branches: From bd7d25f963b27153655bf5ea1258e02c78bc440e Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 7 Oct 2024 16:46:41 +0300 Subject: [PATCH 063/275] Fixed: Sorting by title and release dates in Select Album modal Fixes #5145 Closes #5125 Co-authored-by: Mark McDowall --- .../Album/SelectAlbumModalContent.js | 58 ++++++++----- .../Album/SelectAlbumModalContentConnector.js | 29 +++---- .../Store/Actions/albumSelectionActions.js | 86 +++++++++++++++++++ frontend/src/Store/Actions/index.js | 12 +-- .../Store/Actions/interactiveImportActions.js | 28 ------ 5 files changed, 143 insertions(+), 70 deletions(-) create mode 100644 frontend/src/Store/Actions/albumSelectionActions.js diff --git a/frontend/src/InteractiveImport/Album/SelectAlbumModalContent.js b/frontend/src/InteractiveImport/Album/SelectAlbumModalContent.js index 5f2cc9696..f8c84e54b 100644 --- a/frontend/src/InteractiveImport/Album/SelectAlbumModalContent.js +++ b/frontend/src/InteractiveImport/Album/SelectAlbumModalContent.js @@ -11,6 +11,7 @@ import Scroller from 'Components/Scroller/Scroller'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import { scrollDirections } from 'Helpers/Props'; +import getErrorMessage from 'Utilities/Object/getErrorMessage'; import translate from 'Utilities/String/translate'; import SelectAlbumRow from './SelectAlbumRow'; import styles from './SelectAlbumModalContent.css'; @@ -19,6 +20,7 @@ const columns = [ { name: 'title', label: () => translate('AlbumTitle'), + isSortable: true, isVisible: true }, { @@ -29,6 +31,7 @@ const columns = [ { name: 'releaseDate', label: () => translate('ReleaseDate'), + isSortable: true, isVisible: true }, { @@ -63,16 +66,22 @@ class SelectAlbumModalContent extends Component { render() { const { - items, - onAlbumSelect, - onModalClose, isFetching, - ...otherProps + isPopulated, + error, + items, + sortKey, + sortDirection, + onSortPress, + onAlbumSelect, + onModalClose } = this.props; const filter = this.state.filter; const filterLower = filter.toLowerCase(); + const errorMessage = getErrorMessage(error, 'Unable to load albums'); + return ( @@ -83,27 +92,29 @@ class SelectAlbumModalContent extends Component { className={styles.modalBody} scrollDirection={scrollDirections.NONE} > - { - isFetching && - - } - - - { + {isFetching ? : null} + + {error ?
{errorMessage}
: null} + + + + {isPopulated && !!items.length ? (
{ @@ -122,7 +133,7 @@ class SelectAlbumModalContent extends Component { }
- } + ) : null} @@ -137,8 +148,13 @@ class SelectAlbumModalContent extends Component { } SelectAlbumModalContent.propTypes = { - items: PropTypes.arrayOf(PropTypes.object).isRequired, isFetching: PropTypes.bool.isRequired, + isPopulated: PropTypes.bool.isRequired, + error: PropTypes.object, + items: PropTypes.arrayOf(PropTypes.object).isRequired, + sortKey: PropTypes.string, + sortDirection: PropTypes.string, + onSortPress: PropTypes.func.isRequired, onAlbumSelect: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired }; diff --git a/frontend/src/InteractiveImport/Album/SelectAlbumModalContentConnector.js b/frontend/src/InteractiveImport/Album/SelectAlbumModalContentConnector.js index 12cd88e53..d09da0fca 100644 --- a/frontend/src/InteractiveImport/Album/SelectAlbumModalContentConnector.js +++ b/frontend/src/InteractiveImport/Album/SelectAlbumModalContentConnector.js @@ -3,18 +3,14 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; -import { - clearInteractiveImportAlbums, - fetchInteractiveImportAlbums, - saveInteractiveImportItem, - setInteractiveImportAlbumsSort, - updateInteractiveImportItem } from 'Store/Actions/interactiveImportActions'; +import { clearAlbums, fetchAlbums, setAlbumsSort } from 'Store/Actions/albumSelectionActions'; +import { saveInteractiveImportItem, updateInteractiveImportItem } from 'Store/Actions/interactiveImportActions'; import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector'; import SelectAlbumModalContent from './SelectAlbumModalContent'; function createMapStateToProps() { return createSelector( - createClientSideCollectionSelector('interactiveImport.albums'), + createClientSideCollectionSelector('albumSelection'), (albums) => { return albums; } @@ -22,9 +18,9 @@ function createMapStateToProps() { } const mapDispatchToProps = { - fetchInteractiveImportAlbums, - setInteractiveImportAlbumsSort, - clearInteractiveImportAlbums, + fetchAlbums, + setAlbumsSort, + clearAlbums, updateInteractiveImportItem, saveInteractiveImportItem }; @@ -39,20 +35,20 @@ class SelectAlbumModalContentConnector extends Component { artistId } = this.props; - this.props.fetchInteractiveImportAlbums({ artistId }); + this.props.fetchAlbums({ artistId }); } componentWillUnmount() { // This clears the albums for the queue and hides the queue // We'll need another place to store albums for manual import - this.props.clearInteractiveImportAlbums(); + this.props.clearAlbums(); } // // Listeners onSortPress = (sortKey, sortDirection) => { - this.props.setInteractiveImportAlbumsSort({ sortKey, sortDirection }); + this.props.setAlbumsSort({ sortKey, sortDirection }); }; onAlbumSelect = (albumId) => { @@ -82,6 +78,7 @@ class SelectAlbumModalContentConnector extends Component { return ( ); @@ -92,9 +89,9 @@ SelectAlbumModalContentConnector.propTypes = { ids: PropTypes.arrayOf(PropTypes.number).isRequired, artistId: PropTypes.number.isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired, - fetchInteractiveImportAlbums: PropTypes.func.isRequired, - setInteractiveImportAlbumsSort: PropTypes.func.isRequired, - clearInteractiveImportAlbums: PropTypes.func.isRequired, + fetchAlbums: PropTypes.func.isRequired, + setAlbumsSort: PropTypes.func.isRequired, + clearAlbums: PropTypes.func.isRequired, saveInteractiveImportItem: PropTypes.func.isRequired, updateInteractiveImportItem: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired diff --git a/frontend/src/Store/Actions/albumSelectionActions.js b/frontend/src/Store/Actions/albumSelectionActions.js new file mode 100644 index 000000000..f19f5b691 --- /dev/null +++ b/frontend/src/Store/Actions/albumSelectionActions.js @@ -0,0 +1,86 @@ +import moment from 'moment'; +import { createAction } from 'redux-actions'; +import { sortDirections } from 'Helpers/Props'; +import { createThunk, handleThunks } from 'Store/thunks'; +import updateSectionState from 'Utilities/State/updateSectionState'; +import createFetchHandler from './Creators/createFetchHandler'; +import createHandleActions from './Creators/createHandleActions'; +import createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer'; + +// +// Variables + +export const section = 'albumSelection'; + +// +// State + +export const defaultState = { + isFetching: false, + isReprocessing: false, + isPopulated: false, + error: null, + sortKey: 'title', + sortDirection: sortDirections.ASCENDING, + items: [], + sortPredicates: { + title: ({ title }) => { + return title.toLocaleLowerCase(); + }, + + releaseDate: function({ releaseDate }, direction) { + if (releaseDate) { + return moment(releaseDate).unix(); + } + + if (direction === sortDirections.DESCENDING) { + return 0; + } + + return Number.MAX_VALUE; + } + } +}; + +export const persistState = [ + 'albumSelection.sortKey', + 'albumSelection.sortDirection' +]; + +// +// Actions Types + +export const FETCH_ALBUMS = 'albumSelection/fetchAlbums'; +export const SET_ALBUMS_SORT = 'albumSelection/setAlbumsSort'; +export const CLEAR_ALBUMS = 'albumSelection/clearAlbums'; + +// +// Action Creators + +export const fetchAlbums = createThunk(FETCH_ALBUMS); +export const setAlbumsSort = createAction(SET_ALBUMS_SORT); +export const clearAlbums = createAction(CLEAR_ALBUMS); + +// +// Action Handlers + +export const actionHandlers = handleThunks({ + [FETCH_ALBUMS]: createFetchHandler(section, '/album') +}); + +// +// Reducers + +export const reducers = createHandleActions({ + + [SET_ALBUMS_SORT]: createSetClientSideCollectionSortReducer(section), + + [CLEAR_ALBUMS]: (state) => { + return updateSectionState(state, section, { + ...defaultState, + sortKey: state.sortKey, + sortDirection: state.sortDirection + }); + } + +}, defaultState, section); diff --git a/frontend/src/Store/Actions/index.js b/frontend/src/Store/Actions/index.js index 85bcc2645..85fda482b 100644 --- a/frontend/src/Store/Actions/index.js +++ b/frontend/src/Store/Actions/index.js @@ -1,5 +1,6 @@ import * as albums from './albumActions'; import * as albumHistory from './albumHistoryActions'; +import * as albumSelection from './albumSelectionActions'; import * as app from './appActions'; import * as artist from './artistActions'; import * as artistHistory from './artistHistoryActions'; @@ -29,14 +30,18 @@ import * as wanted from './wantedActions'; export default [ app, + albums, + albumHistory, + albumSelection, + artist, + artistHistory, + artistIndex, blocklist, captcha, calendar, commands, customFilters, - albums, trackFiles, - albumHistory, history, interactiveImportActions, oAuth, @@ -47,9 +52,6 @@ export default [ providerOptions, queue, releases, - artist, - artistHistory, - artistIndex, search, settings, system, diff --git a/frontend/src/Store/Actions/interactiveImportActions.js b/frontend/src/Store/Actions/interactiveImportActions.js index d174f443b..a250292c5 100644 --- a/frontend/src/Store/Actions/interactiveImportActions.js +++ b/frontend/src/Store/Actions/interactiveImportActions.js @@ -16,7 +16,6 @@ import createSetClientSideCollectionSortReducer from './Creators/Reducers/create export const section = 'interactiveImport'; -const albumsSection = `${section}.albums`; const trackFilesSection = `${section}.trackFiles`; let abortCurrentFetchRequest = null; let abortCurrentRequest = null; @@ -58,15 +57,6 @@ export const defaultState = { } }, - albums: { - isFetching: false, - isPopulated: false, - error: null, - sortKey: 'albumTitle', - sortDirection: sortDirections.ASCENDING, - items: [] - }, - trackFiles: { isFetching: false, isPopulated: false, @@ -97,10 +87,6 @@ export const ADD_RECENT_FOLDER = 'interactiveImport/addRecentFolder'; export const REMOVE_RECENT_FOLDER = 'interactiveImport/removeRecentFolder'; export const SET_INTERACTIVE_IMPORT_MODE = 'interactiveImport/setInteractiveImportMode'; -export const FETCH_INTERACTIVE_IMPORT_ALBUMS = 'interactiveImport/fetchInteractiveImportAlbums'; -export const SET_INTERACTIVE_IMPORT_ALBUMS_SORT = 'interactiveImport/clearInteractiveImportAlbumsSort'; -export const CLEAR_INTERACTIVE_IMPORT_ALBUMS = 'interactiveImport/clearInteractiveImportAlbums'; - export const FETCH_INTERACTIVE_IMPORT_TRACKFILES = 'interactiveImport/fetchInteractiveImportTrackFiles'; export const CLEAR_INTERACTIVE_IMPORT_TRACKFILES = 'interactiveImport/clearInteractiveImportTrackFiles'; @@ -117,10 +103,6 @@ export const addRecentFolder = createAction(ADD_RECENT_FOLDER); export const removeRecentFolder = createAction(REMOVE_RECENT_FOLDER); export const setInteractiveImportMode = createAction(SET_INTERACTIVE_IMPORT_MODE); -export const fetchInteractiveImportAlbums = createThunk(FETCH_INTERACTIVE_IMPORT_ALBUMS); -export const setInteractiveImportAlbumsSort = createAction(SET_INTERACTIVE_IMPORT_ALBUMS_SORT); -export const clearInteractiveImportAlbums = createAction(CLEAR_INTERACTIVE_IMPORT_ALBUMS); - export const fetchInteractiveImportTrackFiles = createThunk(FETCH_INTERACTIVE_IMPORT_TRACKFILES); export const clearInteractiveImportTrackFiles = createAction(CLEAR_INTERACTIVE_IMPORT_TRACKFILES); @@ -253,8 +235,6 @@ export const actionHandlers = handleThunks({ }); }, - [FETCH_INTERACTIVE_IMPORT_ALBUMS]: createFetchHandler(albumsSection, '/album'), - [FETCH_INTERACTIVE_IMPORT_TRACKFILES]: createFetchHandler(trackFilesSection, '/trackFile') }); @@ -336,14 +316,6 @@ export const reducers = createHandleActions({ return Object.assign({}, state, { importMode: payload.importMode }); }, - [SET_INTERACTIVE_IMPORT_ALBUMS_SORT]: createSetClientSideCollectionSortReducer(albumsSection), - - [CLEAR_INTERACTIVE_IMPORT_ALBUMS]: (state) => { - return updateSectionState(state, albumsSection, { - ...defaultState.albums - }); - }, - [CLEAR_INTERACTIVE_IMPORT_TRACKFILES]: (state) => { return updateSectionState(state, trackFilesSection, { ...defaultState.trackFiles From 9850823298ea49fa2373ef0917cde43121a3ff6f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 8 Oct 2024 01:27:22 +0300 Subject: [PATCH 064/275] Fixed: Error updating providers with ID missing from JSON (cherry picked from commit c435fcd685cc97e98d14f747227eefd39e4d1164) --- src/Lidarr.Api.V1/ProviderControllerBase.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Lidarr.Api.V1/ProviderControllerBase.cs b/src/Lidarr.Api.V1/ProviderControllerBase.cs index 078276e06..8d0b88c4a 100644 --- a/src/Lidarr.Api.V1/ProviderControllerBase.cs +++ b/src/Lidarr.Api.V1/ProviderControllerBase.cs @@ -86,9 +86,16 @@ namespace Lidarr.Api.V1 [RestPutById] [Consumes("application/json")] [Produces("application/json")] - public ActionResult UpdateProvider([FromBody] TProviderResource providerResource, [FromQuery] bool forceSave = false) + public ActionResult UpdateProvider([FromRoute] int id, [FromBody] TProviderResource providerResource, [FromQuery] bool forceSave = false) { - var existingDefinition = _providerFactory.Find(providerResource.Id); + // TODO: Remove fallback to Id from body in next API version bump + var existingDefinition = _providerFactory.Find(id) ?? _providerFactory.Find(providerResource.Id); + + if (existingDefinition == null) + { + return NotFound(); + } + var providerDefinition = GetDefinition(providerResource, existingDefinition, true, !forceSave, false); // Comparing via JSON string to eliminate the need for every provider implementation to implement equality checks. @@ -107,7 +114,7 @@ namespace Lidarr.Api.V1 _providerFactory.Update(providerDefinition); } - return Accepted(providerResource.Id); + return Accepted(existingDefinition.Id); } [HttpPut("bulk")] From 1a74118d6bf4264ee81455872fd46adcec589ce4 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Fri, 4 Oct 2024 19:19:12 -0700 Subject: [PATCH 065/275] New: Use 307 redirect for requests missing URL Base (cherry picked from commit 39074b0b1d040969f86d787c2346d5ed5a9f72dc) --- src/Lidarr.Http/Middleware/UrlBaseMiddleware.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Lidarr.Http/Middleware/UrlBaseMiddleware.cs b/src/Lidarr.Http/Middleware/UrlBaseMiddleware.cs index 327f2670d..4bd3d91cf 100644 --- a/src/Lidarr.Http/Middleware/UrlBaseMiddleware.cs +++ b/src/Lidarr.Http/Middleware/UrlBaseMiddleware.cs @@ -20,6 +20,8 @@ namespace Lidarr.Http.Middleware if (_urlBase.IsNotNullOrWhiteSpace() && context.Request.PathBase.Value.IsNullOrWhiteSpace()) { context.Response.Redirect($"{_urlBase}{context.Request.Path}{context.Request.QueryString}"); + context.Response.StatusCode = 307; + return; } From f3cd49a2dadd4028f0643e5e3e5082efea2277f8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 7 Oct 2024 23:19:44 +0000 Subject: [PATCH 066/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Anonymous Co-authored-by: Ardenet <1213193613@qq.com> Co-authored-by: FloatStream <1213193613@qq.com> Co-authored-by: GkhnGRBZ Co-authored-by: Lizandra Candido da Silva Co-authored-by: Mathias Co-authored-by: Weblate Co-authored-by: angelsky11 Co-authored-by: anne Co-authored-by: fordas Co-authored-by: jsain Co-authored-by: liuwqq <843384478@qq.com> Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/de/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/it/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/uk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ar.json | 1 - src/NzbDrone.Core/Localization/Core/bg.json | 1 - src/NzbDrone.Core/Localization/Core/ca.json | 1 - src/NzbDrone.Core/Localization/Core/cs.json | 1 - src/NzbDrone.Core/Localization/Core/da.json | 6 ++-- src/NzbDrone.Core/Localization/Core/de.json | 4 +-- src/NzbDrone.Core/Localization/Core/el.json | 1 - src/NzbDrone.Core/Localization/Core/es.json | 9 +++-- src/NzbDrone.Core/Localization/Core/fi.json | 5 +-- src/NzbDrone.Core/Localization/Core/fr.json | 7 ++-- src/NzbDrone.Core/Localization/Core/he.json | 1 - src/NzbDrone.Core/Localization/Core/hi.json | 1 - src/NzbDrone.Core/Localization/Core/hr.json | 31 +++++++++++++++-- src/NzbDrone.Core/Localization/Core/hu.json | 1 - src/NzbDrone.Core/Localization/Core/is.json | 1 - src/NzbDrone.Core/Localization/Core/it.json | 4 +-- src/NzbDrone.Core/Localization/Core/ja.json | 1 - src/NzbDrone.Core/Localization/Core/ko.json | 1 - src/NzbDrone.Core/Localization/Core/nl.json | 1 - src/NzbDrone.Core/Localization/Core/pl.json | 1 - src/NzbDrone.Core/Localization/Core/pt.json | 1 - .../Localization/Core/pt_BR.json | 11 +++--- src/NzbDrone.Core/Localization/Core/ro.json | 1 - src/NzbDrone.Core/Localization/Core/ru.json | 5 +-- src/NzbDrone.Core/Localization/Core/sv.json | 1 - src/NzbDrone.Core/Localization/Core/th.json | 1 - src/NzbDrone.Core/Localization/Core/tr.json | 7 ++-- src/NzbDrone.Core/Localization/Core/uk.json | 4 +-- src/NzbDrone.Core/Localization/Core/vi.json | 1 - .../Localization/Core/zh_CN.json | 34 +++++++++++-------- 30 files changed, 85 insertions(+), 60 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 398c4f6f1..644783e08 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -96,7 +96,6 @@ "ShowSizeOnDisk": "عرض الحجم على القرص", "ShowUnknownArtistItems": "إظهار عناصر الفيلم غير المعروفة", "SkipFreeSpaceCheck": "تخطي فحص المساحة الخالية", - "SkipFreeSpaceCheckWhenImportingHelpText": "استخدم عندما يتعذر على {appName} اكتشاف مساحة خالية من مجلد جذر الفيلم", "SorryThatArtistCannotBeFound": "آسف ، لا يمكن العثور على هذا الفيلم.", "SSLCertPassword": "كلمة مرور شهادة SSL", "SslCertPasswordHelpText": "كلمة المرور لملف pfx", diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index e6666c83d..d00be7e56 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -433,7 +433,6 @@ "ShowMonitoredHelpText": "Показване на наблюдаваното състояние под плакат", "Size": " Размер", "SkipFreeSpaceCheck": "Пропуснете проверката на свободното пространство", - "SkipFreeSpaceCheckWhenImportingHelpText": "Използвайте, когато {appName} не е в състояние да открие свободно място от основната папка на вашия филм", "SorryThatAlbumCannotBeFound": "За съжаление този филм не може да бъде намерен.", "SorryThatArtistCannotBeFound": "За съжаление този филм не може да бъде намерен.", "Source": "Източник", diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 91a358536..447415532 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -66,7 +66,6 @@ "ShowSizeOnDisk": "Mostra la mida al disc", "ShowUnknownArtistItems": "Mostra elements de pel·lícula desconeguda", "SkipFreeSpaceCheck": "Omet la comprovació d'espai lliure", - "SkipFreeSpaceCheckWhenImportingHelpText": "Utilitzeu-lo quan {appName} no pugui detectar espai lliure a la carpeta arrel de la pel·lícula", "SSLCertPassword": "Contrasenya de certificat SSL", "SslPortHelpTextWarning": "Cal reiniciar perquè tingui efecte", "StartTypingOrSelectAPathBelow": "Comenceu a escriure o seleccioneu un camí a continuació", diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 550abf7ac..5bb406dac 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -240,7 +240,6 @@ "ShowQualityProfile": "Zobrazit profil kvality", "Size": " Velikost", "SkipFreeSpaceCheck": "Přeskočit kontrolu volného prostoru", - "SkipFreeSpaceCheckWhenImportingHelpText": "Použijte, když {appName} nedokáže detekovat volné místo z kořenové složky filmu", "SorryThatAlbumCannotBeFound": "Je nám líto, ale tento film nelze najít.", "SorryThatArtistCannotBeFound": "Je nám líto, ale tento film nelze najít.", "Source": "Zdroj", diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index 8b973fe6d..d110aef64 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -230,7 +230,6 @@ "ShowMonitoredHelpText": "Vis overvåget status under plakat", "Size": " Størrelse", "SkipFreeSpaceCheck": "Spring fri pladscheck over", - "SkipFreeSpaceCheckWhenImportingHelpText": "Brug, når {appName} ikke er i stand til at registrere ledig plads fra din filmrodmappe", "SorryThatAlbumCannotBeFound": "Beklager, den film kan ikke findes.", "SorryThatArtistCannotBeFound": "Beklager, den film kan ikke findes.", "Source": "Kilde", @@ -770,5 +769,8 @@ "BuiltIn": "Indbygget", "Script": "Manuskript", "DeleteSelectedCustomFormats": "Slet brugerdefineret format", - "IncludeCustomFormatWhenRenaming": "Inkluder brugerdefineret format, når du omdøber" + "IncludeCustomFormatWhenRenaming": "Inkluder brugerdefineret format, når du omdøber", + "AddMissing": "Tilføj manglende", + "AddAlbumWithTitle": "Tilføj {albumTitle}", + "AddArtistWithName": "Tilføj {artistName}" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index cab4111c2..003d79a18 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -301,7 +301,6 @@ "ICalLink": "iCal Link", "IconForCutoffUnmet": "Symbol für Schwelle nicht erreicht", "IgnoredAddresses": "Ignorierte Adressen", - "SkipFreeSpaceCheckWhenImportingHelpText": "Aktiviere diese Option wenn es {appName} nicht möglich ist den freien Speicherplatz des Stammverzeichnis deines Künstlers zu erkennen", "SorryThatAlbumCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.", "SorryThatArtistCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.", "Source": "Quelle", @@ -1185,5 +1184,6 @@ "Script": "Skript", "DeleteSelectedCustomFormats": "Benutzerdefiniertes Format löschen", "IncludeCustomFormatWhenRenaming": "Eigenes Format beim umbennen einfügen", - "DeleteSelectedCustomFormatsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Importliste(n) löschen möchten?" + "DeleteSelectedCustomFormatsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Importliste(n) löschen möchten?", + "IndexerSettingsApiUrl": "API-URL" } diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index 6bf94e9a8..068172566 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -181,7 +181,6 @@ "ShowMonitoredHelpText": "Εμφάνιση της παρακολούθησης κατάστασης στην αφίσα", "Size": " Μέγεθος", "SkipFreeSpaceCheck": "Παράλειψη ελέγχου ελεύθερου χώρου", - "SkipFreeSpaceCheckWhenImportingHelpText": "Χρησιμοποιήστε το όταν το {appName} δεν μπορεί να εντοπίσει ελεύθερο χώρο από τον ριζικό φάκελο του καλλιτέχνη", "SorryThatAlbumCannotBeFound": "Δυστυχώς, δεν είναι δυνατή η εύρεση αυτής της ταινίας.", "SorryThatArtistCannotBeFound": "Δυστυχώς, δεν είναι δυνατή η εύρεση αυτής της ταινίας.", "Source": "Πηγή", diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 90d2f995a..b53cd4caa 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -283,7 +283,6 @@ "ShowMonitoredHelpText": "Muestra el estado monitorizado bajo el póster", "Size": " Tamaño", "SkipFreeSpaceCheck": "Saltar comprobación de espacio libre", - "SkipFreeSpaceCheckWhenImportingHelpText": "Se usa cuando {appName} no puede detectar el espacio libre de tu carpeta raíz durante la importación de archivo", "SorryThatAlbumCannotBeFound": "Lo siento, no he encontrado esa película.", "SorryThatArtistCannotBeFound": "Lo siento, no he encontrado esa película.", "Source": "Fuente", @@ -863,7 +862,7 @@ "DownloadClientQbittorrentSettingsContentLayout": "Diseño del contenido", "InfoUrl": "Información de la URL", "InvalidUILanguage": "Su interfaz de usuario está configurada en un idioma no válido, corríjalo y guarde la configuración", - "HealthMessagesInfoBox": "Puede encontrar más información sobre la causa de estos mensajes de comprobación de salud haciendo clic en el enlace wiki (icono de libro) al final de la fila, o comprobando sus [logs]({link}). Si tienes dificultades para interpretar estos mensajes, puedes ponerte en contacto con nuestro servicio de asistencia en los enlaces que aparecen a continuación.", + "HealthMessagesInfoBox": "Puedes encontrar más información sobre la causa de estos mensajes de comprobación de salud haciendo clic en el enlace wiki (icono de libro) al final de la fila, o comprobando tus [registros]({link}). Si tienes dificultades para interpretar estos mensajes, puedes ponerte en contacto con nuestro soporte en los enlaces que aparecen a continuación.", "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Si usar el diseño de contenido configurado de qBittorrent, el diseño original del torrent o siempre crear una subcarpeta (qBittorrent 4.3.2+)", "ChownGroup": "chown grupo", "NoLimitForAnyDuration": "SIn límite para el tiempo de ejecución", @@ -1314,5 +1313,9 @@ "NoCustomFormatsFound": "Ningún formato personalizado encontrado", "DeleteSelectedCustomFormatsMessageText": "¿Estás seguro que quieres borrar los {count} formato(s) personalizado(s) seleccionado(s)?", "LogSizeLimit": "Límite de tamaño de registro", - "LogSizeLimitHelpText": "Máximo tamaño de archivo de registro en MB antes de archivarlo. Predeterminado es 1MB." + "LogSizeLimitHelpText": "Máximo tamaño de archivo de registro en MB antes de archivarlo. Predeterminado es 1MB.", + "SkipFreeSpaceCheckHelpText": "Se usa cuando {appName} no puede detectar el espacio libre de tu carpeta raíz", + "IndexerSettingsApiUrl": "URL de API", + "IndexerSettingsApiUrlHelpText": "No cambie esto a menos que sepa lo que está haciendo. Ya que tu clave API será enviada a ese host.", + "LastSearched": "Último buscado" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 1e8019263..2c6b5442b 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -238,7 +238,6 @@ "Search": "Haku", "Size": " Koko", "SkipFreeSpaceCheck": "Ohita vapaan tilan tarkastus", - "SkipFreeSpaceCheckWhenImportingHelpText": "Käytä kun juurikansion tallennusmedian vapaata tilaa ei tunnisteta tiedostotuonnin yhteydessä.", "WeekColumnHeader": "Viikkosarakkeen otsikko", "ChmodFolder": "chmod-kansio", "UnableToAddANewNotificationPleaseTryAgain": "Kytköksen lisäys epäonnistui. Yritä uudelleen.", @@ -1254,5 +1253,7 @@ "Script": "Skripti", "DeleteSelectedCustomFormats": "Poista mukautettu muoto", "DeleteSelectedCustomFormatsMessageText": "Haluatko varmasti poistaa valitut {count} tuontilistaa?", - "IncludeCustomFormatWhenRenaming": "Sisällytä mukautetut muodot uudelleennimetessä" + "IncludeCustomFormatWhenRenaming": "Sisällytä mukautetut muodot uudelleennimetessä", + "IndexerSettingsApiUrl": "Rajapinnan URL-osoite", + "IndexerSettingsApiUrlHelpText": "Älä muuta tätä, jos et tiedä mitä teet, koska rajapinta-avaimesi lähetetään kyseiselle palvelimelle." } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 7d80be0f7..b47d4e8c4 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -445,7 +445,6 @@ "ShowMonitoredHelpText": "Afficher l'état de surveillance sous le poster", "Size": " Taille", "SkipFreeSpaceCheck": "Ignorer la vérification de l'espace libre", - "SkipFreeSpaceCheckWhenImportingHelpText": "À utiliser lorsque {appName} ne parvient pas à détecter l'espace libre de votre dossier racine lors de l'importation de fichiers", "SorryThatAlbumCannotBeFound": "Désolé, ce film est introuvable.", "SorryThatArtistCannotBeFound": "Désolé, ce film est introuvable.", "Source": "Source", @@ -714,7 +713,7 @@ "IndexerRssHealthCheckNoIndexers": "Aucun indexeur disponible avec la synchronisation RSS activée, {appName} ne récupérera pas automatiquement les nouvelles versions", "IndexerSearchCheckNoAutomaticMessage": "Aucun indexeur disponible avec la recherche automatique activée, {appName} ne fournira aucun résultat de recherche automatique", "IndexerSearchCheckNoAvailableIndexersMessage": "Tous les indexeurs compatibles avec la recherche sont temporairement indisponibles en raison d'erreurs d'indexation récentes", - "IndexerSearchCheckNoInteractiveMessage": "Aucun indexeur n'est disponible avec la recherche interactive activée, {appName} ne fournira aucun résultat de recherche interactive", + "IndexerSearchCheckNoInteractiveMessage": "Aucun indexeur n'est disponible avec la recherche interactive activée, {appName} ne fournira aucun résultats de recherche interactive", "IndexerStatusCheckAllClientMessage": "Tous les indexeurs sont indisponibles en raison d'échecs", "IndexerStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison d'échecs : {0}", "Loading": "Chargement", @@ -1314,5 +1313,7 @@ "ManageCustomFormats": "Gérer les formats personnalisés", "NoCustomFormatsFound": "Aucun format personnalisé n'a été trouvé", "LogSizeLimit": "Limite de taille du journal", - "LogSizeLimitHelpText": "Taille maximale du fichier journal en Mo avant archivage. La valeur par défaut est de 1 Mo." + "LogSizeLimitHelpText": "Taille maximale du fichier journal en Mo avant archivage. La valeur par défaut est de 1 Mo.", + "IndexerSettingsApiUrl": "URL DE L'API", + "IndexerSettingsApiUrlHelpText": "Ne le modifiez pas à moins de savoir ce que vous faites, car votre clé API sera envoyée à cet hôte." } diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index f72031b4e..acafacae6 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -346,7 +346,6 @@ "ShowDateAdded": "הצגת תאריך הוספה", "ShowMonitored": "הצג פיקוח", "ShowMonitoredHelpText": "הצג סטטוס פיקוח תחת פוסטר", - "SkipFreeSpaceCheckWhenImportingHelpText": "השתמש כאשר {appName} אינו מצליח לזהות מקום פנוי מתיקיית שורש הסרט שלך", "SorryThatAlbumCannotBeFound": "מצטערים, הסרט הזה לא נמצא.", "SorryThatArtistCannotBeFound": "מצטערים, הסרט הזה לא נמצא.", "Source": "מָקוֹר", diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index ef1526ae6..a59fa57c4 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -438,7 +438,6 @@ "Search": "खोज", "Size": " आकार", "SkipFreeSpaceCheck": "फ्री स्पेस चेक छोड़ें", - "SkipFreeSpaceCheckWhenImportingHelpText": "जब रेडर आपके मूवी रूट फ़ोल्डर से खाली स्थान का पता लगाने में असमर्थ हो तो उपयोग करें", "SorryThatAlbumCannotBeFound": "क्षमा करें, वह फिल्म नहीं मिल रही है।", "SorryThatArtistCannotBeFound": "क्षमा करें, वह फिल्म नहीं मिल रही है।", "Source": "स्रोत", diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index f30598785..22aa9b042 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -9,7 +9,7 @@ "AddListExclusion": "Dodaj na Listu Isključenja", "AddNew": "Dodaj Novo", "AddQualityProfile": "Dodaj Profil Kvalitete", - "AddRootFolder": "asdf", + "AddRootFolder": "Dodaj Korijensku Mapu", "ApplicationUrlHelpText": "Vanjski URL ove aplikacije uključuje http(s)://, port i URL base", "ApplyTags": "Primjeni Oznake", "AudioInfo": "Informacije o Zvuku", @@ -23,7 +23,7 @@ "CatalogNumber": "broj kataloga", "Details": "detalji", "Discography": "diskografija", - "AddRemotePathMapping": "Daljinsko Mapiranje Portova", + "AddRemotePathMapping": "Dodaj mapiranje mrežne putanje", "Age": "Starost", "Albums": "album", "AlternateTitleslength1Title": "Naslov", @@ -255,5 +255,30 @@ "EditRootFolder": "asdf", "AddImportListExclusionAlbumHelpText": "Spriječi dodavanje ovog filma na {appName} preko listi", "BuiltIn": "Ugrađeno", - "DeleteSelectedCustomFormats": "Kloniraj Prilagođeni Format" + "DeleteSelectedCustomFormats": "Kloniraj Prilagođeni Format", + "AppUpdatedVersion": "{appName} je ažuriran na verziju '{version}', kako bi najnovije promjene bile aktivne potrebno je ponovno učitati {appName}", + "AppUpdated": "{appName} Ažuriran", + "ApplyChanges": "Primjeni Promjene", + "AddConditionImplementation": "Dodaj Uvjet - {implementationName}", + "AddConnection": "Dodaj vezu", + "AddImportList": "Dodaj Listu Za Uvoz", + "AddImportListImplementation": "Dodaj Listu Za Uvoz - {implementationName}", + "AddIndexerImplementation": "Dodaj Indexer - {implementationName}", + "AddReleaseProfile": "Dodaj profil verzije", + "AuthenticationRequired": "Potrebna Autentikacija", + "AuthenticationRequiredPasswordHelpTextWarning": "Unesi novu lozinku", + "AddAutoTag": "Dodaj AutoOznaku", + "AddAutoTagError": "Neuspješno dodavanje automatske oznake, molimo pokušaj ponovno.", + "AddCondition": "Dodaj Uvjet", + "AddConditionError": "Neuspješno dodavanje novog uvjeta, molimo pokušaj ponovno.", + "Any": "BIlo koji", + "AuthenticationRequiredUsernameHelpTextWarning": "Unesi novo korisničko ime", + "AutoRedownloadFailed": "Ponovno preuzimanje neuspješno", + "AddConnectionImplementation": "Dodaj Vezu - {implementationName}", + "AddDownloadClientImplementation": "Dodaj Klijenta za Preuzimanje- {implementationName}", + "AuthenticationMethod": "Metoda Autentikacije", + "AuthenticationMethodHelpTextWarning": "Molimo odaberi ispravnu metodu autentikacije", + "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrdi novu lozinku", + "AuthenticationRequiredWarning": "Kako bi se spriječio udaljeni pristup bez autentikacije, {appName} sad zahtjeva da autentikacija bude omogućena. Izborno se može onemogućiti autentikacija s lokalnih adresa.", + "AutoRedownloadFailedFromInteractiveSearch": "Ponovno preuzimanje iz Interaktivne Pretrage neuspješno" } diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index f53f36006..9c77e739a 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -270,7 +270,6 @@ "DeleteQualityProfile": "Törölje a minőségi profilt", "DeleteQualityProfileMessageText": "Biztosan törli a(z) „{name}” minőségi profilt?", "RemotePathHelpText": "Gyökérútvonal a könyvtárhoz, amelyhez a letöltőkliens hozzáfér", - "SkipFreeSpaceCheckWhenImportingHelpText": "Akkor használja, ha a(z) {appName} nem tud szabad helyet észlelni a gyökérmappában a fájlimportálás során", "UpdateMechanismHelpText": "Használja a {appName} beépített frissítőjét vagy szkriptjét", "SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByLidarr": "Akkor használatos, ha az automatikus keresést a felhasználói felületen vagy a {appName} segítségével hajtja végre", "TagsHelpText": "A kiadási profilok azokra az előadókra vonatkoznak, akik legalább egy megfelelő címkével rendelkeznek. Hagyja üresen, ha minden előadóra vonatkozik", diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index 720eb9ab8..23c3950d2 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -271,7 +271,6 @@ "ShowMonitoredHelpText": "Sýnið vöktaða stöðu undir veggspjaldi", "Size": " Stærð", "SkipFreeSpaceCheck": "Slepptu ókeypis plássathugun", - "SkipFreeSpaceCheckWhenImportingHelpText": "Notaðu þegar {appName} getur ekki greint laust pláss úr rótarmöppu kvikmyndarinnar", "SorryThatAlbumCannotBeFound": "Því miður er ekki hægt að finna þá kvikmynd.", "SorryThatArtistCannotBeFound": "Því miður er ekki hægt að finna þá kvikmynd.", "Source": "Heimild", diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index 644f3e461..5f5c78bce 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -414,7 +414,6 @@ "ShowDateAdded": "Mostra data di aggiunta", "ShowMonitored": "Mostra i monitorati", "ShowMonitoredHelpText": "Mostra lo stato Monitorato sotto il poster", - "SkipFreeSpaceCheckWhenImportingHelpText": "Usa quando {appName} non è in grado di determinare lo spazio libero della cartella di root dei film", "SorryThatArtistCannotBeFound": "Mi spiace, impossibile trovare il film.", "Source": "Fonte", "SourcePath": "Percorso origine", @@ -1030,5 +1029,6 @@ "DownloadClientDelugeSettingsDirectory": "Cartella Download", "DownloadedImporting": "'Scaricato - Importando'", "DownloadedWaitingToImport": "'Scaricato - In attesa di Importazione'", - "MonitorFirstAlbum": "Primo Album" + "MonitorFirstAlbum": "Primo Album", + "IndexerSettingsApiUrl": "API URL" } diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index a07623bfd..2f593c914 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -231,7 +231,6 @@ "ShowMonitoredHelpText": "ポスターの下に監視ステータスを表示する", "Size": " サイズ", "SkipFreeSpaceCheck": "フリースペースチェックをスキップする", - "SkipFreeSpaceCheckWhenImportingHelpText": "Radarrがムービールートフォルダから空き領域を検出できない場合に使用します", "SorryThatAlbumCannotBeFound": "申し訳ありませんが、その映画は見つかりません。", "SorryThatArtistCannotBeFound": "申し訳ありませんが、その映画は見つかりません。", "Source": "ソース", diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 75f6e0e5c..3a3b6df3b 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -375,7 +375,6 @@ "ShowMonitoredHelpText": "포스터 아래에 모니터링 상태 표시", "Size": " 크기", "SkipFreeSpaceCheck": "여유 공간 확인 건너 뛰기", - "SkipFreeSpaceCheckWhenImportingHelpText": "Radarr가 영화 루트 폴더에서 여유 공간을 감지 할 수 없을 때 사용", "SorryThatAlbumCannotBeFound": "죄송합니다. 해당 영화를 찾을 수 없습니다.", "SorryThatArtistCannotBeFound": "죄송합니다. 해당 영화를 찾을 수 없습니다.", "Source": "출처", diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index f73b734a9..8236cb802 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -335,7 +335,6 @@ "ShowMonitoredHelpText": "Toon bewakingsstatus onder de poster", "Size": " Grootte", "SkipFreeSpaceCheck": "Vrije schijfruimte controle overslaan", - "SkipFreeSpaceCheckWhenImportingHelpText": "Gebruik dit wanneer {appName} geen vrije schijfruimte kan detecteren voor de hoofdmap van je films", "SorryThatAlbumCannotBeFound": "Sorry, deze film kan niet worden gevonden.", "SorryThatArtistCannotBeFound": "Sorry, deze film kan niet worden gevonden.", "Source": "Bron", diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index b8a15162b..32d554cb6 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -259,7 +259,6 @@ "ShowMonitored": "Pokaż monitorowane", "ShowMonitoredHelpText": "Pokaż monitorowany status pod plakatem", "SkipFreeSpaceCheck": "Pomiń sprawdzanie wolnego miejsca", - "SkipFreeSpaceCheckWhenImportingHelpText": "Użyj, gdy {appName} nie może wykryć wolnego miejsca w folderze głównym filmu", "SorryThatAlbumCannotBeFound": "Przepraszamy, nie można znaleźć tego filmu.", "SorryThatArtistCannotBeFound": "Przepraszamy, nie można znaleźć tego filmu.", "SourcePath": "Ścieżka źródłowa", diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index 4ba653590..109cae4b0 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -89,7 +89,6 @@ "ShowMonitoredHelpText": "Mostrar estado de monitorização abaixo do cartaz", "ShowSearchActionHelpText": "Mostrar botão de pesquisa ao passar o cursor", "ShowTitleHelpText": "Mostrar nome do autor abaixo do cartaz", - "SkipFreeSpaceCheckWhenImportingHelpText": "Usar quando o {appName} não puder determinar o espaço livre em sua pasta raiz de filmes", "SkipRedownload": "Ignorar nova transferência", "SorryThatAlbumCannotBeFound": "Desculpe, este filme não foi encontrado.", "StandardTrackFormat": "Formato padrão de livro", diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 2959011df..f11273637 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -516,7 +516,6 @@ "ShowMonitoredHelpText": "Mostrar status de monitoramento sob o pôster", "Size": " Tamanho", "SkipFreeSpaceCheck": "Ignorar verificação de espaço livre", - "SkipFreeSpaceCheckWhenImportingHelpText": "Use quando o {appName} não consegue detectar espaço livre em sua pasta raiz durante a importação do arquivo", "SkipRedownload": "Ignorar o Redownload", "SorryThatAlbumCannotBeFound": "Desculpe, esse filme não pode ser encontrado.", "SorryThatArtistCannotBeFound": "Desculpe, esse autor não pode ser encontrado.", @@ -898,7 +897,7 @@ "IndexerRssHealthCheckNoIndexers": "Nenhum indexador disponível com a sincronização RSS habilitada, {appName} não capturará novos lançamentos automaticamente", "IndexerSearchCheckNoAutomaticMessage": "Nenhum indexador disponível com a Pesquisa Automática habilitada, {appName} não fornecerá nenhum resultado de pesquisa automática", "IndexerSearchCheckNoAvailableIndexersMessage": "Todos os indexadores com capacidade de pesquisa estão temporariamente indisponíveis devido a erros recentes do indexador", - "IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, {appName} não fornecerá resultados de pesquisa interativas", + "IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, {appName} não fornecerá resultados para pesquisas interativas", "IndexerStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a falhas", "IndexerStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a falhas: {0}", "Loading": "carregando", @@ -1111,7 +1110,7 @@ "ImportList": "Importar Lista", "RegularExpressionsCanBeTested": "Expressões regulares podem ser testadas [aqui](http://regexstorm.net/tester).", "RegularExpressionsTutorialLink": "Mais detalhes sobre expressões regulares podem ser encontrados [aqui](https://www.regular-expressions.info/tutorial.html).", - "AddAutoTag": "Adicionar Tag Automática", + "AddAutoTag": "Adicionar tag automática", "AddAutoTagError": "Não foi possível adicionar uma nova etiqueta automática, tente novamente.", "AutoTaggingNegateHelpText": "se marcada, a regra de etiqueta automática não será aplicada se esta condição {implementationName} corresponder.", "AutoTaggingRequiredHelpText": "Esta condição {implementationName} deve corresponder para que a regra de etiqueta automática seja aplicada. Caso contrário, uma única correspondência de {implementationName} será suficiente.", @@ -1314,5 +1313,9 @@ "IncludeCustomFormatWhenRenaming": "Incluir formato personalizado ao renomear", "NoCustomFormatsFound": "Nenhum formato personalizado encontrado", "LogSizeLimit": "Limite de Tamanho do Registro", - "LogSizeLimitHelpText": "Tamanho máximo do arquivo de registro em MB antes do arquivamento. O padrão é 1 MB." + "LogSizeLimitHelpText": "Tamanho máximo do arquivo de registro em MB antes do arquivamento. O padrão é 1 MB.", + "SkipFreeSpaceCheckHelpText": "Usar quando {appName} não consegue detectar espaço livre em sua pasta raiz", + "IndexerSettingsApiUrl": "URL da API", + "IndexerSettingsApiUrlHelpText": "Não mude isso a menos que você saiba o que está fazendo. Já que sua chave API será enviada para esse host.", + "LastSearched": "Última Pesquisa" } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 2570908fb..540102279 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -88,7 +88,6 @@ "ShowSearchActionHelpText": "Afișați butonul de căutare pe hover", "ShowSizeOnDisk": "Afișați dimensiunea pe disc", "ShowUnknownArtistItems": "Afișați elemente de film necunoscute", - "SkipFreeSpaceCheckWhenImportingHelpText": "Folosiți atunci când {appName} nu poate detecta spațiul liber din folderul rădăcină al filmului", "SorryThatAlbumCannotBeFound": "Ne pare rău, filmul respectiv nu poate fi găsit.", "SorryThatArtistCannotBeFound": "Ne pare rău, filmul respectiv nu poate fi găsit.", "Source": "Sursă", diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index b502beb0e..82defb5e4 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -128,7 +128,6 @@ "ShowSizeOnDisk": "Показать размер на диске", "Size": " Размер", "SkipFreeSpaceCheck": "Пропустить проверку свободного места", - "SkipFreeSpaceCheckWhenImportingHelpText": "Используйте, когда {appName} не может обнаружить свободное место в вашей корневой папке во время импорта файлов", "SorryThatAlbumCannotBeFound": "Извините, этот фильм не найден.", "SorryThatArtistCannotBeFound": "Извините, этот фильм не найден.", "Source": "Исходный код", @@ -1061,5 +1060,7 @@ "Artist": "Исполнитель", "LogSizeLimit": "Ограничение размера журнала", "LogSizeLimitHelpText": "Максимальный размер файла журнала в МБ перед архивированием. По умолчанию - 1 МБ.", - "Artists": "Исполнитель" + "Artists": "Исполнитель", + "IndexerSettingsApiUrlHelpText": "Не меняйте это, если вы не знаете, что делаете. Поскольку ваш ключ API будет отправлен на этот хост.", + "IndexerSettingsApiUrl": "URL-адрес API" } diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 9a14d210e..9da5fdb8f 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -374,7 +374,6 @@ "ShownAboveEachColumnWhenWeekIsTheActiveView": "Visas ovanför varje kolumn när veckan är den aktiva vyn", "Size": " Storlek", "SkipFreeSpaceCheck": "Hoppa över ledig platskontroll", - "SkipFreeSpaceCheckWhenImportingHelpText": "Används när {appName} inte kan upptäcka ledigt utrymme från filmappens rotmapp", "SorryThatAlbumCannotBeFound": "Tyvärr kan den filmen inte hittas.", "SorryThatArtistCannotBeFound": "Tyvärr kan den filmen inte hittas.", "Source": "Källa", diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index bb67038fb..8a6f33c6c 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -120,7 +120,6 @@ "ShowUnknownArtistItems": "แสดงรายการภาพยนตร์ที่ไม่รู้จัก", "Size": " ขนาด", "SkipFreeSpaceCheck": "ข้ามการตรวจสอบพื้นที่ว่าง", - "SkipFreeSpaceCheckWhenImportingHelpText": "ใช้เมื่อ {appName} ไม่สามารถตรวจจับพื้นที่ว่างจากโฟลเดอร์รากภาพยนตร์ของคุณ", "SorryThatAlbumCannotBeFound": "ขออภัยไม่พบภาพยนตร์เรื่องนั้น", "Source": "ที่มา", "SourcePath": "เส้นทางแหล่งที่มา", diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 050a67ad7..546d18d40 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -61,7 +61,6 @@ "ShowMonitoredHelpText": "Posterin altında takip durumu göster", "Size": " Ölçü", "SkipFreeSpaceCheck": "Boş Alan Kontrolünü Atla", - "SkipFreeSpaceCheckWhenImportingHelpText": "{appName} film kök klasörünüzden boş alan algılayamadığında kullanın", "SorryThatAlbumCannotBeFound": "Maalesef o film bulunamıyor.", "SorryThatArtistCannotBeFound": "Maalesef o film bulunamıyor.", "Source": "Kaynak", @@ -1026,5 +1025,9 @@ "DeleteSelectedCustomFormats": "Özel Formatı Sil", "DeleteSelectedCustomFormatsMessageText": "Seçilen {count} içe aktarma listesini silmek istediğinizden emin misiniz?", "LogSizeLimit": "Log Boyutu Sınırı", - "LogSizeLimitHelpText": "Arşivlemeden önce MB cinsinden maksimum log dosya boyutu. Varsayılan 1 MB'tır." + "LogSizeLimitHelpText": "Arşivlemeden önce MB cinsinden maksimum log dosya boyutu. Varsayılan 1 MB'tır.", + "SkipFreeSpaceCheckHelpText": "{appName} kök klasörünüzde boş alan tespit edemediğinde bunu kullansın", + "Logout": "Çıkış", + "IndexerSettingsApiUrl": "API URL'si", + "LastSearched": "Son Aranan" } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index c6dcd7d2c..75c156d9f 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -682,7 +682,6 @@ "ImportExtraFilesHelpText": "Імпортуйте відповідні додаткові файли (субтитри, nfo тощо) після імпортування файлу фільму", "RemotePathMappingCheckGenericPermissions": "Клієнт завантаження {0} розміщує завантаження в {1}, але Radarr не бачить цей каталог. Можливо, вам знадобиться налаштувати дозволи для папки.", "RenameTracksHelpText": "{appName} використовуватиме існуючу назву файлу, якщо перейменування вимкнено", - "SkipFreeSpaceCheckWhenImportingHelpText": "Використовуйте, коли {appName} не може виявити вільне місце в кореневій папці фільму", "ExtraFileExtensionsHelpTextsExamples": "Приклади: '.sub, .nfo' або 'sub,nfo'", "SuccessMyWorkIsDoneNoFilesToRename": "Успіх! Мою роботу виконано, немає файлів для перейменування.", "TagsSettingsSummary": "Перегляньте всі теги та те, як вони використовуються. Невикористані теги можна видалити", @@ -900,5 +899,6 @@ "Script": "Сценарій", "DeleteSelectedCustomFormatsMessageText": "Ви впевнені, що хочете видалити тег {0} ?", "DeleteSelectedCustomFormats": "Видалити спеціальний формат", - "IncludeCustomFormatWhenRenaming": "Включати спеціальний формат під час перейменування" + "IncludeCustomFormatWhenRenaming": "Включати спеціальний формат під час перейменування", + "IndexerSettingsApiUrl": "API URL" } diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index 223cdbdda..c4327fcf9 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -145,7 +145,6 @@ "ShowSizeOnDisk": "Hiển thị kích thước trên đĩa", "Size": " Kích thước", "SkipFreeSpaceCheck": "Bỏ qua kiểm tra dung lượng trống", - "SkipFreeSpaceCheckWhenImportingHelpText": "Sử dụng khi {appName} không thể phát hiện dung lượng trống từ thư mục gốc phim của bạn", "SorryThatAlbumCannotBeFound": "Xin lỗi, không thể tìm thấy bộ phim đó.", "SorryThatArtistCannotBeFound": "Xin lỗi, không thể tìm thấy bộ phim đó.", "Source": "Nguồn", diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 5c2dd1de0..f0a556d9b 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -138,7 +138,7 @@ "SSLPort": "SSL端口", "Settings": "设置", "ShowSearch": "显示搜索", - "Source": "来源", + "Source": "代码", "StartupDirectory": "启动目录", "Status": "状态", "Style": "类型", @@ -235,7 +235,7 @@ "Medium": "中", "MetadataSettings": "元数据设置", "MinimumFreeSpace": "最小剩余空间", - "Missing": "缺失", + "Missing": "缺失中", "Monitored": "已追踪", "MustContain": "必须包含", "MustNotContain": "不得包含", @@ -294,17 +294,16 @@ "RootFolders": "根目录", "RSSSync": "RSS同步", "RSSSyncInterval": "RSS同步间隔", - "RssSyncIntervalHelpText": "间隔时间(以分钟为单位),设置为零则禁用(这会停止自动抓取发布资源)", + "RssSyncIntervalHelpText": "间隔时间(分钟),设置为零则禁用(这会停止自动抓取发布资源)", "SearchAll": "搜索全部", - "ShowQualityProfile": "显示质量配置文件", - "ShowQualityProfileHelpText": "在海报下方显示媒体质量配置", + "ShowQualityProfile": "显示质量配置", + "ShowQualityProfileHelpText": "在海报下方显示质量配置信息", "ShowRelativeDates": "显示相对日期", - "ShowRelativeDatesHelpText": "显示相对日期(今天昨天等)或绝对日期", + "ShowRelativeDatesHelpText": "显示相对日期(今天/昨天等)或绝对日期", "ShowSearchActionHelpText": "在选项中显示搜索框", "ShowUnknownArtistItems": "显示未知歌手条目", "Size": " 文件大小", "SkipFreeSpaceCheck": "跳过剩余空间检查", - "SkipFreeSpaceCheckWhenImportingHelpText": "当{appName}在文件导入过程中无法检测到根文件夹的可用空间时使用", "SorryThatAlbumCannotBeFound": "对不起,未找到专辑。", "SorryThatArtistCannotBeFound": "对不起,未找到歌手。", "SourcePath": "来源路径", @@ -324,7 +323,7 @@ "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "这将适用于所有索引器,请遵循他们所制定的规则", "TimeFormat": "时间格式", "TorrentDelay": "Torrent延时", - "TorrentDelayHelpText": "延迟几分钟等待获取洪流", + "TorrentDelayHelpText": "抓取种子前需等待的延迟时间(分钟)", "TotalFileSize": "文件总大小", "Track": "追踪", "UiLanguageHelpTextWarning": "浏览器需重新加载", @@ -357,8 +356,8 @@ "RescanArtistFolderAfterRefresh": "刷新后重新扫描歌手文件夹", "ResetAPIKeyMessageText": "您确定要重置您的 API 密钥吗?", "SearchForMissing": "搜索缺少", - "ShowDateAdded": "显示加入时间", - "ShowMonitored": "显示已追踪项", + "ShowDateAdded": "显示添加日期", + "ShowMonitored": "显示追踪状态", "ShowMonitoredHelpText": "在海报下显示追踪状态", "ShownAboveEachColumnWhenWeekIsTheActiveView": "当使用周视图时显示上面的每一列", "ShowPath": "显示路径", @@ -497,7 +496,7 @@ "Location": "位置", "Ok": "完成", "Presets": "预设", - "ShowAdvanced": "显示高级", + "ShowAdvanced": "高级设置", "SizeOnDisk": "占用磁盘体积", "MetadataConsumers": "用户元数据", "MetadataProfileIdHelpText": "元数据配置文件列表项应添加", @@ -599,7 +598,7 @@ "Filters": "过滤器", "FreeSpace": "剩余空间", "General": "通用", - "Genres": "风格", + "Genres": "类型", "Grabbed": "已抓取", "HardlinkCopyFiles": "硬链接/复制文件", "HideAdvanced": "隐藏高级", @@ -1141,14 +1140,14 @@ "Unlimited": "无限制", "DownloadClientPriorityHelpText": "下载客户端优先级,从1(最高)到50(最低),默认为1。具有相同优先级的客户端将轮换使用。", "IndexerSettingsRejectBlocklistedTorrentHashes": "抓取时拒绝列入黑名单的种子散列值", - "AutoRedownloadFailedFromInteractiveSearch": "来自手动搜索的资源重新下载失败", + "AutoRedownloadFailedFromInteractiveSearch": "失败时重新下载来自手动搜索的资源", "IncludeHealthWarnings": "包含健康度警告", "RemoveQueueItem": "移除 - {sourceTitle}", "AutoRedownloadFailedFromInteractiveSearchHelpText": "当从手动搜索中抓取的发布资源下载失败时,自动搜索并尝试下载不同的发布资源", "DownloadClientAriaSettingsDirectoryHelpText": "下载位置可选择,留空使用 Aria2 默认位置", "CustomFormatsSpecificationRegularExpression": "正则表达式", "RemoveQueueItemConfirmation": "您确认要从队列中移除 “{sourceTitle}” 吗?", - "AutoRedownloadFailed": "重新下载失败", + "AutoRedownloadFailed": "失败时重新下载", "AlbumStudioTracksDownloaded": "{trackFileCount}/{totalTrackCount} 首曲目已下载", "ArtistProgressBarText": "{trackFileCount} / {trackCount} (共: {totalTrackCount}, 正在下载: {downloadingCount})", "ChangeCategory": "修改分类", @@ -1309,5 +1308,10 @@ "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} 路径,当 {serviceName} 与 {appName} 对资源库路径的识别不一致时,可以使用此设置修改系列路径(需要`更新资源库`)", "NoCustomFormatsFound": "未找到自定义格式", "NotificationsTelegramSettingsIncludeAppName": "标题中包含 {appName}", - "NotificationsTelegramSettingsIncludeAppNameHelpText": "可选,在消息标题前加上 {appName} 以区分来自不同应用的通知" + "NotificationsTelegramSettingsIncludeAppNameHelpText": "可选,在消息标题前加上 {appName} 以区分来自不同应用的通知", + "NotificationsEmbySettingsUpdateLibraryHelpText": "在导入、重命名、删除时更新库", + "SkipFreeSpaceCheckHelpText": "当 {appName} 无法检测到根目录的剩余空间时使用", + "IndexerSettingsApiUrl": "API 地址", + "IndexerSettingsApiUrlHelpText": "除非您知道自己在做什么,否则请勿更改此设置。 因为您的 API Key 将被发送到该主机。", + "LastSearched": "最近搜索" } From 0e9a5fbd04a605ff1d639c32ba3936b1cc1a3fdc Mon Sep 17 00:00:00 2001 From: Servarr Date: Mon, 7 Oct 2024 23:40:47 +0000 Subject: [PATCH 067/275] Automated API Docs update --- src/Lidarr.Api.V1/openapi.json | 85 ++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index 12b61c143..d024a9c9b 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -2136,6 +2136,15 @@ "DownloadClient" ], "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, { "name": "forceSave", "in": "query", @@ -2143,14 +2152,6 @@ "type": "boolean", "default": false } - }, - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], "requestBody": { @@ -3052,6 +3053,15 @@ "ImportList" ], "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, { "name": "forceSave", "in": "query", @@ -3059,14 +3069,6 @@ "type": "boolean", "default": false } - }, - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], "requestBody": { @@ -3559,6 +3561,15 @@ "Indexer" ], "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, { "name": "forceSave", "in": "query", @@ -3566,14 +3577,6 @@ "type": "boolean", "default": false } - }, - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], "requestBody": { @@ -4495,6 +4498,15 @@ "Metadata" ], "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, { "name": "forceSave", "in": "query", @@ -4502,14 +4514,6 @@ "type": "boolean", "default": false } - }, - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], "requestBody": { @@ -5437,6 +5441,15 @@ "Notification" ], "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, { "name": "forceSave", "in": "query", @@ -5444,14 +5457,6 @@ "type": "boolean", "default": false } - }, - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], "requestBody": { From c6c52c4117217379df4396ff8d35d24d76cc2547 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 9 Oct 2024 14:06:33 +0300 Subject: [PATCH 068/275] Bump version to 2.7.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e63a0f130..0e61e9e8e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.6.4' + majorVersion: '2.7.0' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From c750f4764f0422a05dce21133f954813f696a300 Mon Sep 17 00:00:00 2001 From: Hadrien Patte Date: Wed, 9 Oct 2024 18:52:58 +0200 Subject: [PATCH 069/275] Sync OsInfo with upstream (#5163) --- src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs index 7fd525b13..f37b40fec 100644 --- a/src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs +++ b/src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; @@ -109,18 +109,31 @@ namespace NzbDrone.Common.EnvironmentInfo private static string RunAndCapture(string filename, string args) { - var p = new Process(); - p.StartInfo.FileName = filename; - p.StartInfo.Arguments = args; - p.StartInfo.UseShellExecute = false; - p.StartInfo.CreateNoWindow = true; - p.StartInfo.RedirectStandardOutput = true; + var processStartInfo = new ProcessStartInfo + { + FileName = filename, + Arguments = args, + UseShellExecute = false, + CreateNoWindow = true, + RedirectStandardOutput = true + }; - p.Start(); + var output = string.Empty; - // To avoid deadlocks, always read the output stream first and then wait. - var output = p.StandardOutput.ReadToEnd(); - p.WaitForExit(1000); + try + { + using (var p = Process.Start(processStartInfo)) + { + // To avoid deadlocks, always read the output stream first and then wait. + output = p.StandardOutput.ReadToEnd(); + + p.WaitForExit(1000); + } + } + catch (Exception) + { + output = string.Empty; + } return output; } @@ -131,7 +144,6 @@ namespace NzbDrone.Common.EnvironmentInfo string Version { get; } string Name { get; } string FullName { get; } - bool IsDocker { get; } } From 33d61698820a2840503c97232b672ab6ea991d12 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 13 Oct 2024 22:09:56 +0300 Subject: [PATCH 070/275] Bump dotnet to 6.0.35 --- azure-pipelines.yml | 2 +- src/NzbDrone.Common/Lidarr.Common.csproj | 2 +- src/NzbDrone.Core/Lidarr.Core.csproj | 8 ++++---- .../Lidarr.Integration.Test.csproj | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0e61e9e8e..383266a75 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -15,7 +15,7 @@ variables: buildName: '$(Build.SourceBranchName).$(lidarrVersion)' sentryOrg: 'servarr' sentryUrl: 'https://sentry.servarr.com' - dotnetVersion: '6.0.424' + dotnetVersion: '6.0.427' nodeVersion: '20.X' innoVersion: '6.2.0' windowsImage: 'windows-2022' diff --git a/src/NzbDrone.Common/Lidarr.Common.csproj b/src/NzbDrone.Common/Lidarr.Common.csproj index 4054a5d0d..10870072d 100644 --- a/src/NzbDrone.Common/Lidarr.Common.csproj +++ b/src/NzbDrone.Common/Lidarr.Common.csproj @@ -15,7 +15,7 @@ - + diff --git a/src/NzbDrone.Core/Lidarr.Core.csproj b/src/NzbDrone.Core/Lidarr.Core.csproj index 52c13c291..b96f564c9 100644 --- a/src/NzbDrone.Core/Lidarr.Core.csproj +++ b/src/NzbDrone.Core/Lidarr.Core.csproj @@ -5,11 +5,11 @@ - - + + - + @@ -23,7 +23,7 @@ - + diff --git a/src/NzbDrone.Integration.Test/Lidarr.Integration.Test.csproj b/src/NzbDrone.Integration.Test/Lidarr.Integration.Test.csproj index ec5d11aff..9673f7333 100644 --- a/src/NzbDrone.Integration.Test/Lidarr.Integration.Test.csproj +++ b/src/NzbDrone.Integration.Test/Lidarr.Integration.Test.csproj @@ -4,7 +4,7 @@ Library - + From c645afc389e9901ed02018d012fa48a481a9e792 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 13 Oct 2024 22:16:06 +0300 Subject: [PATCH 071/275] Bump frontend packages --- package.json | 89 +- yarn.lock | 3306 +++++++++++++++++++++++--------------------------- 2 files changed, 1569 insertions(+), 1826 deletions(-) diff --git a/package.json b/package.json index a12d8984f..7f75cf6a1 100644 --- a/package.json +++ b/package.json @@ -25,35 +25,34 @@ "defaults" ], "dependencies": { - "@fortawesome/fontawesome-free": "6.4.0", - "@fortawesome/fontawesome-svg-core": "6.4.0", - "@fortawesome/free-regular-svg-icons": "6.4.0", - "@fortawesome/free-solid-svg-icons": "6.4.0", - "@fortawesome/react-fontawesome": "0.2.0", + "@fortawesome/fontawesome-free": "6.6.0", + "@fortawesome/fontawesome-svg-core": "6.6.0", + "@fortawesome/free-regular-svg-icons": "6.6.0", + "@fortawesome/free-solid-svg-icons": "6.6.0", + "@fortawesome/react-fontawesome": "0.2.2", "@juggle/resize-observer": "3.4.0", "@microsoft/signalr": "6.0.25", - "@sentry/browser": "7.51.2", - "@sentry/integrations": "7.51.2", - "@types/node": "18.19.31", + "@sentry/browser": "7.119.1", + "@sentry/integrations": "7.119.1", + "@types/node": "20.16.11", "@types/react": "18.2.79", "@types/react-dom": "18.2.25", - "ansi-colors": "4.1.3", - "classnames": "2.3.2", + "classnames": "2.5.1", "clipboard": "2.0.11", "connected-react-router": "6.9.3", "element-class": "0.2.2", - "filesize": "10.0.7", + "filesize": "10.1.6", "fuse.js": "6.6.2", "history": "4.10.1", "jdu": "1.0.0", - "jquery": "3.7.0", + "jquery": "3.7.1", "lodash": "4.17.21", "mobile-detect": "1.4.5", - "moment": "2.29.4", + "moment": "2.30.1", "mousetrap": "1.6.5", "normalize.css": "8.0.1", "prop-types": "15.8.1", - "qs": "6.11.1", + "qs": "6.13.0", "react": "17.0.2", "react-addons-shallow-compare": "15.6.3", "react-async-script": "1.2.0", @@ -65,7 +64,7 @@ "react-dnd-touch-backend": "14.1.1", "react-document-title": "2.0.3", "react-dom": "17.0.2", - "react-focus-lock": "2.5.0", + "react-focus-lock": "2.9.4", "react-google-recaptcha": "2.1.0", "react-lazyload": "3.2.0", "react-measure": "1.4.7", @@ -75,59 +74,59 @@ "react-router": "5.2.0", "react-router-dom": "5.2.0", "react-slider": "1.1.4", - "react-tabs": "3.2.2", + "react-tabs": "4.3.0", "react-text-truncate": "0.19.0", "react-use-measure": "2.1.1", "react-virtualized": "9.21.1", - "react-window": "1.8.9", - "redux": "4.1.0", + "react-window": "1.8.10", + "redux": "4.2.1", "redux-actions": "2.6.5", "redux-batched-actions": "0.5.0", "redux-localstorage": "0.4.1", - "redux-thunk": "2.3.0", + "redux-thunk": "2.4.2", "reselect": "4.1.8", "stacktrace-js": "2.0.2", "typescript": "5.1.6" }, "devDependencies": { - "@babel/core": "7.25.2", - "@babel/eslint-parser": "7.25.1", - "@babel/plugin-proposal-export-default-from": "7.24.7", + "@babel/core": "7.25.8", + "@babel/eslint-parser": "7.25.8", + "@babel/plugin-proposal-export-default-from": "7.25.8", "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/preset-env": "7.25.3", - "@babel/preset-react": "7.24.7", - "@babel/preset-typescript": "7.24.7", + "@babel/preset-env": "7.25.8", + "@babel/preset-react": "7.25.7", + "@babel/preset-typescript": "7.25.7", "@types/lodash": "4.14.195", - "@types/react-lazyload": "3.2.0", + "@types/react-lazyload": "3.2.3", "@types/react-router-dom": "5.3.3", - "@types/react-text-truncate": "0.14.1", - "@types/react-window": "1.8.5", - "@types/redux-actions": "2.6.2", + "@types/react-text-truncate": "0.19.0", + "@types/react-window": "1.8.8", + "@types/redux-actions": "2.6.5", + "@types/webpack-livereload-plugin": "2.3.6", "@typescript-eslint/eslint-plugin": "6.21.0", "@typescript-eslint/parser": "6.21.0", "autoprefixer": "10.4.20", - "babel-loader": "9.1.3", + "babel-loader": "9.2.1", "babel-plugin-inline-classnames": "2.0.1", "babel-plugin-transform-react-remove-prop-types": "0.4.24", "core-js": "3.38.1", "css-loader": "6.7.3", "css-modules-typescript-loader": "4.0.1", - "eslint": "8.57.0", + "eslint": "8.57.1", "eslint-config-prettier": "8.10.0", "eslint-plugin-filenames": "1.3.2", - "eslint-plugin-import": "2.29.1", - "eslint-plugin-json": "3.1.0", + "eslint-plugin-import": "2.31.0", "eslint-plugin-prettier": "4.2.1", - "eslint-plugin-react": "7.34.1", - "eslint-plugin-react-hooks": "4.6.0", - "eslint-plugin-simple-import-sort": "12.1.0", + "eslint-plugin-react": "7.37.1", + "eslint-plugin-react-hooks": "4.6.2", + "eslint-plugin-simple-import-sort": "12.1.1", "file-loader": "6.2.0", "filemanager-webpack-plugin": "8.0.0", "fork-ts-checker-webpack-plugin": "8.0.0", - "html-webpack-plugin": "5.5.1", + "html-webpack-plugin": "5.6.0", "loader-utils": "^3.2.1", - "mini-css-extract-plugin": "2.7.6", - "postcss": "8.4.41", + "mini-css-extract-plugin": "2.9.1", + "postcss": "8.4.47", "postcss-color-function": "4.1.0", "postcss-loader": "7.3.0", "postcss-mixins": "9.0.4", @@ -136,17 +135,15 @@ "postcss-url": "10.1.3", "prettier": "2.8.8", "require-nocache": "1.0.0", - "rimraf": "4.4.1", - "run-sequence": "2.2.1", - "streamqueue": "1.1.2", + "rimraf": "6.0.1", "style-loader": "3.3.2", "stylelint": "15.6.1", - "stylelint-order": "6.0.3", - "terser-webpack-plugin": "5.3.9", - "ts-loader": "9.4.2", + "stylelint-order": "6.0.4", + "terser-webpack-plugin": "5.3.10", + "ts-loader": "9.5.1", "typescript-plugin-css-modules": "5.0.1", "url-loader": "4.1.1", - "webpack": "5.88.1", + "webpack": "5.95.0", "webpack-cli": "5.1.4", "webpack-livereload-plugin": "3.0.2", "worker-loader": "3.0.8" diff --git a/yarn.lock b/yarn.lock index 5ff87fc49..3909ddb77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,15 +2,10 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@adobe/css-tools@^4.0.1": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" - integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.0.tgz#728c484f4e10df03d5a3acd0d8adcbbebff8ad63" + integrity sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ== "@ampproject/remapping@^2.2.0": version "2.3.0" @@ -20,151 +15,111 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.7.tgz#438f2c524071531d643c6f0188e1e28f130cebc7" + integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== dependencies: - "@babel/highlight" "^7.24.2" + "@babel/highlight" "^7.25.7" picocolors "^1.0.0" -"@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== - dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7", "@babel/compat-data@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.8.tgz#0376e83df5ab0eb0da18885c0140041f0747a402" + integrity sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA== -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" - integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== - -"@babel/compat-data@^7.25.2": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" - integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== - -"@babel/core@7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" - integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== +"@babel/core@7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.8.tgz#a57137d2a51bbcffcfaeba43cb4dd33ae3e0e1c6" + integrity sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-module-transforms" "^7.25.2" - "@babel/helpers" "^7.25.0" - "@babel/parser" "^7.25.0" - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.2" - "@babel/types" "^7.25.2" + "@babel/code-frame" "^7.25.7" + "@babel/generator" "^7.25.7" + "@babel/helper-compilation-targets" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.7" + "@babel/helpers" "^7.25.7" + "@babel/parser" "^7.25.8" + "@babel/template" "^7.25.7" + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.8" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/eslint-parser@7.25.1": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz#469cee4bd18a88ff3edbdfbd227bd20e82aa9b82" - integrity sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg== +"@babel/eslint-parser@7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.8.tgz#0119dec46be547d7a339978dedb9d29e517c2443" + integrity sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.25.0", "@babel/generator@^7.25.4": - version "7.25.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.5.tgz#b31cf05b3fe8c32d206b6dad03bb0aacbde73450" - integrity sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w== +"@babel/generator@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.7.tgz#de86acbeb975a3e11ee92dd52223e6b03b479c56" + integrity sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA== dependencies: - "@babel/types" "^7.25.4" + "@babel/types" "^7.25.7" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" + jsesc "^3.0.2" -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/helper-annotate-as-pure@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz#63f02dbfa1f7cb75a9bdb832f300582f30bb8972" + integrity sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.25.7" -"@babel/helper-annotate-as-pure@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" - integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz#d721650c1f595371e0a23ee816f1c3c488c0d622" + integrity sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg== dependencies: - "@babel/types" "^7.24.7" + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" - integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz#11260ac3322dda0ef53edfae6e97b961449f5fa4" + integrity sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-compilation-targets@^7.22.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" + "@babel/compat-data" "^7.25.7" + "@babel/helper-validator-option" "^7.25.7" + browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" - integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== +"@babel/helper-create-class-features-plugin@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz#5d65074c76cae75607421c00d6bd517fe1892d6b" + integrity sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw== dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-validator-option" "^7.24.8" - browserslist "^4.23.1" - lru-cache "^5.1.1" + "@babel/helper-annotate-as-pure" "^7.25.7" + "@babel/helper-member-expression-to-functions" "^7.25.7" + "@babel/helper-optimise-call-expression" "^7.25.7" + "@babel/helper-replace-supers" "^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/traverse" "^7.25.7" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0", "@babel/helper-create-class-features-plugin@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz#57eaf1af38be4224a9d9dd01ddde05b741f50e14" - integrity sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz#dcb464f0e2cdfe0c25cc2a0a59c37ab940ce894e" + integrity sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/traverse" "^7.25.4" + "@babel/helper-annotate-as-pure" "^7.25.7" + regexpu-core "^6.1.1" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0", "@babel/helper-create-regexp-features-plugin@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" - integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" - integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -172,348 +127,212 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-member-expression-to-functions@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" - integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== +"@babel/helper-member-expression-to-functions@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz#541a33b071f0355a63a0fa4bdf9ac360116b8574" + integrity sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA== dependencies: - "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.8" + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.7" -"@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== +"@babel/helper-module-imports@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz#dba00d9523539152906ba49263e36d7261040472" + integrity sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.7" -"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" - integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== +"@babel/helper-module-transforms@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz#2ac9372c5e001b19bc62f1fe7d96a18cb0901d1a" + integrity sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ== dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.2" + "@babel/helper-module-imports" "^7.25.7" + "@babel/helper-simple-access" "^7.25.7" + "@babel/helper-validator-identifier" "^7.25.7" + "@babel/traverse" "^7.25.7" -"@babel/helper-optimise-call-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" - integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== +"@babel/helper-optimise-call-expression@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz#1de1b99688e987af723eed44fa7fc0ee7b97d77a" + integrity sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng== dependencies: - "@babel/types" "^7.24.7" + "@babel/types" "^7.25.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.8.0": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz#8ec5b21812d992e1ef88a9b068260537b6f0e36c" + integrity sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw== -"@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" - integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== - -"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" - integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== +"@babel/helper-remap-async-to-generator@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz#9efdc39df5f489bcd15533c912b6c723a0a65021" + integrity sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-wrap-function" "^7.25.0" - "@babel/traverse" "^7.25.0" + "@babel/helper-annotate-as-pure" "^7.25.7" + "@babel/helper-wrap-function" "^7.25.7" + "@babel/traverse" "^7.25.7" -"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" - integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== +"@babel/helper-replace-supers@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz#38cfda3b6e990879c71d08d0fef9236b62bd75f5" + integrity sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/traverse" "^7.25.0" + "@babel/helper-member-expression-to-functions" "^7.25.7" + "@babel/helper-optimise-call-expression" "^7.25.7" + "@babel/traverse" "^7.25.7" -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== +"@babel/helper-simple-access@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz#5eb9f6a60c5d6b2e0f76057004f8dacbddfae1c0" + integrity sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.7" -"@babel/helper-skip-transparent-expression-wrappers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" - integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== +"@babel/helper-skip-transparent-expression-wrappers@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz#382831c91038b1a6d32643f5f49505b8442cb87c" + integrity sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.7" -"@babel/helper-string-parser@^7.23.4": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== +"@babel/helper-string-parser@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54" + integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== -"@babel/helper-string-parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" - integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== +"@babel/helper-validator-identifier@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" + integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-option@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz#97d1d684448228b30b506d90cace495d6f492729" + integrity sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ== -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" - integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== - -"@babel/helper-wrap-function@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" - integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== +"@babel/helper-wrap-function@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz#9f6021dd1c4fdf4ad515c809967fc4bac9a70fe7" + integrity sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg== dependencies: - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.0" - "@babel/types" "^7.25.0" + "@babel/template" "^7.25.7" + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.7" -"@babel/helpers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" - integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== +"@babel/helpers@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.7.tgz#091b52cb697a171fe0136ab62e54e407211f09c2" + integrity sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA== dependencies: - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.0" + "@babel/template" "^7.25.7" + "@babel/types" "^7.25.7" -"@babel/highlight@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" - integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== +"@babel/highlight@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.7.tgz#20383b5f442aa606e7b5e3043b0b1aafe9f37de5" + integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== dependencies: - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-validator-identifier" "^7.25.7" chalk "^2.4.2" js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== +"@babel/parser@^7.25.7", "@babel/parser@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2" + integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" + "@babel/types" "^7.25.8" -"@babel/parser@^7.25.0", "@babel/parser@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.4.tgz#af4f2df7d02440286b7de57b1c21acfb2a6f257a" - integrity sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz#93969ac50ef4d68b2504b01b758af714e4cbdd64" + integrity sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ== dependencies: - "@babel/types" "^7.25.4" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/traverse" "^7.25.7" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" - integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz#a338d611adb9dcd599b8b1efa200c88ebeffe046" + integrity sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.3" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" - integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz#c5f755e911dfac7ef6957300c0f9c4a8c18c06f4" + integrity sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" - integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz#3b7ea04492ded990978b6deaa1dfca120ad4455a" + integrity sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/plugin-transform-optional-chaining" "^7.25.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" - integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz#9622b1d597a703aa3a921e6f58c9c2d9a028d2c5" + integrity sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/traverse" "^7.25.7" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" - integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== +"@babel/plugin-proposal-export-default-from@7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.8.tgz#fa22151caa240683c3659796037237813767f348" + integrity sha512-5SLPHA/Gk7lNdaymtSVS9jH77Cs7yuHTR3dYj+9q+M7R7tNLXhNuvnmOfafRIzpWL+dtMibuu1I4ofrc768Gkw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.0" - -"@babel/plugin-proposal-export-default-from@7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.7.tgz#0b539c46b8ac804f694e338f803c8354c0f788b6" - integrity sha512-CcmFwUJ3tKhLjPdt4NP+SHMshebytF8ZTYOv5ZDpkzq2sin80Wb5vJrGt8fhPrORQCfoSa0LAxC/DW+GAC5+Hw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-export-default-from" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@7.8.3", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz#85dae9098933573aae137fb52141dd3ca52ae7ac" - integrity sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw== +"@babel/plugin-syntax-import-assertions@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz#8ce248f9f4ed4b7ed4cb2e0eb4ed9efd9f52921f" + integrity sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== +"@babel/plugin-syntax-import-attributes@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz#d78dd0499d30df19a598e63ab895e21b909bc43f" + integrity sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-syntax-import-assertions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" - integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== +"@babel/plugin-syntax-jsx@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz#5352d398d11ea5e7ef330c854dea1dae0bf18165" + integrity sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" - integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== +"@babel/plugin-syntax-typescript@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz#bfc05b0cc31ebd8af09964650cee723bb228108b" + integrity sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.24.7": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz#04db9ce5a9043d9c635e75ae7969a2cd50ca97ff" - integrity sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.7" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -523,530 +342,503 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" - integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== +"@babel/plugin-transform-arrow-functions@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz#1b9ed22e6890a0e9ff470371c73b8c749bcec386" + integrity sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-async-generator-functions@^7.25.0": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz#2afd4e639e2d055776c9f091b6c0c180ed8cf083" - integrity sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg== +"@babel/plugin-transform-async-generator-functions@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz#3331de02f52cc1f2c75b396bec52188c85b0b1ec" + integrity sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-remap-async-to-generator" "^7.25.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/traverse" "^7.25.4" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-remap-async-to-generator" "^7.25.7" + "@babel/traverse" "^7.25.7" -"@babel/plugin-transform-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" - integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== +"@babel/plugin-transform-async-to-generator@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz#a44c7323f8d4285a6c568dd43c5c361d6367ec52" + integrity sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg== dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" + "@babel/helper-module-imports" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-remap-async-to-generator" "^7.25.7" -"@babel/plugin-transform-block-scoped-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" - integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== +"@babel/plugin-transform-block-scoped-functions@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz#e0b8843d5571719a2f1bf7e284117a3379fcc17c" + integrity sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-block-scoping@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" - integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== +"@babel/plugin-transform-block-scoping@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz#6dab95e98adf780ceef1b1c3ab0e55cd20dd410a" + integrity sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-class-properties@^7.24.7": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz#bae7dbfcdcc2e8667355cd1fb5eda298f05189fd" - integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== +"@babel/plugin-transform-class-properties@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz#a389cfca7a10ac80e3ff4c75fca08bd097ad1523" + integrity sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-class-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-class-static-block@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" - integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== +"@babel/plugin-transform-class-static-block@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz#a8af22028920fe404668031eceb4c3aadccb5262" + integrity sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-classes@^7.25.0": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz#d29dbb6a72d79f359952ad0b66d88518d65ef89a" - integrity sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg== +"@babel/plugin-transform-classes@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz#5103206cf80d02283bbbd044509ea3b65d0906bb" + integrity sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/traverse" "^7.25.4" + "@babel/helper-annotate-as-pure" "^7.25.7" + "@babel/helper-compilation-targets" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-replace-supers" "^7.25.7" + "@babel/traverse" "^7.25.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" - integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== +"@babel/plugin-transform-computed-properties@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz#7f621f0aa1354b5348a935ab12e3903842466f65" + integrity sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/template" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/template" "^7.25.7" -"@babel/plugin-transform-destructuring@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" - integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== +"@babel/plugin-transform-destructuring@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz#f6f26a9feefb5aa41fd45b6f5838901b5333d560" + integrity sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-dotall-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" - integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== +"@babel/plugin-transform-dotall-regex@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz#9d775c4a3ff1aea64045300fcd4309b4a610ef02" + integrity sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-duplicate-keys@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" - integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== +"@babel/plugin-transform-duplicate-keys@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz#fbba7d1155eab76bd4f2a038cbd5d65883bd7a93" + integrity sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" - integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz#102b31608dcc22c08fbca1894e104686029dc141" + integrity sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-regexp-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-dynamic-import@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" - integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== +"@babel/plugin-transform-dynamic-import@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz#f1edbe75b248cf44c70c8ca8ed3818a668753aaa" + integrity sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-exponentiation-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" - integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== +"@babel/plugin-transform-exponentiation-operator@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz#5961a3a23a398faccd6cddb34a2182807d75fb5f" + integrity sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-export-namespace-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" - integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== +"@babel/plugin-transform-export-namespace-from@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz#d1988c3019a380b417e0516418b02804d3858145" + integrity sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-for-of@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" - integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== +"@babel/plugin-transform-for-of@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz#0acfea0f27aa290818b5b48a5a44b3f03fc13669" + integrity sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" -"@babel/plugin-transform-function-name@^7.25.1": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" - integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== +"@babel/plugin-transform-function-name@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz#7e394ccea3693902a8b50ded8b6ae1fa7b8519fd" + integrity sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ== dependencies: - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.1" + "@babel/helper-compilation-targets" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/traverse" "^7.25.7" -"@babel/plugin-transform-json-strings@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" - integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== +"@babel/plugin-transform-json-strings@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz#6fb3ec383a2ea92652289fdba653e3f9de722694" + integrity sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-literals@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" - integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== +"@babel/plugin-transform-literals@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz#70cbdc742f2cfdb1a63ea2cbd018d12a60b213c3" + integrity sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-logical-assignment-operators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" - integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== +"@babel/plugin-transform-logical-assignment-operators@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz#01868ff92daa9e525b4c7902aa51979082a05710" + integrity sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-member-expression-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" - integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== +"@babel/plugin-transform-member-expression-literals@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz#0a36c3fbd450cc9e6485c507f005fa3d1bc8fca5" + integrity sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-modules-amd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" - integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== +"@babel/plugin-transform-modules-amd@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz#bb4e543b5611f6c8c685a2fd485408713a3adf3d" + integrity sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" - integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== +"@babel/plugin-transform-modules-commonjs@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz#173f0c791bb7407c092ce6d77ee90eb3f2d1d2fd" + integrity sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg== dependencies: - "@babel/helper-module-transforms" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-module-transforms" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-simple-access" "^7.25.7" -"@babel/plugin-transform-modules-systemjs@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" - integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== +"@babel/plugin-transform-modules-systemjs@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz#8b14d319a177cc9c85ef8b0512afd429d9e2e60b" + integrity sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g== dependencies: - "@babel/helper-module-transforms" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.0" + "@babel/helper-module-transforms" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-validator-identifier" "^7.25.7" + "@babel/traverse" "^7.25.7" -"@babel/plugin-transform-modules-umd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" - integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== +"@babel/plugin-transform-modules-umd@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz#00ee7a7e124289549381bfb0e24d87fd7f848367" + integrity sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" - integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz#a2f3f6d7f38693b462542951748f0a72a34d196d" + integrity sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-new-target@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" - integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== +"@babel/plugin-transform-new-target@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz#52b2bde523b76c548749f38dc3054f1f45e82bc9" + integrity sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" - integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz#befb4900c130bd52fccf2b926314557987f1b552" + integrity sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-numeric-separator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" - integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== +"@babel/plugin-transform-numeric-separator@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz#91e370486371637bd42161052f2602c701386891" + integrity sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-object-rest-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== +"@babel/plugin-transform-object-rest-spread@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz#0904ac16bcce41df4db12d915d6780f85c7fb04b" + integrity sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g== dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/helper-compilation-targets" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/plugin-transform-parameters" "^7.25.7" -"@babel/plugin-transform-object-super@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" - integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== +"@babel/plugin-transform-object-super@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz#582a9cea8cf0a1e02732be5b5a703a38dedf5661" + integrity sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-replace-supers" "^7.25.7" -"@babel/plugin-transform-optional-catch-binding@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" - integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== +"@babel/plugin-transform-optional-catch-binding@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz#2649b86a3bb202c6894ec81a6ddf41b94d8f3103" + integrity sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" - integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== +"@babel/plugin-transform-optional-chaining@^7.25.7", "@babel/plugin-transform-optional-chaining@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz#f46283b78adcc5b6ab988a952f989e7dce70653f" + integrity sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" -"@babel/plugin-transform-parameters@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" - integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== +"@babel/plugin-transform-parameters@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz#80c38b03ef580f6d6bffe1c5254bb35986859ac7" + integrity sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-private-methods@^7.24.7": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz#9bbefbe3649f470d681997e0b64a4b254d877242" - integrity sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw== +"@babel/plugin-transform-private-methods@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz#c790a04f837b4bd61d6b0317b43aa11ff67dce80" + integrity sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-class-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-private-property-in-object@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" - integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== +"@babel/plugin-transform-private-property-in-object@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz#1234f856ce85e061f9688764194e51ea7577c434" + integrity sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-property-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" - integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== +"@babel/plugin-transform-property-literals@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz#a8612b4ea4e10430f00012ecf0155662c7d6550d" + integrity sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-react-display-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" - integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== +"@babel/plugin-transform-react-display-name@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz#2753e875a1b702fb1d806c4f5d4c194d64cadd88" + integrity sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-react-jsx-development@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" - integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== +"@babel/plugin-transform-react-jsx-development@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz#2fbd77887b8fa2942d7cb61edf1029ea1b048554" + integrity sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg== dependencies: - "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.25.7" -"@babel/plugin-transform-react-jsx@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" - integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== +"@babel/plugin-transform-react-jsx@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz#f5e2af6020a562fe048dd343e571c4428e6c5632" + integrity sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/types" "^7.25.2" + "@babel/helper-annotate-as-pure" "^7.25.7" + "@babel/helper-module-imports" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/plugin-syntax-jsx" "^7.25.7" + "@babel/types" "^7.25.7" -"@babel/plugin-transform-react-pure-annotations@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" - integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== +"@babel/plugin-transform-react-pure-annotations@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz#6d0b8dadb2d3c5cbb8ade68c5efd49470b0d65f7" + integrity sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-regenerator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" - integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== +"@babel/plugin-transform-regenerator@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz#6eb006e6d26f627bc2f7844a9f19770721ad6f3e" + integrity sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" - integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== +"@babel/plugin-transform-reserved-words@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz#dc56b25e02afaabef3ce0c5b06b0916e8523e995" + integrity sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-shorthand-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" - integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== +"@babel/plugin-transform-shorthand-properties@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz#92690a9c671915602d91533c278cc8f6bf12275f" + integrity sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" - integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== +"@babel/plugin-transform-spread@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz#df83e899a9fc66284ee601a7b738568435b92998" + integrity sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" -"@babel/plugin-transform-sticky-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" - integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== +"@babel/plugin-transform-sticky-regex@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz#341c7002bef7f29037be7fb9684e374442dd0d17" + integrity sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-template-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" - integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== +"@babel/plugin-transform-template-literals@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz#e566c581bb16d8541dd8701093bb3457adfce16b" + integrity sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-typeof-symbol@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" - integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== +"@babel/plugin-transform-typeof-symbol@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz#debb1287182efd20488f126be343328c679b66eb" + integrity sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-typescript@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" - integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== +"@babel/plugin-transform-typescript@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz#8fc7c3d28ddd36bce45b9b48594129d0e560cfbe" + integrity sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-typescript" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/plugin-syntax-typescript" "^7.25.7" -"@babel/plugin-transform-unicode-escapes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" - integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== +"@babel/plugin-transform-unicode-escapes@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz#973592b6d13a914794e1de8cf1383e50e0f87f81" + integrity sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-unicode-property-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" - integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== +"@babel/plugin-transform-unicode-property-regex@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz#25349197cce964b1343f74fa7cfdf791a1b1919e" + integrity sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-unicode-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" - integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== +"@babel/plugin-transform-unicode-regex@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz#f93a93441baf61f713b6d5552aaa856bfab34809" + integrity sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-unicode-sets-regex@^7.24.7": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz#be664c2a0697ffacd3423595d5edef6049e8946c" - integrity sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA== +"@babel/plugin-transform-unicode-sets-regex@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz#d1b3295d29e0f8f4df76abc909ad1ebee919560c" + integrity sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-regexp-features-plugin" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" -"@babel/preset-env@7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.3.tgz#0bf4769d84ac51d1073ab4a86f00f30a3a83c67c" - integrity sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g== +"@babel/preset-env@7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.8.tgz#dc6b719627fb29cd9cccbbbe041802fd575b524c" + integrity sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg== dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-option" "^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" + "@babel/compat-data" "^7.25.8" + "@babel/helper-compilation-targets" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-validator-option" "^7.25.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.7" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.7" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-import-assertions" "^7.25.7" + "@babel/plugin-syntax-import-attributes" "^7.25.7" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.0" - "@babel/plugin-transform-async-to-generator" "^7.24.7" - "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.25.0" - "@babel/plugin-transform-class-properties" "^7.24.7" - "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.25.0" - "@babel/plugin-transform-computed-properties" "^7.24.7" - "@babel/plugin-transform-destructuring" "^7.24.8" - "@babel/plugin-transform-dotall-regex" "^7.24.7" - "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" - "@babel/plugin-transform-dynamic-import" "^7.24.7" - "@babel/plugin-transform-exponentiation-operator" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.24.7" - "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.25.1" - "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.25.2" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" - "@babel/plugin-transform-member-expression-literals" "^7.24.7" - "@babel/plugin-transform-modules-amd" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.8" - "@babel/plugin-transform-modules-systemjs" "^7.25.0" - "@babel/plugin-transform-modules-umd" "^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" - "@babel/plugin-transform-new-target" "^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" - "@babel/plugin-transform-numeric-separator" "^7.24.7" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-object-super" "^7.24.7" - "@babel/plugin-transform-optional-catch-binding" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.8" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.24.7" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-property-literals" "^7.24.7" - "@babel/plugin-transform-regenerator" "^7.24.7" - "@babel/plugin-transform-reserved-words" "^7.24.7" - "@babel/plugin-transform-shorthand-properties" "^7.24.7" - "@babel/plugin-transform-spread" "^7.24.7" - "@babel/plugin-transform-sticky-regex" "^7.24.7" - "@babel/plugin-transform-template-literals" "^7.24.7" - "@babel/plugin-transform-typeof-symbol" "^7.24.8" - "@babel/plugin-transform-unicode-escapes" "^7.24.7" - "@babel/plugin-transform-unicode-property-regex" "^7.24.7" - "@babel/plugin-transform-unicode-regex" "^7.24.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" + "@babel/plugin-transform-arrow-functions" "^7.25.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.8" + "@babel/plugin-transform-async-to-generator" "^7.25.7" + "@babel/plugin-transform-block-scoped-functions" "^7.25.7" + "@babel/plugin-transform-block-scoping" "^7.25.7" + "@babel/plugin-transform-class-properties" "^7.25.7" + "@babel/plugin-transform-class-static-block" "^7.25.8" + "@babel/plugin-transform-classes" "^7.25.7" + "@babel/plugin-transform-computed-properties" "^7.25.7" + "@babel/plugin-transform-destructuring" "^7.25.7" + "@babel/plugin-transform-dotall-regex" "^7.25.7" + "@babel/plugin-transform-duplicate-keys" "^7.25.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.7" + "@babel/plugin-transform-dynamic-import" "^7.25.8" + "@babel/plugin-transform-exponentiation-operator" "^7.25.7" + "@babel/plugin-transform-export-namespace-from" "^7.25.8" + "@babel/plugin-transform-for-of" "^7.25.7" + "@babel/plugin-transform-function-name" "^7.25.7" + "@babel/plugin-transform-json-strings" "^7.25.8" + "@babel/plugin-transform-literals" "^7.25.7" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.8" + "@babel/plugin-transform-member-expression-literals" "^7.25.7" + "@babel/plugin-transform-modules-amd" "^7.25.7" + "@babel/plugin-transform-modules-commonjs" "^7.25.7" + "@babel/plugin-transform-modules-systemjs" "^7.25.7" + "@babel/plugin-transform-modules-umd" "^7.25.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.7" + "@babel/plugin-transform-new-target" "^7.25.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.8" + "@babel/plugin-transform-numeric-separator" "^7.25.8" + "@babel/plugin-transform-object-rest-spread" "^7.25.8" + "@babel/plugin-transform-object-super" "^7.25.7" + "@babel/plugin-transform-optional-catch-binding" "^7.25.8" + "@babel/plugin-transform-optional-chaining" "^7.25.8" + "@babel/plugin-transform-parameters" "^7.25.7" + "@babel/plugin-transform-private-methods" "^7.25.7" + "@babel/plugin-transform-private-property-in-object" "^7.25.8" + "@babel/plugin-transform-property-literals" "^7.25.7" + "@babel/plugin-transform-regenerator" "^7.25.7" + "@babel/plugin-transform-reserved-words" "^7.25.7" + "@babel/plugin-transform-shorthand-properties" "^7.25.7" + "@babel/plugin-transform-spread" "^7.25.7" + "@babel/plugin-transform-sticky-regex" "^7.25.7" + "@babel/plugin-transform-template-literals" "^7.25.7" + "@babel/plugin-transform-typeof-symbol" "^7.25.7" + "@babel/plugin-transform-unicode-escapes" "^7.25.7" + "@babel/plugin-transform-unicode-property-regex" "^7.25.7" + "@babel/plugin-transform-unicode-regex" "^7.25.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.7" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-corejs3 "^0.10.6" babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.37.1" + core-js-compat "^3.38.1" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -1058,95 +850,81 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" - integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== +"@babel/preset-react@7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.25.7.tgz#081cbe1dea363b732764d06a0fdda67ffa17735d" + integrity sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-transform-react-display-name" "^7.24.7" - "@babel/plugin-transform-react-jsx" "^7.24.7" - "@babel/plugin-transform-react-jsx-development" "^7.24.7" - "@babel/plugin-transform-react-pure-annotations" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-validator-option" "^7.25.7" + "@babel/plugin-transform-react-display-name" "^7.25.7" + "@babel/plugin-transform-react-jsx" "^7.25.7" + "@babel/plugin-transform-react-jsx-development" "^7.25.7" + "@babel/plugin-transform-react-pure-annotations" "^7.25.7" -"@babel/preset-typescript@7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" - integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== +"@babel/preset-typescript@7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz#43c5b68eccb856ae5b52274b77b1c3c413cde1b7" + integrity sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-typescript" "^7.24.7" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-validator-option" "^7.25.7" + "@babel/plugin-syntax-jsx" "^7.25.7" + "@babel/plugin-transform-modules-commonjs" "^7.25.7" + "@babel/plugin-transform-typescript" "^7.25.7" "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" - integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.7.tgz#7ffb53c37a8f247c8c4d335e89cdf16a2e0d0fb6" + integrity sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.24.7", "@babel/template@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" - integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== +"@babel/template@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.7.tgz#27f69ce382855d915b14ab0fe5fb4cbf88fa0769" + integrity sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA== dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.25.0" - "@babel/types" "^7.25.0" + "@babel/code-frame" "^7.25.7" + "@babel/parser" "^7.25.7" + "@babel/types" "^7.25.7" -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.4.tgz#648678046990f2957407e3086e97044f13c3e18e" - integrity sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg== +"@babel/traverse@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.7.tgz#83e367619be1cab8e4f2892ef30ba04c26a40fa8" + integrity sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg== dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.4" - "@babel/parser" "^7.25.4" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.4" + "@babel/code-frame" "^7.25.7" + "@babel/generator" "^7.25.7" + "@babel/parser" "^7.25.7" + "@babel/template" "^7.25.7" + "@babel/types" "^7.25.7" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== +"@babel/types@^7.25.7", "@babel/types@^7.25.8", "@babel/types@^7.4.4": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1" + integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.4.tgz#6bcb46c72fdf1012a209d016c07f769e10adcb5f" - integrity sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ== - dependencies: - "@babel/helper-string-parser" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" + "@babel/helper-string-parser" "^7.25.7" + "@babel/helper-validator-identifier" "^7.25.7" to-fast-properties "^2.0.0" "@csstools/css-parser-algorithms@^2.1.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz#c45440d1efa2954006748a01697072dae5881bcd" - integrity sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA== + version "2.7.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz#6d93a8f7d8aeb7cd9ed0868f946e46f021b6aa70" + integrity sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw== "@csstools/css-tokenizer@^2.1.1": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz#a4b8718ed7fcd2dcd555de16b31ca59ad4b96a06" - integrity sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz#1d8b2e200197cf5f35ceb07ca2dade31f3a00ae8" + integrity sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg== "@csstools/media-query-list-parser@^2.0.4": - version "2.1.9" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz#feb4b7268f998956eb3ded69507869e73d005dda" - integrity sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA== + version "2.1.13" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz#f00be93f6bede07c14ddf51a168ad2748e4fe9e5" + integrity sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA== "@csstools/selector-specificity@^2.2.0": version "2.2.0" @@ -1166,9 +944,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + version "4.11.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" + integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -1185,55 +963,55 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@fortawesome/fontawesome-common-types@6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz#88da2b70d6ca18aaa6ed3687832e11f39e80624b" - integrity sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ== +"@fortawesome/fontawesome-common-types@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz#31ab07ca6a06358c5de4d295d4711b675006163f" + integrity sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw== -"@fortawesome/fontawesome-free@6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz#1ee0c174e472c84b23cb46c995154dc383e3b4fe" - integrity sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ== +"@fortawesome/fontawesome-free@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.6.0.tgz#0e984f0f2344ee513c185d87d77defac4c0c8224" + integrity sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow== -"@fortawesome/fontawesome-svg-core@6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz#3727552eff9179506e9203d72feb5b1063c11a21" - integrity sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw== +"@fortawesome/fontawesome-svg-core@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz#2a24c32ef92136e98eae2ff334a27145188295ff" + integrity sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg== dependencies: - "@fortawesome/fontawesome-common-types" "6.4.0" + "@fortawesome/fontawesome-common-types" "6.6.0" -"@fortawesome/free-regular-svg-icons@6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.0.tgz#cacc53bd8d832d46feead412d9ea9ce80a55e13a" - integrity sha512-ZfycI7D0KWPZtf7wtMFnQxs8qjBXArRzczABuMQqecA/nXohquJ5J/RCR77PmY5qGWkxAZDxpnUFVXKwtY/jPw== +"@fortawesome/free-regular-svg-icons@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.6.0.tgz#fc49a947ac8dfd20403c9ea5f37f0919425bdf04" + integrity sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ== dependencies: - "@fortawesome/fontawesome-common-types" "6.4.0" + "@fortawesome/fontawesome-common-types" "6.6.0" -"@fortawesome/free-solid-svg-icons@6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz#48c0e790847fa56299e2f26b82b39663b8ad7119" - integrity sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ== +"@fortawesome/free-solid-svg-icons@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.6.0.tgz#061751ca43be4c4d814f0adbda8f006164ec9f3b" + integrity sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA== dependencies: - "@fortawesome/fontawesome-common-types" "6.4.0" + "@fortawesome/fontawesome-common-types" "6.6.0" -"@fortawesome/react-fontawesome@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz#d90dd8a9211830b4e3c08e94b63a0ba7291ddcf4" - integrity sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw== +"@fortawesome/react-fontawesome@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz#68b058f9132b46c8599875f6a636dad231af78d4" + integrity sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g== dependencies: prop-types "^15.8.1" -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: - "@humanwhocodes/object-schema" "^2.0.2" + "@humanwhocodes/object-schema" "^2.0.3" debug "^4.3.1" minimatch "^3.0.5" @@ -1242,11 +1020,23 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": +"@humanwhocodes/object-schema@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" @@ -1275,11 +1065,11 @@ "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -1331,6 +1121,89 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@parcel/watcher-android-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz#c2c19a3c442313ff007d2d7a9c2c1dd3e1c9ca84" + integrity sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg== + +"@parcel/watcher-darwin-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz#c817c7a3b4f3a79c1535bfe54a1c2818d9ffdc34" + integrity sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA== + +"@parcel/watcher-darwin-x64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz#1a3f69d9323eae4f1c61a5f480a59c478d2cb020" + integrity sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg== + +"@parcel/watcher-freebsd-x64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz#0d67fef1609f90ba6a8a662bc76a55fc93706fc8" + integrity sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w== + +"@parcel/watcher-linux-arm-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz#ce5b340da5829b8e546bd00f752ae5292e1c702d" + integrity sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA== + +"@parcel/watcher-linux-arm64-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz#6d7c00dde6d40608f9554e73998db11b2b1ff7c7" + integrity sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA== + +"@parcel/watcher-linux-arm64-musl@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz#bd39bc71015f08a4a31a47cd89c236b9d6a7f635" + integrity sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA== + +"@parcel/watcher-linux-x64-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz#0ce29966b082fb6cdd3de44f2f74057eef2c9e39" + integrity sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg== + +"@parcel/watcher-linux-x64-musl@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz#d2ebbf60e407170bb647cd6e447f4f2bab19ad16" + integrity sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ== + +"@parcel/watcher-win32-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz#eb4deef37e80f0b5e2f215dd6d7a6d40a85f8adc" + integrity sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg== + +"@parcel/watcher-win32-ia32@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz#94fbd4b497be39fd5c8c71ba05436927842c9df7" + integrity sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw== + +"@parcel/watcher-win32-x64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz#4bf920912f67cae5f2d264f58df81abfea68dadf" + integrity sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A== + +"@parcel/watcher@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.4.1.tgz#a50275151a1bb110879c6123589dba90c19f1bf8" + integrity sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.4.1" + "@parcel/watcher-darwin-arm64" "2.4.1" + "@parcel/watcher-darwin-x64" "2.4.1" + "@parcel/watcher-freebsd-x64" "2.4.1" + "@parcel/watcher-linux-arm-glibc" "2.4.1" + "@parcel/watcher-linux-arm64-glibc" "2.4.1" + "@parcel/watcher-linux-arm64-musl" "2.4.1" + "@parcel/watcher-linux-x64-glibc" "2.4.1" + "@parcel/watcher-linux-x64-musl" "2.4.1" + "@parcel/watcher-win32-arm64" "2.4.1" + "@parcel/watcher-win32-ia32" "2.4.1" + "@parcel/watcher-win32-x64" "2.4.1" + "@react-dnd/asap@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@react-dnd/asap/-/asap-4.0.1.tgz#5291850a6b58ce6f2da25352a64f1b0674871aab" @@ -1346,68 +1219,92 @@ resolved "https://registry.yarnpkg.com/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz#a3031eb54129f2c66b2753f8404266ec7bf67f0a" integrity sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg== -"@sentry-internal/tracing@7.51.2": - version "7.51.2" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.51.2.tgz#17833047646426ca71445327018ffcb33506a699" - integrity sha512-OBNZn7C4CyocmlSMUPfkY9ORgab346vTHu5kX35PgW5XR51VD2nO5iJCFbyFcsmmRWyCJcZzwMNARouc2V4V8A== - dependencies: - "@sentry/core" "7.51.2" - "@sentry/types" "7.51.2" - "@sentry/utils" "7.51.2" - tslib "^1.9.3" +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== -"@sentry/browser@7.51.2": - version "7.51.2" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.51.2.tgz#c01758a54c613be45df58ab503805737256f51a4" - integrity sha512-FQFEaTFbvYHPQE2emFjNoGSy+jXplwzoM/XEUBRjrGo62lf8BhMvWnPeG3H3UWPgrWA1mq0amvHRwXUkwofk0g== +"@sentry-internal/feedback@7.119.1": + version "7.119.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.119.1.tgz#98285dc9dba0ab62369d758124901b00faf58697" + integrity sha512-EPyW6EKZmhKpw/OQUPRkTynXecZdYl4uhZwdZuGqnGMAzswPOgQvFrkwsOuPYvoMfXqCH7YuRqyJrox3uBOrTA== dependencies: - "@sentry-internal/tracing" "7.51.2" - "@sentry/core" "7.51.2" - "@sentry/replay" "7.51.2" - "@sentry/types" "7.51.2" - "@sentry/utils" "7.51.2" - tslib "^1.9.3" + "@sentry/core" "7.119.1" + "@sentry/types" "7.119.1" + "@sentry/utils" "7.119.1" -"@sentry/core@7.51.2": - version "7.51.2" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.51.2.tgz#f2c938de334f9bf26f4416079168275832423964" - integrity sha512-p8ZiSBxpKe+rkXDMEcgmdoyIHM/1bhpINLZUFPiFH8vzomEr7sgnwRhyrU8y/ADnkPeNg/2YF3QpDpk0OgZJUA== +"@sentry-internal/replay-canvas@7.119.1": + version "7.119.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.119.1.tgz#b1413fb37734d609b0745ac24d49ddf9d63b9c51" + integrity sha512-O/lrzENbMhP/UDr7LwmfOWTjD9PLNmdaCF408Wx8SDuj7Iwc+VasGfHg7fPH4Pdr4nJON6oh+UqoV4IoG05u+A== dependencies: - "@sentry/types" "7.51.2" - "@sentry/utils" "7.51.2" - tslib "^1.9.3" + "@sentry/core" "7.119.1" + "@sentry/replay" "7.119.1" + "@sentry/types" "7.119.1" + "@sentry/utils" "7.119.1" -"@sentry/integrations@7.51.2": - version "7.51.2" - resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.51.2.tgz#fce58b9ced601c7f93344b508c67c69a9c883f3d" - integrity sha512-ZnSptbuDQOoQ13mFX9vvLDfXlbMGjenW2fMIssi9+08B7fD6qxmetkYnWmBK+oEipjoGA//0240Fj8FUvZr0Qg== +"@sentry-internal/tracing@7.119.1": + version "7.119.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.119.1.tgz#500d50d451bfd0ce6b185e9f112208229739ab03" + integrity sha512-cI0YraPd6qBwvUA3wQdPGTy8PzAoK0NZiaTN1LM3IczdPegehWOaEG5GVTnpGnTsmBAzn1xnBXNBhgiU4dgcrQ== dependencies: - "@sentry/types" "7.51.2" - "@sentry/utils" "7.51.2" + "@sentry/core" "7.119.1" + "@sentry/types" "7.119.1" + "@sentry/utils" "7.119.1" + +"@sentry/browser@7.119.1": + version "7.119.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.119.1.tgz#260470dd7fd18de366017c3bf23a252a24d2ff05" + integrity sha512-aMwAnFU4iAPeLyZvqmOQaEDHt/Dkf8rpgYeJ0OEi50dmP6AjG+KIAMCXU7CYCCQDn70ITJo8QD5+KzCoZPYz0A== + dependencies: + "@sentry-internal/feedback" "7.119.1" + "@sentry-internal/replay-canvas" "7.119.1" + "@sentry-internal/tracing" "7.119.1" + "@sentry/core" "7.119.1" + "@sentry/integrations" "7.119.1" + "@sentry/replay" "7.119.1" + "@sentry/types" "7.119.1" + "@sentry/utils" "7.119.1" + +"@sentry/core@7.119.1": + version "7.119.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.119.1.tgz#63e949cad167a0ee5e52986c93b96ff1d6a05b57" + integrity sha512-YUNnH7O7paVd+UmpArWCPH4Phlb5LwrkWVqzFWqL3xPyCcTSof2RL8UmvpkTjgYJjJ+NDfq5mPFkqv3aOEn5Sw== + dependencies: + "@sentry/types" "7.119.1" + "@sentry/utils" "7.119.1" + +"@sentry/integrations@7.119.1": + version "7.119.1" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.119.1.tgz#9fc17aa9fcb942fbd2fc12eecd77a0f316897960" + integrity sha512-CGmLEPnaBqbUleVqrmGYjRjf5/OwjUXo57I9t0KKWViq81mWnYhaUhRZWFNoCNQHns+3+GPCOMvl0zlawt+evw== + dependencies: + "@sentry/core" "7.119.1" + "@sentry/types" "7.119.1" + "@sentry/utils" "7.119.1" localforage "^1.8.1" - tslib "^1.9.3" -"@sentry/replay@7.51.2": - version "7.51.2" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.51.2.tgz#1f54e92b472ab87dfdb4e8cd6b8c8252600fe7b0" - integrity sha512-W8YnSxkK9LTUXDaYciM7Hn87u57AX9qvH8jGcxZZnvpKqHlDXOpSV8LRtBkARsTwgLgswROImSifY0ic0lyCWg== +"@sentry/replay@7.119.1": + version "7.119.1" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.119.1.tgz#117cf493a3008a39943b7d571d451c6218542847" + integrity sha512-4da+ruMEipuAZf35Ybt2StBdV1S+oJbSVccGpnl9w6RoeQoloT4ztR6ML3UcFDTXeTPT1FnHWDCyOfST0O7XMw== dependencies: - "@sentry/core" "7.51.2" - "@sentry/types" "7.51.2" - "@sentry/utils" "7.51.2" + "@sentry-internal/tracing" "7.119.1" + "@sentry/core" "7.119.1" + "@sentry/types" "7.119.1" + "@sentry/utils" "7.119.1" -"@sentry/types@7.51.2": - version "7.51.2" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.51.2.tgz#cb742f374d9549195f62c462c915adeafed31d65" - integrity sha512-/hLnZVrcK7G5BQoD/60u9Qak8c9AvwV8za8TtYPJDUeW59GrqnqOkFji7RVhI7oH1OX4iBxV+9pAKzfYE6A6SA== +"@sentry/types@7.119.1": + version "7.119.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.119.1.tgz#f9c3c12e217c9078a6d556c92590e42a39b750dd" + integrity sha512-4G2mcZNnYzK3pa2PuTq+M2GcwBRY/yy1rF+HfZU+LAPZr98nzq2X3+mJHNJoobeHRkvVh7YZMPi4ogXiIS5VNQ== -"@sentry/utils@7.51.2": - version "7.51.2" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.51.2.tgz#2a52ac2cfb00ffd128248981279c0a561b39eccb" - integrity sha512-EcjBU7qG4IG+DpIPvdgIBcdIofROMawKoRUNKraeKzH/waEYH9DzCaqp/mzc5/rPBhpDB4BShX9xDDSeH+8c0A== +"@sentry/utils@7.119.1": + version "7.119.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.119.1.tgz#08b28fa8170987a60e149e2102e83395a95e9a89" + integrity sha512-ju/Cvyeu/vkfC5/XBV30UNet5kLEicZmXSyuLwZu95hEbL+foPdxN+re7pCI/eNqfe3B2vz7lvz5afLVOlQ2Hg== dependencies: - "@sentry/types" "7.51.2" - tslib "^1.9.3" + "@sentry/types" "7.119.1" "@types/archiver@^5.3.1": version "5.3.4" @@ -1416,26 +1313,10 @@ dependencies: "@types/readdir-glob" "*" -"@types/eslint-scope@^3.7.3": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.56.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" - integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/history@^4.7.11": version "4.7.11" @@ -1455,7 +1336,7 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== -"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -1476,18 +1357,18 @@ integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node@*": - version "20.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== dependencies: - undici-types "~5.26.4" + undici-types "~6.19.2" -"@types/node@18.19.31": - version "18.19.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" - integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== +"@types/node@20.16.11": + version "20.16.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.11.tgz#9b544c3e716b1577ac12e70f9145193f32750b33" + integrity sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw== dependencies: - undici-types "~5.26.4" + undici-types "~6.19.2" "@types/normalize-package-data@^2.4.0": version "2.4.4" @@ -1514,9 +1395,9 @@ postcss "^8.0.0" "@types/prop-types@*": - version "15.7.12" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" - integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + version "15.7.13" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451" + integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA== "@types/react-dom@18.2.25": version "18.2.25" @@ -1525,17 +1406,17 @@ dependencies: "@types/react" "*" -"@types/react-lazyload@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@types/react-lazyload/-/react-lazyload-3.2.0.tgz#b763f8f0c724df2c969d7e0b3a56c6aa2720fa1f" - integrity sha512-4+r+z8Cf7L/mgxA1vl5uHx5GS/8gY2jqq2p5r5WCm+nUsg9KilwQ+8uaJA3EUlLj57AOzOfGGwwRJ5LOVl8fwA== +"@types/react-lazyload@3.2.3": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@types/react-lazyload/-/react-lazyload-3.2.3.tgz#42129b6e11353bfe8ed2ba5e1b964676ee23668b" + integrity sha512-s03gWlHXiFqZr7TEFDTx8Lkl+ZEYrwTkXP9MNZ3Z3blzsPrnkYjgeSK2tjfzVv/TYVCnDk6TZwNRDHQlHy/1Ug== dependencies: "@types/react" "*" "@types/react-redux@^7.1.16": - version "7.1.33" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" - integrity sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg== + version "7.1.34" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.34.tgz#83613e1957c481521e6776beeac4fd506d11bd0e" + integrity sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -1559,21 +1440,29 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react-text-truncate@0.14.1": - version "0.14.1" - resolved "https://registry.yarnpkg.com/@types/react-text-truncate/-/react-text-truncate-0.14.1.tgz#3d24eca927e5fd1bfd789b047ae8ec53ba878b28" - integrity sha512-yCtOOOJzrsfWF6TbnTDZz0gM5JYOxJmewExaTJTv01E7yrmpkNcmVny2fAtsNgSFCp8k2VgCePBoIvFBpKyEOw== +"@types/react-text-truncate@0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@types/react-text-truncate/-/react-text-truncate-0.19.0.tgz#322dd718dcbe1267a9d1279f8ac4dc844c322a13" + integrity sha512-8H7BjVf7Rp3ERTTiFZpQf6a5hllwdJrWuQ92nwQGp7DWQ2Ju89GRuzXHuZHXU9T+hLTGLCUPbimjQnW1mAogqQ== dependencies: "@types/react" "*" -"@types/react-window@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@types/react-window/-/react-window-1.8.5.tgz#285fcc5cea703eef78d90f499e1457e9b5c02fc1" - integrity sha512-V9q3CvhC9Jk9bWBOysPGaWy/Z0lxYcTXLtLipkt2cnRj1JOSFNF7wqGpkScSXMgBwC+fnVRg/7shwgddBG5ICw== +"@types/react-window@1.8.8": + version "1.8.8" + resolved "https://registry.yarnpkg.com/@types/react-window/-/react-window-1.8.8.tgz#c20645414d142364fbe735818e1c1e0a145696e3" + integrity sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@18.2.79": +"@types/react@*": + version "18.3.11" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.11.tgz#9d530601ff843ee0d7030d4227ea4360236bd537" + integrity sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/react@18.2.79": version "18.2.79" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.79.tgz#c40efb4f255711f554d47b449f796d1c7756d865" integrity sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w== @@ -1588,16 +1477,61 @@ dependencies: "@types/node" "*" -"@types/redux-actions@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@types/redux-actions/-/redux-actions-2.6.2.tgz#5956d9e7b9a644358e2c0610f47b1fa3060edc21" - integrity sha512-TvcINy8rWFANcpc3EiEQX9Yv3owM3d3KIrqr2ryUIOhYIYzXA/bhDZeGSSSuai62iVR2qMZUgz9tQ5kr0Kl+Tg== +"@types/redux-actions@2.6.5": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@types/redux-actions/-/redux-actions-2.6.5.tgz#3728477ada6c4bc0fe54ffae11def23a65c0714b" + integrity sha512-RgXOigay5cNweP+xH1ru+Vaaj1xXYLpWIfSVO8cSA8Ii2xvR+HRfWYdLe1UVOA8X0kIklalGOa0DTDyld0obkg== "@types/semver@^7.5.0": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== +"@types/source-list-map@*": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.6.tgz#164e169dd061795b50b83c19e4d3be09f8d3a454" + integrity sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g== + +"@types/tapable@^1": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.12.tgz#bc2cab12e87978eee89fb21576b670350d6d86ab" + integrity sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q== + +"@types/uglify-js@*": + version "3.17.5" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.5.tgz#905ce03a3cbbf2e31cbefcbc68d15497ee2e17df" + integrity sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ== + dependencies: + source-map "^0.6.1" + +"@types/webpack-livereload-plugin@2.3.6": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@types/webpack-livereload-plugin/-/webpack-livereload-plugin-2.3.6.tgz#2c3ccefc8858525f40aeb8be0f784d5027144e23" + integrity sha512-H8nZSOWSiY/6kCpOmbutZPu7Sai1xyEXo/SrXQPCymMPNBwpYWAdOsjKqr32d+IrVjnn9GGgKSYY34TEPRxJ/A== + dependencies: + "@types/webpack" "^4" + +"@types/webpack-sources@*": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.3.tgz#b667bd13e9fa15a9c26603dce502c7985418c3d8" + integrity sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4": + version "4.41.39" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.39.tgz#ab6feaeef8e074d0b584bbe4a4e2dc604b58eed7" + integrity sha512-otxUJvoi6FbBq/64gGH34eblpKLgdi+gf08GaAh8Bx6So0ZZic028Ev/SUxD22gbthMKCkeeiXEat1kHLDJfYg== + dependencies: + "@types/node" "*" + "@types/tapable" "^1" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + anymatch "^3.0.0" + source-map "^0.6.0" + "@typescript-eslint/eslint-plugin@6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" @@ -1689,7 +1623,7 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.11.5": +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== @@ -1755,7 +1689,7 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== -"@webassemblyjs/wasm-edit@^1.11.5": +"@webassemblyjs/wasm-edit@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== @@ -1790,7 +1724,7 @@ "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.11.5": +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== @@ -1842,10 +1776,10 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -1853,9 +1787,9 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== add-px-to-style@1.0.0: version "1.0.0" @@ -1900,55 +1834,24 @@ ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-cyan@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" - integrity sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A== - dependencies: - ansi-wrap "0.1.0" - -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw== - dependencies: - ansi-wrap "0.1.0" - -ansi-red@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" - integrity sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow== - dependencies: - ansi-wrap "0.1.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^3.2.1: version "3.2.1" @@ -1964,12 +1867,12 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-wrap@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -anymatch@^3.1.1, anymatch@~3.1.2: +anymatch@^3.0.0, anymatch@^3.1.1, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -2027,24 +1930,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -arr-diff@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" - integrity sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q== - dependencies: - arr-flatten "^1.0.1" - array-slice "^0.2.3" - -arr-flatten@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" - integrity sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA== - array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" @@ -2053,7 +1938,7 @@ array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" -array-includes@^3.1.6, array-includes@^3.1.7: +array-includes@^3.1.6, array-includes@^3.1.8: version "3.1.8" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== @@ -2065,17 +1950,12 @@ array-includes@^3.1.6, array-includes@^3.1.7: get-intrinsic "^1.2.4" is-string "^1.0.7" -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - integrity sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q== - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlast@^1.2.4: +array.prototype.findlast@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== @@ -2087,7 +1967,7 @@ array.prototype.findlast@^1.2.4: es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" -array.prototype.findlastindex@^1.2.3: +array.prototype.findlastindex@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== @@ -2119,25 +1999,15 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.toreversed@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" - integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" - integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== - dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.1.0" + es-abstract "^1.23.3" + es-errors "^1.3.0" es-shim-unscopables "^1.0.2" arraybuffer.prototype.slice@^1.0.3: @@ -2172,9 +2042,9 @@ async@^2.6.4: lodash "^4.17.14" async@^3.2.4: - version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== autoprefixer@10.4.20: version "10.4.20" @@ -2195,10 +2065,10 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -babel-loader@9.1.3: - version "9.1.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a" - integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw== +babel-loader@9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" + integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== dependencies: find-cache-dir "^4.0.0" schema-utils "^4.0.0" @@ -2209,28 +2079,28 @@ babel-plugin-inline-classnames@2.0.1: integrity sha512-Pq/jJ6hTiGiqcMmy2d4CyJcfBDeUHOdQl1t1MDWNaSKR2RxDmShSAx4Zqz6NDmFaiinaRqF8eQoTVgSRGU+McQ== babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" - integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.10.4: - version "0.10.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" - integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" - core-js-compat "^3.36.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" - integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" babel-plugin-transform-react-remove-prop-types@0.4.24: version "0.4.24" @@ -2314,30 +2184,20 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" -browserslist@^4.14.5, browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== +browserslist@^4.21.10, browserslist@^4.23.3, browserslist@^4.24.0: + version "4.24.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" + integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -browserslist@^4.23.1, browserslist@^4.23.3: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== - dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" + caniuse-lite "^1.0.30001663" + electron-to-chromium "^1.5.28" node-releases "^2.0.18" update-browserslist-db "^1.1.0" @@ -2407,21 +2267,10 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001646: - version "1.0.30001653" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz" - integrity sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw== - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" +caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001663: + version "1.0.30001668" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz#98e214455329f54bf7a4d70b49c9794f0fbedbed" + integrity sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw== chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -2440,7 +2289,7 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: +chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -2455,17 +2304,19 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" + integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== + dependencies: + readdirp "^4.0.1" + chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== -classnames@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== - -classnames@^2.2.6: +classnames@2.5.1, classnames@^2.2.6: version "2.5.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== @@ -2541,11 +2392,6 @@ color-string@^0.3.0: dependencies: color-name "^1.0.0" -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - color@^0.11.0: version "0.11.4" resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" @@ -2628,14 +2474,7 @@ copy-anything@^2.0.1: dependencies: is-what "^3.14.1" -core-js-compat@^3.36.1: - version "3.37.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.0.tgz#d9570e544163779bb4dff1031c7972f44918dc73" - integrity sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA== - dependencies: - browserslist "^4.23.0" - -core-js-compat@^3.37.1: +core-js-compat@^3.38.0, core-js-compat@^3.38.1: version "3.38.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== @@ -2699,7 +2538,7 @@ create-react-context@^0.3.0: gud "^1.0.0" warning "^4.0.3" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2719,9 +2558,9 @@ css-color-function@~1.3.3: rgb "~0.1.0" css-functions-list@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.1.tgz#2eb205d8ce9f9ce74c5c1d7490b66b77c45ce3ea" - integrity sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ== + version "3.2.3" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.3.tgz#95652b0c24f0f59b291a9fc386041a19d4f40dbe" + integrity sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA== css-loader@6.7.3: version "6.7.3" @@ -2824,11 +2663,11 @@ debug@^3.1.0, debug@^3.2.7: ms "^2.1.1" debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: - ms "2.1.2" + ms "^2.1.3" decamelize-keys@^1.1.0: version "1.1.1" @@ -2902,6 +2741,11 @@ delegate@^3.1.2: resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-node-es@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" @@ -3008,15 +2852,15 @@ dotenv@^16.0.3: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== -electron-to-chromium@^1.4.668: - version "1.4.745" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.745.tgz#9c202ce9cbf18a5b5e0ca47145fd127cc4dd2290" - integrity sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.5.4: - version "1.5.9" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.9.tgz#3e92950e3a409d109371b7a153a9c5712e2509fd" - integrity sha512-HfkT8ndXR0SEkU8gBQQM3rz035bpE/hxkZ1YIt4KJPEFES68HfIU6LzKukH0H794Lm83WJtkSAMfEToxCs15VA== +electron-to-chromium@^1.5.28: + version "1.5.36" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.36.tgz#ec41047f0e1446ec5dce78ed5970116533139b88" + integrity sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw== element-class@0.2.2: version "0.2.2" @@ -3028,6 +2872,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -3040,10 +2889,10 @@ end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enhanced-resolve@^5.0.0, enhanced-resolve@^5.15.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" - integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.1: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -3054,9 +2903,9 @@ entities@^2.0.0: integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== envinfo@^7.7.3: - version "7.12.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.12.0.tgz#b56723b39c2053d67ea5714f026d05d4f5cc7acd" - integrity sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg== + version "7.14.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" + integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== errno@^0.1.1: version "0.1.8" @@ -3086,7 +2935,7 @@ error@^7.0.0: dependencies: string-template "~0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: +es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -3145,35 +2994,35 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-iterator-helpers@^1.0.17: - version "1.0.18" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" - integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== +es-iterator-helpers@^1.0.19: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz#f6d745d342aea214fe09497e7152170dc333a7a6" + integrity sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.23.0" + es-abstract "^1.23.3" es-errors "^1.3.0" es-set-tostringtag "^2.0.3" function-bind "^1.1.2" get-intrinsic "^1.2.4" - globalthis "^1.0.3" + globalthis "^1.0.4" has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" internal-slot "^1.0.7" - iterator.prototype "^1.1.2" + iterator.prototype "^1.1.3" safe-array-concat "^1.1.2" es-module-lexer@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.0.tgz#4878fee3789ad99e065f975fdd3c645529ff0236" - integrity sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw== + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== es-object-atoms@^1.0.0: version "1.0.0" @@ -3212,12 +3061,12 @@ es6-promise@^4.2.8: resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== -escalade@^3.1.1, escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== @@ -3241,10 +3090,10 @@ eslint-import-resolver-node@^0.3.9: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== dependencies: debug "^3.2.7" @@ -3258,37 +3107,31 @@ eslint-plugin-filenames@1.3.2: lodash.snakecase "4.1.1" lodash.upperfirst "4.3.1" -eslint-plugin-import@2.29.1: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== +eslint-plugin-import@2.31.0: + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" array.prototype.flat "^1.3.2" array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" semver "^6.3.1" + string.prototype.trimend "^1.0.8" tsconfig-paths "^3.15.0" -eslint-plugin-json@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz#251108ba1681c332e0a442ef9513bd293619de67" - integrity sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g== - dependencies: - lodash "^4.17.21" - vscode-json-languageservice "^4.1.6" - eslint-plugin-prettier@4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" @@ -3296,39 +3139,39 @@ eslint-plugin-prettier@4.2.1: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react-hooks@4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== +eslint-plugin-react-hooks@4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== -eslint-plugin-react@7.34.1: - version "7.34.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" - integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== +eslint-plugin-react@7.37.1: + version "7.37.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz#56493d7d69174d0d828bc83afeffe96903fdadbd" + integrity sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg== dependencies: - array-includes "^3.1.7" - array.prototype.findlast "^1.2.4" + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" array.prototype.flatmap "^1.3.2" - array.prototype.toreversed "^1.1.2" - array.prototype.tosorted "^1.1.3" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.17" + es-iterator-helpers "^1.0.19" estraverse "^5.3.0" + hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" - object.hasown "^1.1.3" - object.values "^1.1.7" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.0" prop-types "^15.8.1" resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.10" + string.prototype.matchall "^4.0.11" + string.prototype.repeat "^1.0.0" -eslint-plugin-simple-import-sort@12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.0.tgz#8186ad55474d2f5c986a2f1bf70625a981e30d05" - integrity sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig== +eslint-plugin-simple-import-sort@12.1.1: + version "12.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz#e64bfdaf91c5b98a298619aa634a9f7aa43b709e" + integrity sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA== eslint-scope@5.1.1: version "5.1.1" @@ -3356,16 +3199,16 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.57.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== +eslint@8.57.1: + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -3410,9 +3253,9 @@ espree@^9.6.0, espree@^9.6.1: eslint-visitor-keys "^3.4.1" esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -3453,23 +3296,6 @@ eventsource@^1.0.7: resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.2.tgz#bc75ae1c60209e7cb1541231980460343eaea7c2" integrity sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA== -extend-shallow@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" - integrity sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw== - dependencies: - kind-of "^1.1.0" - -fancy-log@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3501,6 +3327,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-uri@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.2.tgz#d78b298cf70fd3b752fd951175a3da6a7b48f024" + integrity sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row== + fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" @@ -3556,15 +3387,15 @@ filemanager-webpack-plugin@8.0.0: normalize-path "^3.0.0" schema-utils "^4.0.0" -filesize@10.0.7: - version "10.0.7" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.0.7.tgz#2237a816ee60a83fd0c3382ae70800e54eced3ad" - integrity sha512-iMRG7Qo9nayLoU3PNCiLizYtsy4W1ClrapeCwEgtiQelOAOuRJiw4QaLI+sSr8xr901dgHv+EYP2bCusGZgoiA== +filesize@10.1.6: + version "10.1.6" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.6.tgz#31194da825ac58689c0bce3948f33ce83aabd361" + integrity sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -3619,12 +3450,12 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== -focus-lock@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.8.1.tgz#bb36968abf77a2063fa173cb6c47b12ac8599d33" - integrity sha512-/LFZOIo82WDsyyv7h7oc0MJF9ACOvDRdx9rWPZ2pgMfNWu/z8hQDBtOchuB/0BVLmuFOZjV02YwUVzNsWx/EzA== +focus-lock@^0.11.6: + version "0.11.6" + resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.11.6.tgz#e8821e21d218f03e100f7dc27b733f9c4f61e683" + integrity sha512-KSuV3ur4gf2KqMNoZx3nXNVhqCkn42GuTYCX4tXPEwf0MjpFQmNMiN6m7dXaUXgIoivL6/65agoUMg4RLS0Vbg== dependencies: - tslib "^1.9.3" + tslib "^2.0.3" for-each@^0.3.3: version "0.3.3" @@ -3633,6 +3464,14 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + fork-ts-checker-webpack-plugin@8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz#dae45dfe7298aa5d553e2580096ced79b6179504" @@ -3671,9 +3510,9 @@ fs-extra@^10.0.0, fs-extra@^10.1.0: universalify "^2.0.0" fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== fs.realpath@^1.0.0: version "1.0.0" @@ -3690,7 +3529,7 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: +function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -3759,6 +3598,18 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.0.tgz#6031df0d7b65eaa1ccb9b29b5ced16cea658e77e" + integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^4.0.1" + minimatch "^10.0.0" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -3771,16 +3622,6 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^9.2.0: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - global-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -3809,12 +3650,13 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== +globalthis@^1.0.3, globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.0.1, globby@^11.1.0: version "11.1.0" @@ -3847,7 +3689,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -3867,13 +3709,6 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -3974,10 +3809,10 @@ html-tags@^3.3.1: resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== -html-webpack-plugin@5.5.1: - version "5.5.1" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763" - integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA== +html-webpack-plugin@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" + integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -4018,9 +3853,9 @@ ieee754@^1.1.13: integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0, ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== image-size@~0.5.0: version "0.5.5" @@ -4033,9 +3868,9 @@ immediate@~3.0.5: integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== "immutable@^3.8.1 || ^4.0.0", immutable@^4.0.0: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + version "4.3.7" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" + integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -4051,9 +3886,9 @@ import-lazy@^4.0.0: integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -4162,12 +3997,12 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== +is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.5.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" is-data-view@^1.0.1: version "1.0.1" @@ -4359,15 +4194,10 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isstream@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== +iterator.prototype@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.3.tgz#016c2abe0be3bbdb8319852884f60908ac62bf9c" + integrity sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ== dependencies: define-properties "^1.2.1" get-intrinsic "^1.2.1" @@ -4375,6 +4205,13 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" +jackspeak@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.2.tgz#11f9468a3730c6ff6f56823a820d7e3be9bef015" + integrity sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw== + dependencies: + "@isaacs/cliui" "^8.0.2" + jdu@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/jdu/-/jdu-1.0.0.tgz#28f1e388501785ae0a1d93e93ed0b14dd41e51ce" @@ -4390,14 +4227,14 @@ jest-worker@^27.4.5: supports-color "^8.0.0" jiti@^1.18.2: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== -jquery@3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.0.tgz#fe2c01a05da500709006d8790fe21c8a39d75612" - integrity sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ== +jquery@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -4411,15 +4248,10 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +jsesc@^3.0.2, jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== json-buffer@3.0.1: version "3.0.1" @@ -4458,11 +4290,6 @@ json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -4494,11 +4321,6 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" -kind-of@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" - integrity sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g== - kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -4609,9 +4431,9 @@ loader-utils@^2.0.0: json5 "^2.1.2" loader-utils@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" + integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== localforage@^1.8.1: version "1.10.0" @@ -4725,10 +4547,10 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lru-cache@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lru-cache@^11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.1.tgz#3a732fbfedb82c5ba7bca6564ad3f42afcb6e147" + integrity sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ== lru-cache@^5.1.1: version "5.1.1" @@ -4820,11 +4642,11 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.0, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: @@ -4862,12 +4684,13 @@ mini-create-react-context@^0.4.0: "@babel/runtime" "^7.12.1" tiny-warning "^1.0.3" -mini-css-extract-plugin@2.7.6: - version "2.7.6" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" - integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== +mini-css-extract-plugin@2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz#4d184f12ce90582e983ccef0f6f9db637b4be758" + integrity sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ== dependencies: schema-utils "^4.0.0" + tapable "^2.2.1" minimatch@9.0.3: version "9.0.3" @@ -4876,6 +4699,13 @@ minimatch@9.0.3: dependencies: brace-expansion "^2.0.1" +minimatch@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" + integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -4890,13 +4720,6 @@ minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - minimatch@~3.0.4: version "3.0.8" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" @@ -4918,15 +4741,10 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== mkdirp@^0.5.6: version "0.5.6" @@ -4940,22 +4758,17 @@ mobile-detect@1.4.5: resolved "https://registry.yarnpkg.com/mobile-detect/-/mobile-detect-1.4.5.tgz#da393c3c413ca1a9bcdd9ced653c38281c0fb6ad" integrity sha512-yc0LhH6tItlvfLBugVUEtgawwFU2sIe+cSdmRJJCTMZ5GEJyLxNyC/NIOAOGk67Fa8GNpOttO3Xz/1bHpXFD/g== -moment@2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +moment@2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== mousetrap@1.6.5: version "1.6.5" resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9" integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -4996,6 +4809,11 @@ node-abort-controller@^3.0.1: resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -5003,11 +4821,6 @@ node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - node-releases@^2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" @@ -5066,9 +4879,9 @@ object-assign@^4.1.0, object-assign@^4.1.1: integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== object-is@^1.1.5: version "1.1.6" @@ -5093,7 +4906,7 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.7: +object.entries@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== @@ -5102,7 +4915,7 @@ object.entries@^1.1.7: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.7: +object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -5112,7 +4925,7 @@ object.fromentries@^2.0.7: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.groupby@^1.0.1: +object.groupby@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== @@ -5121,16 +4934,7 @@ object.groupby@^1.0.1: define-properties "^1.2.1" es-abstract "^1.23.2" -object.hasown@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" - integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== - dependencies: - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.values@^1.1.6, object.values@^1.1.7: +object.values@^1.1.6, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -5147,16 +4951,16 @@ once@^1.3.0, once@^1.4.0: wrappy "1" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" p-limit@^2.2.0: version "2.3.0" @@ -5212,6 +5016,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -5237,7 +5046,7 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-node-version@^1.0.0, parse-node-version@^1.0.1: +parse-node-version@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== @@ -5275,18 +5084,18 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.6.1: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== +path-scurry@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" + integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + lru-cache "^11.0.0" + minipass "^7.1.2" path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + version "1.9.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24" + integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== dependencies: isarray "0.0.1" @@ -5300,15 +5109,10 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" + integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" @@ -5334,17 +5138,6 @@ pkg-dir@^7.0.0: dependencies: find-up "^6.3.0" -plugin-error@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" - integrity sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw== - dependencies: - ansi-cyan "^0.1.1" - ansi-red "^0.1.1" - arr-diff "^1.0.1" - arr-union "^2.0.1" - extend-shallow "^1.1.2" - popper.js@^1.14.4: version "1.16.1" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" @@ -5455,24 +5248,16 @@ postcss-nested@6.2.0: postcss-selector-parser "^6.1.1" postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== + version "0.1.6" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz#3d84dec809f34de020372c41b039956966896686" + integrity sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw== postcss-safe-parser@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== -postcss-selector-parser@^6.0.12, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.16" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" - integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^6.1.1: +postcss-selector-parser@^6.0.12, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.1.1: version "6.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== @@ -5510,14 +5295,14 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.41: - version "8.4.41" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681" - integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== +postcss@8.4.47, postcss@^8.0.0, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.32: + version "8.4.47" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" + integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== dependencies: nanoid "^3.3.7" - picocolors "^1.0.1" - source-map-js "^1.2.0" + picocolors "^1.1.0" + source-map-js "^1.2.1" postcss@^6.0.23: version "6.0.23" @@ -5528,15 +5313,6 @@ postcss@^6.0.23: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^8.0.0, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.23: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" - prefix-style@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/prefix-style/-/prefix-style-2.0.1.tgz#66bba9a870cfda308a5dc20e85e9120932c95a06" @@ -5596,17 +5372,10 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@6.11.1: - version "6.11.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.1.tgz#6c29dff97f0c0060765911ba65cbc9764186109f" - integrity sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ== - dependencies: - side-channel "^1.0.4" - -qs@^6.4.0: - version "6.12.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" - integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== +qs@6.13.0, qs@^6.4.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: side-channel "^1.0.6" @@ -5673,7 +5442,7 @@ react-autosuggest@10.1.0: section-iterator "^2.0.0" shallow-equal "^1.2.1" -react-clientside-effect@^1.2.2: +react-clientside-effect@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz#29f9b14e944a376b03fb650eed2a754dd128ea3a" integrity sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg== @@ -5748,17 +5517,17 @@ react-dom@17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" -react-focus-lock@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.5.0.tgz#12e3a3940e897c26e2c2a0408cd25ea3c99b3709" - integrity sha512-XLxj6uTXgz0US8TmqNU2jMfnXwZG0mH2r/afQqvPEaX6nyEll5LHVcEXk2XDUQ34RVeLPkO/xK5x6c/qiuSq/A== +react-focus-lock@2.9.4: + version "2.9.4" + resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.9.4.tgz#4753f6dcd167c39050c9d84f9c63c71b3ff8462e" + integrity sha512-7pEdXyMseqm3kVjhdVH18sovparAzLg5h6WvIx7/Ck3ekjhrrDMEegHSa3swwC8wgfdd7DIdUVRGeiHT9/7Sgg== dependencies: "@babel/runtime" "^7.0.0" - focus-lock "^0.8.1" + focus-lock "^0.11.6" prop-types "^15.6.2" - react-clientside-effect "^1.2.2" - use-callback-ref "^1.2.1" - use-sidecar "^1.0.1" + react-clientside-effect "^1.2.6" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" react-google-recaptcha@2.1.0: version "2.1.0" @@ -5868,10 +5637,10 @@ react-slider@1.1.4: resolved "https://registry.yarnpkg.com/react-slider/-/react-slider-1.1.4.tgz#08b55f9be3e04cc10ae00cc3aedb6891dffe9bf3" integrity sha512-lL/MvzFcDue0ztdJItwLqas2lOy8Gg46eCDGJc4cJGldThmBHcHfGQePgBgyY1SEN95OwsWAakd3SuI8RyixDQ== -react-tabs@3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.2.2.tgz#07bdc3cdb17bdffedd02627f32a93cd4b3d6e4d0" - integrity sha512-/o52eGKxFHRa+ssuTEgSM8qORnV4+k7ibW+aNQzKe+5gifeVz8nLxCrsI9xdRhfb0wCLdgIambIpb1qCxaMN+A== +react-tabs@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-4.3.0.tgz#9f4db0fd209ba4ab2c1e78993ff964435f84af62" + integrity sha512-2GfoG+f41kiBIIyd3gF+/GRCCYtamC8/2zlAcD8cqQmqI9Q+YVz7fJLHMmU9pXDVYYHpJeCgUSBJju85vu5q8Q== dependencies: clsx "^1.1.0" prop-types "^15.5.0" @@ -5910,10 +5679,10 @@ react-virtualized@9.21.1: prop-types "^15.6.0" react-lifecycles-compat "^3.0.4" -react-window@1.8.9: - version "1.8.9" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.9.tgz#24bc346be73d0468cdf91998aac94e32bc7fa6a8" - integrity sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q== +react-window@1.8.10: + version "1.8.10" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.10.tgz#9e6b08548316814b443f7002b1cf8fd3a1bdde03" + integrity sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg== dependencies: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" @@ -5945,7 +5714,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.3: +readable-stream@^2.0.0, readable-stream@^2.0.5: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -5974,6 +5743,11 @@ readdir-glob@^1.1.2: dependencies: minimatch "^5.1.0" +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -6022,19 +5796,12 @@ redux-localstorage@0.4.1: resolved "https://registry.yarnpkg.com/redux-localstorage/-/redux-localstorage-0.4.1.tgz#faf6d719c581397294d811473ffcedee065c933c" integrity sha512-dUha0YoH+BSZ2q15pakB+JWeqiuXUf3Ir4rObOpNrZ96HEdciGAjkL10k3KGdLI7qvQw/c096asw/SQ6TPjU/A== -redux-thunk@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" - integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== +redux-thunk@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" + integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== -redux@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.0.tgz#eb049679f2f523c379f1aff345c8612f294c88d4" - integrity sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g== - dependencies: - "@babel/runtime" "^7.9.2" - -redux@^4.0.0, redux@^4.1.1: +redux@4.2.1, redux@^4.0.0, redux@^4.1.1: version "4.2.1" resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== @@ -6054,10 +5821,10 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: regenerate "^1.4.2" @@ -6084,33 +5851,38 @@ regenerator-transform@^0.15.2: "@babel/runtime" "^7.8.4" regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" define-properties "^1.2.1" es-errors "^1.3.0" - set-function-name "^2.0.1" + set-function-name "^2.0.2" -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== +regexpu-core@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.1.1.tgz#b469b245594cb2d088ceebc6369dceb8c00becac" + integrity sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw== dependencies: - "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.11.0" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.11.1.tgz#ae55c74f646db0c8fcb922d4da635e33da405149" + integrity sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ== dependencies: - jsesc "~0.5.0" + jsesc "~3.0.2" relateurl@^0.2.7: version "0.2.7" @@ -6208,12 +5980,13 @@ rgb@~0.1.0: resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5" integrity sha512-F49dXX73a92N09uQkfCp2QjwXpmJcn9/i9PvjmwsSIXUGqRLCf/yx5Q9gRxuLQTq248kakqQuc8GX/U/CxSqlA== -rimraf@4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" - integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== +rimraf@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.0.1.tgz#ffb8ad8844dd60332ab15f52bc104bc3ed71ea4e" + integrity sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A== dependencies: - glob "^9.2.0" + glob "^11.0.0" + package-json-from-dist "^1.0.0" rimraf@^3.0.2: version "3.0.2" @@ -6229,15 +6002,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -run-sequence@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/run-sequence/-/run-sequence-2.2.1.tgz#1ce643da36fd8c7ea7e1a9329da33fc2b8898495" - integrity sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw== - dependencies: - chalk "^1.1.3" - fancy-log "^1.3.2" - plugin-error "^0.1.2" - safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -6278,18 +6042,19 @@ safe-regex-test@^1.0.3: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass@^1.58.3: - version "1.75.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.75.0.tgz#91bbe87fb02dfcc34e052ddd6ab80f60d392be6c" - integrity sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw== + version "1.79.5" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.79.5.tgz#646c627601cd5f84c64f7b1485b9292a313efae4" + integrity sha512-W1h5kp6bdhqFh2tk3DsI771MoEJjvrSY/2ihJRJS4pjIyfJCw0nTsxqhnrUzaLMOJjFchj8rOvraI/YUVjtx5g== dependencies: - chokidar ">=3.0.0 <4.0.0" + "@parcel/watcher" "^2.4.1" + chokidar "^4.0.0" immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" sax@^1.2.4: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" - integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== sax@~1.2.4: version "1.2.4" @@ -6349,11 +6114,9 @@ semver@^6.0.0, semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== serialize-javascript@^6.0.1: version "6.0.2" @@ -6442,10 +6205,10 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-support@~0.5.20: version "0.5.21" @@ -6465,7 +6228,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: +source-map@^0.7.3, source-map@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== @@ -6492,9 +6255,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.17" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" - integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== + version "3.0.20" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" + integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== stack-generator@^2.0.5: version "2.0.10" @@ -6525,20 +6288,12 @@ stacktrace-js@2.0.2: stack-generator "^2.0.5" stacktrace-gps "^3.0.4" -streamqueue@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/streamqueue/-/streamqueue-1.1.2.tgz#6c99c7c20d62b57f5819296bf9ec942542380192" - integrity sha512-CHUpqa+1BM99z7clQz9W6L9ZW4eXRRQCR0H+utVAGGvNo2ePlJAFjhdK0IjunaBbY/gWKJawk5kpJeyz0EXxRA== - dependencies: - isstream "^0.1.2" - readable-stream "^2.3.3" - string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw== -string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6547,7 +6302,25 @@ string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.10: +string-width@^4.1.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.matchall@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== @@ -6565,6 +6338,14 @@ string.prototype.matchall@^4.0.10: set-function-name "^2.0.2" side-channel "^1.0.6" +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" @@ -6612,20 +6393,27 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -6653,12 +6441,12 @@ style-search@^0.1.0: resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== -stylelint-order@6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-6.0.3.tgz#160b78650bd90463241b992581efee7159baefc2" - integrity sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w== +stylelint-order@6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-6.0.4.tgz#3e80d876c61a98d2640de181433686f24284748b" + integrity sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA== dependencies: - postcss "^8.4.21" + postcss "^8.4.32" postcss-sorting "^8.0.2" stylelint@15.6.1: @@ -6725,11 +6513,6 @@ sugarss@^4.0.1: resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-4.0.1.tgz#128a783ed71ee0fc3b489ce1f7d5a89bc1e24383" integrity sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw== -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6752,9 +6535,9 @@ supports-color@^8.0.0: has-flag "^4.0.0" supports-hyperlinks@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b" - integrity sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz#b56150ff0173baacc15f21956450b61f2b18d3ac" + integrity sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -6796,18 +6579,7 @@ tar-stream@^2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -terser-webpack-plugin@5.3.9: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser-webpack-plugin@^5.3.7: +terser-webpack-plugin@5.3.10, terser-webpack-plugin@^5.3.10: version "5.3.10" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== @@ -6818,10 +6590,10 @@ terser-webpack-plugin@^5.3.7: serialize-javascript "^6.0.1" terser "^5.26.0" -terser@^5.10.0, terser@^5.16.8, terser@^5.26.0: - version "5.30.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.3.tgz#f1bb68ded42408c316b548e3ec2526d7dd03f4d2" - integrity sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA== +terser@^5.10.0, terser@^5.26.0: + version "5.34.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.34.1.tgz#af40386bdbe54af0d063e0670afd55c3105abeb6" + integrity sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -6833,11 +6605,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw== - tiny-emitter@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" @@ -6897,9 +6664,9 @@ to-space-case@^1.0.0: to-no-case "^1.0.0" "tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0": - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -6921,15 +6688,16 @@ ts-api-utils@^1.0.1: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== -ts-loader@9.4.2: - version "9.4.2" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.2.tgz#80a45eee92dd5170b900b3d00abcfa14949aeb78" - integrity sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA== +ts-loader@9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.1.tgz#63d5912a86312f1fbe32cef0859fb8b2193d9b89" + integrity sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg== dependencies: chalk "^4.1.0" enhanced-resolve "^5.0.0" micromatch "^4.0.0" semver "^7.3.4" + source-map "^0.7.4" tsconfig-paths@^3.15.0: version "3.15.0" @@ -6950,15 +6718,10 @@ tsconfig-paths@^4.1.2: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -7073,15 +6836,15 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" @@ -7092,9 +6855,9 @@ unicode-match-property-ecmascript@^2.0.0: unicode-property-aliases-ecmascript "^2.0.0" unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" @@ -7119,21 +6882,13 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" + escalade "^3.2.0" + picocolors "^1.1.0" uri-js@^4.2.2: version "4.4.1" @@ -7159,14 +6914,14 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -use-callback-ref@^1.2.1: +use-callback-ref@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== dependencies: tslib "^2.0.0" -use-sidecar@^1.0.1: +use-sidecar@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== @@ -7207,37 +6962,6 @@ viewport-dimensions@^0.2.0: resolved "https://registry.yarnpkg.com/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz#de740747db5387fd1725f5175e91bac76afdf36c" integrity sha512-94JqlKxEP4m7WO+N3rm4tFRGXZmXXwSPQCoV+EPxDnn8YAGiLU3T+Ha1imLreAjXsHl0K+ELnIqv64i1XZHLFQ== -vscode-json-languageservice@^4.1.6: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4" - integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== - dependencies: - jsonc-parser "^3.0.0" - vscode-languageserver-textdocument "^1.0.3" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.3" - -vscode-languageserver-textdocument@^1.0.3: - version "1.0.11" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz#0822a000e7d4dc083312580d7575fe9e3ba2e2bf" - integrity sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA== - -vscode-languageserver-types@^3.16.0: - version "3.17.5" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a" - integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== - -vscode-nls@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.2.0.tgz#3cb6893dd9bd695244d8a024bdf746eea665cc3f" - integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== - -vscode-uri@^3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" - integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== - warning@^4.0.2, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" @@ -7245,10 +6969,10 @@ warning@^4.0.2, warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" - integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== +watchpack@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -7301,34 +7025,33 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.88.1: - version "5.88.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8" - integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ== +webpack@5.95.0: + version "5.95.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.95.0.tgz#8fd8c454fa60dad186fbe36c400a55848307b4c0" + integrity sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q== dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" + acorn-import-attributes "^1.9.5" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" + enhanced-resolve "^5.17.1" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" webpack-sources "^3.2.3" websocket-driver@>=0.5.1: @@ -7365,12 +7088,12 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" + integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" is-date-object "^1.0.5" is-finalizationregistry "^1.0.2" @@ -7379,10 +7102,10 @@ which-builtin-type@^1.1.3: is-weakref "^1.0.2" isarray "^2.0.5" which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-collection "^1.0.2" + which-typed-array "^1.1.15" -which-collection@^1.0.1: +which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -7392,7 +7115,7 @@ which-collection@^1.0.1: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: +which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -7422,6 +7145,11 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + worker-loader@3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-3.0.8.tgz#5fc5cda4a3d3163d9c274a4e3a811ce8b60dbb37" @@ -7430,6 +7158,24 @@ worker-loader@3.0.8: loader-utils "^2.0.0" schema-utils "^3.0.0" +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -7444,9 +7190,9 @@ write-file-atomic@^5.0.1: signal-exit "^4.0.1" ws@^7.4.5: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== xxhashjs@~0.2.2: version "0.2.2" @@ -7481,9 +7227,9 @@ yocto-queue@^0.1.0: integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + version "1.1.1" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== zip-stream@^4.1.0: version "4.1.1" From 55626594c59c9a3fefa53d738f2a6ee68342cff2 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 14 Jul 2024 16:42:35 -0700 Subject: [PATCH 072/275] New: Allow major version updates to be installed (cherry picked from commit 0e95ba2021b23cc65bce0a0620dd48e355250dab) --- frontend/src/App/AppRoutes.js | 4 +- frontend/src/App/State/AppState.ts | 1 + frontend/src/App/State/SettingsAppState.ts | 6 +- frontend/src/App/State/SystemAppState.ts | 5 +- .../Index/Menus/ArtistIndexSortMenu.tsx | 2 +- .../Overview/ArtistIndexOverviewInfo.tsx | 2 +- frontend/src/System/Updates/UpdateChanges.js | 48 --- frontend/src/System/Updates/UpdateChanges.tsx | 43 +++ frontend/src/System/Updates/Updates.js | 249 -------------- frontend/src/System/Updates/Updates.tsx | 303 ++++++++++++++++++ .../src/System/Updates/UpdatesConnector.js | 98 ------ frontend/src/typings/Settings/General.ts | 45 +++ .../src/typings/{ => Settings}/UiSettings.ts | 2 +- frontend/src/typings/SystemStatus.ts | 1 + frontend/src/typings/Update.ts | 20 ++ src/NzbDrone.Core/Localization/Core/en.json | 13 + .../Commands/ApplicationUpdateCheckCommand.cs | 2 + .../Commands/ApplicationUpdateCommand.cs | 1 + .../Update/InstallUpdateService.cs | 16 +- .../Update/UpdateCheckService.cs | 2 +- .../Update/UpdatePackageProvider.cs | 1 + 21 files changed, 456 insertions(+), 408 deletions(-) delete mode 100644 frontend/src/System/Updates/UpdateChanges.js create mode 100644 frontend/src/System/Updates/UpdateChanges.tsx delete mode 100644 frontend/src/System/Updates/Updates.js create mode 100644 frontend/src/System/Updates/Updates.tsx delete mode 100644 frontend/src/System/Updates/UpdatesConnector.js create mode 100644 frontend/src/typings/Settings/General.ts rename frontend/src/typings/{ => Settings}/UiSettings.ts (79%) create mode 100644 frontend/src/typings/Update.ts diff --git a/frontend/src/App/AppRoutes.js b/frontend/src/App/AppRoutes.js index d12f3c4b0..c1004d36d 100644 --- a/frontend/src/App/AppRoutes.js +++ b/frontend/src/App/AppRoutes.js @@ -29,7 +29,7 @@ import LogsTableConnector from 'System/Events/LogsTableConnector'; import Logs from 'System/Logs/Logs'; import Status from 'System/Status/Status'; import Tasks from 'System/Tasks/Tasks'; -import UpdatesConnector from 'System/Updates/UpdatesConnector'; +import Updates from 'System/Updates/Updates'; import UnmappedFilesTableConnector from 'UnmappedFiles/UnmappedFilesTableConnector'; import getPathWithUrlBase from 'Utilities/getPathWithUrlBase'; import CutoffUnmetConnector from 'Wanted/CutoffUnmet/CutoffUnmetConnector'; @@ -248,7 +248,7 @@ function AppRoutes(props) { , AppSectionDeleteState, AppSectionSaveState {} +export type GeneralAppState = AppSectionItemState; + export interface ImportListAppState extends AppSectionState, AppSectionDeleteState, @@ -59,6 +62,7 @@ interface SettingsAppState { advancedSettings: boolean; customFormats: CustomFormatAppState; downloadClients: DownloadClientAppState; + general: GeneralAppState; importLists: ImportListAppState; indexerFlags: IndexerFlagSettingsAppState; indexers: IndexerAppState; diff --git a/frontend/src/App/State/SystemAppState.ts b/frontend/src/App/State/SystemAppState.ts index d43c1d0ee..3c150fcfb 100644 --- a/frontend/src/App/State/SystemAppState.ts +++ b/frontend/src/App/State/SystemAppState.ts @@ -1,9 +1,12 @@ import SystemStatus from 'typings/SystemStatus'; -import { AppSectionItemState } from './AppSectionState'; +import Update from 'typings/Update'; +import AppSectionState, { AppSectionItemState } from './AppSectionState'; export type SystemStatusAppState = AppSectionItemState; +export type UpdateAppState = AppSectionState; interface SystemAppState { + updates: UpdateAppState; status: SystemStatusAppState; } diff --git a/frontend/src/Artist/Index/Menus/ArtistIndexSortMenu.tsx b/frontend/src/Artist/Index/Menus/ArtistIndexSortMenu.tsx index 9bae4dabf..1b72d0f4c 100644 --- a/frontend/src/Artist/Index/Menus/ArtistIndexSortMenu.tsx +++ b/frontend/src/Artist/Index/Menus/ArtistIndexSortMenu.tsx @@ -79,7 +79,7 @@ function ArtistIndexSortMenu(props: SeriesIndexSortMenuProps) { sortDirection={sortDirection} onPress={onSortSelect} > - {translate('Last Album')} + {translate('LastAlbum')} -
{title}
-
    - { - uniqueChanges.map((change, index) => { - return ( -
  • - -
  • - ); - }) - } -
- - ); - } - -} - -UpdateChanges.propTypes = { - title: PropTypes.string.isRequired, - changes: PropTypes.arrayOf(PropTypes.string) -}; - -export default UpdateChanges; diff --git a/frontend/src/System/Updates/UpdateChanges.tsx b/frontend/src/System/Updates/UpdateChanges.tsx new file mode 100644 index 000000000..3e5ba1c9b --- /dev/null +++ b/frontend/src/System/Updates/UpdateChanges.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import InlineMarkdown from 'Components/Markdown/InlineMarkdown'; +import styles from './UpdateChanges.css'; + +interface UpdateChangesProps { + title: string; + changes: string[]; +} + +function UpdateChanges(props: UpdateChangesProps) { + const { title, changes } = props; + + if (changes.length === 0) { + return null; + } + + const uniqueChanges = [...new Set(changes)]; + + return ( +
+
{title}
+
    + {uniqueChanges.map((change, index) => { + const checkChange = change.replace( + /#\d{4,5}\b/g, + (match) => + `[${match}](https://github.com/Lidarr/Lidarr/issues/${match.substring( + 1 + )})` + ); + + return ( +
  • + +
  • + ); + })} +
+
+ ); +} + +export default UpdateChanges; diff --git a/frontend/src/System/Updates/Updates.js b/frontend/src/System/Updates/Updates.js deleted file mode 100644 index 528441cbe..000000000 --- a/frontend/src/System/Updates/Updates.js +++ /dev/null @@ -1,249 +0,0 @@ -import _ from 'lodash'; -import PropTypes from 'prop-types'; -import React, { Component, Fragment } from 'react'; -import Alert from 'Components/Alert'; -import Icon from 'Components/Icon'; -import Label from 'Components/Label'; -import SpinnerButton from 'Components/Link/SpinnerButton'; -import LoadingIndicator from 'Components/Loading/LoadingIndicator'; -import InlineMarkdown from 'Components/Markdown/InlineMarkdown'; -import PageContent from 'Components/Page/PageContent'; -import PageContentBody from 'Components/Page/PageContentBody'; -import { icons, kinds } from 'Helpers/Props'; -import formatDate from 'Utilities/Date/formatDate'; -import formatDateTime from 'Utilities/Date/formatDateTime'; -import translate from 'Utilities/String/translate'; -import UpdateChanges from './UpdateChanges'; -import styles from './Updates.css'; - -class Updates extends Component { - - // - // Render - - render() { - const { - currentVersion, - isFetching, - isPopulated, - updatesError, - generalSettingsError, - items, - isInstallingUpdate, - updateMechanism, - updateMechanismMessage, - shortDateFormat, - longDateFormat, - timeFormat, - onInstallLatestPress - } = this.props; - - const hasError = !!(updatesError || generalSettingsError); - const hasUpdates = isPopulated && !hasError && items.length > 0; - const noUpdates = isPopulated && !hasError && !items.length; - const hasUpdateToInstall = hasUpdates && _.some(items, { installable: true, latest: true }); - const noUpdateToInstall = hasUpdates && !hasUpdateToInstall; - - const externalUpdaterPrefix = 'Unable to update Lidarr directly,'; - const externalUpdaterMessages = { - external: 'Lidarr is configured to use an external update mechanism', - apt: 'use apt to install the update', - docker: 'update the docker container to receive the update' - }; - - return ( - - - { - !isPopulated && !hasError && - - } - - { - noUpdates && - - {translate('NoUpdatesAreAvailable')} - - } - - { - hasUpdateToInstall && -
- { - updateMechanism === 'builtIn' || updateMechanism === 'script' ? - - Install Latest - : - - - - -
- {externalUpdaterPrefix} -
-
- } - - { - isFetching && - - } -
- } - - { - noUpdateToInstall && -
- -
- The latest version of Lidarr is already installed -
- - { - isFetching && - - } -
- } - - { - hasUpdates && -
- { - items.map((update) => { - const hasChanges = !!update.changes; - - return ( -
-
-
{update.version}
-
-
- {formatDate(update.releaseDate, shortDateFormat)} -
- - { - update.branch === 'master' ? - null : - - } - - { - update.version === currentVersion ? - : - null - } - - { - update.version !== currentVersion && update.installedOn ? - : - null - } -
- - { - !hasChanges && -
- {translate('MaintenanceRelease')} -
- } - - { - hasChanges && -
- - - -
- } -
- ); - }) - } -
- } - - { - !!updatesError && -
- Failed to fetch updates -
- } - - { - !!generalSettingsError && -
- Failed to update settings -
- } -
-
- ); - } - -} - -Updates.propTypes = { - currentVersion: PropTypes.string.isRequired, - isFetching: PropTypes.bool.isRequired, - isPopulated: PropTypes.bool.isRequired, - updatesError: PropTypes.object, - generalSettingsError: PropTypes.object, - items: PropTypes.array.isRequired, - isInstallingUpdate: PropTypes.bool.isRequired, - updateMechanism: PropTypes.string, - updateMechanismMessage: PropTypes.string, - shortDateFormat: PropTypes.string.isRequired, - longDateFormat: PropTypes.string.isRequired, - timeFormat: PropTypes.string.isRequired, - onInstallLatestPress: PropTypes.func.isRequired -}; - -export default Updates; diff --git a/frontend/src/System/Updates/Updates.tsx b/frontend/src/System/Updates/Updates.tsx new file mode 100644 index 000000000..ef3d20288 --- /dev/null +++ b/frontend/src/System/Updates/Updates.tsx @@ -0,0 +1,303 @@ +import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; +import * as commandNames from 'Commands/commandNames'; +import Alert from 'Components/Alert'; +import Icon from 'Components/Icon'; +import Label from 'Components/Label'; +import SpinnerButton from 'Components/Link/SpinnerButton'; +import LoadingIndicator from 'Components/Loading/LoadingIndicator'; +import InlineMarkdown from 'Components/Markdown/InlineMarkdown'; +import ConfirmModal from 'Components/Modal/ConfirmModal'; +import PageContent from 'Components/Page/PageContent'; +import PageContentBody from 'Components/Page/PageContentBody'; +import { icons, kinds } from 'Helpers/Props'; +import { executeCommand } from 'Store/Actions/commandActions'; +import { fetchGeneralSettings } from 'Store/Actions/settingsActions'; +import { fetchUpdates } from 'Store/Actions/systemActions'; +import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector'; +import createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector'; +import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector'; +import { UpdateMechanism } from 'typings/Settings/General'; +import formatDate from 'Utilities/Date/formatDate'; +import formatDateTime from 'Utilities/Date/formatDateTime'; +import translate from 'Utilities/String/translate'; +import UpdateChanges from './UpdateChanges'; +import styles from './Updates.css'; + +const VERSION_REGEX = /\d+\.\d+\.\d+\.\d+/i; + +function createUpdatesSelector() { + return createSelector( + (state: AppState) => state.system.updates, + (state: AppState) => state.settings.general, + (updates, generalSettings) => { + const { error: updatesError, items } = updates; + + const isFetching = updates.isFetching || generalSettings.isFetching; + const isPopulated = updates.isPopulated && generalSettings.isPopulated; + + return { + isFetching, + isPopulated, + updatesError, + generalSettingsError: generalSettings.error, + items, + updateMechanism: generalSettings.item.updateMechanism, + }; + } + ); +} + +function Updates() { + const currentVersion = useSelector((state: AppState) => state.app.version); + const { packageUpdateMechanismMessage } = useSelector( + createSystemStatusSelector() + ); + const { shortDateFormat, longDateFormat, timeFormat } = useSelector( + createUISettingsSelector() + ); + const isInstallingUpdate = useSelector( + createCommandExecutingSelector(commandNames.APPLICATION_UPDATE) + ); + + const { + isFetching, + isPopulated, + updatesError, + generalSettingsError, + items, + updateMechanism, + } = useSelector(createUpdatesSelector()); + + const dispatch = useDispatch(); + const [isMajorUpdateModalOpen, setIsMajorUpdateModalOpen] = useState(false); + const hasError = !!(updatesError || generalSettingsError); + const hasUpdates = isPopulated && !hasError && items.length > 0; + const noUpdates = isPopulated && !hasError && !items.length; + + const externalUpdaterPrefix = translate('UpdateAppDirectlyLoadError'); + const externalUpdaterMessages: Partial> = { + external: translate('ExternalUpdater'), + apt: translate('AptUpdater'), + docker: translate('DockerUpdater'), + }; + + const { isMajorUpdate, hasUpdateToInstall } = useMemo(() => { + const majorVersion = parseInt( + currentVersion.match(VERSION_REGEX)?.[0] ?? '0' + ); + + const latestVersion = items[0]?.version; + const latestMajorVersion = parseInt( + latestVersion?.match(VERSION_REGEX)?.[0] ?? '0' + ); + + return { + isMajorUpdate: latestMajorVersion > majorVersion, + hasUpdateToInstall: items.some( + (update) => update.installable && update.latest + ), + }; + }, [currentVersion, items]); + + const noUpdateToInstall = hasUpdates && !hasUpdateToInstall; + + const handleInstallLatestPress = useCallback(() => { + if (isMajorUpdate) { + setIsMajorUpdateModalOpen(true); + } else { + dispatch(executeCommand({ name: commandNames.APPLICATION_UPDATE })); + } + }, [isMajorUpdate, setIsMajorUpdateModalOpen, dispatch]); + + const handleInstallLatestMajorVersionPress = useCallback(() => { + setIsMajorUpdateModalOpen(false); + + dispatch( + executeCommand({ + name: commandNames.APPLICATION_UPDATE, + installMajorUpdate: true, + }) + ); + }, [setIsMajorUpdateModalOpen, dispatch]); + + const handleCancelMajorVersionPress = useCallback(() => { + setIsMajorUpdateModalOpen(false); + }, [setIsMajorUpdateModalOpen]); + + useEffect(() => { + dispatch(fetchUpdates()); + dispatch(fetchGeneralSettings()); + }, [dispatch]); + + return ( + + + {isPopulated || hasError ? null : } + + {noUpdates ? ( + {translate('NoUpdatesAreAvailable')} + ) : null} + + {hasUpdateToInstall ? ( +
+ {updateMechanism === 'builtIn' || updateMechanism === 'script' ? ( + + {translate('InstallLatest')} + + ) : ( + <> + + +
+ {externalUpdaterPrefix}{' '} + +
+ + )} + + {isFetching ? ( + + ) : null} +
+ ) : null} + + {noUpdateToInstall && ( +
+ +
{translate('OnLatestVersion')}
+ + {isFetching && ( + + )} +
+ )} + + {hasUpdates && ( +
+ {items.map((update) => { + return ( +
+
+
{update.version}
+
+
+ {formatDate(update.releaseDate, shortDateFormat)} +
+ + {update.branch === 'master' ? null : ( + + )} + + {update.version === currentVersion ? ( + + ) : null} + + {update.version !== currentVersion && update.installedOn ? ( + + ) : null} +
+ + {update.changes ? ( +
+ + + +
+ ) : ( +
{translate('MaintenanceRelease')}
+ )} +
+ ); + })} +
+ )} + + {updatesError ? ( + + {translate('FailedToFetchUpdates')} + + ) : null} + + {generalSettingsError ? ( + + {translate('FailedToUpdateSettings')} + + ) : null} + + +
{translate('InstallMajorVersionUpdateMessage')}
+
+ +
+ + } + confirmLabel={translate('Install')} + onConfirm={handleInstallLatestMajorVersionPress} + onCancel={handleCancelMajorVersionPress} + /> +
+
+ ); +} + +export default Updates; diff --git a/frontend/src/System/Updates/UpdatesConnector.js b/frontend/src/System/Updates/UpdatesConnector.js deleted file mode 100644 index 77d75dbda..000000000 --- a/frontend/src/System/Updates/UpdatesConnector.js +++ /dev/null @@ -1,98 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import * as commandNames from 'Commands/commandNames'; -import { executeCommand } from 'Store/Actions/commandActions'; -import { fetchGeneralSettings } from 'Store/Actions/settingsActions'; -import { fetchUpdates } from 'Store/Actions/systemActions'; -import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector'; -import createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector'; -import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector'; -import Updates from './Updates'; - -function createMapStateToProps() { - return createSelector( - (state) => state.app.version, - createSystemStatusSelector(), - (state) => state.system.updates, - (state) => state.settings.general, - createUISettingsSelector(), - createCommandExecutingSelector(commandNames.APPLICATION_UPDATE), - ( - currentVersion, - status, - updates, - generalSettings, - uiSettings, - isInstallingUpdate - ) => { - const { - error: updatesError, - items - } = updates; - - const isFetching = updates.isFetching || generalSettings.isFetching; - const isPopulated = updates.isPopulated && generalSettings.isPopulated; - - return { - currentVersion, - isFetching, - isPopulated, - updatesError, - generalSettingsError: generalSettings.error, - items, - isInstallingUpdate, - updateMechanism: generalSettings.item.updateMechanism, - updateMechanismMessage: status.packageUpdateMechanismMessage, - shortDateFormat: uiSettings.shortDateFormat, - longDateFormat: uiSettings.longDateFormat, - timeFormat: uiSettings.timeFormat - }; - } - ); -} - -const mapDispatchToProps = { - dispatchFetchUpdates: fetchUpdates, - dispatchFetchGeneralSettings: fetchGeneralSettings, - dispatchExecuteCommand: executeCommand -}; - -class UpdatesConnector extends Component { - - // - // Lifecycle - - componentDidMount() { - this.props.dispatchFetchUpdates(); - this.props.dispatchFetchGeneralSettings(); - } - - // - // Listeners - - onInstallLatestPress = () => { - this.props.dispatchExecuteCommand({ name: commandNames.APPLICATION_UPDATE }); - }; - - // - // Render - - render() { - return ( - - ); - } -} - -UpdatesConnector.propTypes = { - dispatchFetchUpdates: PropTypes.func.isRequired, - dispatchFetchGeneralSettings: PropTypes.func.isRequired, - dispatchExecuteCommand: PropTypes.func.isRequired -}; - -export default connect(createMapStateToProps, mapDispatchToProps)(UpdatesConnector); diff --git a/frontend/src/typings/Settings/General.ts b/frontend/src/typings/Settings/General.ts new file mode 100644 index 000000000..c867bed74 --- /dev/null +++ b/frontend/src/typings/Settings/General.ts @@ -0,0 +1,45 @@ +export type UpdateMechanism = + | 'builtIn' + | 'script' + | 'external' + | 'apt' + | 'docker'; + +export default interface General { + bindAddress: string; + port: number; + sslPort: number; + enableSsl: boolean; + launchBrowser: boolean; + authenticationMethod: string; + authenticationRequired: string; + analyticsEnabled: boolean; + username: string; + password: string; + passwordConfirmation: string; + logLevel: string; + consoleLogLevel: string; + branch: string; + apiKey: string; + sslCertPath: string; + sslCertPassword: string; + urlBase: string; + instanceName: string; + applicationUrl: string; + updateAutomatically: boolean; + updateMechanism: UpdateMechanism; + updateScriptPath: string; + proxyEnabled: boolean; + proxyType: string; + proxyHostname: string; + proxyPort: number; + proxyUsername: string; + proxyPassword: string; + proxyBypassFilter: string; + proxyBypassLocalAddresses: boolean; + certificateValidation: string; + backupFolder: string; + backupInterval: number; + backupRetention: number; + id: number; +} diff --git a/frontend/src/typings/UiSettings.ts b/frontend/src/typings/Settings/UiSettings.ts similarity index 79% rename from frontend/src/typings/UiSettings.ts rename to frontend/src/typings/Settings/UiSettings.ts index 3c23a0356..656c4518b 100644 --- a/frontend/src/typings/UiSettings.ts +++ b/frontend/src/typings/Settings/UiSettings.ts @@ -1,4 +1,4 @@ -export interface UiSettings { +export default interface UiSettings { theme: 'auto' | 'dark' | 'light'; showRelativeDates: boolean; shortDateFormat: string; diff --git a/frontend/src/typings/SystemStatus.ts b/frontend/src/typings/SystemStatus.ts index e72be2c5c..47f2b3552 100644 --- a/frontend/src/typings/SystemStatus.ts +++ b/frontend/src/typings/SystemStatus.ts @@ -19,6 +19,7 @@ interface SystemStatus { osName: string; osVersion: string; packageUpdateMechanism: string; + packageUpdateMechanismMessage: string; runtimeName: string; runtimeVersion: string; sqliteVersion: string; diff --git a/frontend/src/typings/Update.ts b/frontend/src/typings/Update.ts new file mode 100644 index 000000000..448b1728d --- /dev/null +++ b/frontend/src/typings/Update.ts @@ -0,0 +1,20 @@ +export interface Changes { + new: string[]; + fixed: string[]; +} + +interface Update { + version: string; + branch: string; + releaseDate: string; + fileName: string; + url: string; + installed: boolean; + installedOn: string; + installable: boolean; + latest: boolean; + changes: Changes | null; + hash: string; +} + +export default Update; diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 4280a6933..f3558baf4 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -109,6 +109,7 @@ "ApplyTagsHelpTextHowToApplyIndexers": "How to apply tags to the selected indexers", "ApplyTagsHelpTextRemove": "Remove: Remove the entered tags", "ApplyTagsHelpTextReplace": "Replace: Replace the tags with the entered tags (enter no tags to clear all tags)", + "AptUpdater": "Use apt to install the update", "AreYouSure": "Are you sure?", "Artist": "Artist", "ArtistAlbumClickToChangeTrack": "Click to change track", @@ -187,6 +188,7 @@ "CalendarWeekColumnHeaderHelpText": "Shown above each column when week is the active view", "Cancel": "Cancel", "CancelMessageText": "Are you sure you want to cancel this pending task?", + "CancelPendingTask": "Are you sure you want to cancel this pending task?", "CatalogNumber": "Catalog Number", "CertificateValidation": "Certificate Validation", "CertificateValidationHelpText": "Change how strict HTTPS certification validation is. Do not change unless you understand the risks.", @@ -367,6 +369,7 @@ "DoNotPrefer": "Do Not Prefer", "DoNotUpgradeAutomatically": "Do not Upgrade Automatically", "Docker": "Docker", + "DockerUpdater": "Update the docker container to receive the update", "Donate": "Donate", "Donations": "Donations", "DoneEditingGroups": "Done Editing Groups", @@ -469,6 +472,7 @@ "ExpandSingleByDefaultHelpText": "Singles", "ExportCustomFormat": "Export Custom Format", "External": "External", + "ExternalUpdater": "{appName} is configured to use an external update mechanism", "ExtraFileExtensionsHelpText": "Comma separated list of extra files to import (.nfo will be imported as .nfo-orig)", "ExtraFileExtensionsHelpTextsExamples": "Examples: '.sub, .nfo' or 'sub,nfo'", "FailedDownloadHandling": "Failed Download Handling", @@ -616,6 +620,11 @@ "IndexersSettingsSummary": "Indexers and indexer options", "Info": "Info", "InfoUrl": "Info URL", + "Install": "Install", + "InstallLatest": "Install Latest", + "InstallMajorVersionUpdate": "Install Update", + "InstallMajorVersionUpdateMessage": "This update will install a new major version and may not be compatible with your system. Are you sure you want to install this update?", + "InstallMajorVersionUpdateMessageLink": "Please check [{domain}]({url}) for more information.", "InstanceName": "Instance Name", "InstanceNameHelpText": "Instance name in tab and for Syslog app name", "InteractiveImport": "Interactive Import", @@ -835,6 +844,7 @@ "OnHealthIssue": "On Health Issue", "OnHealthRestored": "On Health Restored", "OnImportFailure": "On Import Failure", + "OnLatestVersion": "The latest version of {appName} is already installed", "OnReleaseImport": "On Release Import", "OnRename": "On Rename", "OnTrackRetag": "On Track Retag", @@ -884,6 +894,7 @@ "Presets": "Presets", "PreviewRename": "Preview Rename", "PreviewRetag": "Preview Retag", + "PreviouslyInstalled": "Previously Installed", "PrimaryAlbumTypes": "Primary Album Types", "PrimaryTypes": "Primary Types", "Priority": "Priority", @@ -1126,6 +1137,7 @@ "ShowUnknownArtistItems": "Show Unknown Artist Items", "ShownAboveEachColumnWhenWeekIsTheActiveView": "Shown above each column when week is the active view", "ShownClickToHide": "Shown, click to hide", + "Shutdown": "Shutdown", "Size": " Size", "SizeLimit": "Size Limit", "SizeOnDisk": "Size on Disk", @@ -1274,6 +1286,7 @@ "UnmonitoredHelpText": "Include unmonitored albums in the iCal feed", "UnmonitoredOnly": "Unmonitored Only", "UpdateAll": "Update All", + "UpdateAppDirectlyLoadError": "Unable to update {appName} directly,", "UpdateAutomaticallyHelpText": "Automatically download and install updates. You will still be able to install from System: Updates", "UpdateAvailableHealthCheckMessage": "New update is available: {version}", "UpdateCheckStartupNotWritableMessage": "Cannot install update because startup folder '{0}' is not writable by the user '{1}'.", diff --git a/src/NzbDrone.Core/Update/Commands/ApplicationUpdateCheckCommand.cs b/src/NzbDrone.Core/Update/Commands/ApplicationUpdateCheckCommand.cs index ece18a111..fa2cfbf41 100644 --- a/src/NzbDrone.Core/Update/Commands/ApplicationUpdateCheckCommand.cs +++ b/src/NzbDrone.Core/Update/Commands/ApplicationUpdateCheckCommand.cs @@ -7,5 +7,7 @@ namespace NzbDrone.Core.Update.Commands public override bool SendUpdatesToClient => true; public override string CompletionMessage => null; + + public bool InstallMajorUpdate { get; set; } } } diff --git a/src/NzbDrone.Core/Update/Commands/ApplicationUpdateCommand.cs b/src/NzbDrone.Core/Update/Commands/ApplicationUpdateCommand.cs index 59a827a0b..6980af708 100644 --- a/src/NzbDrone.Core/Update/Commands/ApplicationUpdateCommand.cs +++ b/src/NzbDrone.Core/Update/Commands/ApplicationUpdateCommand.cs @@ -4,6 +4,7 @@ namespace NzbDrone.Core.Update.Commands { public class ApplicationUpdateCommand : Command { + public bool InstallMajorUpdate { get; set; } public override bool SendUpdatesToClient => true; public override bool IsExclusive => true; } diff --git a/src/NzbDrone.Core/Update/InstallUpdateService.cs b/src/NzbDrone.Core/Update/InstallUpdateService.cs index c25e0ef3e..5bce96c47 100644 --- a/src/NzbDrone.Core/Update/InstallUpdateService.cs +++ b/src/NzbDrone.Core/Update/InstallUpdateService.cs @@ -20,7 +20,7 @@ using NzbDrone.Core.Update.Commands; namespace NzbDrone.Core.Update { - public class InstallUpdateService : IExecute, IExecute, IHandle + public class InstallUpdateService : IExecute, IExecute, IHandle { private readonly ICheckUpdateService _checkUpdateService; private readonly Logger _logger; @@ -232,7 +232,7 @@ namespace NzbDrone.Core.Update } } - private UpdatePackage GetUpdatePackage(CommandTrigger updateTrigger) + private UpdatePackage GetUpdatePackage(CommandTrigger updateTrigger, bool installMajorUpdate) { _logger.ProgressDebug("Checking for updates"); @@ -244,7 +244,13 @@ namespace NzbDrone.Core.Update return null; } - if (OsInfo.IsNotWindows && !_configFileProvider.UpdateAutomatically && updateTrigger != CommandTrigger.Manual) + if (latestAvailable.Version.Major > BuildInfo.Version.Major && !installMajorUpdate) + { + _logger.ProgressInfo("Unable to install major update, please update update manually from System: Updates"); + return null; + } + + if (!_configFileProvider.UpdateAutomatically && updateTrigger != CommandTrigger.Manual) { _logger.ProgressDebug("Auto-update not enabled, not installing available update."); return null; @@ -273,7 +279,7 @@ namespace NzbDrone.Core.Update public void Execute(ApplicationUpdateCheckCommand message) { - if (GetUpdatePackage(message.Trigger) != null) + if (GetUpdatePackage(message.Trigger, true) != null) { _commandQueueManager.Push(new ApplicationUpdateCommand(), trigger: message.Trigger); } @@ -281,7 +287,7 @@ namespace NzbDrone.Core.Update public void Execute(ApplicationUpdateCommand message) { - var latestAvailable = GetUpdatePackage(message.Trigger); + var latestAvailable = GetUpdatePackage(message.Trigger, message.InstallMajorUpdate); if (latestAvailable != null) { diff --git a/src/NzbDrone.Core/Update/UpdateCheckService.cs b/src/NzbDrone.Core/Update/UpdateCheckService.cs index 4f0e7d4ec..46e4b6b63 100644 --- a/src/NzbDrone.Core/Update/UpdateCheckService.cs +++ b/src/NzbDrone.Core/Update/UpdateCheckService.cs @@ -1,4 +1,4 @@ -using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Core.Configuration; namespace NzbDrone.Core.Update diff --git a/src/NzbDrone.Core/Update/UpdatePackageProvider.cs b/src/NzbDrone.Core/Update/UpdatePackageProvider.cs index 2e957b374..08761fde7 100644 --- a/src/NzbDrone.Core/Update/UpdatePackageProvider.cs +++ b/src/NzbDrone.Core/Update/UpdatePackageProvider.cs @@ -42,6 +42,7 @@ namespace NzbDrone.Core.Update .AddQueryParam("runtime", "netcore") .AddQueryParam("runtimeVer", _platformInfo.Version) .AddQueryParam("dbType", _mainDatabase.DatabaseType) + .AddQueryParam("includeMajorVersion", true) .SetSegment("branch", branch); if (_analyticsService.IsEnabled) From f005695b4872d7efbae6890526df7fe3d5e26c1d Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 20 Oct 2024 05:25:37 +0300 Subject: [PATCH 073/275] Skip spotify mapping tests --- .../ImportListTests/Spotify/SpotifyMappingFixture.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/ImportListTests/Spotify/SpotifyMappingFixture.cs b/src/NzbDrone.Core.Test/ImportListTests/Spotify/SpotifyMappingFixture.cs index 7a181952b..4a2910445 100644 --- a/src/NzbDrone.Core.Test/ImportListTests/Spotify/SpotifyMappingFixture.cs +++ b/src/NzbDrone.Core.Test/ImportListTests/Spotify/SpotifyMappingFixture.cs @@ -80,7 +80,7 @@ namespace NzbDrone.Core.Test.ImportListTests } [Test] - [Ignore("Pending mapping fixes", Until = "2024-10-20 00:00:00Z")] + [Ignore("Pending mapping fixes", Until = "2024-12-20 00:00:00Z")] public void map_artist_should_work() { UseRealHttp(); @@ -159,7 +159,7 @@ namespace NzbDrone.Core.Test.ImportListTests } [Test] - [Ignore("Pending mapping fixes", Until = "2024-10-20 00:00:00Z")] + [Ignore("Pending mapping fixes", Until = "2024-12-20 00:00:00Z")] public void map_album_should_work() { UseRealHttp(); From 850c08dda34b57d4fedb9138617a4ff378fe455c Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 19 Oct 2024 18:25:25 +0000 Subject: [PATCH 074/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Anonymous Co-authored-by: JoseFilipeFerreira Co-authored-by: Kuzmich Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/da.json | 3 ++- src/NzbDrone.Core/Localization/Core/hr.json | 22 ++++++++++++++++++++- src/NzbDrone.Core/Localization/Core/pt.json | 5 +++-- src/NzbDrone.Core/Localization/Core/ru.json | 6 +++--- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index d110aef64..743bda6a8 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -772,5 +772,6 @@ "IncludeCustomFormatWhenRenaming": "Inkluder brugerdefineret format, når du omdøber", "AddMissing": "Tilføj manglende", "AddAlbumWithTitle": "Tilføj {albumTitle}", - "AddArtistWithName": "Tilføj {artistName}" + "AddArtistWithName": "Tilføj {artistName}", + "AddedArtistSettings": "Indstillinger for tilføjede forfattere" } diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index 22aa9b042..ca2b86614 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -280,5 +280,25 @@ "AuthenticationMethodHelpTextWarning": "Molimo odaberi ispravnu metodu autentikacije", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrdi novu lozinku", "AuthenticationRequiredWarning": "Kako bi se spriječio udaljeni pristup bez autentikacije, {appName} sad zahtjeva da autentikacija bude omogućena. Izborno se može onemogućiti autentikacija s lokalnih adresa.", - "AutoRedownloadFailedFromInteractiveSearch": "Ponovno preuzimanje iz Interaktivne Pretrage neuspješno" + "AutoRedownloadFailedFromInteractiveSearch": "Ponovno preuzimanje iz Interaktivne Pretrage neuspješno", + "IgnoredPlaceHolder": "Dodaj novo ograničenje", + "ApiKeyValidationHealthCheckMessage": "Molimo ažuriraj svoj API ključ da ima barem {length} znakova. Ovo možeš uraditi u postavkama ili konfiguracijskoj datoteci", + "EditIndexerImplementation": "Dodaj Indexer - {implementationName}", + "EditReleaseProfile": "Dodaj profil verzije", + "UnableToAddANewIndexerPleaseTryAgain": "Neuspješno dodavanje novog indexera, molimo pokušaj ponovno.", + "DownloadFailed": "Ponovno preuzimanje neuspješno", + "EditConnectionImplementation": "Dodaj Vezu - {implementationName}", + "UnableToAddANewDownloadClientPleaseTryAgain": "Nesupješno dodavanje klijenta za preuzimanje, molimo pokušaj ponovno.", + "UnableToAddANewListPleaseTryAgain": "Neuspješno dodavanje nove liste, molimo pokušaj ponovno.", + "EditDownloadClientImplementation": "Dodaj Klijenta za Preuzimanje- {implementationName}", + "EditConditionImplementation": "Dodaj Vezu - {implementationName}", + "EditImportListImplementation": "Dodaj Listu Za Uvoz - {implementationName}", + "UnableToAddANewImportListExclusionPleaseTryAgain": "Neuspješno dodavanje na listu za isključenje, molimo pokušaj ponovno.", + "UnableToAddANewMetadataProfilePleaseTryAgain": "Neuspješno dodavanje profila odgode, molimo pokušaj ponovno.", + "UnableToAddANewRemotePathMappingPleaseTryAgain": "Neuspješno dodavanje novog mapiranja mrežne putanje, molimo pokušaj ponovno.", + "RequiredPlaceHolder": "Dodaj novo ograničenje", + "UnableToAddANewNotificationPleaseTryAgain": "Neuspješno dodavanje nove obavijesti, molimo pokušaj ponovno.", + "UnableToAddANewQualityProfilePleaseTryAgain": "Neuspješno dodavanje novog profila kvalitete, molimo pokušaj ponovno.", + "UnableToAddANewRootFolderPleaseTryAgain": "Neuspješno dodavanje novog indexera, molimo pokušaj ponovno.", + "UnableToLoadRootFolders": "Neuspješno dodavanje korijenske mape" } diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index 109cae4b0..809369027 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -875,7 +875,7 @@ "ReleaseProfile": "Perfis de versão", "Small": "Pequeno", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmar nova senha", - "AutoTaggingRequiredHelpText": "Esta condição de {implementationName} deve corresponder para que a regra de marcação automática seja aplicada. Caso contrário, uma única correspondência de {implementationName} é suficiente.", + "AutoTaggingRequiredHelpText": "Esta condição {implementationName} tem de corresponder para que a regra de marcação automática seja aplicada. Caso contrário, uma única correspondência {implementationName} é suficiente.", "AddImportListExclusionAlbumHelpText": "Impedir série de ser adicionada ao {appName} através de listas", "ExtraFileExtensionsHelpText": "Lista separada por vírgulas de ficheiros adicionais a importar (.nfo será importado como .nfo-orig)", "ExtraFileExtensionsHelpTextsExamples": "Exemplos: \".sub, .nfo\" ou \"sub,nfo\"", @@ -1009,5 +1009,6 @@ "BuiltIn": "Incorporado", "DeleteSelectedCustomFormats": "Eliminar formato personalizado", "DeleteSelectedCustomFormatsMessageText": "Tem a certeza de que pretende eliminar a(s) lista(s) de {count} importação selecionada(s)?", - "IncludeCustomFormatWhenRenaming": "Incluir formato personalizado ao renomear" + "IncludeCustomFormatWhenRenaming": "Incluir formato personalizado ao renomear", + "CountCustomFormatsSelected": "{count} formatos selecionados" } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index 82defb5e4..3c2db2a56 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -495,7 +495,7 @@ "EditRemotePathMapping": "Редактировать расположение подключенной папки", "EditRootFolder": "Добавить корневой каталог", "Error": "Ошибка", - "ErrorRestoringBackup": "Ошибка при восстановлении данных", + "ErrorRestoringBackup": "Восстановить резервную копию", "Events": "События", "EventType": "Тип события", "Filters": "Фильтры", @@ -565,7 +565,7 @@ "UpgradesAllowed": "Обновления разрешены", "Wanted": "Разыскиваемые", "Warn": "Предупреждение", - "WouldYouLikeToRestoreBackup": "Желаете восстановить резервную копию {name} ?", + "WouldYouLikeToRestoreBackup": "Хотите восстановить резервную копию '{name}'?", "Backup": "Резервное копирование", "Details": "Подробности", "TimeLeft": "Оставшееся время", @@ -940,7 +940,7 @@ "IndexerSettingsRejectBlocklistedTorrentHashes": "Отклонять хэши торрентов из черного списка при захвате", "IgnoreDownloadHint": "Не позволяет приложению {appName} продолжать обработку этой загрузки", "HealthMessagesInfoBox": "Дополнительную информацию о причине появления этих сообщений о проверке работоспособности можно найти, перейдя по ссылке wiki (значок книги) в конце строки или проверить [журналы]({link}). Если у вас возникли трудности с пониманием этих сообщений, вы можете обратиться в нашу службу поддержки по ссылкам ниже.", - "Logout": "Выйти", + "Logout": "Завершить сеанс", "MassSearchCancelWarning": "Это нельзя отменить после запуска без перезапуска {appName} или отключения всех индексаторов.", "NotificationsKodiSettingsDisplayTimeHelpText": "Как долго будет отображаться уведомление (в секундах)", "RemoveFromDownloadClientHint": "Удаляет загрузку и файлы из загрузочного клиента", From 5cead5f7ffb741ee25aed14e4bee44042ee13e62 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 20 Oct 2024 08:04:01 +0300 Subject: [PATCH 075/275] Bump version to 2.7.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 383266a75..5609cdaba 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.7.0' + majorVersion: '2.7.1' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 2db04a3452cc0aa2cbe4b5c5b738955988d6a73e Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 20 Oct 2024 11:11:10 +0300 Subject: [PATCH 076/275] Rename unused CancelMessageText --- src/NzbDrone.Core/Localization/Core/ar.json | 2 +- src/NzbDrone.Core/Localization/Core/bg.json | 2 +- src/NzbDrone.Core/Localization/Core/ca.json | 2 +- src/NzbDrone.Core/Localization/Core/cs.json | 2 +- src/NzbDrone.Core/Localization/Core/da.json | 2 +- src/NzbDrone.Core/Localization/Core/de.json | 2 +- src/NzbDrone.Core/Localization/Core/el.json | 2 +- src/NzbDrone.Core/Localization/Core/en.json | 1 - src/NzbDrone.Core/Localization/Core/es.json | 2 +- src/NzbDrone.Core/Localization/Core/fi.json | 2 +- src/NzbDrone.Core/Localization/Core/fr.json | 2 +- src/NzbDrone.Core/Localization/Core/he.json | 2 +- src/NzbDrone.Core/Localization/Core/hi.json | 2 +- src/NzbDrone.Core/Localization/Core/hr.json | 2 +- src/NzbDrone.Core/Localization/Core/hu.json | 2 +- src/NzbDrone.Core/Localization/Core/is.json | 2 +- src/NzbDrone.Core/Localization/Core/it.json | 2 +- src/NzbDrone.Core/Localization/Core/ja.json | 2 +- src/NzbDrone.Core/Localization/Core/ko.json | 2 +- src/NzbDrone.Core/Localization/Core/nb_NO.json | 2 +- src/NzbDrone.Core/Localization/Core/nl.json | 2 +- src/NzbDrone.Core/Localization/Core/pl.json | 2 +- src/NzbDrone.Core/Localization/Core/pt.json | 2 +- src/NzbDrone.Core/Localization/Core/pt_BR.json | 2 +- src/NzbDrone.Core/Localization/Core/ro.json | 2 +- src/NzbDrone.Core/Localization/Core/ru.json | 2 +- src/NzbDrone.Core/Localization/Core/sk.json | 2 +- src/NzbDrone.Core/Localization/Core/sv.json | 2 +- src/NzbDrone.Core/Localization/Core/th.json | 2 +- src/NzbDrone.Core/Localization/Core/tr.json | 2 +- src/NzbDrone.Core/Localization/Core/uk.json | 2 +- src/NzbDrone.Core/Localization/Core/vi.json | 2 +- src/NzbDrone.Core/Localization/Core/zh_CN.json | 2 +- 33 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 644783e08..9748ae989 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -432,7 +432,7 @@ "AnalyticsEnabledHelpTextWarning": "يتطلب إعادة التشغيل ليصبح ساري المفعول", "Automatic": "تلقائي", "Cancel": "إلغاء", - "CancelMessageText": "هل أنت متأكد أنك تريد إلغاء هذه المهمة المعلقة؟", + "CancelPendingTask": "هل أنت متأكد أنك تريد إلغاء هذه المهمة المعلقة؟", "CertificateValidation": "التحقق من صحة الشهادة", "ChangeFileDate": "تغيير تاريخ الملف", "DelayingDownloadUntil": "تأجيل التنزيل حتى {0} الساعة {1}", diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index d00be7e56..2ea098aa0 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -158,7 +158,7 @@ "Calendar": "Календар", "CalendarWeekColumnHeaderHelpText": "Показва се над всяка колона, когато седмицата е активният изглед", "Cancel": "Отказ", - "CancelMessageText": "Наистина ли искате да отмените тази чакаща задача?", + "CancelPendingTask": "Наистина ли искате да отмените тази чакаща задача?", "CertificateValidation": "Валидиране на сертификат", "CertificateValidationHelpText": "Променете колко строго е валидирането на HTTPS сертифициране", "ChangeFileDate": "Промяна на датата на файла", diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 447415532..70100adf8 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -236,7 +236,7 @@ "Calendar": "Calendari", "CalendarWeekColumnHeaderHelpText": "Es mostra a sobre de cada columna quan la setmana és la visualització activa", "Cancel": "Cancel·la", - "CancelMessageText": "Esteu segur que voleu cancel·lar aquesta tasca pendent?", + "CancelPendingTask": "Esteu segur que voleu cancel·lar aquesta tasca pendent?", "CertificateValidation": "Validació del certificat", "ChmodFolderHelpText": "Octal, aplicat durant la importació/reanomenat de carpetes i fitxers multimèdia (sense bits d'execució)", "ChmodFolderHelpTextWarning": "Això només funciona si l'usuari que executa {appName} és el propietari del fitxer. És millor assegurar-se que el client de descàrrega estableixi correctament els permisos.", diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 5bb406dac..34fc28a0b 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -18,7 +18,7 @@ "Calendar": "Kalendář", "CalendarWeekColumnHeaderHelpText": "Zobrazuje se nad každým sloupcem, když je aktivní zobrazení týden", "Cancel": "Zrušit", - "CancelMessageText": "Opravdu chcete zrušit tento nevyřízený úkol?", + "CancelPendingTask": "Opravdu chcete zrušit tento nevyřízený úkol?", "CertificateValidation": "Ověření certifikátu", "CertificateValidationHelpText": "Změňte přísnost ověřování certifikátů HTTPS. Neměňte, pokud nerozumíte rizikům.", "ChangeFileDate": "Změnit datum souboru", diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index 743bda6a8..22757137f 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -255,7 +255,7 @@ "Branch": "Afdeling", "BypassProxyForLocalAddresses": "Bypass-proxy til lokale adresser", "Cancel": "Afbryd", - "CancelMessageText": "Er du sikker på, at du vil annullere denne afventende opgave?", + "CancelPendingTask": "Er du sikker på, at du vil annullere denne afventende opgave?", "CertificateValidation": "Validering af certifikat", "CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er", "ChangeFileDate": "Skift fildato", diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index 003d79a18..d9fe5ffee 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -111,7 +111,7 @@ "ArtistAlbumClickToChangeTrack": "Klicken um den Film zu bearbeiten", "ArtistNameHelpText": "Der Name des auszuschließenden Autors/Buches (kann etwas Sinnvolles sein)", "CalendarWeekColumnHeaderHelpText": "Wird in der Wochenansicht über jeder Spalte angezeigt", - "CancelMessageText": "Diese laufende Aufgabe wirklich abbrechen?", + "CancelPendingTask": "Diese laufende Aufgabe wirklich abbrechen?", "ChownGroupHelpText": "Gruppenname oder gid. Verwenden Sie gid für entfernte Dateisysteme.", "ChownGroupHelpTextWarning": "Dies funktioniert nur, wenn der Benutzer, der {appName} ausführt, der Eigentümer der Datei ist. Es ist besser, sicherzustellen, dass der Download-Client die gleiche Gruppe wie {appName} verwendet.", "CreateEmptyArtistFoldersHelpText": "Leere Filmordner für fehlende Filme beim Scan erstellen", diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index 068172566..32d6ad836 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -10,7 +10,7 @@ "BypassProxyForLocalAddresses": "Παράκαμψη διακομιστή μεσολάβησης για τοπικές διευθύνσεις", "CalendarWeekColumnHeaderHelpText": "Εμφανίζεται πάνω από κάθε στήλη όταν η εβδομάδα είναι η ενεργή προβολή", "Cancel": "Ακύρωση", - "CancelMessageText": "Είστε βέβαιοι ότι θέλετε να ακυρώσετε αυτήν την εργασία σε εκκρεμότητα;", + "CancelPendingTask": "Είστε βέβαιοι ότι θέλετε να ακυρώσετε αυτήν την εργασία σε εκκρεμότητα;", "CertificateValidation": "Επικύρωση πιστοποιητικού", "CertificateValidationHelpText": "Αλλάξτε πόσο αυστηρή είναι η επικύρωση πιστοποίησης HTTPS.", "ChangeFileDate": "Αλλαγή ημερομηνίας αρχείου", diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index f3558baf4..91c0f5a80 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -187,7 +187,6 @@ "Calendar": "Calendar", "CalendarWeekColumnHeaderHelpText": "Shown above each column when week is the active view", "Cancel": "Cancel", - "CancelMessageText": "Are you sure you want to cancel this pending task?", "CancelPendingTask": "Are you sure you want to cancel this pending task?", "CatalogNumber": "Catalog Number", "CertificateValidation": "Certificate Validation", diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index b53cd4caa..0202dc2ae 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -16,7 +16,7 @@ "Branch": "Rama", "BypassProxyForLocalAddresses": "Omitir Proxy para Direcciones Locales", "CalendarWeekColumnHeaderHelpText": "Mostrado sobre cada columna cuando la vista activa es semana", - "CancelMessageText": "Seguro que quieres cancelar esta tarea pendiente?", + "CancelPendingTask": "Seguro que quieres cancelar esta tarea pendiente?", "CertificateValidation": "Validacion de certificado", "ChmodFolderHelpTextWarning": "Esto solo funciona si el usuario que ejecuta {appName} es el propietario del archivo. Es mejor asegurarse de que el cliente de descarga establezca los permisos correctamente.", "ChownGroupHelpTextWarning": "Esto solo funciona si el usuario que ejecuta {appName} es el propietario del archivo. Es mejor asegurarse de que el cliente de descarga use el mismo grupo que {appName}.", diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 2c6b5442b..d67e49032 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -88,7 +88,7 @@ "Calendar": "Kalenteri", "CompletedDownloadHandling": "Valmistuneiden latausten käsittely", "CloneIndexer": "Monista tietolähde", - "CancelMessageText": "Haluatko varmasti perua tämän odottavan tehtävän?", + "CancelPendingTask": "Haluatko varmasti perua tämän odottavan tehtävän?", "CertificateValidation": "Varmenteen vahvistus", "CertificateValidationHelpText": "Määritä HTTPS-varmennevahvistuksen tiukkuus. Älä muta, jos et ymmärrä riskejä.", "ClientPriority": "Lataustyökalun painotus", diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index b47d4e8c4..7945c4403 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -45,7 +45,7 @@ "BlocklistRelease": "Version sur liste noire", "Calendar": "Calendrier", "CalendarWeekColumnHeaderHelpText": "Affiché au dessus de chaque colonne quand \"Semaine\" est l'affichage actif", - "CancelMessageText": "Êtes-vous sur de vouloir annuler cette tâche en attente ?", + "CancelPendingTask": "Êtes-vous sur de vouloir annuler cette tâche en attente ?", "ChangeFileDate": "Changer la date du fichier", "ChangeHasNotBeenSavedYet": "Les changements n'ont pas encore été sauvegardés", "ChmodFolder": "chmod Dossier", diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index acafacae6..fde3088a3 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -376,7 +376,7 @@ "BypassProxyForLocalAddresses": "עקיפת פרוקסי לכתובות מקומיות", "Calendar": "לוּחַ שָׁנָה", "CalendarWeekColumnHeaderHelpText": "מוצג מעל כל עמודה כאשר השבוע היא התצוגה הפעילה", - "CancelMessageText": "האם אתה בטוח שברצונך לבטל משימה זו בהמתנה?", + "CancelPendingTask": "האם אתה בטוח שברצונך לבטל משימה זו בהמתנה?", "CertificateValidation": "אימות תעודה", "CertificateValidationHelpText": "שנה את מידת אימות ההסמכה של HTTPS", "ChangeFileDate": "שנה את תאריך הקובץ", diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index a59fa57c4..f44b8ac39 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -18,7 +18,7 @@ "Calendar": "पंचांग", "CalendarWeekColumnHeaderHelpText": "प्रत्येक स्तंभ के ऊपर दिखाया गया जब सप्ताह सक्रिय दृश्य होता है", "Cancel": "रद्द करना", - "CancelMessageText": "क्या आप वाकई इस लंबित कार्य को रद्द करना चाहते हैं?", + "CancelPendingTask": "क्या आप वाकई इस लंबित कार्य को रद्द करना चाहते हैं?", "CertificateValidationHelpText": "बदलें कि HTTPS प्रमाणन सत्यापन कितना सख्त है", "ChangeFileDate": "फ़ाइल दिनांक बदलें", "ChangeHasNotBeenSavedYet": "परिवर्तन अभी तक सहेजा नहीं गया है", diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index ca2b86614..456c0fbe2 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -217,7 +217,7 @@ "FormatAgeMinute": "minute", "FormatAgeMinutes": "minute", "BypassIfHighestQualityHelpText": "Zaobiđi odgodu ako verzija ima omogućen najviši kvalitet u profilu kvalitete za vanjske protokole", - "CancelMessageText": "Jeste li sigurni da želite otkazati ovaj zadatak na čekanju?", + "CancelPendingTask": "Jeste li sigurni da želite otkazati ovaj zadatak na čekanju?", "DeleteQualityProfileMessageText": "Jeste li sigurni da želite obrisati ovaj profil odgode?", "Yesterday": "Jučer", "ExportCustomFormat": "Dodaj Prilagođeni Format", diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index 9c77e739a..1cde1036f 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -216,7 +216,7 @@ "BlocklistRelease": "Blokklista Release", "Calendar": "Naptár", "CalendarWeekColumnHeaderHelpText": "Minden oszlop felett jelenjen meg, hogy melyik hét az aktuális", - "CancelMessageText": "Biztosan törlöd ezt a függőben lévő feladatot?", + "CancelPendingTask": "Biztosan törlöd ezt a függőben lévő feladatot?", "CatalogNumber": "Katalógus szám", "ChangeFileDate": "Fájl Dátumának Módosítása", "ChmodFolder": "chmod Mappa", diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index 23c3950d2..481ddab9f 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -23,7 +23,7 @@ "Calendar": "Dagatal", "CalendarWeekColumnHeaderHelpText": "Sýnt fyrir ofan hvern dálk þegar vikan er virka skjámyndin", "Cancel": "Hætta við", - "CancelMessageText": "Ertu viss um að þú viljir hætta við þetta verkefni í bið?", + "CancelPendingTask": "Ertu viss um að þú viljir hætta við þetta verkefni í bið?", "CertificateValidation": "Staðfesting skírteina", "CertificateValidationHelpText": "Breyttu hversu ströng HTTPS vottun er", "ChangeFileDate": "Breyttu dagsetningu skráar", diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index 5f5c78bce..27fe123b8 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -52,7 +52,7 @@ "BlocklistRelease": "Release in blacklist", "Branch": "Ramo", "BypassProxyForLocalAddresses": "Evita il Proxy per gli indirizzi locali", - "CancelMessageText": "Sei sicuro di voler cancellare questa operazione in sospeso?", + "CancelPendingTask": "Sei sicuro di voler cancellare questa operazione in sospeso?", "CertificateValidation": "Convalida del Certificato", "CertificateValidationHelpText": "Cambia quanto rigorosamente vengono validati i certificati HTTPS. Non cambiare senza conoscerne i rischi.", "ChangeFileDate": "Cambiare la Data del File", diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index 2f593c914..12cc4f252 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -11,7 +11,7 @@ "Backups": "バックアップ", "BindAddress": "バインドアドレス", "CalendarWeekColumnHeaderHelpText": "週がアクティブビューの場合、各列の上に表示されます", - "CancelMessageText": "この保留中のタスクをキャンセルしてもよろしいですか?", + "CancelPendingTask": "この保留中のタスクをキャンセルしてもよろしいですか?", "CertificateValidation": "証明書の検証", "CertificateValidationHelpText": "HTTPS認証検証の厳密さを変更する", "ChangeFileDate": "ファイルの日付を変更する", diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 3a3b6df3b..7182f789f 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -29,7 +29,7 @@ "Calendar": "달력", "CalendarWeekColumnHeaderHelpText": "주가 활성보기 일 때 각 열 위에 표시됩니다.", "Cancel": "취소", - "CancelMessageText": "이 보류중인 작업을 취소 하시겠습니까?", + "CancelPendingTask": "이 보류중인 작업을 취소 하시겠습니까?", "CertificateValidation": "인증서 검증", "ChangeHasNotBeenSavedYet": "변경 사항이 아직 저장되지 않았습니다.", "ChmodFolder": "chmod 폴더", diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index 7f68f0bf3..7b71a44b2 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -18,7 +18,7 @@ "BypassProxyForLocalAddresses": "Omgå proxy for lokale adresser", "Calendar": "Kalender", "Cancel": "Avbryt", - "CancelMessageText": "Er du sikker på at du vil avbryte denne ventende oppgaven?", + "CancelPendingTask": "Er du sikker på at du vil avbryte denne ventende oppgaven?", "CertificateValidation": "Sertifikatvalidering", "CertificateValidationHelpText": "Endre hvor streng HTTPS -sertifisering validering er", "ChangeFileDate": "Endre fildato", diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index 8236cb802..aed7d4c2d 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -18,7 +18,7 @@ "Calendar": "Kalender", "CalendarWeekColumnHeaderHelpText": "Wordt getoond boven elke kolom wanneer de actieve weergave Week is", "Cancel": "Annuleer", - "CancelMessageText": "Bent u zeker dat u deze taak in afwachting wilt annuleren?", + "CancelPendingTask": "Bent u zeker dat u deze taak in afwachting wilt annuleren?", "CertificateValidation": "Certificaat Validatie", "CertificateValidationHelpText": "Wijzig hoe strict HTTPS certificaat validatie is. Wijzig dit niet behalve als je de risico's begrijpt.", "ChangeFileDate": "Wijzig Bestandsdatum", diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 32d554cb6..8ce506776 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -271,7 +271,7 @@ "ArtistAlbumClickToChangeTrack": "Kliknij, aby zmienić film", "CalendarWeekColumnHeaderHelpText": "Wyświetlany nad każdą kolumną, gdy tydzień jest aktywnym widokiem", "Cancel": "Anuluj", - "CancelMessageText": "Czy na pewno chcesz anulować to oczekujące zadanie?", + "CancelPendingTask": "Czy na pewno chcesz anulować to oczekujące zadanie?", "CertificateValidation": "Walidacja certyfikatu", "CertificateValidationHelpText": "Zmień ścisłą walidację certyfikatu HTTPS", "ChangeFileDate": "Zmień datę pliku", diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index 809369027..c1440e44e 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -226,7 +226,7 @@ "BypassProxyForLocalAddresses": "Ignorar proxy para endereços locais", "Calendar": "Calendário", "CalendarWeekColumnHeaderHelpText": "Mostrar acima de cada coluna quando a semana é a vista ativa", - "CancelMessageText": "Tem a certeza que quer cancelar esta tarefa pendente?", + "CancelPendingTask": "Tem a certeza que quer cancelar esta tarefa pendente?", "CertificateValidation": "Validação de certificado", "ChangeHasNotBeenSavedYet": "A mudança ainda não foi guardada", "ChmodFolder": "Pasta chmod", diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index f11273637..a8bb1dc2f 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -73,7 +73,7 @@ "Calendar": "Calendário", "CalendarWeekColumnHeaderHelpText": "Mostrar acima de cada coluna quando a semana está na exibição ativa", "Cancel": "Cancelar", - "CancelMessageText": "Tem certeza que deseja cancelar esta tarefa pendente?", + "CancelPendingTask": "Tem certeza que deseja cancelar esta tarefa pendente?", "CatalogNumber": "Número do Catálogo", "CertificateValidation": "Validação de certificado", "ChangeFileDate": "Alterar data do arquivo", diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 540102279..482aafb9e 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -188,7 +188,7 @@ "Calendar": "Calendar", "CalendarWeekColumnHeaderHelpText": "Afișat deasupra fiecărei coloane când săptămâna este vizualizarea activă", "Cancel": "Anulează", - "CancelMessageText": "Sigur doriți să anulați această sarcină în așteptare?", + "CancelPendingTask": "Sigur doriți să anulați această sarcină în așteptare?", "CertificateValidation": "Validarea certificatului", "ChangeFileDate": "Schimbați data fișierului", "ChangeHasNotBeenSavedYet": "Modificarea nu a fost încă salvată", diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index 3c2db2a56..caf14eb6f 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -234,7 +234,7 @@ "Calendar": "Календарь", "CalendarWeekColumnHeaderHelpText": "Отображается над каждым столбцом, когда неделя активна", "Cancel": "Отмена", - "CancelMessageText": "Вы уверены, что хотите убрать данную задачу из очереди?", + "CancelPendingTask": "Вы уверены, что хотите убрать данную задачу из очереди?", "CertificateValidation": "Проверка сертификата", "ChangeFileDate": "Изменить дату файла", "ChangeHasNotBeenSavedYet": "Изменения ещё не вступили в силу", diff --git a/src/NzbDrone.Core/Localization/Core/sk.json b/src/NzbDrone.Core/Localization/Core/sk.json index ac3c2e6b8..88f7303f2 100644 --- a/src/NzbDrone.Core/Localization/Core/sk.json +++ b/src/NzbDrone.Core/Localization/Core/sk.json @@ -81,7 +81,7 @@ "BeforeUpdate": "Pred aktualizáciou", "Blocklist": "Blocklist", "BlocklistRelease": "Blocklistnúť vydanie", - "CancelMessageText": "Naozaj chcete zrušiť túto prebiehajúcu úlohu?", + "CancelPendingTask": "Naozaj chcete zrušiť túto prebiehajúcu úlohu?", "CertificateValidation": "Overenie certifikátu", "ChangeFileDate": "Zmeniť dátum súboru", "ChangeHasNotBeenSavedYet": "Zmena ešte nebola uložená", diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 9da5fdb8f..86d43dce1 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -77,7 +77,7 @@ "BypassProxyForLocalAddresses": "Bypass Proxy för lokala adresser", "Calendar": "Kalender", "Cancel": "Avbryt", - "CancelMessageText": "Är du säker på att du vill avbryta den väntande uppgiften?", + "CancelPendingTask": "Är du säker på att du vill avbryta den väntande uppgiften?", "CatalogNumber": "Katalog Nummer", "CertificateValidationHelpText": "Ändra hur strikt valideringen av HTTPS certifikat är", "ChangeFileDate": "Ändra fildatum", diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index 8a6f33c6c..9d88a209a 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -238,7 +238,7 @@ "Calendar": "ปฏิทิน", "CalendarWeekColumnHeaderHelpText": "แสดงอยู่เหนือแต่ละคอลัมน์เมื่อสัปดาห์เป็นมุมมองที่ใช้งานอยู่", "Cancel": "ยกเลิก", - "CancelMessageText": "แน่ใจไหมว่าต้องการยกเลิกงานที่รอดำเนินการนี้", + "CancelPendingTask": "แน่ใจไหมว่าต้องการยกเลิกงานที่รอดำเนินการนี้", "CertificateValidation": "การตรวจสอบใบรับรอง", "ChangeFileDate": "เปลี่ยนวันที่ของไฟล์", "ChangeHasNotBeenSavedYet": "ยังไม่ได้บันทึกการเปลี่ยนแปลง", diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 546d18d40..95a621769 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -84,7 +84,7 @@ "Calendar": "Takvim", "CalendarWeekColumnHeaderHelpText": "Aktif görünüm hafta olduğunda her bir sütunun üzerinde gösterilir", "Cancel": "Vazgeç", - "CancelMessageText": "Bu bekleyen görevi iptal etmek istediğinizden emin misiniz?", + "CancelPendingTask": "Bu bekleyen görevi iptal etmek istediğinizden emin misiniz?", "CertificateValidation": "Sertifika Doğrulama", "CertificateValidationHelpText": "HTTPS sertifika doğrulamasının sıkılığını değiştirin. Riskleri anlamadığınız sürece değişmeyin.", "ChangeFileDate": "Dosya Tarihini Değiştir", diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 75c156d9f..6e18f0f65 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -69,7 +69,7 @@ "ArtistAlbumClickToChangeTrack": "Натисніть, щоб змінити фільм", "AuthenticationMethodHelpText": "Вимагати ім’я користувача та пароль для доступу до {appName}", "BackupFolderHelpText": "Відносні шляхи будуть у каталозі AppData {appName}", - "CancelMessageText": "Ви впевнені, що хочете скасувати це незавершене завдання?", + "CancelPendingTask": "Ви впевнені, що хочете скасувати це незавершене завдання?", "ChmodFolderHelpTextWarning": "Це працює лише в тому випадку, якщо власником файлу є користувач, на якому працює {appName}. Краще переконатися, що клієнт завантаження правильно встановлює дозволи.", "ChownGroupHelpText": "Назва групи або gid. Використовуйте gid для віддалених файлових систем.", "ChownGroupHelpTextWarning": "Це працює, лише якщо користувач, який запускає {appName}, є власником файлу. Краще переконатися, що клієнт завантаження використовує ту саму групу, що й {appName}.", diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index c4327fcf9..f9ecf6b5b 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -261,7 +261,7 @@ "Calendar": "Lịch", "CalendarWeekColumnHeaderHelpText": "Được hiển thị phía trên mỗi cột khi tuần là chế độ xem đang hoạt động", "Cancel": "Huỷ bỏ", - "CancelMessageText": "Bạn có chắc chắn muốn hủy nhiệm vụ đang chờ xử lý này không?", + "CancelPendingTask": "Bạn có chắc chắn muốn hủy nhiệm vụ đang chờ xử lý này không?", "CertificateValidation": "Xác thực chứng chỉ", "ChangeFileDate": "Thay đổi ngày tệp", "ChangeHasNotBeenSavedYet": "Thay đổi vẫn chưa được lưu", diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index f0a556d9b..dd51d1f75 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -225,7 +225,7 @@ "BlocklistRelease": "发布资源黑名单", "Calendar": "日历", "ClickToChangeQuality": "点击更改质量", - "CancelMessageText": "您确定要取消这个挂起的任务吗?", + "CancelPendingTask": "您确定要取消这个挂起的任务吗?", "ChangeFileDate": "修改文件日期", "ChmodFolder": "修改文件夹权限", "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "若需要查看有关下载客户端的详细信息,请点击“更多信息”按钮。", From cb6608975e3778d4e753592a11edd9232bea1e59 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 26 Oct 2024 04:49:00 +0000 Subject: [PATCH 077/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Anonymous Co-authored-by: Ardenet <1213193613@qq.com> Co-authored-by: Fixer Co-authored-by: Weblate Co-authored-by: fordas Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ar/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/de/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/el/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/he/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hu/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/id/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/is/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/it/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ja/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nb_NO/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ro/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sv/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/th/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/uk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/vi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_TW/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ar.json | 10 +- src/NzbDrone.Core/Localization/Core/bg.json | 10 +- src/NzbDrone.Core/Localization/Core/ca.json | 10 +- src/NzbDrone.Core/Localization/Core/cs.json | 10 +- src/NzbDrone.Core/Localization/Core/da.json | 10 +- src/NzbDrone.Core/Localization/Core/de.json | 10 +- src/NzbDrone.Core/Localization/Core/el.json | 10 +- src/NzbDrone.Core/Localization/Core/es.json | 108 ++++++++++-------- src/NzbDrone.Core/Localization/Core/fi.json | 11 +- src/NzbDrone.Core/Localization/Core/fr.json | 15 ++- src/NzbDrone.Core/Localization/Core/he.json | 9 +- src/NzbDrone.Core/Localization/Core/hi.json | 9 +- src/NzbDrone.Core/Localization/Core/hr.json | 4 +- src/NzbDrone.Core/Localization/Core/hu.json | 11 +- src/NzbDrone.Core/Localization/Core/id.json | 3 +- src/NzbDrone.Core/Localization/Core/is.json | 10 +- src/NzbDrone.Core/Localization/Core/it.json | 11 +- src/NzbDrone.Core/Localization/Core/ja.json | 10 +- src/NzbDrone.Core/Localization/Core/ko.json | 9 +- .../Localization/Core/nb_NO.json | 4 +- src/NzbDrone.Core/Localization/Core/nl.json | 10 +- src/NzbDrone.Core/Localization/Core/pl.json | 10 +- src/NzbDrone.Core/Localization/Core/pt.json | 10 +- .../Localization/Core/pt_BR.json | 15 ++- src/NzbDrone.Core/Localization/Core/ro.json | 11 +- src/NzbDrone.Core/Localization/Core/ru.json | 15 ++- src/NzbDrone.Core/Localization/Core/sk.json | 4 +- src/NzbDrone.Core/Localization/Core/sv.json | 10 +- src/NzbDrone.Core/Localization/Core/th.json | 9 +- src/NzbDrone.Core/Localization/Core/tr.json | 11 +- src/NzbDrone.Core/Localization/Core/uk.json | 10 +- src/NzbDrone.Core/Localization/Core/vi.json | 9 +- .../Localization/Core/zh_CN.json | 54 +++++---- .../Localization/Core/zh_TW.json | 3 +- 34 files changed, 363 insertions(+), 102 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 9748ae989..59c556c02 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -741,5 +741,13 @@ "BuiltIn": "مدمج", "Script": "النصي", "DeleteSelectedCustomFormats": "حذف التنسيق المخصص", - "IncludeCustomFormatWhenRenaming": "قم بتضمين تنسيق مخصص عند إعادة التسمية" + "IncludeCustomFormatWhenRenaming": "قم بتضمين تنسيق مخصص عند إعادة التسمية", + "AptUpdater": "استخدم apt لتثبيت التحديث", + "CancelPendingTask": "هل أنت متأكد أنك تريد إلغاء هذه المهمة المعلقة؟", + "ExternalUpdater": "تم تكوين {appName} لاستخدام آلية تحديث خارجية", + "DockerUpdater": "تحديث حاوية عامل الإرساء لتلقي التحديث", + "InstallLatest": "تثبيت الأحدث", + "OnLatestVersion": "تم بالفعل تثبيت أحدث إصدار من {appName}", + "Shutdown": "اغلق", + "UpdateAppDirectlyLoadError": "تعذر تحديث {appName} مباشرة ،" } diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index 2ea098aa0..820fa796e 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -741,5 +741,13 @@ "BuiltIn": "Вграден", "Script": "Сценарий", "DeleteSelectedCustomFormats": "Изтриване на потребителски формат", - "IncludeCustomFormatWhenRenaming": "Включете персонализиран формат при преименуване" + "IncludeCustomFormatWhenRenaming": "Включете персонализиран формат при преименуване", + "AptUpdater": "Използвайте apt, за да инсталирате актуализацията", + "CancelPendingTask": "Наистина ли искате да отмените тази чакаща задача?", + "DockerUpdater": "актуализирайте контейнера на докера, за да получите актуализацията", + "ExternalUpdater": "{appName} е конфигуриран да използва външен механизъм за актуализация", + "InstallLatest": "Инсталирайте най-новите", + "OnLatestVersion": "Вече е инсталирана най-новата версия на {appName}", + "Shutdown": "Изключвам", + "UpdateAppDirectlyLoadError": "Не може да се актуализира {appName} директно," } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 70100adf8..e9f1ac3d6 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -951,5 +951,13 @@ "Script": "Script", "DeleteSelectedCustomFormats": "Suprimeix el format personalitzat", "DeleteSelectedCustomFormatsMessageText": "Esteu segur que voleu suprimir {count} llista(es) d'importació seleccionada(es)?", - "IncludeCustomFormatWhenRenaming": "Inclou el format personalitzat en canviar el nom" + "IncludeCustomFormatWhenRenaming": "Inclou el format personalitzat en canviar el nom", + "AptUpdater": "Utilitzeu apt per a instal·lar l'actualització", + "CancelPendingTask": "Esteu segur que voleu cancel·lar aquesta tasca pendent?", + "DockerUpdater": "actualitzeu el contenidor Docker per a rebre l'actualització", + "ExternalUpdater": "{appName} està configurat per a utilitzar un mecanisme d'actualització extern", + "InstallLatest": "Instal·la l'últim", + "OnLatestVersion": "La darrera versió de {appName} ja està instal·lada", + "Shutdown": "Apaga", + "UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament," } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 34fc28a0b..1fd4b8171 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -874,5 +874,13 @@ "Script": "Skript", "DeleteSelectedCustomFormats": "Odstranění vlastního formátu", "DeleteSelectedCustomFormatsMessageText": "Opravdu chcete smazat {count} vybraných seznamů k importu?", - "IncludeCustomFormatWhenRenaming": "Při přejmenování zahrnout vlastní formát" + "IncludeCustomFormatWhenRenaming": "Při přejmenování zahrnout vlastní formát", + "AptUpdater": "K instalaci aktualizace použijte apt", + "CancelPendingTask": "Opravdu chcete zrušit tento nevyřízený úkol?", + "DockerUpdater": "aktualizujte kontejner dockeru, abyste aktualizaci obdrželi", + "InstallLatest": "Nainstalujte nejnovější", + "Shutdown": "Vypnout", + "UpdateAppDirectlyLoadError": "{appName} nelze aktualizovat přímo,", + "ExternalUpdater": "{appName} je nakonfigurován pro použití externího aktualizačního mechanismu", + "OnLatestVersion": "Nejnovější verze aplikace {appName} je již nainstalována" } diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index 22757137f..af9ad57f3 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -773,5 +773,13 @@ "AddMissing": "Tilføj manglende", "AddAlbumWithTitle": "Tilføj {albumTitle}", "AddArtistWithName": "Tilføj {artistName}", - "AddedArtistSettings": "Indstillinger for tilføjede forfattere" + "AddedArtistSettings": "Indstillinger for tilføjede forfattere", + "AptUpdater": "Brug apt til at installere opdateringen", + "DockerUpdater": "opdater docker-containeren for at modtage opdateringen", + "ExternalUpdater": "{appName} er konfigureret til at bruge en ekstern opdateringsmekanisme", + "InstallLatest": "Installer senest", + "OnLatestVersion": "Den seneste version af {appName} er allerede installeret", + "Shutdown": "Lukke ned", + "UpdateAppDirectlyLoadError": "Kan ikke opdatere {appName} direkte,", + "CancelPendingTask": "Er du sikker på, at du vil annullere denne afventende opgave?" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index d9fe5ffee..a483c9115 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -1185,5 +1185,13 @@ "DeleteSelectedCustomFormats": "Benutzerdefiniertes Format löschen", "IncludeCustomFormatWhenRenaming": "Eigenes Format beim umbennen einfügen", "DeleteSelectedCustomFormatsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Importliste(n) löschen möchten?", - "IndexerSettingsApiUrl": "API-URL" + "IndexerSettingsApiUrl": "API-URL", + "AptUpdater": "Verwenden Sie apt, um das Update zu installieren", + "CancelPendingTask": "Möchten Sie diese ausstehende Aufgabe wirklich abbrechen?", + "DockerUpdater": "Aktualisieren Sie den Docker-Container, um das Update zu erhalten", + "ExternalUpdater": "{appName} wurde so konfiguriert, dass ein externer Update Mechanismus benutzt wird", + "InstallLatest": "Jetzt updaten", + "Shutdown": "Herunterfahren", + "UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden.", + "OnLatestVersion": "Die aktuellste Version ist bereits installiert" } diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index 32d6ad836..d8541bea5 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -1109,5 +1109,13 @@ "BuiltIn": "Ενσωματωμένο", "Script": "Γραφή", "DeleteSelectedCustomFormats": "Διαγραφή προσαρμοσμένης μορφής", - "IncludeCustomFormatWhenRenaming": "Συμπεριλάβετε προσαρμοσμένη μορφή κατά τη μετονομασία" + "IncludeCustomFormatWhenRenaming": "Συμπεριλάβετε προσαρμοσμένη μορφή κατά τη μετονομασία", + "AptUpdater": "Χρησιμοποιήστε το apt για να εγκαταστήσετε την ενημέρωση", + "CancelPendingTask": "Είστε βέβαιοι ότι θέλετε να ακυρώσετε αυτήν την εργασία σε εκκρεμότητα;", + "DockerUpdater": "ενημερώστε το κοντέινερ για να λάβετε την ενημέρωση", + "ExternalUpdater": "Το {appName} έχει ρυθμιστεί να χρησιμοποιεί έναν εξωτερικό μηχανισμό ενημέρωσης", + "InstallLatest": "Εγκατάσταση πιο πρόσφατου", + "OnLatestVersion": "Η τελευταία έκδοση του {appName} είναι ήδη εγκατεστημένη", + "Shutdown": "ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣ", + "UpdateAppDirectlyLoadError": "Δεν είναι δυνατή η απευθείας ενημέρωση του {appName}," } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 0202dc2ae..7b37a7227 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -16,19 +16,19 @@ "Branch": "Rama", "BypassProxyForLocalAddresses": "Omitir Proxy para Direcciones Locales", "CalendarWeekColumnHeaderHelpText": "Mostrado sobre cada columna cuando la vista activa es semana", - "CancelPendingTask": "Seguro que quieres cancelar esta tarea pendiente?", - "CertificateValidation": "Validacion de certificado", + "CancelPendingTask": "¿Estás seguro que quieres cancelar esta tarea pendiente?", + "CertificateValidation": "Validación de certificado", "ChmodFolderHelpTextWarning": "Esto solo funciona si el usuario que ejecuta {appName} es el propietario del archivo. Es mejor asegurarse de que el cliente de descarga establezca los permisos correctamente.", "ChownGroupHelpTextWarning": "Esto solo funciona si el usuario que ejecuta {appName} es el propietario del archivo. Es mejor asegurarse de que el cliente de descarga use el mismo grupo que {appName}.", "ConnectSettings": "Conectar Ajustes", "CopyUsingHardlinksHelpTextWarning": "Ocasionalmente, los archivos bloqueados impiden renombrar los archivos que están siendo sembrados. Puedes desactivar temporalmente la siembra y usar la función de renombrado de {appName} como alternativa.", "CutoffHelpText": "Una vez que se alcanze esta calidad, {appName} no descargará películas", "CutoffUnmet": "Límite no alcanzado", - "DeleteBackupMessageText": "Seguro que quieres eliminar la copia de seguridad '{name}'?", - "DeleteDelayProfile": "Eliminar Perfil de Retardo", - "DeleteDelayProfileMessageText": "¿Está seguro de que desea borrar este perfil de retraso?", + "DeleteBackupMessageText": "¿Estás seguro que quieres eliminar la copia de seguridad '{name}'?", + "DeleteDelayProfile": "Eliminar Perfil de Retraso", + "DeleteDelayProfileMessageText": "¿Estás seguro que quieres borrar este perfil de retraso?", "DeleteDownloadClient": "Borrar cliente de descarga", - "DeleteTagMessageText": "¿Está seguro de querer eliminar la etiqueta '{label}'?", + "DeleteTagMessageText": "¿Estás seguro que quieres eliminar la etiqueta '{label}'?", "DestinationPath": "Ruta de destino", "DetailedProgressBar": "Barra de Progreso Detallada", "DetailedProgressBarHelpText": "Mostrar texto en la barra de progreso", @@ -59,10 +59,10 @@ "LogLevel": "Nivel de Registro", "LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "El registro de seguimiento sólo debe activarse temporalmente", "LongDateFormat": "Formato de Fecha Larga", - "MaintenanceRelease": "Lanzamiento de mantenimiento: Corrección de errores y otras mejoras. Ver historial de commits de Github para mas detalle", + "MaintenanceRelease": "Lanzamiento de mantenimiento: Corrección de errores y otras mejoras. Ver el historial de commits de Github para más detalles", "ManualImport": "Importación manual", "MarkAsFailed": "Marcar como Fallido", - "MarkAsFailedMessageText": "Seguro que quieres marcar '{0}' como fallida?", + "MarkAsFailedMessageText": "¿Estás seguro que quieres marcar '{0}' como fallida?", "MaximumLimits": "Límites máximos", "MaximumSize": "Tamaño máximo", "MaximumSizeHelpText": "Tamaño máximo para que un lanzamiento sea capturado en MB. Establecer a cero para establecerlo a ilimitado.", @@ -126,7 +126,7 @@ "Remove": "Eliminar", "RemoveFailedDownloadsHelpText": "Eliminar descargas fallidas desde el historial del cliente de descarga", "RemoveFilter": "Eliminar filtro", - "RemoveFromBlocklist": "Eliminar de lista de bloqueados", + "RemoveFromBlocklist": "Eliminar de la lista de bloqueo", "RemoveFromDownloadClient": "Eliminar del cliente de descarga", "RemoveFromQueue": "Eliminar de la cola", "RemoveSelected": "Eliminar seleccionado", @@ -305,9 +305,9 @@ "ChangeHasNotBeenSavedYet": "El cambio aún no se ha guardado", "ChmodFolder": "Carpeta chmod", "ChmodFolderHelpText": "Octal, aplicado durante la importación / cambio de nombre a carpetas y archivos multimedia (sin bits de ejecución)", - "ChownGroupHelpText": "Nombre del grupo o gid. Utilice gid para sistemas de archivos remotos.", + "ChownGroupHelpText": "Nombre del grupo o gid. Utiliza gid para sistemas de archivos remotos.", "Clear": "Borrar", - "ClickToChangeQuality": "Clic para cambiar la calidad", + "ClickToChangeQuality": "Haz clic para cambiar la calidad", "Columns": "Columnas", "Component": "Componente", "CopyUsingHardlinksHelpText": "Los enlaces duros permiten a {appName} importar torrents sembrados a la carpeta del artista sin ocupar espacio adicional en disco o copiar todo el contenido del archivo. Los enlaces duros sólo funcionarán si el origen y el destino están en el mismo volumen", @@ -315,22 +315,22 @@ "CreateEmptyArtistFoldersHelpText": "Crear carpetas de películas que faltan durante la exploración del disco", "CreateGroup": "Crear grupo", "DatabaseMigration": "Migración de la base de datos", - "DelayProfile": "Perfil de retardo", - "DelayProfiles": "Perfiles de retardo", + "DelayProfile": "Perfil de retraso", + "DelayProfiles": "Perfiles de retraso", "Delete": "Eliminar", "DeleteBackup": "Eliminar copia de seguridad", - "DeleteDownloadClientMessageText": "Seguro que quieres eliminar el gestor de descargas '{name}'?", - "DeleteEmptyFolders": "Borrar carpetas vacías", + "DeleteDownloadClientMessageText": "¿Estás seguro que quieres eliminar el cliente de descarga '{name}'?", + "DeleteEmptyFolders": "Eliminar carpetas vacías", "DeleteImportListExclusion": "Eliminar exclusión de listas de importación", - "DeleteImportListExclusionMessageText": "¿Está seguro de que desea eliminar esta exclusión de la lista de importación?", - "DeleteImportListMessageText": "Seguro que quieres eliminar la lista '{name}'?", + "DeleteImportListExclusionMessageText": "¿Estás seguro que quieres eliminar esta exclusión de la lista de importación?", + "DeleteImportListMessageText": "¿Estás seguro que quieres eliminar la lista '{name}'?", "DeleteIndexer": "Borrar indexador", "DeleteIndexerMessageText": "¿Estás seguro que quieres eliminar el indexador '{name}'?", "DeleteMetadataProfileMessageText": "¿Seguro que quieres eliminar el perfil de metadatos '{name}'?", - "DeleteNotification": "Borrar Notificacion", - "DeleteNotificationMessageText": "¿Seguro que quieres eliminar la notificación '{name}'?", - "DeleteQualityProfile": "Borrar perfil de calidad", - "DeleteQualityProfileMessageText": "¿Seguro que quieres eliminar el perfil de calidad {name}?", + "DeleteNotification": "Eliminar Notificación", + "DeleteNotificationMessageText": "¿Estás seguro que quieres eliminar la notificación '{name}'?", + "DeleteQualityProfile": "Eliminar perfil de calidad", + "DeleteQualityProfileMessageText": "¿Estás seguro que quieres eliminar el perfil de calidad {name}?", "DeleteReleaseProfile": "Eliminar perfil de lanzamiento", "DeleteReleaseProfileMessageText": "¿Estás seguro que quieres eliminar este perfil de lanzamiento?", "DeleteRootFolderMessageText": "¿Estás seguro que quieres eliminar la carpeta raíz '{name}'?", @@ -487,7 +487,7 @@ "Deleted": "Eliminado", "Details": "Detalles", "Donations": "Donaciones", - "DoNotPrefer": "No prefiero", + "DoNotPrefer": "No preferir", "DoNotUpgradeAutomatically": "No actualizar automáticamente", "DownloadFailed": "La descarga falló", "EditImportListExclusion": "Editar exclusión de lista de importación", @@ -502,13 +502,13 @@ "FreeSpace": "Espacio libre", "General": "General", "Genres": "Géneros", - "Grabbed": "Añadido", + "Grabbed": "Capturado", "HardlinkCopyFiles": "Enlace permanente/Copiar archivos", "HideAdvanced": "Ocultar avanzado", "Ignored": "Ignorado", "Import": "Importar", "IndexerDownloadClientHelpText": "Especifica qué cliente de descarga es usado para capturas desde este indexador", - "IndexerTagHelpText": "Utilizar este indexador solo para artistas con al menos una etiqueta coincidente. Dejar en blanco para utilizarlo con todos los artistas.", + "IndexerTagHelpText": "Utiliza este indexador solo para artistas con al menos una etiqueta coincidente. Dejar en blanco para utilizarlo con todos los artistas.", "InstanceName": "Nombre de la Instancia", "InstanceNameHelpText": "Nombre de la instancia en la pestaña y para la aplicación Syslog", "LastDuration": "Última Duración", @@ -575,10 +575,10 @@ "AddConnection": "Añadir Conexión", "AddImportListExclusion": "Añadir Exclusión de Lista de Importación", "EditMetadataProfile": "perfil de metadatos", - "ImportListExclusions": "Importar lista de exclusiones", + "ImportListExclusions": "Exclusiones de listas de importación", "EditGroups": "Editar grupos", "Database": "Base de datos", - "QualitiesHelpText": "Las calidades situadas mas arriba en la lista son las preferidas aunque no estén marcadas. Las calidades del mismo grupo son iguales. Sólo se buscarán las calidades marcadas", + "QualitiesHelpText": "Las calidades situadas más arriba en la lista son las preferidas aunque no estén marcadas. Las calidades del mismo grupo son iguales. Sólo se buscarán las calidades marcadas", "DoneEditingGroups": "Terminado de editar grupos", "ChooseImportMethod": "Elegir método de importación", "ClickToChangeReleaseGroup": "Pulsa para cambiar el grupo de lanzamiento", @@ -602,8 +602,8 @@ "DownloadPropersAndRepacksHelpTextWarning": "Usar formatos personalizados para actualizaciones automáticas a propers/repacks", "DownloadedUnableToImportCheckLogsForDetails": "Descargado: no se puede importar: verifique los registros para obtener detalles", "ExportCustomFormat": "Exportar formato personalizado", - "FailedDownloadHandling": "Manipulación de Descargas Fallidas", - "FailedLoadingSearchResults": "Error al cargar los resultados de la busqueda, prueba otra vez.", + "FailedDownloadHandling": "Error en la Administración de Descargas", + "FailedLoadingSearchResults": "Error al cargar los resultados de la búsqueda, prueba otra vez.", "Formats": "Formatos", "IncludeCustomFormatWhenRenamingHelpText": "Incluir en el formato de renombrado {Formatos Propios}", "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "Es fácil añadir un artista nuevo, tan solo empieza escribiendo el nombre del artista que quieras añadir.", @@ -620,7 +620,7 @@ "PreferTorrent": "Preferir torrent", "PreferUsenet": "Preferir usenet", "UnableToLoadInteractiveSearch": "No se pueden cargar los resultados de esta búsqueda de películas. Vuelve a intentarlo más tarde", - "EnableRssHelpText": "Se usará cuando {appName} busque periódicamente lanzamientos vía Sincronización RSS", + "EnableRssHelpText": "Se utilizará cuando {appName} busque periódicamente publicaciones a través de la sincronización por RSS", "HiddenClickToShow": "Oculto, pulsa para mostrar", "Disabled": "Deshabilitado", "DownloadClientCheckDownloadingToRoot": "El cliente de descargas {0} coloca las descargas en la carpeta raíz {1}. No debe descargar a una carpeta raíz.", @@ -628,7 +628,7 @@ "DownloadClientStatusCheckSingleClientMessage": "Clientes de descargas no disponibles debido a errores: {0}", "ImportListStatusCheckAllClientMessage": "Las listas no están disponibles debido a errores", "ImportListStatusCheckSingleClientMessage": "Listas no disponibles debido a errores: {0}", - "ImportMechanismHealthCheckMessage": "Activar Manipulación de Descargas Completadas", + "ImportMechanismHealthCheckMessage": "Activar Administración de Descargas Completadas", "IndexerJackettAll": "Indexadores que utilizan el Endpoint Jackett 'all' no están soportados: {0}", "IndexerLongTermStatusCheckAllClientMessage": "Ningún indexador está disponible debido a errores durante más de 6 horas", "IndexerLongTermStatusCheckSingleClientMessage": "Ningún indexador disponible debido a errores durante más de 6 horas: {0}", @@ -672,7 +672,7 @@ "RemotePathMappingCheckLocalWrongOSPath": "El cliente de descarga local {0} coloca las descargas en {1} pero ésta no es una ruta válida {2}. Revise la configuración de su cliente de descarga.", "RemotePathMappingCheckWrongOSPath": "El cliente de descarga remota {0} coloca las descargas en {1} pero esta no es una ruta válida {2}. Revise los mapeos de las rutas remotas y la configuración del cliente de descarga.", "UpdateCheckUINotWritableMessage": "No se puede instalar la actualización porque la carpeta UI '{0}' no tiene permisos de escritura para el usuario '{1}'.", - "DeleteRemotePathMapping": "Borrar mapeo de ruta remota", + "DeleteRemotePathMapping": "Eliminar asignación de ruta remota", "BlocklistReleaseHelpText": "Evita que {appName} vuelva a capturar esta película automáticamente", "FailedToLoadQueue": "No se pudo cargar la cola", "BlocklistReleases": "Lista de bloqueos de lanzamientos", @@ -703,12 +703,12 @@ "RemovingTag": "Eliminando etiqueta", "ResetQualityDefinitionsMessageText": "¿Estás seguro que quieres restablecer las definiciones de calidad?", "ApplyTagsHelpTextHowToApplyArtists": "Cómo añadir etiquetas a las películas seleccionadas", - "ApplyTagsHelpTextHowToApplyImportLists": "Cómo añadir etiquetas a las listas de importación seleccionadas", + "ApplyTagsHelpTextHowToApplyImportLists": "Cómo aplicar etiquetas a las listas de importación seleccionadas", "ApplyTagsHelpTextHowToApplyIndexers": "Cómo aplicar etiquetas a los indexadores seleccionados", "DeleteSelectedDownloadClientsMessageText": "¿Estás seguro que quieres eliminar {count} cliente(s) de descarga seleccionado(s)?", "DeleteSelectedImportListsMessageText": "¿Estás seguro que quieres eliminar {count} lista(s) de importación seleccionada(s)?", "DeleteSelectedIndexersMessageText": "¿Estás seguro que quieres eliminar {count} indexador(es) seleccionado(s)?", - "ApplyTagsHelpTextHowToApplyDownloadClients": "Cómo añadir etiquetas a los clientes de descargas seleccionados", + "ApplyTagsHelpTextHowToApplyDownloadClients": "Cómo aplicar etiquetas a los clientes de descargas seleccionados", "SuggestTranslationChange": "Sugerir un cambio en la traducción", "UpdateSelected": "Actualizar seleccionados", "AllResultsAreHiddenByTheAppliedFilter": "Todos los resultados están ocultos por el filtro aplicado", @@ -716,13 +716,13 @@ "SomeResultsAreHiddenByTheAppliedFilter": "Algunos resultados están ocultos por el filtro aplicado", "EditSelectedIndexers": "Editar Indexadores Seleccionados", "DeleteCondition": "Eliminar Condición", - "DeleteRemotePathMappingMessageText": "¿Está seguro de querer eliminar esta asignación de ruta remota?", + "DeleteRemotePathMappingMessageText": "¿Estás seguro que quieres eliminar esta asignación de ruta remota?", "ApplyChanges": "Aplicar Cambios", "AutoAdd": "Añadir Automáticamente", "EditSelectedDownloadClients": "Editar Clientes de Descarga Seleccionados", "EditSelectedImportLists": "Editar Listas de Importación Seleccionadas", "Implementation": "Implementación", - "ManageClients": "Gestionar Clientes", + "ManageClients": "Administrar Clientes", "ApiKeyValidationHealthCheckMessage": "Actualice su clave de API para que tenga al menos {0} carácteres. Puede hacerlo en los ajustes o en el archivo de configuración", "ApplicationUrlHelpText": "La URL externa de la aplicación incluyendo http(s)://, puerto y URL base", "Clone": "Clonar", @@ -732,14 +732,14 @@ "CountDownloadClientsSelected": "{selectedCount} cliente(s) de descarga seleccionado(s)", "DeleteSelectedImportLists": "Eliminar Lista(s) de Importación", "Episode": "Episodio", - "ManageImportLists": "Gestionar Listas de Importación", - "ManageIndexers": "Gestionar Indexadores", - "ManageLists": "Gestionar Listas", + "ManageImportLists": "Administrar Listas de Importación", + "ManageIndexers": "Administrar Indexadores", + "ManageLists": "Administrar Listas", "IndexerDownloadClientHealthCheckMessage": "Indexadores con clientes de descarga inválidos: {0}.", "ApplicationURL": "URL de la aplicación", "CountImportListsSelected": "{selectedCount} lista(s) de importación seleccionada(s)", "CountIndexersSelected": "{selectedCount} indexador(es) seleccionado(s)", - "ManageDownloadClients": "Gestionar Clientes de Descarga", + "ManageDownloadClients": "Administrar Clientes de Descarga", "AddReleaseProfile": "Añadir perfil de lanzamiento", "DeleteRootFolder": "Eliminar Carpeta Raíz", "ImportListRootFolderMissingRootHealthCheckMessage": "Falta la capeta raíz para las listas: {0}", @@ -747,7 +747,7 @@ "ConnectionLostToBackend": "{appName} ha perdido su conexión con el backend y tendrá que ser recargado para restaurar su funcionalidad.", "NotificationStatusSingleClientHealthCheckMessage": "Listas no disponibles debido a errores: {0}", "AppUpdated": "{appName} Actualizado", - "AppUpdatedVersion": "{appName} ha sido actualizado a la versión `{version}`, para obtener los cambios más recientes, necesitará recargar {appName}", + "AppUpdatedVersion": "{appName} ha sido actualizado a la versión `{version}`, para obtener los cambios más recientes tendrás que recargar {appName}", "ConnectionLost": "Conexión perdida", "ConnectionLostReconnect": "{appName} intentará conectarse automáticamente, o puedes pulsar en recargar abajo.", "AllowFingerprintingHelpText": "Utilizar la huella digital para mejorar la precisión de la coincidencia de libros", @@ -830,7 +830,7 @@ "DeleteSpecification": "Eliminar especificación", "EditAutoTag": "Editar Etiquetado Automático", "EditDownloadClientImplementation": "Editar Cliente de Descarga - {implementationName}", - "EditImportListImplementation": "Añadir lista de importación - {implementationName}", + "EditImportListImplementation": "Editar lista de importación - {implementationName}", "GrabId": "Capturar ID", "ImportList": "Importar lista", "Negate": "Negar", @@ -843,7 +843,7 @@ "AuthForm": "Formularios (Página de inicio de sesión)", "AuthenticationMethod": "Método de autenticación", "DeleteAutoTag": "Eliminar Etiquetado Automático", - "DeleteAutoTagHelpText": "¿Está seguro de querer eliminar el etiquetado automático '{name}'?", + "DeleteAutoTagHelpText": "¿Estás seguro que quieres eliminar el etiquetado automático '{name}'?", "AddNewArtistSearchForMissingAlbums": "Empezar a buscar por película ausente", "AutoTaggingLoadError": "No se pudo cargar el etiquetado automático", "BypassIfAboveCustomFormatScore": "Ignorar si está por encima de la puntuación del formato personalizado", @@ -861,19 +861,19 @@ "ContinuingOnly": "Solo continuando", "DownloadClientQbittorrentSettingsContentLayout": "Diseño del contenido", "InfoUrl": "Información de la URL", - "InvalidUILanguage": "Su interfaz de usuario está configurada en un idioma no válido, corríjalo y guarde la configuración", - "HealthMessagesInfoBox": "Puedes encontrar más información sobre la causa de estos mensajes de comprobación de salud haciendo clic en el enlace wiki (icono de libro) al final de la fila, o comprobando tus [registros]({link}). Si tienes dificultades para interpretar estos mensajes, puedes ponerte en contacto con nuestro soporte en los enlaces que aparecen a continuación.", - "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Si usar el diseño de contenido configurado de qBittorrent, el diseño original del torrent o siempre crear una subcarpeta (qBittorrent 4.3.2+)", + "InvalidUILanguage": "Tu interfaz de usuario está configurada en un idioma inválido, corrígelo y guarda la configuración", + "HealthMessagesInfoBox": "Puedes encontrar más información sobre la causa de estos mensajes de comprobación de salud haciendo clic en el enlace wiki (icono de libro) al final de la fila, o comprobando tus [registros]({link}). Si tienes dificultades para interpretar estos mensajes, puedes ponerte en contacto con nuestro soporte en los enlaces que aparecen abajo.", + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Si usa el diseño de contenido configurado de qBittorrent, el diseño original del torrent o siempre crea una subcarpeta (qBittorrent 4.3.2+)", "ChownGroup": "chown grupo", "NoLimitForAnyDuration": "SIn límite para el tiempo de ejecución", "NoMinimumForAnyDuration": "Sin mínimo para el tiempo de ejecución", "PreferredSize": "Tamaño preferido", - "ImportLists": "Importar listas", + "ImportLists": "Listas de Importación", "Unlimited": "Ilimitado", "AddImportListExclusionAlbumHelpText": "Evitar que las series sean agregadas a {appName} por las listas", "StatusEndedContinuing": "Continua", "NoCutoffUnmetItems": "Ningún elemento con límite no alcanzado", - "ExtraFileExtensionsHelpText": "Lista de archivos adicionales separados por coma para importar (.nfo será importado como .nfo-orig)", + "ExtraFileExtensionsHelpText": "Lista separada con comas de los archivos adicionales a importar (.nfo será importado como .nfo-orig)", "ExtraFileExtensionsHelpTextsExamples": "Ejemplos: '.sub, .nfo' o 'sub,nfo'", "TBA": "Por determinar", "DeleteArtistFoldersHelpText": "Eliminar la carpeta de películas y su contenido", @@ -1317,5 +1317,17 @@ "SkipFreeSpaceCheckHelpText": "Se usa cuando {appName} no puede detectar el espacio libre de tu carpeta raíz", "IndexerSettingsApiUrl": "URL de API", "IndexerSettingsApiUrlHelpText": "No cambie esto a menos que sepa lo que está haciendo. Ya que tu clave API será enviada a ese host.", - "LastSearched": "Último buscado" + "LastSearched": "Último buscado", + "AptUpdater": "Usa apt para instalar la actualización", + "DockerUpdater": "Actualiza el contenedor docker para recibir la actualización", + "ExternalUpdater": "{appName} está configurado para usar un mecanismo de actualización externo", + "Install": "Instalar", + "InstallLatest": "Instala el último", + "InstallMajorVersionUpdate": "Instalar actualización", + "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?", + "OnLatestVersion": "La última versión de {appName} ya está instalada", + "PreviouslyInstalled": "Previamente instalado", + "Shutdown": "Apagar", + "UpdateAppDirectlyLoadError": "No se pudo actualizar {appName} directamente,", + "InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información." } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index d67e49032..d6cf6420e 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -1255,5 +1255,14 @@ "DeleteSelectedCustomFormatsMessageText": "Haluatko varmasti poistaa valitut {count} tuontilistaa?", "IncludeCustomFormatWhenRenaming": "Sisällytä mukautetut muodot uudelleennimetessä", "IndexerSettingsApiUrl": "Rajapinnan URL-osoite", - "IndexerSettingsApiUrlHelpText": "Älä muuta tätä, jos et tiedä mitä teet, koska rajapinta-avaimesi lähetetään kyseiselle palvelimelle." + "IndexerSettingsApiUrlHelpText": "Älä muuta tätä, jos et tiedä mitä teet, koska rajapinta-avaimesi lähetetään kyseiselle palvelimelle.", + "AptUpdater": "Asenna päivitys APT-työkalun avulla", + "CancelPendingTask": "Haluatko varmasti perua tämän odottavan tehtävän?", + "DockerUpdater": "Hanki päivitys päivittämällä Docker-säiliö", + "ExternalUpdater": "{appName} on määritetty käyttämään ulkoista päivitysratkaisua.", + "InstallLatest": "Asenna uusin", + "OnLatestVersion": "Uusin {appName}-versio on jo asennettu", + "PreviouslyInstalled": "Edellinen asennettu versio", + "Shutdown": "Sammuta", + "UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan," } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 7945c4403..7a905750b 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -1315,5 +1315,18 @@ "LogSizeLimit": "Limite de taille du journal", "LogSizeLimitHelpText": "Taille maximale du fichier journal en Mo avant archivage. La valeur par défaut est de 1 Mo.", "IndexerSettingsApiUrl": "URL DE L'API", - "IndexerSettingsApiUrlHelpText": "Ne le modifiez pas à moins de savoir ce que vous faites, car votre clé API sera envoyée à cet hôte." + "IndexerSettingsApiUrlHelpText": "Ne le modifiez pas à moins de savoir ce que vous faites, car votre clé API sera envoyée à cet hôte.", + "AptUpdater": "Utiliser apt pour installer la mise à jour", + "CancelPendingTask": "Êtes-vous sur de vouloir annuler cette tâche en attente ?", + "DockerUpdater": "Mettez à jour le conteneur Docker pour recevoir la mise à jour", + "ExternalUpdater": "{appName} est configuré pour utiliser un mécanisme de mise à jour externe", + "Install": "Installer", + "InstallLatest": "Installer la dernière", + "InstallMajorVersionUpdate": "Installer la mise à jour", + "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 ?", + "InstallMajorVersionUpdateMessageLink": "Veuillez consulter [{domain}]({url}) pour plus d'informations.", + "OnLatestVersion": "La dernière version de {appName} est déjà installée", + "PreviouslyInstalled": "Installé précédemment", + "Shutdown": "Éteindre", + "UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName}," } diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index fde3088a3..ccfd53f6c 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -778,5 +778,12 @@ "BuiltIn": "נִבנָה בְּ", "Script": "תַסרִיט", "DeleteSelectedCustomFormats": "מחק פורמט מותאם אישית", - "IncludeCustomFormatWhenRenaming": "כלול פורמט מותאם אישית בעת שינוי שם" + "IncludeCustomFormatWhenRenaming": "כלול פורמט מותאם אישית בעת שינוי שם", + "AptUpdater": "השתמש ב- apt כדי להתקין את העדכון", + "ExternalUpdater": "{appName} מוגדר להשתמש במנגנון עדכון חיצוני", + "UpdateAppDirectlyLoadError": "לא ניתן לעדכן את {appName} ישירות,", + "DockerUpdater": "עדכן את מיכל העגינה לקבל את העדכון", + "InstallLatest": "התקן את האחרונה", + "OnLatestVersion": "הגרסה האחרונה של {appName} כבר מותקנת", + "Shutdown": "לכבות" } diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index f44b8ac39..ccb39d147 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -736,5 +736,12 @@ "BuiltIn": "में निर्मित", "Script": "लिपि", "DeleteSelectedCustomFormats": "कस्टम प्रारूप हटाएं", - "IncludeCustomFormatWhenRenaming": "नाम बदलने पर कस्टम प्रारूप शामिल करें" + "IncludeCustomFormatWhenRenaming": "नाम बदलने पर कस्टम प्रारूप शामिल करें", + "AptUpdater": "अद्यतन स्थापित करने के लिए उपयुक्त का उपयोग करें", + "CancelPendingTask": "क्या आप वाकई इस लंबित कार्य को रद्द करना चाहते हैं?", + "DockerUpdater": "अपडेट प्राप्त करने के लिए docker कंटेनर को अपडेट करें", + "InstallLatest": "नवीनतम स्थापित करें", + "OnLatestVersion": "रेडर का नवीनतम संस्करण पहले से ही स्थापित है", + "Shutdown": "बंद करना", + "UpdateAppDirectlyLoadError": "सीधे {appName} अद्यतन करने में असमर्थ," } diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index 456c0fbe2..3e77b54a2 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -300,5 +300,7 @@ "UnableToAddANewNotificationPleaseTryAgain": "Neuspješno dodavanje nove obavijesti, molimo pokušaj ponovno.", "UnableToAddANewQualityProfilePleaseTryAgain": "Neuspješno dodavanje novog profila kvalitete, molimo pokušaj ponovno.", "UnableToAddANewRootFolderPleaseTryAgain": "Neuspješno dodavanje novog indexera, molimo pokušaj ponovno.", - "UnableToLoadRootFolders": "Neuspješno dodavanje korijenske mape" + "UnableToLoadRootFolders": "Neuspješno dodavanje korijenske mape", + "AptUpdater": "Koristi apt kako bi instalirao ažuriranje", + "CancelPendingTask": "Jeste li sigurni da želite otkazati ovaj zadatak na čekanju?" } diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index 1cde1036f..09668277b 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -1213,5 +1213,14 @@ "Script": "Szkript", "DeleteSelectedCustomFormats": "Egyéni formátum törlése", "DeleteSelectedCustomFormatsMessageText": "Biztosan törölni szeretne {count} kiválasztott importlistát?", - "IncludeCustomFormatWhenRenaming": "Átnevezéskor adja meg az Egyéni formátumot" + "IncludeCustomFormatWhenRenaming": "Átnevezéskor adja meg az Egyéni formátumot", + "AptUpdater": "A frissítés telepítéséhez használja az apt-t", + "CancelPendingTask": "Biztosan törölni szeretné ezt a függőben lévő feladatot?", + "DockerUpdater": "Frissítse a docker-tárolót a frissítés fogadásához", + "ExternalUpdater": "A {appName} egy külső frissítési mechanizmus használatára van konfigurálva", + "InstallLatest": "Legfrissebb telepítése", + "OnLatestVersion": "A {appName} legújabb verziója már telepítva van", + "PreviouslyInstalled": "Korábban telepítve", + "Shutdown": "Leállitás", + "UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t" } diff --git a/src/NzbDrone.Core/Localization/Core/id.json b/src/NzbDrone.Core/Localization/Core/id.json index a5e264c6c..ad460813f 100644 --- a/src/NzbDrone.Core/Localization/Core/id.json +++ b/src/NzbDrone.Core/Localization/Core/id.json @@ -128,5 +128,6 @@ "Priority": "Prioritas", "AutomaticSearch": "Penelusuran Otomatis", "AddToDownloadQueue": "Tambahkan ke antrean pengunduhan", - "AddedToDownloadQueue": "Ditambahkan ke antrean pengunduhan" + "AddedToDownloadQueue": "Ditambahkan ke antrean pengunduhan", + "AptUpdater": "Gunakan apt untuk memasang pembaruan" } diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index 481ddab9f..53cbc6472 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -736,5 +736,13 @@ "BuiltIn": "Innbyggð", "Script": "Handrit", "DeleteSelectedCustomFormats": "Eyða sérsniðnu sniði", - "IncludeCustomFormatWhenRenaming": "Láttu sérsniðið snið fylgja með þegar þú endurnefnir" + "IncludeCustomFormatWhenRenaming": "Láttu sérsniðið snið fylgja með þegar þú endurnefnir", + "AptUpdater": "Notaðu apt til að setja uppfærsluna upp", + "CancelPendingTask": "Ertu viss um að þú viljir hætta við þetta verkefni í bið?", + "DockerUpdater": "uppfærðu bryggjugáminn til að fá uppfærsluna", + "ExternalUpdater": "{appName} er stilltur til að nota ytri uppfærslu", + "InstallLatest": "Settu upp nýjustu", + "OnLatestVersion": "Nýjasta útgáfan af {appName} er þegar uppsett", + "Shutdown": "Lokun", + "UpdateAppDirectlyLoadError": "Ekki er hægt að uppfæra {appName} beint," } diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index 27fe123b8..63ea39fbe 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -1030,5 +1030,14 @@ "DownloadedImporting": "'Scaricato - Importando'", "DownloadedWaitingToImport": "'Scaricato - In attesa di Importazione'", "MonitorFirstAlbum": "Primo Album", - "IndexerSettingsApiUrl": "API URL" + "IndexerSettingsApiUrl": "API URL", + "AptUpdater": "Usa apt per installare l'aggiornamento", + "CancelPendingTask": "Sei sicuro di voler cancellare questa operazione in sospeso?", + "DockerUpdater": "Aggiorna il container di docker per ricevere l'aggiornamento", + "ExternalUpdater": "{appName} è configurato per utilizzare un meccanismo di aggiornamento esterno", + "InstallLatest": "Installa il più recente", + "OnLatestVersion": "L'ultima versione di {appName} è già installata", + "PreviouslyInstalled": "Precedentemente Installato", + "Shutdown": "Spegnimento", + "UpdateAppDirectlyLoadError": "Impossibile aggiornare {appName} direttamente," } diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index 12cc4f252..04d0409c8 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -736,5 +736,13 @@ "Script": "脚本", "AddCondition": "条件の追加", "DeleteSelectedCustomFormats": "カスタムフォーマットを削除する", - "IncludeCustomFormatWhenRenaming": "名前を変更するときにカスタム形式を含める" + "IncludeCustomFormatWhenRenaming": "名前を変更するときにカスタム形式を含める", + "AptUpdater": "aptを使用してアップデートをインストールします", + "CancelPendingTask": "この保留中のタスクをキャンセルしてもよろしいですか?", + "DockerUpdater": "Dockerコンテナを更新して、更新を受信します", + "ExternalUpdater": "{appName}は、外部更新メカニズムを使用するように構成されています", + "InstallLatest": "最新のインストール", + "OnLatestVersion": "{appName}の最新バージョンはすでにインストールされています", + "Shutdown": "シャットダウン", + "UpdateAppDirectlyLoadError": "{appName}を直接更新できません。" } diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 7182f789f..622e0f976 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -708,5 +708,12 @@ "AddedToDownloadQueue": "다운로드 대기열에 추가됨", "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName}는 이 출시의 영화를 확인할 수 없습니다. {appName}는 이 출시를 자동으로 가져오지 못할 수 있습니다. '{0}'을(를) 잡으시겠습니까?", "BuiltIn": "내장", - "DeleteSelectedCustomFormats": "사용자 지정 형식 삭제" + "DeleteSelectedCustomFormats": "사용자 지정 형식 삭제", + "AptUpdater": "apt를 사용하여 업데이트 설치", + "CancelPendingTask": "이 보류중인 작업을 취소 하시겠습니까?", + "DockerUpdater": "Docker 컨테이너를 업데이트하여 업데이트를 받으십시오.", + "ExternalUpdater": "{appName}는 외부 업데이트 메커니즘을 사용하도록 구성됩니다.", + "OnLatestVersion": "최신 버전의 {appName}가 이미 설치되어 있습니다.", + "Shutdown": "종료", + "UpdateAppDirectlyLoadError": "{appName}를 직접 업데이트 할 수 없습니다." } diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index 7b71a44b2..6cc473ee2 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -272,5 +272,7 @@ "UnableToAddANewQualityProfilePleaseTryAgain": "Ikke mulig å legge til ny betingelse, vennligst prøv igjen", "BuiltIn": "Bygget inn", "DeleteSelectedCustomFormats": "Klon egendefinert format", - "DeleteSelectedCustomFormatsMessageText": "Er du sikker på at du vil slette formattaggen {0}?" + "DeleteSelectedCustomFormatsMessageText": "Er du sikker på at du vil slette formattaggen {0}?", + "AptUpdater": "Bruk apt til å installere oppdateringen", + "CancelPendingTask": "Er du sikker på at du vil avbryte denne ventende oppgaven?" } diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index aed7d4c2d..13fff5d0d 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -889,5 +889,13 @@ "CountArtistsSelected": "{count} importeer lijst(en) geselecteerd", "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", - "MinimumCustomFormatScoreHelpText": "Minimumscore aangepast formaat vereist om vertraging voor het voorkeursprotocol te omzeilen" + "MinimumCustomFormatScoreHelpText": "Minimumscore aangepast formaat vereist om vertraging voor het voorkeursprotocol te omzeilen", + "AptUpdater": "Gebruik apt om de update te installeren", + "CancelPendingTask": "Ben je zeker dat je deze onafgewerkte taak wil annuleren?", + "DockerUpdater": "Update de docker container om de update te ontvangen", + "InstallLatest": "Installeer Nieuwste Versie", + "OnLatestVersion": "De nieuwste versie van {appName} is al geïnstalleerd", + "Shutdown": "Afsluiten", + "ExternalUpdater": "{appName} is geconfigureerd om een extern update mechanisme te gebruiken", + "UpdateAppDirectlyLoadError": "Kan {appName} niet rechtstreeks updaten," } diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 8ce506776..35edccf3d 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -838,5 +838,13 @@ "Season": "Sezon", "Episode": "odcinek", "AddMetadataProfile": "profil metadanych", - "EditMetadataProfile": "profil metadanych" + "EditMetadataProfile": "profil metadanych", + "AptUpdater": "Użyj apt, aby zainstalować aktualizację", + "CancelPendingTask": "Czy na pewno chcesz anulować to oczekujące zadanie?", + "DockerUpdater": "zaktualizuj kontener Dockera, aby otrzymać aktualizację", + "ExternalUpdater": "{appName} jest skonfigurowany do korzystania z zewnętrznego mechanizmu aktualizacji", + "InstallLatest": "Zainstaluj najnowsze", + "OnLatestVersion": "Najnowsza wersja {appName} jest już zainstalowana", + "Shutdown": "Zamknąć", + "UpdateAppDirectlyLoadError": "Nie można bezpośrednio zaktualizować {appName}," } diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index c1440e44e..ee1c39fb9 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -1010,5 +1010,13 @@ "DeleteSelectedCustomFormats": "Eliminar formato personalizado", "DeleteSelectedCustomFormatsMessageText": "Tem a certeza de que pretende eliminar a(s) lista(s) de {count} importação selecionada(s)?", "IncludeCustomFormatWhenRenaming": "Incluir formato personalizado ao renomear", - "CountCustomFormatsSelected": "{count} formatos selecionados" + "CountCustomFormatsSelected": "{count} formatos selecionados", + "AptUpdater": "Utilize o apt para instalar a atualização", + "CancelPendingTask": "Tem a certeza que quer cancelar esta tarefa pendente?", + "ExternalUpdater": "O {appName} está definido para usar um mecanismo de atualização externo", + "InstallLatest": "Instalar o mais recente", + "OnLatestVersion": "A versão mais recente do {appName} já está instalada", + "Shutdown": "Encerrar", + "UpdateAppDirectlyLoadError": "Não foi possível atualizar o {appName} diretamente,", + "DockerUpdater": "atualize o contentor do Docker para receber a atualização" } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index a8bb1dc2f..3df282eb7 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -1317,5 +1317,18 @@ "SkipFreeSpaceCheckHelpText": "Usar quando {appName} não consegue detectar espaço livre em sua pasta raiz", "IndexerSettingsApiUrl": "URL da API", "IndexerSettingsApiUrlHelpText": "Não mude isso a menos que você saiba o que está fazendo. Já que sua chave API será enviada para esse host.", - "LastSearched": "Última Pesquisa" + "LastSearched": "Última Pesquisa", + "AptUpdater": "Usar apt para instalar atualizações", + "CancelPendingTask": "Tem certeza de que deseja cancelar esta tarefa pendente?", + "DockerUpdater": "Atualize o contêiner docker para receber a atualização", + "ExternalUpdater": "O {appName} está configurado para usar um mecanismo de atualização externo", + "Install": "Instalar", + "InstallLatest": "Instalar o mais recente", + "InstallMajorVersionUpdate": "Instalar Atualização", + "InstallMajorVersionUpdateMessageLink": "Verifique [{domain}]({url}) para obter mais informações.", + "OnLatestVersion": "A versão mais recente do {appName} já está instalada", + "PreviouslyInstalled": "Instalado anteriormente", + "Shutdown": "Desligar", + "UpdateAppDirectlyLoadError": "Incapaz de atualizar o {appName} diretamente,", + "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?" } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 482aafb9e..5bc2ca61e 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -681,7 +681,7 @@ "DownloadClientStatusCheckSingleClientMessage": "Clienții de descărcare indisponibili datorită erorilor: {0}", "ExpandAlbumByDefaultHelpText": "Album", "ExtraFileExtensionsHelpText": "Lista separată prin virgulă a fișierelor suplimentare de importat (.nfo va fi importat ca .nfo-orig)", - "FileNameTokens": "Jetoane cu nume de fișier", + "FileNameTokens": "Jetoane pentru nume de fișier", "IncludeHealthWarnings": "Includeți avertismente de sănătate", "Lowercase": "Minuscule", "NoResultsFound": "Nici un rezultat gasit", @@ -780,5 +780,12 @@ "UpdateAvailableHealthCheckMessage": "O nouă versiune este disponibilă: {version}", "DeleteSelectedCustomFormats": "Ștergeți formatul personalizat", "DeleteSelectedCustomFormatsMessageText": "Sigur doriți să ștergeți {count} clienți de descărcare selectați?", - "IncludeCustomFormatWhenRenaming": "Includeți format personalizat la redenumire" + "IncludeCustomFormatWhenRenaming": "Includeți format personalizat la redenumire", + "AptUpdater": "Utilizați apt pentru a instala actualizarea", + "DockerUpdater": "Actualizați containerul Docker pentru a primi actualizarea", + "ExternalUpdater": "{appName} este configurat pentru a utiliza un mecanism de actualizare extern", + "InstallLatest": "Instalați cel mai recent", + "OnLatestVersion": "Cea mai recentă versiune a {appName} este deja instalată", + "Shutdown": "Oprește", + "UpdateAppDirectlyLoadError": "Imposibil de actualizat direct {appName}," } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index caf14eb6f..4ec2f8c8e 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -1062,5 +1062,18 @@ "LogSizeLimitHelpText": "Максимальный размер файла журнала в МБ перед архивированием. По умолчанию - 1 МБ.", "Artists": "Исполнитель", "IndexerSettingsApiUrlHelpText": "Не меняйте это, если вы не знаете, что делаете. Поскольку ваш ключ API будет отправлен на этот хост.", - "IndexerSettingsApiUrl": "URL-адрес API" + "IndexerSettingsApiUrl": "URL-адрес API", + "AptUpdater": "Использовать apt для установки обновления", + "ExternalUpdater": "{appName} настроен на использование внешнего механизма обновления", + "Install": "Установить", + "InstallLatest": "Установить последнюю версию", + "InstallMajorVersionUpdate": "Установить обновление", + "InstallMajorVersionUpdateMessage": "Это обновление установит новую основную версию и может быть несовместимо с вашей системой. Вы уверены, что хотите установить это обновление?", + "InstallMajorVersionUpdateMessageLink": "Пожалуйста, проверьте [{domain}]({url}) для получения дополнительной информации.", + "OnLatestVersion": "Последняя версия {appName} уже установлена", + "PreviouslyInstalled": "Ранее установленный", + "Shutdown": "Выключить", + "UpdateAppDirectlyLoadError": "Невозможно обновить {appName} напрямую,", + "CancelPendingTask": "Вы уверены, что хотите отменить эту ожидающую задачу?", + "DockerUpdater": "Обновите контейнер Docker, чтобы получить обновление" } diff --git a/src/NzbDrone.Core/Localization/Core/sk.json b/src/NzbDrone.Core/Localization/Core/sk.json index 88f7303f2..9edb4c00e 100644 --- a/src/NzbDrone.Core/Localization/Core/sk.json +++ b/src/NzbDrone.Core/Localization/Core/sk.json @@ -290,5 +290,7 @@ "UnableToAddANewMetadataProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.", "UnableToAddANewQualityProfilePleaseTryAgain": "Nie je možné pridať novú podmienku, skúste to znova.", "BuiltIn": "Vstavaný", - "DeleteSelectedCustomFormats": "Klonovať vlastný formát" + "DeleteSelectedCustomFormats": "Klonovať vlastný formát", + "AptUpdater": "Použiť apt pre inštaláciu aktualizácie", + "CancelPendingTask": "Naozaj chcete zrušiť túto prebiehajúcu úlohu?" } diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 86d43dce1..815ac1440 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -907,5 +907,13 @@ "BuiltIn": "Inbyggd", "Script": "Skript", "DeleteSelectedCustomFormats": "Ta bort anpassat format", - "IncludeCustomFormatWhenRenaming": "Inkludera anpassat format när du byter namn" + "IncludeCustomFormatWhenRenaming": "Inkludera anpassat format när du byter namn", + "AptUpdater": "Använd apt för att installera uppdateringen", + "CancelPendingTask": "Är du säker på att du vill avbryta den väntande uppgiften?", + "DockerUpdater": "uppdatera dockerbehållaren för att ta emot uppdateringen", + "ExternalUpdater": "{appName} är konfigurerad för att använda en extern uppdateringsmekanism", + "InstallLatest": "Installera senaste", + "OnLatestVersion": "Den senaste versionen av {appName} är redan installerad", + "Shutdown": "Stäng av", + "UpdateAppDirectlyLoadError": "Det går inte att uppdatera {appName} direkt," } diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index 9d88a209a..744e5956e 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -733,5 +733,12 @@ "BuiltIn": "สร้างขึ้นใน", "Script": "สคริปต์", "DeleteSelectedCustomFormats": "ลบรูปแบบที่กำหนดเอง", - "IncludeCustomFormatWhenRenaming": "รวมรูปแบบที่กำหนดเองเมื่อเปลี่ยนชื่อ" + "IncludeCustomFormatWhenRenaming": "รวมรูปแบบที่กำหนดเองเมื่อเปลี่ยนชื่อ", + "AptUpdater": "ใช้ apt เพื่อติดตั้งการอัปเดต", + "DockerUpdater": "อัปเดตคอนเทนเนอร์นักเทียบท่าเพื่อรับการอัปเดต", + "ExternalUpdater": "{appName} ถูกกำหนดค่าให้ใช้กลไกการอัพเดตภายนอก", + "InstallLatest": "ติดตั้งล่าสุด", + "OnLatestVersion": "มีการติดตั้ง {appName} เวอร์ชันล่าสุดแล้ว", + "Shutdown": "ปิดตัวลง", + "UpdateAppDirectlyLoadError": "ไม่สามารถอัปเดต {appName} ได้โดยตรง" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 95a621769..9675363e9 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -1029,5 +1029,14 @@ "SkipFreeSpaceCheckHelpText": "{appName} kök klasörünüzde boş alan tespit edemediğinde bunu kullansın", "Logout": "Çıkış", "IndexerSettingsApiUrl": "API URL'si", - "LastSearched": "Son Aranan" + "LastSearched": "Son Aranan", + "AptUpdater": "Güncellemeyi yüklemek için apt kullanın", + "CancelPendingTask": "Bu bekleyen görevi iptal etmek istediğinizden emin misiniz?", + "DockerUpdater": "güncellemeyi almak için docker konteynerini güncelleyin", + "ExternalUpdater": "{appName}, harici bir güncelleme mekanizması kullanacak şekilde yapılandırıldı", + "InstallLatest": "En Sonu Yükle", + "OnLatestVersion": "{appName}'ın en son sürümü zaten kurulu", + "PreviouslyInstalled": "Önceden Yüklenmiş", + "Shutdown": "Kapat", + "UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor," } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 6e18f0f65..5f12c68d6 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -900,5 +900,13 @@ "DeleteSelectedCustomFormatsMessageText": "Ви впевнені, що хочете видалити тег {0} ?", "DeleteSelectedCustomFormats": "Видалити спеціальний формат", "IncludeCustomFormatWhenRenaming": "Включати спеціальний формат під час перейменування", - "IndexerSettingsApiUrl": "API URL" + "IndexerSettingsApiUrl": "API URL", + "CancelPendingTask": "Ви впевнені, що хочете скасувати це незавершене завдання?", + "DockerUpdater": "Оновіть контейнер docker, щоб отримати оновлення", + "ExternalUpdater": "{appName} налаштовано на використання зовнішнього механізму оновлення", + "InstallLatest": "Встановити останній", + "OnLatestVersion": "Остання версія {appName} вже встановлена", + "Shutdown": "Вимкнення", + "UpdateAppDirectlyLoadError": "Неможливо оновити {appName} безпосередньо,", + "AptUpdater": "Використовуйте apt для інсталяції оновлення" } diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index f9ecf6b5b..cf6c9a795 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -743,5 +743,12 @@ "Script": "Kịch bản", "BuiltIn": "Được xây dựng trong", "DeleteSelectedCustomFormats": "Xóa định dạng tùy chỉnh", - "IncludeCustomFormatWhenRenaming": "Bao gồm định dạng tùy chỉnh khi đổi tên" + "IncludeCustomFormatWhenRenaming": "Bao gồm định dạng tùy chỉnh khi đổi tên", + "AptUpdater": "Sử dụng apt để cài đặt bản cập nhật", + "DockerUpdater": "cập nhật vùng chứa docker để nhận bản cập nhật", + "InstallLatest": "Cài đặt mới nhất", + "OnLatestVersion": "Phiên bản mới nhất của {appName} đã được cài đặt", + "Shutdown": "Tắt", + "UpdateAppDirectlyLoadError": "Không thể cập nhật {appName} trực tiếp,", + "ExternalUpdater": "{appName} được định cấu hình để sử dụng cơ chế cập nhật bên ngoài" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index dd51d1f75..d80c8dd4c 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -6,8 +6,8 @@ "BackupRetentionHelpText": "早于保留周期的自动备份将被自动清除", "Authentication": "认证", "Dates": "日期", - "DeleteBackupMessageText": "您确定要删除备份“{name}”吗?", - "DeleteNotificationMessageText": "您确定要删除通知“{name}”吗?", + "DeleteBackupMessageText": "您确定要删除备份 “{name}” 吗?", + "DeleteNotificationMessageText": "您确定要删除通知 “{name}” 吗?", "Docker": "Docker", "DownloadClient": "下载客户端", "DownloadClients": "下载客户端", @@ -22,7 +22,7 @@ "MaximumLimits": "最大限制", "NoBackupsAreAvailable": "无备份可用", "NoUpdatesAreAvailable": "无可用更新", - "ProxyBypassFilterHelpText": "使用“ , ”作为分隔符,和“ *. ”作为二级域名的通配符", + "ProxyBypassFilterHelpText": "使用 “ , ” 作为分隔符,并使用 “ *. ” 作为二级域名的通配符", "ProxyUsernameHelpText": "如果需要,您只需要输入用户名和密码。否则就让它们为空。", "ResetAPIKey": "重置API Key", "SendAnonymousUsageData": "发送匿名使用数据", @@ -33,7 +33,7 @@ "UnableToAddANewDownloadClientPleaseTryAgain": "无法添加下载客户端,请稍后重试。", "UnableToLoadBackups": "无法加载备份", "UnableToLoadIndexers": "无法加载索引器", - "UpdateAutomaticallyHelpText": "自动下载并安装更新。您还可以在 “系统:更新” 中安装", + "UpdateAutomaticallyHelpText": "自动下载并安装更新。您还可以在「“系统”->“更新”」中安装", "Version": "版本", "ApplyTags": "应用标签", "AppDataDirectory": "AppData 目录", @@ -58,7 +58,7 @@ "Delete": "删除", "DeleteBackup": "删除备份", "DeleteDownloadClient": "删除下载客户端", - "DeleteDownloadClientMessageText": "您确认要删除下载客户端 “{name}” 吗?", + "DeleteDownloadClientMessageText": "您确定要删除下载客户端 “{name}” 吗?", "DeleteIndexer": "删除索引器", "DeleteIndexerMessageText": "您确定要删除索引器 “{name}” 吗?", "DeleteNotification": "删除消息推送", @@ -200,7 +200,7 @@ "UpdateMechanismHelpText": "使用 {appName} 内置的更新程序或脚本", "AlternateTitleslength1Title": "标题", "AlternateTitleslength1Titles": "标题", - "AnalyticsEnabledHelpText": "将匿名使用情况和错误信息发送到{appName}的服务器。这包括有关您的浏览器的信息、您使用的{appName} WebUI页面、错误报告以及操作系统和运行时版本。我们将使用此信息来确定功能和错误修复的优先级。", + "AnalyticsEnabledHelpText": "将匿名使用情况和错误信息发送到 {appName} 的服务器。这包括有关您的浏览器信息、您使用的 {appName} WebUI页面、错误报告以及操作系统和运行时版本。我们将使用此信息来确定功能和错误修复的优先级。", "AnalyticsEnabledHelpTextWarning": "重启后生效", "AnchorTooltip": "此文件已在您的库中,用于您当前正在导入的版本", "RemotePath": "远程路径", @@ -381,7 +381,7 @@ "DeleteImportListMessageText": "您确定要删除列表 “{name}” 吗?", "DeleteMetadataProfileMessageText": "您确定要删除元数据配置文件“{name}”吗?", "DeleteQualityProfile": "删除质量配置", - "DeleteQualityProfileMessageText": "您确定要删除质量配置“{name}”吗?", + "DeleteQualityProfileMessageText": "您确定要删除质量配置 “{name}” 吗?", "DeleteReleaseProfile": "删除发布资源配置", "DeleteReleaseProfileMessageText": "你确定你要删除这个发行版配置文件?", "DeleteRootFolderMessageText": "您确定要删除根文件夹“{name}”吗?", @@ -469,7 +469,7 @@ "SetPermissions": "设定权限", "ChmodFolderHelpText": "八进制,当导入和重命名媒体文件夹和文件时应用(不带执行位)", "ChownGroupHelpText": "组名称或GID。对于远程文件系统请使用GID。", - "DiskSpace": "硬盘空间", + "DiskSpace": "磁盘空间", "IgnoredPlaceHolder": "添加新限制", "LidarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName}支持任何使用Newznab标准的搜刮器,以及下面列出的其他搜刮器。", "LidarrTags": "{appName}标签", @@ -497,7 +497,7 @@ "Ok": "完成", "Presets": "预设", "ShowAdvanced": "高级设置", - "SizeOnDisk": "占用磁盘体积", + "SizeOnDisk": "磁盘占用大小", "MetadataConsumers": "用户元数据", "MetadataProfileIdHelpText": "元数据配置文件列表项应添加", "PreviewRetag": "预览重新标记", @@ -542,7 +542,7 @@ "Activity": "活动", "Add": "添加", "AddDelayProfile": "添加延时配置", - "Added": "已添加", + "Added": "添加日期", "AddImportListExclusion": "添加导入排除列表", "AddIndexer": "添加索引器", "AddQualityProfile": "添加质量配置", @@ -628,7 +628,7 @@ "MediaManagement": "媒体管理", "Metadata": "元数据", "MonitorAlbumExistingOnlyWarning": "这是对每张专辑的监控设置的一次性调整 使用艺术家/编辑下的选项来控制新添加的专辑将如何", - "MonitoredOnly": "仅追踪", + "MonitoredOnly": "已追踪项", "MonitoringOptions": "监控选项", "MonitoringOptionsHelpText": "添加艺术家后应该监控哪些专辑(一次性调整)", "MonitorNewItemsHelpText": "哪些新专辑应被监控", @@ -689,7 +689,7 @@ "UpgradesAllowed": "允许升级", "Wanted": "待寻", "Warn": "警告", - "WouldYouLikeToRestoreBackup": "是否要还原备份“{name}”?", + "WouldYouLikeToRestoreBackup": "是否要还原备份 “{name}”?", "WriteMetadataTags": "编写元数据标签", "WriteMetadataToAudioFiles": "将元数据写入音频文件", "SkipRedownload": "跳过重新下载", @@ -816,7 +816,7 @@ "TBA": "待定", "TheArtistFolderStrongpathstrongAndAllOfItsContentWillBeDeleted": "艺术家文件夹“{0}”及其所有内容将被删除。", "Theme": "主题", - "ThemeHelpText": "改变应用界面主题,选择“自动”主题会通过操作系统主题来自适应白天黑夜模式。(受Theme.Park启发)", + "ThemeHelpText": "更改程序界面主题,“自动” 主题将根据您的操作系统主题来设置浅色或深色模式。灵感来自 Theme.Park", "MassAlbumsCutoffUnmetWarning": "你确定要搜索所有 '{0}' 个缺失专辑么?", "ChooseImportMethod": "选择导入模式", "ClickToChangeReleaseGroup": "单击更改发布组", @@ -866,7 +866,7 @@ "CustomFormats": "自定义格式", "Customformat": "自定义命名格式", "CutoffFormatScoreHelpText": "一旦自定义格式分数满足则{appName}不会再抓取专辑", - "DeleteCustomFormatMessageText": "您确定要删除自定义格式“{name}”吗?", + "DeleteCustomFormatMessageText": "您确定要删除自定义格式 “{name}” 吗?", "DeleteFormatMessageText": "您确定要删除格式标签“{name}”吗?", "ImportListStatusCheckAllClientMessage": "所有的列表因错误不可用", "ImportListStatusCheckSingleClientMessage": "列表因错误不可用:{0}", @@ -1057,7 +1057,7 @@ "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "下载客户端 {0} 被设置为删除已完成的下载。这可能导致在 {1} 导入之前,已下载的文件会被从您的客户端中移除。", "InfoUrl": "信息 URL", "GrabId": "抓取ID", - "InvalidUILanguage": "您的UI设置为无效语言,请纠正并保存设置", + "InvalidUILanguage": "您的 UI 设置为无效语言,请纠正并保存设置", "AuthenticationMethod": "认证方式", "AuthenticationMethodHelpTextWarning": "请选择一个有效的认证方式", "AuthenticationRequired": "需要认证", @@ -1113,7 +1113,7 @@ "RegularExpressionsTutorialLink": "有关正则表达式的更多详细信息,请参阅[此处](https://www.regular-expressions.info/tutorial.html)。", "DeleteArtistFolderHelpText": "删除站点文件夹及其内容", "DeleteArtistFoldersHelpText": "删除剧集文件夹及其所含文件", - "DeleteAutoTagHelpText": "您确认要删除 “{name}” 自动标签吗?", + "DeleteAutoTagHelpText": "您确定要删除 “{name}” 自动标签吗?", "DeleteSelectedArtists": "删除所选的歌手", "DeleteSpecificationHelpText": "您确定要删除规范 '{name}' 吗?", "EditAutoTag": "编辑自动标签", @@ -1146,7 +1146,7 @@ "AutoRedownloadFailedFromInteractiveSearchHelpText": "当从手动搜索中抓取的发布资源下载失败时,自动搜索并尝试下载不同的发布资源", "DownloadClientAriaSettingsDirectoryHelpText": "下载位置可选择,留空使用 Aria2 默认位置", "CustomFormatsSpecificationRegularExpression": "正则表达式", - "RemoveQueueItemConfirmation": "您确认要从队列中移除 “{sourceTitle}” 吗?", + "RemoveQueueItemConfirmation": "您确定要从队列中移除 “{sourceTitle}” 吗?", "AutoRedownloadFailed": "失败时重新下载", "AlbumStudioTracksDownloaded": "{trackFileCount}/{totalTrackCount} 首曲目已下载", "ArtistProgressBarText": "{trackFileCount} / {trackCount} (共: {totalTrackCount}, 正在下载: {downloadingCount})", @@ -1199,7 +1199,7 @@ "RetagSelectedArtists": "重新标记选定的艺术家", "TrackFilesLoadError": "无法加载曲目文件", "RemoveQueueItemRemovalMethod": "移除方法", - "RemoveQueueItemRemovalMethodHelpTextWarning": "“从下载客户端中移除”将从下载客户端中移除下载记录和文件。", + "RemoveQueueItemRemovalMethodHelpTextWarning": "“从下载客户端中移除” 将从下载客户端中移除下载记录和文件。", "TrackFileRenamedTooltip": "曲目文件已被重命名", "EmbedCoverArtHelpText": "编写标签时将 {appName} 专辑封面嵌入到音频文件中", "EmbedCoverArtInAudioFiles": "在音频文件中嵌入封面艺术", @@ -1232,8 +1232,8 @@ "MonitorNoNewAlbums": "没有新专辑", "Tomorrow": "明天", "Yesterday": "昨天", - "ChangeCategoryMultipleHint": "将下载从下载客户端更改为“导入后类别”", - "ChangeCategoryHint": "将下载从下载客户端更改为“导入后类别”", + "ChangeCategoryMultipleHint": "将下载客户端中的下载内容更改为 “导入后类别”", + "ChangeCategoryHint": "将下载客户端中的下载内容更改为 “导入后类别”", "OnArtistAdd": "在添加艺术家时", "BlocklistAndSearch": "黑名单和搜索", "BlocklistAndSearchHint": "列入黑名单后开始一次搜索替换", @@ -1313,5 +1313,17 @@ "SkipFreeSpaceCheckHelpText": "当 {appName} 无法检测到根目录的剩余空间时使用", "IndexerSettingsApiUrl": "API 地址", "IndexerSettingsApiUrlHelpText": "除非您知道自己在做什么,否则请勿更改此设置。 因为您的 API Key 将被发送到该主机。", - "LastSearched": "最近搜索" + "LastSearched": "最近搜索", + "AptUpdater": "使用apt安装更新", + "DockerUpdater": "更新Docker容器以更新应用", + "ExternalUpdater": "{appName}配置为使用外部更新机制", + "InstallLatest": "安装最新版", + "OnLatestVersion": "已安装最新版的{appName}", + "PreviouslyInstalled": "上次安装", + "Shutdown": "关机", + "UpdateAppDirectlyLoadError": "无法直接更新{appName},", + "Install": "安装", + "InstallMajorVersionUpdateMessage": "此更新将安装新的主要版本,这可能与您的系统不兼容。您确定要安装此更新吗?", + "InstallMajorVersionUpdate": "安装更新", + "InstallMajorVersionUpdateMessageLink": "请查看 [{domain}]({url}) 以获取更多信息。" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_TW.json b/src/NzbDrone.Core/Localization/Core/zh_TW.json index 95c437e5a..483c816d4 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_TW.json +++ b/src/NzbDrone.Core/Localization/Core/zh_TW.json @@ -218,5 +218,6 @@ "CustomFormats": "自訂格式", "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "加入新的電影很簡單,只需要輸入您想加入的電影名稱", "EditMetadataProfile": "中繼資料配置", - "BuiltIn": "內建" + "BuiltIn": "內建", + "AptUpdater": "使用apt安裝更新" } From 20eb61dbc6864a656f78e265605d1ee4fb00e16c Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 26 Oct 2024 09:11:29 +0300 Subject: [PATCH 078/275] Bump version to 2.8.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5609cdaba..72df339ab 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.7.1' + majorVersion: '2.8.0' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From f7acd57f73d5f4bc1637363a1f01f018e01d259b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 19 Oct 2024 06:25:54 +0300 Subject: [PATCH 079/275] Cleanse exceptions in event logs (cherry picked from commit 404e6d68ea526ab521cd39ecda1bf3b02285765d) --- .../Instrumentation/DatabaseTarget.cs | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/NzbDrone.Core/Instrumentation/DatabaseTarget.cs b/src/NzbDrone.Core/Instrumentation/DatabaseTarget.cs index 75930ebe7..76b8b4e65 100644 --- a/src/NzbDrone.Core/Instrumentation/DatabaseTarget.cs +++ b/src/NzbDrone.Core/Instrumentation/DatabaseTarget.cs @@ -60,33 +60,36 @@ namespace NzbDrone.Core.Instrumentation { try { - var log = new Log(); - log.Time = logEvent.TimeStamp; - log.Message = CleanseLogMessage.Cleanse(logEvent.FormattedMessage); - - log.Logger = logEvent.LoggerName; + var log = new Log + { + Time = logEvent.TimeStamp, + Logger = logEvent.LoggerName, + Level = logEvent.Level.Name + }; if (log.Logger.StartsWith("NzbDrone.")) { log.Logger = log.Logger.Remove(0, 9); } + var message = logEvent.FormattedMessage; + if (logEvent.Exception != null) { - if (string.IsNullOrWhiteSpace(log.Message)) + if (string.IsNullOrWhiteSpace(message)) { - log.Message = logEvent.Exception.Message; + message = logEvent.Exception.Message; } else { - log.Message += ": " + logEvent.Exception.Message; + message += ": " + logEvent.Exception.Message; } - log.Exception = logEvent.Exception.ToString(); + log.Exception = CleanseLogMessage.Cleanse(logEvent.Exception.ToString()); log.ExceptionType = logEvent.Exception.GetType().ToString(); } - log.Level = logEvent.Level.Name; + log.Message = CleanseLogMessage.Cleanse(message); var connectionInfo = _connectionStringFactory.LogDbConnection; From 96b51a02e2f72587b9520ff2981837fece1b8683 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 27 Oct 2024 00:22:16 +0300 Subject: [PATCH 080/275] Fixed: Status check for completed directories in Deluge (cherry picked from commit 33139d4b53c1adad769c7e2b0510e8990c66b84a) --- .../DelugeTests/DelugeFixture.cs | 24 +++++++++++++++---- .../Download/Clients/Deluge/Deluge.cs | 13 ++++++++-- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DelugeTests/DelugeFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DelugeTests/DelugeFixture.cs index 58a37472d..79a24330c 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DelugeTests/DelugeFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DelugeTests/DelugeFixture.cs @@ -312,11 +312,12 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DelugeTests [Test] public void should_return_status_with_outputdirs() { - var configItems = new Dictionary(); - - configItems.Add("download_location", @"C:\Downloads\Downloading\deluge".AsOsAgnostic()); - configItems.Add("move_completed_path", @"C:\Downloads\Finished\deluge".AsOsAgnostic()); - configItems.Add("move_completed", true); + var configItems = new Dictionary + { + { "download_location", @"C:\Downloads\Downloading\deluge".AsOsAgnostic() }, + { "move_completed_path", @"C:\Downloads\Finished\deluge".AsOsAgnostic() }, + { "move_completed", true } + }; Mocker.GetMock() .Setup(v => v.GetConfig(It.IsAny())) @@ -328,5 +329,18 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DelugeTests result.OutputRootFolders.Should().NotBeNull(); result.OutputRootFolders.First().Should().Be(@"C:\Downloads\Finished\deluge".AsOsAgnostic()); } + + [Test] + public void should_return_status_with_outputdirs_for_directories_in_settings() + { + Subject.Definition.Settings.As().DownloadDirectory = @"D:\Downloads\Downloading\deluge".AsOsAgnostic(); + Subject.Definition.Settings.As().CompletedDirectory = @"D:\Downloads\Finished\deluge".AsOsAgnostic(); + + var result = Subject.GetStatus(); + + result.IsLocalhost.Should().BeTrue(); + result.OutputRootFolders.Should().NotBeNull(); + result.OutputRootFolders.First().Should().Be(@"D:\Downloads\Finished\deluge".AsOsAgnostic()); + } } } diff --git a/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs b/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs index 0d35341f6..8d685ed5d 100644 --- a/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs +++ b/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs @@ -214,9 +214,18 @@ namespace NzbDrone.Core.Download.Clients.Deluge { var config = _proxy.GetConfig(Settings); var label = _proxy.GetLabelOptions(Settings); + OsPath destDir; - if (label != null && label.ApplyMoveCompleted && label.MoveCompleted) + if (Settings.CompletedDirectory.IsNotNullOrWhiteSpace()) + { + destDir = new OsPath(Settings.CompletedDirectory); + } + else if (Settings.DownloadDirectory.IsNotNullOrWhiteSpace()) + { + destDir = new OsPath(Settings.DownloadDirectory); + } + else if (label is { ApplyMoveCompleted: true, MoveCompleted: true }) { // if label exists and a label completed path exists and is enabled use it instead of global destDir = new OsPath(label.MoveCompletedPath); @@ -232,7 +241,7 @@ namespace NzbDrone.Core.Download.Clients.Deluge var status = new DownloadClientInfo { - IsLocalhost = Settings.Host == "127.0.0.1" || Settings.Host == "localhost" + IsLocalhost = Settings.Host is "127.0.0.1" or "localhost" }; if (!destDir.IsEmpty) From ca5379f817f816354498b00a930d574a565e2f2c Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 27 Oct 2024 00:18:11 +0300 Subject: [PATCH 081/275] Fixed: Natural sorting for tags list in the UI (cherry picked from commit 10b55bbee656774a81541904d6dbb2fd5c8c9b7a) --- frontend/src/Settings/Tags/TagsConnector.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/Settings/Tags/TagsConnector.js b/frontend/src/Settings/Tags/TagsConnector.js index 9f8bdee5b..15f31d3c5 100644 --- a/frontend/src/Settings/Tags/TagsConnector.js +++ b/frontend/src/Settings/Tags/TagsConnector.js @@ -4,11 +4,13 @@ import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { fetchDelayProfiles, fetchDownloadClients, fetchImportLists, fetchIndexers, fetchNotifications, fetchReleaseProfiles } from 'Store/Actions/settingsActions'; import { fetchTagDetails, fetchTags } from 'Store/Actions/tagActions'; +import createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector'; +import sortByProp from 'Utilities/Array/sortByProp'; import Tags from './Tags'; function createMapStateToProps() { return createSelector( - (state) => state.tags, + createSortedSectionSelector('tags', sortByProp('label')), (tags) => { const isFetching = tags.isFetching || tags.details.isFetching; const error = tags.error || tags.details.error; From 54a758a1b86658cee045f374017d7a2d9689a126 Mon Sep 17 00:00:00 2001 From: Hadrien Patte Date: Sat, 26 Oct 2024 23:14:20 +0200 Subject: [PATCH 082/275] Use `OperatingSystem` class to get OS information (cherry picked from commit 135b5c2ddd8f0a274b0d59eb07f75aaf1446b9da) --- src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs | 89 ++++--------------- 1 file changed, 19 insertions(+), 70 deletions(-) diff --git a/src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs index f37b40fec..aece27859 100644 --- a/src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs +++ b/src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs @@ -1,6 +1,5 @@ -using System; +using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using NLog; @@ -25,22 +24,25 @@ namespace NzbDrone.Common.EnvironmentInfo static OsInfo() { - var platform = Environment.OSVersion.Platform; - - switch (platform) + if (OperatingSystem.IsWindows()) { - case PlatformID.Win32NT: - { - Os = Os.Windows; - break; - } - - case PlatformID.MacOSX: - case PlatformID.Unix: - { - Os = GetPosixFlavour(); - break; - } + Os = Os.Windows; + } + else if (OperatingSystem.IsMacOS()) + { + Os = Os.Osx; + } + else if (OperatingSystem.IsFreeBSD()) + { + Os = Os.Bsd; + } + else + { +#if ISMUSL + Os = Os.LinuxMusl; +#else + Os = Os.Linux; +#endif } } @@ -84,59 +86,6 @@ namespace NzbDrone.Common.EnvironmentInfo IsDocker = true; } } - - private static Os GetPosixFlavour() - { - var output = RunAndCapture("uname", "-s"); - - if (output.StartsWith("Darwin")) - { - return Os.Osx; - } - else if (output.Contains("BSD")) - { - return Os.Bsd; - } - else - { -#if ISMUSL - return Os.LinuxMusl; -#else - return Os.Linux; -#endif - } - } - - private static string RunAndCapture(string filename, string args) - { - var processStartInfo = new ProcessStartInfo - { - FileName = filename, - Arguments = args, - UseShellExecute = false, - CreateNoWindow = true, - RedirectStandardOutput = true - }; - - var output = string.Empty; - - try - { - using (var p = Process.Start(processStartInfo)) - { - // To avoid deadlocks, always read the output stream first and then wait. - output = p.StandardOutput.ReadToEnd(); - - p.WaitForExit(1000); - } - } - catch (Exception) - { - output = string.Empty; - } - - return output; - } } public interface IOsInfo From a843a46fbec061900ed7da85531564fef8a3528a Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 18 Oct 2024 05:45:03 +0300 Subject: [PATCH 083/275] Improve message for grab errors due to no matching tags Co-authored-by: zakary (cherry picked from commit df672487cf1d5f067849367a2bfb0068defc315d) Closes #5182 --- .../Download/DownloadClientProviderFixture.cs | 10 +--------- .../Download/DownloadClientProvider.cs | 15 ++++++++++----- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientProviderFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientProviderFixture.cs index 8c6ed9fd2..6476f4483 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientProviderFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientProviderFixture.cs @@ -200,17 +200,9 @@ namespace NzbDrone.Core.Test.Download var seriesTags = new HashSet { 2 }; var clientTags = new HashSet { 1 }; - WithTorrentClient(0, clientTags); - WithTorrentClient(0, clientTags); - WithTorrentClient(0, clientTags); WithTorrentClient(0, clientTags); - var client1 = Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags); - var client2 = Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags); - var client3 = Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags); - var client4 = Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags); - - Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags).Should().BeNull(); + Assert.Throws(() => Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags)); } [Test] diff --git a/src/NzbDrone.Core/Download/DownloadClientProvider.cs b/src/NzbDrone.Core/Download/DownloadClientProvider.cs index 769928f2f..c6d58b1b2 100644 --- a/src/NzbDrone.Core/Download/DownloadClientProvider.cs +++ b/src/NzbDrone.Core/Download/DownloadClientProvider.cs @@ -41,18 +41,23 @@ namespace NzbDrone.Core.Download var blockedProviders = new HashSet(_downloadClientStatusService.GetBlockedProviders().Select(v => v.ProviderId)); var availableProviders = _downloadClientFactory.GetAvailableProviders().Where(v => v.Protocol == downloadProtocol).ToList(); - if (tags != null) + if (!availableProviders.Any()) + { + return null; + } + + if (tags is { Count: > 0 }) { var matchingTagsClients = availableProviders.Where(i => i.Definition.Tags.Intersect(tags).Any()).ToList(); availableProviders = matchingTagsClients.Count > 0 ? matchingTagsClients : availableProviders.Where(i => i.Definition.Tags.Empty()).ToList(); - } - if (!availableProviders.Any()) - { - return null; + if (!availableProviders.Any()) + { + throw new DownloadClientUnavailableException("No download client was found without tags or a matching artist tag. Please check your settings."); + } } if (indexerId > 0) From 8623b4410c0b57ef43ab38aac2757760522e3beb Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 17 Oct 2024 04:46:15 +0300 Subject: [PATCH 084/275] Inherit trigger from pushed command models (cherry picked from commit 0bc4903954b955fce0c368ef7fd2a6f3761d6a93) Closes #5181 --- src/Lidarr.Api.V1/Artist/ArtistController.cs | 5 ++--- src/Lidarr.Api.V1/Commands/CommandController.cs | 3 +-- .../Messaging/Commands/CommandQueueManager.cs | 7 ++++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Lidarr.Api.V1/Artist/ArtistController.cs b/src/Lidarr.Api.V1/Artist/ArtistController.cs index b31698541..60f7f61fc 100644 --- a/src/Lidarr.Api.V1/Artist/ArtistController.cs +++ b/src/Lidarr.Api.V1/Artist/ArtistController.cs @@ -179,9 +179,8 @@ namespace Lidarr.Api.V1.Artist ArtistId = artist.Id, SourcePath = sourcePath, DestinationPath = destinationPath, - MoveFiles = moveFiles, - Trigger = CommandTrigger.Manual - }); + MoveFiles = moveFiles + }, trigger: CommandTrigger.Manual); var model = artistResource.ToModel(artist); diff --git a/src/Lidarr.Api.V1/Commands/CommandController.cs b/src/Lidarr.Api.V1/Commands/CommandController.cs index 8d5a44389..1f008e5e4 100644 --- a/src/Lidarr.Api.V1/Commands/CommandController.cs +++ b/src/Lidarr.Api.V1/Commands/CommandController.cs @@ -66,9 +66,8 @@ namespace Lidarr.Api.V1.Commands ? CommandPriority.High : CommandPriority.Normal; - dynamic command = STJson.Deserialize(body, commandType); + var command = STJson.Deserialize(body, commandType) as Command; - command.Trigger = CommandTrigger.Manual; command.SuppressMessages = !command.SendUpdatesToClient; command.SendUpdatesToClient = true; command.ClientUserAgent = Request.Headers["UserAgent"]; diff --git a/src/NzbDrone.Core/Messaging/Commands/CommandQueueManager.cs b/src/NzbDrone.Core/Messaging/Commands/CommandQueueManager.cs index 87b9340dc..559faac5c 100644 --- a/src/NzbDrone.Core/Messaging/Commands/CommandQueueManager.cs +++ b/src/NzbDrone.Core/Messaging/Commands/CommandQueueManager.cs @@ -106,6 +106,8 @@ namespace NzbDrone.Core.Messaging.Commands _logger.Trace("Publishing {0}", command.Name); _logger.Trace("Checking if command is queued or started: {0}", command.Name); + command.Trigger = trigger; + lock (_commandQueue) { var existingCommands = QueuedOrStarted(command.Name); @@ -142,7 +144,6 @@ namespace NzbDrone.Core.Messaging.Commands var command = GetCommand(commandName); command.LastExecutionTime = lastExecutionTime; command.LastStartTime = lastStartTime; - command.Trigger = trigger; return Push(command, priority, trigger); } @@ -244,13 +245,13 @@ namespace NzbDrone.Core.Messaging.Commands _repo.Trim(); } - private dynamic GetCommand(string commandName) + private Command GetCommand(string commandName) { commandName = commandName.Split('.').Last(); var commands = _knownTypes.GetImplementations(typeof(Command)); var commandType = commands.Single(c => c.Name.Equals(commandName, StringComparison.InvariantCultureIgnoreCase)); - return Json.Deserialize("{}", commandType); + return Json.Deserialize("{}", commandType) as Command; } private void Update(CommandModel command, CommandStatus status, string message) From 3232e9ab94ebe8b07e21d3340aaf99350506b983 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 27 Oct 2024 00:19:47 +0300 Subject: [PATCH 085/275] Fixed: Initial state for qBittorrent v5.0 (cherry picked from commit ff724b7f4099284b8062f1625cf07b7822782edf) Closes #5187 --- .../QBittorrent/QBittorrentProxySelector.cs | 2 - .../Clients/QBittorrent/QBittorrentProxyV1.cs | 24 ++--------- .../Clients/QBittorrent/QBittorrentProxyV2.cs | 40 +++++++------------ .../Clients/QBittorrent/QBittorrentState.cs | 9 ++++- 4 files changed, 27 insertions(+), 48 deletions(-) diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxySelector.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxySelector.cs index 8ba16c810..1012932e8 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxySelector.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxySelector.cs @@ -26,8 +26,6 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent Dictionary GetLabels(QBittorrentSettings settings); void SetTorrentSeedingConfiguration(string hash, TorrentSeedConfiguration seedConfiguration, QBittorrentSettings settings); void MoveTorrentToTopInQueue(string hash, QBittorrentSettings settings); - void PauseTorrent(string hash, QBittorrentSettings settings); - void ResumeTorrent(string hash, QBittorrentSettings settings); void SetForceStart(string hash, bool enabled, QBittorrentSettings settings); } diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxyV1.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxyV1.cs index b26e4929f..aeecf4473 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxyV1.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxyV1.cs @@ -148,7 +148,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent { request.AddFormParameter("paused", false); } - else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause) + else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop) { request.AddFormParameter("paused", true); } @@ -178,7 +178,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent { request.AddFormParameter("paused", false); } - else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause) + else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop) { request.AddFormParameter("paused", true); } @@ -214,7 +214,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent catch (DownloadClientException ex) { // if setCategory fails due to method not being found, then try older setLabel command for qBittorrent < v.3.3.5 - if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound) + if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.NotFound) { var setLabelRequest = BuildRequest(settings).Resource("/command/setLabel") .Post() @@ -257,7 +257,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent catch (DownloadClientException ex) { // qBittorrent rejects all Prio commands with 403: Forbidden if Options -> BitTorrent -> Torrent Queueing is not enabled - if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Forbidden) + if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Forbidden) { return; } @@ -266,22 +266,6 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent } } - public void PauseTorrent(string hash, QBittorrentSettings settings) - { - var request = BuildRequest(settings).Resource("/command/pause") - .Post() - .AddFormParameter("hash", hash); - ProcessRequest(request, settings); - } - - public void ResumeTorrent(string hash, QBittorrentSettings settings) - { - var request = BuildRequest(settings).Resource("/command/resume") - .Post() - .AddFormParameter("hash", hash); - ProcessRequest(request, settings); - } - public void SetForceStart(string hash, bool enabled, QBittorrentSettings settings) { var request = BuildRequest(settings).Resource("/command/setForceStart") diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxyV2.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxyV2.cs index 5aca88f50..02e32011c 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxyV2.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxyV2.cs @@ -246,14 +246,20 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent request.AddFormParameter("category", settings.MusicCategory); } - // Note: ForceStart is handled by separate api call - if ((QBittorrentState)settings.InitialState == QBittorrentState.Start) + // Avoid extraneous API version check if initial state is ForceStart + if ((QBittorrentState)settings.InitialState is QBittorrentState.Start or QBittorrentState.Stop) { - request.AddFormParameter("paused", false); - } - else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause) - { - request.AddFormParameter("paused", true); + var stoppedParameterName = GetApiVersion(settings) >= new Version(2, 11, 0) ? "stopped" : "paused"; + + // Note: ForceStart is handled by separate api call + if ((QBittorrentState)settings.InitialState == QBittorrentState.Start) + { + request.AddFormParameter(stoppedParameterName, false); + } + else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop) + { + request.AddFormParameter(stoppedParameterName, true); + } } if (settings.SequentialOrder) @@ -291,7 +297,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent catch (DownloadClientException ex) { // setShareLimits was added in api v2.0.1 so catch it case of the unlikely event that someone has api v2.0 - if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound) + if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.NotFound) { return; } @@ -313,7 +319,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent catch (DownloadClientException ex) { // qBittorrent rejects all Prio commands with 409: Conflict if Options -> BitTorrent -> Torrent Queueing is not enabled - if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Conflict) + if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Conflict) { return; } @@ -322,22 +328,6 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent } } - public void PauseTorrent(string hash, QBittorrentSettings settings) - { - var request = BuildRequest(settings).Resource("/api/v2/torrents/pause") - .Post() - .AddFormParameter("hashes", hash); - ProcessRequest(request, settings); - } - - public void ResumeTorrent(string hash, QBittorrentSettings settings) - { - var request = BuildRequest(settings).Resource("/api/v2/torrents/resume") - .Post() - .AddFormParameter("hashes", hash); - ProcessRequest(request, settings); - } - public void SetForceStart(string hash, bool enabled, QBittorrentSettings settings) { var request = BuildRequest(settings).Resource("/api/v2/torrents/setForceStart") diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentState.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentState.cs index 56c5ddf1a..b8fddbc11 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentState.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentState.cs @@ -1,9 +1,16 @@ +using NzbDrone.Core.Annotations; + namespace NzbDrone.Core.Download.Clients.QBittorrent { public enum QBittorrentState { + [FieldOption(Label = "Started")] Start = 0, + + [FieldOption(Label = "Force Started")] ForceStart = 1, - Pause = 2 + + [FieldOption(Label = "Stopped")] + Stop = 2 } } From 50872f3629df8c98d23bd859b7fd1a734ccc94de Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 2 Nov 2024 19:12:44 +0000 Subject: [PATCH 086/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Daniel Co-authored-by: GkhnGRBZ Co-authored-by: HUi Co-authored-by: Kuzmich Co-authored-by: Moon55 Co-authored-by: Weblate Translate-URL: http://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/vi/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/fr.json | 5 ++-- src/NzbDrone.Core/Localization/Core/ru.json | 16 ++++++------- src/NzbDrone.Core/Localization/Core/tr.json | 10 +++++--- src/NzbDrone.Core/Localization/Core/vi.json | 26 ++++++++++++++++++++- 4 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 7a905750b..02019f6eb 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -1317,7 +1317,6 @@ "IndexerSettingsApiUrl": "URL DE L'API", "IndexerSettingsApiUrlHelpText": "Ne le modifiez pas à moins de savoir ce que vous faites, car votre clé API sera envoyée à cet hôte.", "AptUpdater": "Utiliser apt pour installer la mise à jour", - "CancelPendingTask": "Êtes-vous sur de vouloir annuler cette tâche en attente ?", "DockerUpdater": "Mettez à jour le conteneur Docker pour recevoir la mise à jour", "ExternalUpdater": "{appName} est configuré pour utiliser un mécanisme de mise à jour externe", "Install": "Installer", @@ -1328,5 +1327,7 @@ "OnLatestVersion": "La dernière version de {appName} est déjà installée", "PreviouslyInstalled": "Installé précédemment", "Shutdown": "Éteindre", - "UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName}," + "UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName},", + "SkipFreeSpaceCheckHelpText": "Utiliser quand {appName} ne parvient pas à détecter l'espace disponible de votre dossier racine", + "LastSearched": "Dernière recherche" } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index 4ec2f8c8e..a7d360101 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -31,7 +31,7 @@ "TestAllIndexers": "Тестировать все индексаторы", "TestAllLists": "Тестировать все листы", "UpdateAll": "Обновить всё", - "UpdateMechanismHelpText": "Использовать встроенный инструмент обновления {appName} или скрипт.", + "UpdateMechanismHelpText": "Использовать встроенный инструмент обновления {appName} или скрипт", "MaximumSizeHelpText": "Максимальный размер релиза в МВ. Установите 0 чтобы снять все ограничения", "Message": "Сообщение", "MinimumAge": "Минимальный возраст", @@ -234,7 +234,7 @@ "Calendar": "Календарь", "CalendarWeekColumnHeaderHelpText": "Отображается над каждым столбцом, когда неделя активна", "Cancel": "Отмена", - "CancelPendingTask": "Вы уверены, что хотите убрать данную задачу из очереди?", + "CancelPendingTask": "Вы уверены, что хотите отменить эту ожидающую задачу?", "CertificateValidation": "Проверка сертификата", "ChangeFileDate": "Изменить дату файла", "ChangeHasNotBeenSavedYet": "Изменения ещё не вступили в силу", @@ -495,7 +495,7 @@ "EditRemotePathMapping": "Редактировать расположение подключенной папки", "EditRootFolder": "Добавить корневой каталог", "Error": "Ошибка", - "ErrorRestoringBackup": "Восстановить резервную копию", + "ErrorRestoringBackup": "Ошибка восстановления резервной копии", "Events": "События", "EventType": "Тип события", "Filters": "Фильтры", @@ -1066,14 +1066,14 @@ "AptUpdater": "Использовать apt для установки обновления", "ExternalUpdater": "{appName} настроен на использование внешнего механизма обновления", "Install": "Установить", - "InstallLatest": "Установить последнюю версию", + "InstallLatest": "Установить последнюю", "InstallMajorVersionUpdate": "Установить обновление", - "InstallMajorVersionUpdateMessage": "Это обновление установит новую основную версию и может быть несовместимо с вашей системой. Вы уверены, что хотите установить это обновление?", - "InstallMajorVersionUpdateMessageLink": "Пожалуйста, проверьте [{domain}]({url}) для получения дополнительной информации.", + "InstallMajorVersionUpdateMessage": "Это обновление установит новую версию, которая может не поддерживаться вашей системой. Вы уверены, что хотите установить это обновление?", + "InstallMajorVersionUpdateMessageLink": "Для получения дополнительной информации посетите [{domain}]({url}).", "OnLatestVersion": "Последняя версия {appName} уже установлена", "PreviouslyInstalled": "Ранее установленный", "Shutdown": "Выключить", "UpdateAppDirectlyLoadError": "Невозможно обновить {appName} напрямую,", - "CancelPendingTask": "Вы уверены, что хотите отменить эту ожидающую задачу?", - "DockerUpdater": "Обновите контейнер Docker, чтобы получить обновление" + "DockerUpdater": "Обновите контейнер Docker, чтобы получить обновление", + "CountCustomFormatsSelected": "{count} пользовательских форматов выбрано" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 9675363e9..5ccf74762 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -152,7 +152,7 @@ "DownloadPropersAndRepacksHelpTexts1": "Propers / Repacks'e otomatik olarak yükseltme yapılıp yapılmayacağı", "DownloadWarningCheckDownloadClientForMoreDetails": "İndirme uyarısı: Daha fazla ayrıntı için indirme istemcisini kontrol edin", "Edit": "Düzenle", - "Enable": "etkinleştirme", + "Enable": "Etkinleştir", "EnableAutomaticAdd": "Otomatik Eklemeyi Etkinleştir", "EnableAutomaticSearch": "Otomatik Aramayı Etkinleştir", "EnableColorImpairedMode": "Renk Bozukluğu Modunu Etkinleştir", @@ -1031,12 +1031,16 @@ "IndexerSettingsApiUrl": "API URL'si", "LastSearched": "Son Aranan", "AptUpdater": "Güncellemeyi yüklemek için apt kullanın", - "CancelPendingTask": "Bu bekleyen görevi iptal etmek istediğinizden emin misiniz?", "DockerUpdater": "güncellemeyi almak için docker konteynerini güncelleyin", "ExternalUpdater": "{appName}, harici bir güncelleme mekanizması kullanacak şekilde yapılandırıldı", "InstallLatest": "En Sonu Yükle", "OnLatestVersion": "{appName}'ın en son sürümü zaten kurulu", "PreviouslyInstalled": "Önceden Yüklenmiş", "Shutdown": "Kapat", - "UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor," + "UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor,", + "Install": "Kur", + "InstallMajorVersionUpdate": "Güncellemeyi Kur", + "InstallMajorVersionUpdateMessage": "Bu güncelleştirme yeni bir ana sürüm yükleyecek ve sisteminizle uyumlu olmayabilir. Bu güncelleştirmeyi yüklemek istediğinizden emin misiniz?", + "InstallMajorVersionUpdateMessageLink": "Daha fazla bilgi için lütfen [{domain}]({url}) adresini kontrol edin.", + "SmartReplace": "Akıllı Değiştir" } diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index cf6c9a795..0c8eb3893 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -750,5 +750,29 @@ "OnLatestVersion": "Phiên bản mới nhất của {appName} đã được cài đặt", "Shutdown": "Tắt", "UpdateAppDirectlyLoadError": "Không thể cập nhật {appName} trực tiếp,", - "ExternalUpdater": "{appName} được định cấu hình để sử dụng cơ chế cập nhật bên ngoài" + "ExternalUpdater": "{appName} được định cấu hình để sử dụng cơ chế cập nhật bên ngoài", + "AddAutoTag": "Thêm thẻ tự động", + "AddCondition": "Thêm điều kiện", + "AddIndexerImplementation": "Thêm trình lập chỉ mục - {implementationName}", + "BlocklistAndSearch": "Danh sách chặn và tìm kiếm", + "AddImportListImplementation": "Thêm danh sách nhập - {implementationName}", + "AutoTagging": "Tự động gắn thẻ", + "AutoTaggingLoadError": "Không thể tải tính năng tự động gắn thẻ", + "UseSsl": "Dùng SSL", + "UpdateAvailableHealthCheckMessage": "Có cập nhật mới: {version}", + "AppUpdated": "{appName} đã cập nhật", + "AppUpdatedVersion": "{appName} đã được cập nhật lên phiên bản `{version}`, để nhận được những thay đổi mới nhất, bạn cần tải lại {appName}", + "AddConditionImplementation": "Thêm điều kiện - {implementationName}", + "AddConnectionImplementation": "Thêm điều kiện - {implementationName}", + "AddImportList": "Thêm danh sách nhập", + "AddDownloadClientImplementation": "Thêm trình tải xuống - {implementationName}", + "AddConnection": "Thêm kết nối", + "AuthenticationMethod": "Phương thức xác thực", + "AuthenticationMethodHelpTextWarning": "Vui lòng chọn một phương thức xác thực hợp lệ", + "AuthenticationRequired": "Bắt buộc phải xác thực", + "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Xác nhận mật khẩu mới", + "AuthenticationRequiredPasswordHelpTextWarning": "Nhập mật khẩu mới", + "AuthenticationRequiredUsernameHelpTextWarning": "Nhập tên người dùng mới", + "AuthenticationRequiredWarning": "Để ngăn truy cập từ xa mà không cần xác thực, {appName} hiện yêu cầu bật xác thực. Bạn có thể tùy ý tắt xác thực từ các địa chỉ cục bộ.", + "AutomaticUpdatesDisabledDocker": "Cập nhật tự động không được hỗ trợ trực tiếp khi sử dụng cơ chế cập nhật Docker. Bạn sẽ cần cập nhật container image của {appName} hoặc sử dụng tập lệnh" } From 030300c896dbfcf85b4197b4536dd953d8fa131c Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 3 Nov 2024 11:42:29 +0200 Subject: [PATCH 087/275] Bump version to 2.8.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 72df339ab..5f585c8e6 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.8.0' + majorVersion: '2.8.1' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From e04c28fe2d46a9616712bd3f8c7035002896e249 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 27 Oct 2024 16:48:53 -0700 Subject: [PATCH 088/275] Use current time for cache break in development (cherry picked from commit 020ed32fcfab1c6fbe57af5ea650300272c93fd7) --- src/Lidarr.Http/Frontend/Mappers/CacheBreakerProvider.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Lidarr.Http/Frontend/Mappers/CacheBreakerProvider.cs b/src/Lidarr.Http/Frontend/Mappers/CacheBreakerProvider.cs index bb925b77e..20f5e37ad 100644 --- a/src/Lidarr.Http/Frontend/Mappers/CacheBreakerProvider.cs +++ b/src/Lidarr.Http/Frontend/Mappers/CacheBreakerProvider.cs @@ -1,6 +1,8 @@ +using System; using System.Collections.Generic; using System.Linq; using NzbDrone.Common.Crypto; +using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; namespace Lidarr.Http.Frontend.Mappers @@ -28,6 +30,11 @@ namespace Lidarr.Http.Frontend.Mappers return resourceUrl; } + if (!RuntimeInfo.IsProduction) + { + return resourceUrl + "?t=" + DateTime.UtcNow.Ticks; + } + var mapper = _diskMappers.Single(m => m.CanHandle(resourceUrl)); var pathToFile = mapper.Map(resourceUrl); var hash = _hashProvider.ComputeMd5(pathToFile).ToBase64(); From f6d3481e38f608afe02e637183c7222407464c77 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 26 Oct 2024 21:47:54 -0700 Subject: [PATCH 089/275] New: Add individual edit to Manage Custom Formats (cherry picked from commit e006b405323c276eb5b7f2dd97b97c80394a6930) --- .../EditCustomFormatModalConnector.js | 2 + .../ManageCustomFormatsModalContent.tsx | 5 ++ .../Manage/ManageCustomFormatsModalRow.css | 6 ++ .../ManageCustomFormatsModalRow.css.d.ts | 1 + .../Manage/ManageCustomFormatsModalRow.tsx | 78 ++++++++++++++++++- 5 files changed, 89 insertions(+), 3 deletions(-) diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalConnector.js b/frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalConnector.js index 52b2f09f6..3e79425cd 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalConnector.js +++ b/frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalConnector.js @@ -3,6 +3,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import { clearPendingChanges } from 'Store/Actions/baseActions'; import EditCustomFormatModal from './EditCustomFormatModal'; +import EditCustomFormatModalContentConnector from './EditCustomFormatModalContentConnector'; function mapStateToProps() { return {}; @@ -36,6 +37,7 @@ class EditCustomFormatModalConnector extends Component { } EditCustomFormatModalConnector.propTypes = { + ...EditCustomFormatModalContentConnector.propTypes, onModalClose: PropTypes.func.isRequired, clearPendingChanges: PropTypes.func.isRequired }; diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx index eab8a4d67..cb2fa3cca 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx @@ -47,6 +47,11 @@ const COLUMNS = [ isSortable: true, isVisible: true, }, + { + name: 'actions', + label: '', + isVisible: true, + }, ]; interface ManageCustomFormatsModalContentProps { diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css index a7c85e340..355c70378 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css @@ -4,3 +4,9 @@ word-break: break-all; } + +.actions { + composes: cell from '~Components/Table/Cells/TableRowCell.css'; + + width: 40px; +} diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css.d.ts b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css.d.ts index 906d2dc54..d1719edd8 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css.d.ts +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css.d.ts @@ -1,6 +1,7 @@ // This file is automatically generated. // Please do not change this file! interface CssExports { + 'actions': string; 'includeCustomFormatWhenRenaming': string; 'name': string; } diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.tsx index 32b135970..57bb7fda0 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.tsx +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.tsx @@ -1,10 +1,18 @@ -import React, { useCallback } from 'react'; +import React, { useCallback, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; +import IconButton from 'Components/Link/IconButton'; +import ConfirmModal from 'Components/Modal/ConfirmModal'; import TableRowCell from 'Components/Table/Cells/TableRowCell'; import TableSelectCell from 'Components/Table/Cells/TableSelectCell'; import Column from 'Components/Table/Column'; import TableRow from 'Components/Table/TableRow'; +import { icons } from 'Helpers/Props'; +import { deleteCustomFormat } from 'Store/Actions/settingsActions'; import { SelectStateInputProps } from 'typings/props'; import translate from 'Utilities/String/translate'; +import EditCustomFormatModalConnector from '../EditCustomFormatModalConnector'; import styles from './ManageCustomFormatsModalRow.css'; interface ManageCustomFormatsModalRowProps { @@ -16,6 +24,15 @@ interface ManageCustomFormatsModalRowProps { onSelectedChange(result: SelectStateInputProps): void; } +function isDeletingSelector() { + return createSelector( + (state: AppState) => state.settings.customFormats.isDeleting, + (isDeleting) => { + return isDeleting; + } + ); +} + function ManageCustomFormatsModalRow(props: ManageCustomFormatsModalRowProps) { const { id, @@ -25,7 +42,16 @@ function ManageCustomFormatsModalRow(props: ManageCustomFormatsModalRowProps) { onSelectedChange, } = props; - const onSelectedChangeWrapper = useCallback( + const dispatch = useDispatch(); + const isDeleting = useSelector(isDeletingSelector()); + + const [isEditCustomFormatModalOpen, setIsEditCustomFormatModalOpen] = + useState(false); + + const [isDeleteCustomFormatModalOpen, setIsDeleteCustomFormatModalOpen] = + useState(false); + + const handlelectedChange = useCallback( (result: SelectStateInputProps) => { onSelectedChange({ ...result, @@ -34,12 +60,33 @@ function ManageCustomFormatsModalRow(props: ManageCustomFormatsModalRowProps) { [onSelectedChange] ); + const handleEditCustomFormatModalOpen = useCallback(() => { + setIsEditCustomFormatModalOpen(true); + }, [setIsEditCustomFormatModalOpen]); + + const handleEditCustomFormatModalClose = useCallback(() => { + setIsEditCustomFormatModalOpen(false); + }, [setIsEditCustomFormatModalOpen]); + + const handleDeleteCustomFormatPress = useCallback(() => { + setIsEditCustomFormatModalOpen(false); + setIsDeleteCustomFormatModalOpen(true); + }, [setIsEditCustomFormatModalOpen, setIsDeleteCustomFormatModalOpen]); + + const handleDeleteCustomFormatModalClose = useCallback(() => { + setIsDeleteCustomFormatModalOpen(false); + }, [setIsDeleteCustomFormatModalOpen]); + + const handleConfirmDeleteCustomFormat = useCallback(() => { + dispatch(deleteCustomFormat({ id })); + }, [id, dispatch]); + return ( {name} @@ -47,6 +94,31 @@ function ManageCustomFormatsModalRow(props: ManageCustomFormatsModalRowProps) { {includeCustomFormatWhenRenaming ? translate('Yes') : translate('No')} + + + + + + + + ); } From fd3f493eb6324c9fb2832afe3ee764328320155b Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 4 Nov 2024 16:27:31 +0000 Subject: [PATCH 090/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Lars Co-authored-by: Weblate Co-authored-by: mytelegrambot Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nb_NO/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ko.json | 11 +++++++++-- src/NzbDrone.Core/Localization/Core/nb_NO.json | 5 ++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 622e0f976..e40faa2d4 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -710,10 +710,17 @@ "BuiltIn": "내장", "DeleteSelectedCustomFormats": "사용자 지정 형식 삭제", "AptUpdater": "apt를 사용하여 업데이트 설치", - "CancelPendingTask": "이 보류중인 작업을 취소 하시겠습니까?", "DockerUpdater": "Docker 컨테이너를 업데이트하여 업데이트를 받으십시오.", "ExternalUpdater": "{appName}는 외부 업데이트 메커니즘을 사용하도록 구성됩니다.", "OnLatestVersion": "최신 버전의 {appName}가 이미 설치되어 있습니다.", "Shutdown": "종료", - "UpdateAppDirectlyLoadError": "{appName}를 직접 업데이트 할 수 없습니다." + "UpdateAppDirectlyLoadError": "{appName}를 직접 업데이트 할 수 없습니다.", + "Album": "앨범", + "AddDownloadClientImplementation": "다운로드 클라이언트 추가 - {implementationName}", + "AddIndexerImplementation": "인덱서 추가 - {implementationName}", + "Any": "모두", + "AppUpdatedVersion": "{appName}이 버전 `{version}`으로 업데이트되었습니다. 최신 변경 사항을 받으려면 {appName}을 다시 로드해야 합니다", + "AppUpdated": "{appName} 업데이트", + "AddConnectionImplementation": "연결 추가 - {implementationName}", + "AddConnection": "연결 추가" } diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index 6cc473ee2..e37284df5 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -184,7 +184,7 @@ "PreferredProtocol": "Foretrukket Protokoll", "Artist": "artist", "CatalogNumber": "katalognummer", - "AddConnection": "Legg til kobling", + "AddConnection": "Legg til tilkobling", "AddImportListExclusion": "Legg til importeringsliste unntak", "AddMissing": "Legg til manglende", "AddNewItem": "Legg til nytt item", @@ -273,6 +273,5 @@ "BuiltIn": "Bygget inn", "DeleteSelectedCustomFormats": "Klon egendefinert format", "DeleteSelectedCustomFormatsMessageText": "Er du sikker på at du vil slette formattaggen {0}?", - "AptUpdater": "Bruk apt til å installere oppdateringen", - "CancelPendingTask": "Er du sikker på at du vil avbryte denne ventende oppgaven?" + "AptUpdater": "Bruk apt til å installere oppdateringen" } From e50e79167acfb5a8fc4a76a1ca95285616142eeb Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 31 Oct 2024 10:57:43 +0200 Subject: [PATCH 091/275] =?UTF-8?q?Fixed:=20Cleaning=20the=20French=20prep?= =?UTF-8?q?osition=20'=C3=A0'=20from=20names?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 22005dc8c500cd77e4a710248582cd4a0036988f) Closes #5213 --- src/NzbDrone.Core.Test/ParserTests/NormalizeTitleFixture.cs | 2 ++ src/NzbDrone.Core/Parser/Parser.cs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/ParserTests/NormalizeTitleFixture.cs b/src/NzbDrone.Core.Test/ParserTests/NormalizeTitleFixture.cs index 8099c0973..bb5559297 100644 --- a/src/NzbDrone.Core.Test/ParserTests/NormalizeTitleFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/NormalizeTitleFixture.cs @@ -24,6 +24,8 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("test/test", "testtest")] [TestCase("90210", "90210")] [TestCase("24", "24")] + [TestCase("Test: Something à Deux", "testsomethingdeux")] + [TestCase("Parler à", "parlera")] public void should_remove_special_characters_and_casing(string dirty, string clean) { var result = dirty.CleanArtistName(); diff --git a/src/NzbDrone.Core/Parser/Parser.cs b/src/NzbDrone.Core/Parser/Parser.cs index 9210b738a..382b33d7f 100644 --- a/src/NzbDrone.Core/Parser/Parser.cs +++ b/src/NzbDrone.Core/Parser/Parser.cs @@ -154,7 +154,7 @@ namespace NzbDrone.Core.Parser new Regex(@"^b00bs$", RegexOptions.Compiled | RegexOptions.IgnoreCase) }; - private static readonly RegexReplace NormalizeRegex = new RegexReplace(@"((?:\b|_)(? Date: Sat, 26 Oct 2024 21:48:18 -0700 Subject: [PATCH 092/275] Rename Manage Custom Formats to Manage Formats (cherry picked from commit 0f225b05c00add562c9a6aa8cc4cf494e83176c1) Closes #5207 --- .../CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx | 2 +- src/NzbDrone.Core/Localization/Core/en.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx index f27f9e503..91f41dc44 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx @@ -12,7 +12,7 @@ function ManageCustomFormatsToolbarButton() { return ( <> diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 91c0f5a80..d8b3787ed 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -689,6 +689,7 @@ "ManageClients": "Manage Clients", "ManageCustomFormats": "Manage Custom Formats", "ManageDownloadClients": "Manage Download Clients", + "ManageFormats": "Manage Formats", "ManageImportLists": "Manage Import Lists", "ManageIndexers": "Manage Indexers", "ManageLists": "Manage Lists", From 0c2ede48e87b32afff687a724d2220f2476a5a1c Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 18 Aug 2024 18:58:29 -0700 Subject: [PATCH 093/275] Fixed: PWA Manifest with URL base (cherry picked from commit aedcd046fc4fc621dae4b231cc80d4b269a69177) Closes #5203 Fixed: PWA Manifest images (cherry picked from commit da7d17f5e826d5273dba0b4f73227ffc8ed8a6c7) Closes #5030 --- frontend/build/webpack.config.js | 6 ++ .../Content/Images/Icons/browserconfig.xml | 9 --- .../src/Content/Images/Icons/manifest.json | 19 ------ frontend/src/Content/browserconfig.xml | 11 ++++ frontend/src/Content/manifest.json | 19 ++++++ frontend/src/index.ejs | 4 +- frontend/src/login.html | 59 +++++++++---------- .../Frontend/Mappers/BrowserConfig.cs | 19 ++---- .../Frontend/Mappers/ManifestMapper.cs | 19 ++---- .../Frontend/Mappers/StaticResourceMapper.cs | 4 +- .../UrlBaseReplacementResourceMapperBase.cs | 58 ++++++++++++++++++ 11 files changed, 138 insertions(+), 89 deletions(-) delete mode 100644 frontend/src/Content/Images/Icons/browserconfig.xml delete mode 100644 frontend/src/Content/Images/Icons/manifest.json create mode 100644 frontend/src/Content/browserconfig.xml create mode 100644 frontend/src/Content/manifest.json create mode 100644 src/Lidarr.Http/Frontend/Mappers/UrlBaseReplacementResourceMapperBase.cs diff --git a/frontend/build/webpack.config.js b/frontend/build/webpack.config.js index 616ee5637..85056b3cd 100644 --- a/frontend/build/webpack.config.js +++ b/frontend/build/webpack.config.js @@ -134,6 +134,12 @@ module.exports = (env) => { { source: 'frontend/src/Content/robots.txt', destination: path.join(distFolder, 'Content/robots.txt') + }, + + // manifest.json and browserconfig.xml + { + source: 'frontend/src/Content/*.(json|xml)', + destination: path.join(distFolder, 'Content') } ] } diff --git a/frontend/src/Content/Images/Icons/browserconfig.xml b/frontend/src/Content/Images/Icons/browserconfig.xml deleted file mode 100644 index 993924968..000000000 --- a/frontend/src/Content/Images/Icons/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #00ccff - - - diff --git a/frontend/src/Content/Images/Icons/manifest.json b/frontend/src/Content/Images/Icons/manifest.json deleted file mode 100644 index cff971235..000000000 --- a/frontend/src/Content/Images/Icons/manifest.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Lidarr", - "icons": [ - { - "src": "android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "start_url": "../../../../", - "theme_color": "#3a3f51", - "background_color": "#3a3f51", - "display": "standalone" -} diff --git a/frontend/src/Content/browserconfig.xml b/frontend/src/Content/browserconfig.xml new file mode 100644 index 000000000..646112d06 --- /dev/null +++ b/frontend/src/Content/browserconfig.xml @@ -0,0 +1,11 @@ + + + + + + + #00ccff + + + + diff --git a/frontend/src/Content/manifest.json b/frontend/src/Content/manifest.json new file mode 100644 index 000000000..5c1641d01 --- /dev/null +++ b/frontend/src/Content/manifest.json @@ -0,0 +1,19 @@ +{ + "name": "Lidarr", + "icons": [ + { + "src": "__URL_BASE__/Content/Images/Icons/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "__URL_BASE__/Content/Images/Icons/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "start_url": "__URL_BASE__/", + "theme_color": "#3a3f51", + "background_color": "#3a3f51", + "display": "standalone" +} diff --git a/frontend/src/index.ejs b/frontend/src/index.ejs index 5968082b4..a893149d5 100644 --- a/frontend/src/index.ejs +++ b/frontend/src/index.ejs @@ -33,7 +33,7 @@ sizes="16x16" href="/Content/Images/Icons/favicon-16x16.png" /> - + diff --git a/frontend/src/login.html b/frontend/src/login.html index 113dc547b..24d086959 100644 --- a/frontend/src/login.html +++ b/frontend/src/login.html @@ -11,8 +11,11 @@ - - + + @@ -33,7 +36,11 @@ sizes="16x16" href="/Content/Images/Icons/favicon-16x16.png" /> - + - + @@ -59,7 +63,7 @@ body { background-color: var(--pageBackground); color: var(--textColor); - font-family: "Roboto", "open sans", "Helvetica Neue", Helvetica, Arial, + font-family: 'Roboto', 'open sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; } @@ -209,9 +213,7 @@
- +
@@ -282,16 +284,16 @@ diff --git a/src/Lidarr.Http/Frontend/Mappers/BrowserConfig.cs b/src/Lidarr.Http/Frontend/Mappers/BrowserConfig.cs index 25d07037a..e67598e7e 100644 --- a/src/Lidarr.Http/Frontend/Mappers/BrowserConfig.cs +++ b/src/Lidarr.Http/Frontend/Mappers/BrowserConfig.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using NLog; using NzbDrone.Common.Disk; using NzbDrone.Common.EnvironmentInfo; @@ -6,29 +6,22 @@ using NzbDrone.Core.Configuration; namespace Lidarr.Http.Frontend.Mappers { - public class BrowserConfig : StaticResourceMapperBase + public class BrowserConfig : UrlBaseReplacementResourceMapperBase { - private readonly IAppFolderInfo _appFolderInfo; - private readonly IConfigFileProvider _configFileProvider; - public BrowserConfig(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider, IConfigFileProvider configFileProvider, Logger logger) - : base(diskProvider, logger) + : base(diskProvider, configFileProvider, logger) { - _appFolderInfo = appFolderInfo; - _configFileProvider = configFileProvider; + FilePath = Path.Combine(appFolderInfo.StartUpFolder, configFileProvider.UiFolder, "Content", "browserconfig.xml"); } public override string Map(string resourceUrl) { - var path = resourceUrl.Replace('/', Path.DirectorySeparatorChar); - path = path.Trim(Path.DirectorySeparatorChar); - - return Path.ChangeExtension(Path.Combine(_appFolderInfo.StartUpFolder, _configFileProvider.UiFolder, path), "xml"); + return FilePath; } public override bool CanHandle(string resourceUrl) { - return resourceUrl.StartsWith("/Content/Images/Icons/browserconfig"); + return resourceUrl.StartsWith("/Content/browserconfig"); } } } diff --git a/src/Lidarr.Http/Frontend/Mappers/ManifestMapper.cs b/src/Lidarr.Http/Frontend/Mappers/ManifestMapper.cs index dbb9a082c..33f673fee 100644 --- a/src/Lidarr.Http/Frontend/Mappers/ManifestMapper.cs +++ b/src/Lidarr.Http/Frontend/Mappers/ManifestMapper.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using NLog; using NzbDrone.Common.Disk; using NzbDrone.Common.EnvironmentInfo; @@ -6,29 +6,22 @@ using NzbDrone.Core.Configuration; namespace Lidarr.Http.Frontend.Mappers { - public class ManifestMapper : StaticResourceMapperBase + public class ManifestMapper : UrlBaseReplacementResourceMapperBase { - private readonly IAppFolderInfo _appFolderInfo; - private readonly IConfigFileProvider _configFileProvider; - public ManifestMapper(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider, IConfigFileProvider configFileProvider, Logger logger) - : base(diskProvider, logger) + : base(diskProvider, configFileProvider, logger) { - _appFolderInfo = appFolderInfo; - _configFileProvider = configFileProvider; + FilePath = Path.Combine(appFolderInfo.StartUpFolder, configFileProvider.UiFolder, "Content", "manifest.json"); } public override string Map(string resourceUrl) { - var path = resourceUrl.Replace('/', Path.DirectorySeparatorChar); - path = path.Trim(Path.DirectorySeparatorChar); - - return Path.ChangeExtension(Path.Combine(_appFolderInfo.StartUpFolder, _configFileProvider.UiFolder, path), "json"); + return FilePath; } public override bool CanHandle(string resourceUrl) { - return resourceUrl.StartsWith("/Content/Images/Icons/manifest"); + return resourceUrl.StartsWith("/Content/manifest"); } } } diff --git a/src/Lidarr.Http/Frontend/Mappers/StaticResourceMapper.cs b/src/Lidarr.Http/Frontend/Mappers/StaticResourceMapper.cs index 0799ef5d4..47469f88f 100644 --- a/src/Lidarr.Http/Frontend/Mappers/StaticResourceMapper.cs +++ b/src/Lidarr.Http/Frontend/Mappers/StaticResourceMapper.cs @@ -30,8 +30,8 @@ namespace Lidarr.Http.Frontend.Mappers { resourceUrl = resourceUrl.ToLowerInvariant(); - if (resourceUrl.StartsWith("/content/images/icons/manifest") || - resourceUrl.StartsWith("/content/images/icons/browserconfig")) + if (resourceUrl.StartsWith("/content/manifest") || + resourceUrl.StartsWith("/content/browserconfig")) { return false; } diff --git a/src/Lidarr.Http/Frontend/Mappers/UrlBaseReplacementResourceMapperBase.cs b/src/Lidarr.Http/Frontend/Mappers/UrlBaseReplacementResourceMapperBase.cs new file mode 100644 index 000000000..5eee82fbf --- /dev/null +++ b/src/Lidarr.Http/Frontend/Mappers/UrlBaseReplacementResourceMapperBase.cs @@ -0,0 +1,58 @@ +using System.IO; +using NLog; +using NzbDrone.Common.Disk; +using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Core.Configuration; + +namespace Lidarr.Http.Frontend.Mappers +{ + public abstract class UrlBaseReplacementResourceMapperBase : StaticResourceMapperBase + { + private readonly IDiskProvider _diskProvider; + private readonly string _urlBase; + + private string _generatedContent; + + public UrlBaseReplacementResourceMapperBase(IDiskProvider diskProvider, IConfigFileProvider configFileProvider, Logger logger) + : base(diskProvider, logger) + { + _diskProvider = diskProvider; + _urlBase = configFileProvider.UrlBase; + } + + protected string FilePath; + + public override string Map(string resourceUrl) + { + return FilePath; + } + + protected override Stream GetContentStream(string filePath) + { + var text = GetFileText(); + + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(text); + writer.Flush(); + stream.Position = 0; + return stream; + } + + protected virtual string GetFileText() + { + if (RuntimeInfo.IsProduction && _generatedContent != null) + { + return _generatedContent; + } + + var text = _diskProvider.ReadAllText(FilePath); + + text = text.Replace("__URL_BASE__", _urlBase); + + _generatedContent = text; + + return _generatedContent; + } + } +} From e39e990696054fb9cd3b88361741b2d52b2da5b2 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 26 Oct 2024 20:48:00 -0700 Subject: [PATCH 094/275] New: Use instance name in PWA manifest (cherry picked from commit 1fcfb88d2aa0126c4b3c878c8e310311ea57d04d) Closes #5203 --- frontend/src/Content/manifest.json | 2 +- .../Frontend/Mappers/ManifestMapper.cs | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/frontend/src/Content/manifest.json b/frontend/src/Content/manifest.json index 5c1641d01..5c2b3d59d 100644 --- a/frontend/src/Content/manifest.json +++ b/frontend/src/Content/manifest.json @@ -1,5 +1,5 @@ { - "name": "Lidarr", + "name": "__INSTANCE_NAME__", "icons": [ { "src": "__URL_BASE__/Content/Images/Icons/android-chrome-192x192.png", diff --git a/src/Lidarr.Http/Frontend/Mappers/ManifestMapper.cs b/src/Lidarr.Http/Frontend/Mappers/ManifestMapper.cs index 33f673fee..723d7dc2e 100644 --- a/src/Lidarr.Http/Frontend/Mappers/ManifestMapper.cs +++ b/src/Lidarr.Http/Frontend/Mappers/ManifestMapper.cs @@ -8,9 +8,14 @@ namespace Lidarr.Http.Frontend.Mappers { public class ManifestMapper : UrlBaseReplacementResourceMapperBase { + private readonly IConfigFileProvider _configFileProvider; + + private string _generatedContent; + public ManifestMapper(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider, IConfigFileProvider configFileProvider, Logger logger) : base(diskProvider, configFileProvider, logger) { + _configFileProvider = configFileProvider; FilePath = Path.Combine(appFolderInfo.StartUpFolder, configFileProvider.UiFolder, "Content", "manifest.json"); } @@ -23,5 +28,21 @@ namespace Lidarr.Http.Frontend.Mappers { return resourceUrl.StartsWith("/Content/manifest"); } + + protected override string GetFileText() + { + if (RuntimeInfo.IsProduction && _generatedContent != null) + { + return _generatedContent; + } + + var text = base.GetFileText(); + + text = text.Replace("__INSTANCE_NAME__", _configFileProvider.InstanceName); + + _generatedContent = text; + + return _generatedContent; + } } } From 23f7dc3d3c591ab0881cf69e25676b9ac62774be Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 4 Nov 2024 18:54:11 +0200 Subject: [PATCH 095/275] Show an artist path as example in Mount Health Check Closes #5225 --- src/NzbDrone.Core/HealthCheck/Checks/MountCheck.cs | 14 +++++++++----- src/NzbDrone.Core/Localization/Core/ar.json | 2 +- src/NzbDrone.Core/Localization/Core/bg.json | 2 +- src/NzbDrone.Core/Localization/Core/ca.json | 2 +- src/NzbDrone.Core/Localization/Core/cs.json | 2 +- src/NzbDrone.Core/Localization/Core/da.json | 2 +- src/NzbDrone.Core/Localization/Core/de.json | 2 +- src/NzbDrone.Core/Localization/Core/el.json | 2 +- src/NzbDrone.Core/Localization/Core/en.json | 2 +- src/NzbDrone.Core/Localization/Core/es.json | 2 +- src/NzbDrone.Core/Localization/Core/fi.json | 2 +- src/NzbDrone.Core/Localization/Core/fr.json | 2 +- src/NzbDrone.Core/Localization/Core/he.json | 2 +- src/NzbDrone.Core/Localization/Core/hi.json | 2 +- src/NzbDrone.Core/Localization/Core/hu.json | 2 +- src/NzbDrone.Core/Localization/Core/is.json | 2 +- src/NzbDrone.Core/Localization/Core/it.json | 2 +- src/NzbDrone.Core/Localization/Core/ja.json | 2 +- src/NzbDrone.Core/Localization/Core/ko.json | 2 +- src/NzbDrone.Core/Localization/Core/nl.json | 2 +- src/NzbDrone.Core/Localization/Core/pl.json | 2 +- src/NzbDrone.Core/Localization/Core/pt.json | 2 +- src/NzbDrone.Core/Localization/Core/pt_BR.json | 2 +- src/NzbDrone.Core/Localization/Core/ro.json | 2 +- src/NzbDrone.Core/Localization/Core/ru.json | 2 +- src/NzbDrone.Core/Localization/Core/sv.json | 2 +- src/NzbDrone.Core/Localization/Core/th.json | 2 +- src/NzbDrone.Core/Localization/Core/tr.json | 2 +- src/NzbDrone.Core/Localization/Core/uk.json | 2 +- src/NzbDrone.Core/Localization/Core/vi.json | 2 +- src/NzbDrone.Core/Localization/Core/zh_CN.json | 2 +- 31 files changed, 39 insertions(+), 35 deletions(-) diff --git a/src/NzbDrone.Core/HealthCheck/Checks/MountCheck.cs b/src/NzbDrone.Core/HealthCheck/Checks/MountCheck.cs index 0b7b68ec1..a683b2826 100644 --- a/src/NzbDrone.Core/HealthCheck/Checks/MountCheck.cs +++ b/src/NzbDrone.Core/HealthCheck/Checks/MountCheck.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using NzbDrone.Common.Disk; using NzbDrone.Core.Localization; @@ -19,16 +20,19 @@ namespace NzbDrone.Core.HealthCheck.Checks public override HealthCheck Check() { - // Not best for optimization but due to possible symlinks and junctions, we get mounts based on series path so internals can handle mount resolution. + // Not best for optimization but due to possible symlinks and junctions, we get mounts based on artist paths so internals can handle mount resolution. var mounts = _artistService.AllArtistPaths() - .Select(path => _diskProvider.GetMount(path.Value)) - .Where(m => m is { MountOptions.IsReadOnly: true }) - .DistinctBy(m => m.RootDirectory) + .Select(p => new Tuple(_diskProvider.GetMount(p.Value), p.Value)) + .Where(m => m.Item1 is { MountOptions.IsReadOnly: true }) + .DistinctBy(m => m.Item1.RootDirectory) .ToList(); if (mounts.Any()) { - return new HealthCheck(GetType(), HealthCheckResult.Error, _localizationService.GetLocalizedString("MountCheckMessage") + string.Join(", ", mounts.Select(m => m.Name)), "#movie-mount-ro"); + return new HealthCheck(GetType(), + HealthCheckResult.Error, + $"{_localizationService.GetLocalizedString("MountArtistHealthCheckMessage")}{string.Join(", ", mounts.Select(m => $"{m.Item1.Name} ({m.Item2})"))}", + "#artist-mount-ro"); } return new HealthCheck(GetType()); diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 59c556c02..aac733306 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -591,7 +591,7 @@ "ImportListStatusCheckSingleClientMessage": "القوائم غير متاحة بسبب الإخفاقات: {0}", "IndexerRssHealthCheckNoIndexers": "لا توجد مفهرسات متاحة مع تمكين مزامنة RSS ، ولن يحصل {appName} على الإصدارات الجديدة تلقائيًا", "IndexerSearchCheckNoAutomaticMessage": "لا تتوفر مفهرسات مع تمكين البحث التلقائي ، ولن يقدم {appName} أي نتائج بحث تلقائية", - "MountCheckMessage": "تم تثبيت الحامل الذي يحتوي على مسار فيلم للقراءة فقط: ", + "MountArtistHealthCheckMessage": "تم تثبيت الحامل الذي يحتوي على مسار فيلم للقراءة فقط: ", "ProxyCheckResolveIpMessage": "فشل حل عنوان IP لمضيف الخادم الوكيل المكون {0}", "ReplaceWithDash": "استبدل بـ داش", "AppDataLocationHealthCheckMessage": "لن يكون التحديث ممكنًا لمنع حذف AppData عند التحديث", diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index 820fa796e..3f4635424 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -603,7 +603,7 @@ "IndexerSearchCheckNoAutomaticMessage": "Няма налични индексатори с активирано автоматично търсене, {appName} няма да предоставя резултати от автоматично търсене", "IndexerSearchCheckNoAvailableIndexersMessage": "Всички индексатори с възможност за търсене са временно недостъпни поради скорошни грешки в индексатора", "IndexerStatusCheckAllClientMessage": "Всички индексатори са недостъпни поради грешки", - "MountCheckMessage": "Монтажът, съдържащ път на филм, е монтиран само за четене: ", + "MountArtistHealthCheckMessage": "Монтажът, съдържащ път на филм, е монтиран само за четене: ", "ProxyCheckBadRequestMessage": "Неуспешно тестване на прокси. Код на състоянието: {0}", "ProxyCheckResolveIpMessage": "Неуспешно разрешаване на IP адреса за конфигурирания прокси хост {0}", "ReplaceWithDash": "Заменете с Dash", diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index e9f1ac3d6..18900052f 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -630,7 +630,7 @@ "IndexerStatusCheckAllClientMessage": "Tots els indexadors no estan disponibles a causa d'errors", "IndexerLongTermStatusCheckSingleClientMessage": "Els indexadors no estan disponibles a causa d'errors durant més de 6 hores: {0}", "IndexerStatusCheckSingleClientMessage": "Els indexadors no estan disponibles a causa d'errors: {0}", - "MountCheckMessage": "El muntatge que conté una ruta de pel·lícula es munta com a només de lectura: ", + "MountArtistHealthCheckMessage": "El muntatge que conté una ruta de pel·lícula es munta com a només de lectura: ", "ReplaceWithDash": "Substitueix per guió", "ReplaceWithSpaceDash": "Substitueix per espai i guió", "ReplaceWithSpaceDashSpace": "Substitueix per espai, guió i espai", diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 1fd4b8171..52823afa6 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -601,7 +601,7 @@ "IndexerSearchCheckNoAutomaticMessage": "Nejsou k dispozici žádné indexery se zapnutým automatickým vyhledáváním, {appName} neposkytne žádné automatické výsledky hledání", "IndexerSearchCheckNoAvailableIndexersMessage": "Všechny indexery podporující vyhledávání jsou dočasně nedostupné kvůli nedávným chybám indexeru", "IndexerStatusCheckSingleClientMessage": "Indexery nedostupné z důvodu selhání: {0}", - "MountCheckMessage": "Mount obsahující filmovou cestu je připojen jen pro čtení: ", + "MountArtistHealthCheckMessage": "Mount obsahující filmovou cestu je připojen jen pro čtení: ", "ProxyCheckBadRequestMessage": "Nepodařilo se otestovat proxy. StatusCode: {0}", "ProxyCheckFailedToTestMessage": "Nepodařilo se otestovat proxy: {0}", "ProxyCheckResolveIpMessage": "Nepodařilo se vyřešit adresu IP konfigurovaného hostitele proxy {0}", diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index af9ad57f3..001a06d3d 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -615,7 +615,7 @@ "IndexerSearchCheckNoInteractiveMessage": "Ingen indexere er tilgængelige med Interaktiv Søg aktiveret, {appName} vil ikke give nogle interaktive søge resultater", "IndexerStatusCheckAllClientMessage": "Alle indeksører er utilgængelige på grund af fejl", "IndexerStatusCheckSingleClientMessage": "Indexere utilgængelige på grund af fejl: {0}", - "MountCheckMessage": "Mount, der indeholder en filmsti, er monteret skrivebeskyttet: ", + "MountArtistHealthCheckMessage": "Mount, der indeholder en filmsti, er monteret skrivebeskyttet: ", "ProxyCheckBadRequestMessage": "Kunne ikke teste proxy. Statuskode: {0}", "ProxyCheckFailedToTestMessage": "Kunne ikke teste proxy: {0}", "ProxyCheckResolveIpMessage": "Mislykkedes at løse IP-adressen til den konfigurerede proxyhost {0}", diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index a483c9115..f5b846086 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -867,7 +867,7 @@ "IndexerSearchCheckNoInteractiveMessage": "Keine Indexer mit aktivierter interaktiver Suche verfügbar, {appName} wird keine interaktiven Suchergebnisse liefern", "IndexerStatusCheckAllClientMessage": "Alle Indexer sind aufgrund von Fehlern nicht verfügbar", "IndexerStatusCheckSingleClientMessage": "Indexer aufgrund von Fehlern nicht verfügbar: {0}", - "MountCheckMessage": "Der Einhängepunkt, welcher einen Filmpfad enthält, ist schreibgeschützt eingehängt: ", + "MountArtistHealthCheckMessage": "Der Einhängepunkt, welcher einen Filmpfad enthält, ist schreibgeschützt eingehängt: ", "ProxyCheckBadRequestMessage": "Proxy konnte nicht getestet werden. StatusCode: {0}", "ProxyCheckFailedToTestMessage": "Proxy konnte nicht getestet werden: {0}", "ProxyCheckResolveIpMessage": "Fehler beim Auflösen der IP-Adresse für den konfigurierten Proxy-Host {0}", diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index d8541bea5..2f04c7b6f 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -910,7 +910,7 @@ "IndexerLongTermStatusCheckAllClientMessage": "Όλοι οι δείκτες δεν είναι διαθέσιμοι λόγω αστοχιών για περισσότερο από 6 ώρες", "IndexerStatusCheckAllClientMessage": "Όλοι οι δείκτες δεν είναι διαθέσιμοι λόγω αστοχιών", "IndexerStatusCheckSingleClientMessage": "Τα ευρετήρια δεν είναι διαθέσιμα λόγω αστοχιών: {0}", - "MountCheckMessage": "Το προσάρτημα που περιέχει μια διαδρομή ταινίας είναι τοποθετημένο μόνο για ανάγνωση: ", + "MountArtistHealthCheckMessage": "Το προσάρτημα που περιέχει μια διαδρομή ταινίας είναι τοποθετημένο μόνο για ανάγνωση: ", "RemotePathMappingCheckFileRemoved": "Το αρχείο {0} καταργήθηκε εν μέρει κατά την επεξεργασία.", "RemotePathMappingCheckFilesBadDockerPath": "Χρησιμοποιείτε docker. λήψη αρχείων πελάτη {0} που αναφέρθηκαν στο {1} αλλά αυτή δεν είναι έγκυρη διαδρομή {2}. Ελέγξτε τις απομακρυσμένες αντιστοιχίσεις διαδρομής και κατεβάστε τις ρυθμίσεις πελάτη.", "RemotePathMappingCheckFilesGenericPermissions": "Λήψη αρχείων πελάτη {0} που αναφέρθηκαν στο {1} αλλά το {appName} δεν μπορεί να δει αυτόν τον κατάλογο. Ίσως χρειαστεί να προσαρμόσετε τα δικαιώματα του φακέλου.", diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index d8b3787ed..621e04b29 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -762,7 +762,7 @@ "MonitoringOptions": "Monitoring Options", "MonitoringOptionsHelpText": "Which albums should be monitored after the artist is added (one-time adjustment)", "MoreInfo": "More Info", - "MountCheckMessage": "Mount containing music path is mounted read-only: ", + "MountArtistHealthCheckMessage": "Mount containing an artist path is mounted read-only: ", "MoveAutomatically": "Move Automatically", "MoveFiles": "Move Files", "MultiDiscTrackFormat": "Multi Disc Track Format", diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 7b37a7227..32976c4e1 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -663,7 +663,7 @@ "DownloadClientCheckNoneAvailableMessage": "Ningún cliente de descarga disponible", "DownloadClientCheckUnableToCommunicateMessage": "No se pudo comunicar con {0}.", "IndexerStatusCheckSingleClientMessage": "Indexadores no disponibles debido a errores: {0}", - "MountCheckMessage": "El punto de montaje que contiene la ruta de música está montado como solo lectura: ", + "MountArtistHealthCheckMessage": "El punto de montaje que contiene la ruta de música está montado como solo lectura: ", "RemotePathMappingCheckFilesGenericPermissions": "El cliente de descarga {0} informó de la existencia de archivos en {1} pero {appName} no puede ver este directorio. Es posible que tenga que ajustar los permisos de la carpeta.", "RemotePathMappingCheckFilesLocalWrongOSPath": "El cliente de descarga local {0} informó de la existencia de archivos en {1}, pero no es una ruta válida {2}. Revise la configuración de su cliente de descarga.", "RemotePathMappingCheckGenericPermissions": "El cliente de descarga {0} coloca las descargas en {1} pero {appName} no puede ver este directorio. Es posible que tenga que ajustar los permisos de la carpeta.", diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index d6cf6420e..43e36f00e 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -1079,7 +1079,7 @@ "UnableToLoadCustomFormats": "Virhe ladattaessa mukautettuja muotoja", "Customformat": "Mukautettu muoto", "ExportCustomFormat": "Vie mukautettu muoto", - "MountCheckMessage": "Kohteen sijainnin sisältävä media on kytketty vain luku -tilassa: ", + "MountArtistHealthCheckMessage": "Kohteen sijainnin sisältävä media on kytketty vain luku -tilassa: ", "NoResultsFound": "Tuloksia ei löytynyt.", "CustomFormatSettings": "Mukautettujen muotojen asetukset", "AlbumStudioTracksDownloaded": "{trackFileCount}/{totalTrackCount} kappaletta ladattu", diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 02019f6eb..5627711c8 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -717,7 +717,7 @@ "IndexerStatusCheckAllClientMessage": "Tous les indexeurs sont indisponibles en raison d'échecs", "IndexerStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison d'échecs : {0}", "Loading": "Chargement", - "MountCheckMessage": "Le montage contenant un chemin de film est monté en lecture seule : ", + "MountArtistHealthCheckMessage": "Le montage contenant un chemin de film est monté en lecture seule : ", "ProxyCheckBadRequestMessage": "Échec du test du proxy. StatusCode : {0}", "ProxyCheckFailedToTestMessage": "Échec du test du proxy : {0}", "ProxyCheckResolveIpMessage": "Impossible de résoudre l'adresse IP de l'hôte proxy configuré {0}", diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index ccfd53f6c..8f61c7aa5 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -622,7 +622,7 @@ "DownloadClientStatusCheckSingleClientMessage": "הורדת לקוחות לא זמינה עקב כשלים: {0}", "IndexerStatusCheckAllClientMessage": "כל האינדקסים אינם זמינים עקב כשלים", "IndexerStatusCheckSingleClientMessage": "אינדקסים לא זמינים בגלל כשלים: {0}", - "MountCheckMessage": "הר המכיל נתיב סרט מותקן לקריאה בלבד: ", + "MountArtistHealthCheckMessage": "הר המכיל נתיב סרט מותקן לקריאה בלבד: ", "ProxyCheckBadRequestMessage": "נכשל בדיקת ה- proxy. קוד קוד: {0}", "ProxyCheckFailedToTestMessage": "נכשל בדיקת ה- proxy: {0}", "ProxyCheckResolveIpMessage": "פתרון כתובת ה- IP עבור מארח ה- Proxy המוגדר {0} נכשל", diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index ccb39d147..311fefdf2 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -613,7 +613,7 @@ "IndexerSearchCheckNoInteractiveMessage": "इंटरएक्टिव सर्च सक्षम के साथ कोई भी इंडेक्स उपलब्ध नहीं है, रेडर किसी भी इंटरैक्टिव खोज परिणाम प्रदान नहीं करेगा", "IndexerStatusCheckAllClientMessage": "विफलताओं के कारण सभी अनुक्रमणिका अनुपलब्ध हैं", "IndexerStatusCheckSingleClientMessage": "अनुक्रमणिका विफलताओं के कारण अनुपलब्ध: {0}", - "MountCheckMessage": "मूवी पथ पर माउंट माउंट केवल पढ़ने योग्य है: ", + "MountArtistHealthCheckMessage": "मूवी पथ पर माउंट माउंट केवल पढ़ने योग्य है: ", "ProxyCheckBadRequestMessage": "प्रॉक्सी का परीक्षण करने में विफल। स्थिति कोड: {0}", "ProxyCheckFailedToTestMessage": "प्रॉक्सी का परीक्षण करने में विफल: {0}", "ProxyCheckResolveIpMessage": "कॉन्फ़िगर प्रॉक्सी होस्ट {0} के लिए आईपी एड्रेस को हल करने में विफल", diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index 09668277b..93e3889da 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -887,7 +887,7 @@ "DownloadClientCheckUnableToCommunicateMessage": "Nem lehet kommunikálni a következővel: {0}.", "DownloadClientStatusCheckAllClientMessage": "Az összes letöltőkliens elérhetetlen, hiba miatt", "DownloadClientStatusCheckSingleClientMessage": "Letöltőkliens hiba miatt nem elérhető: {0}", - "MountCheckMessage": "A filmútvonalat tartalmazó mappa csak olvasható: ", + "MountArtistHealthCheckMessage": "A filmútvonalat tartalmazó mappa csak olvasható: ", "ProxyCheckBadRequestMessage": "Proxy tesztelése sikertelen. Állapotkód: {0}", "ProxyCheckFailedToTestMessage": "Proxy tesztelése sikertelen: {0}", "ProxyCheckResolveIpMessage": "Nem sikerült megoldani a konfigurált proxykiszolgáló IP-címét {0}", diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index 53cbc6472..07857a4b8 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -614,7 +614,7 @@ "IndexerLongTermStatusCheckSingleClientMessage": "Vísitölufólk er ekki tiltækt vegna bilana í meira en 6 klukkustundir: {0}", "IndexerRssHealthCheckNoAvailableIndexers": "Allir indexers sem styðja rss eru tímabundið ófáanlegir vegna nýlegra villubreytinga", "IndexerRssHealthCheckNoIndexers": "Engir verðtryggingaraðilar í boði með RSS samstillingu virkt, {appName} mun ekki grípa í nýjar útgáfur sjálfkrafa", - "MountCheckMessage": "Fjall sem inniheldur kvikmyndaslóð er aðeins skrifvarið: ", + "MountArtistHealthCheckMessage": "Fjall sem inniheldur kvikmyndaslóð er aðeins skrifvarið: ", "ReplaceWithDash": "Skiptu um með Dash", "ReplaceWithSpaceDashSpace": "Skiptu um með Space Dash Space", "RootFolderCheckMultipleMessage": "Margar rótarmöppur vantar: {0}", diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index 63ea39fbe..5029cca69 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -717,7 +717,7 @@ "IndexerSearchCheckNoInteractiveMessage": "Non è disponibile nessun indexer con abilitata la Ricerca Interattiva, {appName} non fornirà nessun risultato tramite la ricerca interattiva", "IndexerStatusCheckAllClientMessage": "Nessun Indicizzatore disponibile a causa di errori", "IndexerStatusCheckSingleClientMessage": "Indicizzatori non disponibili a causa di errori: {0}", - "MountCheckMessage": "La destinazione contenente il percorso di un film è montata in sola lettura: ", + "MountArtistHealthCheckMessage": "La destinazione contenente il percorso di un film è montata in sola lettura: ", "ProxyCheckFailedToTestMessage": "Test del proxy fallito: {0}", "ProxyCheckBadRequestMessage": "Il test del proxy è fallito. Codice Stato: {0}", "RemotePathMappingCheckBadDockerPath": "Stai utilizzando docker; Il client di download {0} mette i download in {1} ma questo non è un percorso valido {2}. Controlla la mappa dei percorsi remoti e le impostazioni del client di download.", diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index 04d0409c8..c62a8c41c 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -596,7 +596,7 @@ "IndexerRssHealthCheckNoAvailableIndexers": "最近のインデクサーエラーのため、すべてのrss対応インデクサーは一時的に利用できません", "IndexerStatusCheckAllClientMessage": "障害のため、すべてのインデクサーを使用できません", "IndexerStatusCheckSingleClientMessage": "失敗のためインデクサーを利用できません:{0}", - "MountCheckMessage": "ムービーパスを含むマウントは読み取り専用でマウントされます。 ", + "MountArtistHealthCheckMessage": "ムービーパスを含むマウントは読み取り専用でマウントされます。 ", "RootFolderCheckMultipleMessage": "複数のルートフォルダがありません:{0}", "RootFolderCheckSingleMessage": "ルートフォルダがありません:{0}", "ShownClickToHide": "表示、クリックして非表示", diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index e40faa2d4..6d9216234 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -610,7 +610,7 @@ "ImportMechanismHealthCheckMessage": "완료된 다운로드 처리 활성화", "IndexerRssHealthCheckNoIndexers": "RSS 동기화가 활성화 된 상태에서 사용할 수있는 인덱서가 없습니다. Whisparr는 새 출시를 자동으로 가져 오지 않습니다.", "IndexerSearchCheckNoAutomaticMessage": "자동 검색이 활성화 된 상태에서 사용할 수있는 인덱서가 없습니다. Whisparr는 자동 검색 결과를 제공하지 않습니다.", - "MountCheckMessage": "동영상 경로가 포함된 마운트는 읽기 전용으로 마운트됩니다. ", + "MountArtistHealthCheckMessage": "동영상 경로가 포함된 마운트는 읽기 전용으로 마운트됩니다. ", "ProxyCheckFailedToTestMessage": "프록시 테스트 실패 : {0}", "ProxyCheckResolveIpMessage": "구성된 프록시 호스트 {0}의 IP 주소를 확인하지 못했습니다.", "UpdateCheckStartupNotWritableMessage": "'{1}'사용자가 '{0}'시작 폴더에 쓸 수 없기 때문에 업데이트를 설치할 수 없습니다.", diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index 13fff5d0d..6f169e2d8 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -642,7 +642,7 @@ "DownloadClientStatusCheckAllClientMessage": "Alle downloaders zijn onbeschikbaar wegens fouten", "ImportListStatusCheckAllClientMessage": "Alle lijsten zijn onbeschikbaar wegens fouten", "ImportListStatusCheckSingleClientMessage": "Lijsten onbeschikbaar wegens fouten: {0}", - "MountCheckMessage": "Een mount dat een film pad bevat is gemount als alleen-lezen: ", + "MountArtistHealthCheckMessage": "Een mount dat een film pad bevat is gemount als alleen-lezen: ", "ProxyCheckBadRequestMessage": "Testen van proxy is mislukt. Statuscode: {0}", "ProxyCheckFailedToTestMessage": "Testen van proxy is mislukt: {0}", "RemotePathMappingCheckDownloadPermissions": "{appName} kan gedownloade film {0} zien, maar niet openen. Waarschijnlijk fout met machtigingen.", diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 35edccf3d..df08dad98 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -645,7 +645,7 @@ "IndexerSearchCheckNoInteractiveMessage": "Brak dostępnych indeksatorów z włączoną funkcją wyszukiwania interaktywnego, {appName} nie zapewni żadnych interaktywnych wyników wyszukiwania", "IndexerStatusCheckAllClientMessage": "Wszystkie indeksatory są niedostępne z powodu błędów", "IndexerStatusCheckSingleClientMessage": "Indeksatory niedostępne z powodu błędów: {0}", - "MountCheckMessage": "Montaż zawierający ścieżkę filmu jest montowany tylko do odczytu: ", + "MountArtistHealthCheckMessage": "Montaż zawierający ścieżkę filmu jest montowany tylko do odczytu: ", "RemotePathMappingCheckFileRemoved": "Plik {0} został usunięty w trakcie przetwarzania.", "RemotePathMappingCheckBadDockerPath": "Korzystasz z Dockera. Klient pobierania {0} umieszcza pobrane pliki w {1}, lecz nie jest to poprawna ścieżka {2}. Zmień ustawienia zdalnego mapowania ścieżek i klienta pobierania.", "RemotePathMappingCheckDockerFolderMissing": "Korzystasz z Dockera. Klient pobierania {0} umieszcza pobrane pliki w {1}, lecz tej folder nie istnieje wewnątrz kontenera. Zmień ustawienia zdalnego mapowania ścieżek i woluminów kontenera.", diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index ee1c39fb9..81c67bf69 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -708,7 +708,7 @@ "ImportListStatusCheckAllClientMessage": "Todas as listas estão indisponíveis devido a erros", "ImportListStatusCheckSingleClientMessage": "Listas indisponíveis devido a erros: {0}", "ImportMechanismHealthCheckMessage": "Ativar processamento de transferências terminadas", - "MountCheckMessage": "O volume que contém um caminho de filme é somente leitura: ", + "MountArtistHealthCheckMessage": "O volume que contém um caminho de filme é somente leitura: ", "ProxyCheckBadRequestMessage": "Falha ao testar o proxy. Código de estado: {0}", "ProxyCheckFailedToTestMessage": "Falha ao testar o proxy: {0}", "ProxyCheckResolveIpMessage": "Não é possível resolver o Endereço IP para o Anfitrião de proxy {0} definido", diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 3df282eb7..08c5a01cf 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -902,7 +902,7 @@ "IndexerStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a falhas: {0}", "Loading": "carregando", "MonitorAlbum": "Monitorar Álbum", - "MountCheckMessage": "A montagem que contém o caminho da música é montada somente para leitura: ", + "MountArtistHealthCheckMessage": "A montagem que contém o caminho da música é montada somente para leitura: ", "OnHealthRestored": "Com a Saúde Restaurada", "ProxyCheckBadRequestMessage": "Falha ao testar o proxy. Código de status: {0}", "ProxyCheckFailedToTestMessage": "Falha ao testar o proxy: {0}", diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 5bc2ca61e..c8ac1fb3d 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -584,7 +584,7 @@ "IndexerSearchCheckNoInteractiveMessage": "Niciun indexator cu Căutare interactivă nu este activ, {appName} nu va afișa niciun rezultat de căutare interactivă", "MinFormatScoreHelpText": "Scorul minim de format personalizat permis pentru descărcare", "Monitor": "Monitorizează", - "MountCheckMessage": "Calea ce conține filme este montată în mod de read-only: ", + "MountArtistHealthCheckMessage": "Calea ce conține filme este montată în mod de read-only: ", "NegateHelpText": "Dacă este bifat, formatul personalizat nu se va aplica dacă această {0} condiție se potrivește.", "PreferTorrent": "Prefer Torrent", "PreferUsenet": "Prefer Usenet", diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index a7d360101..40fd68ce5 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -658,7 +658,7 @@ "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "Добавить новый фильм очень просто! Начни печатать название фильма, который хочешь добавить", "MinFormatScoreHelpText": "Минимальная оценка пользовательского формата для скачивания", "Monitor": "Монитор", - "MountCheckMessage": "Смонтированный путь к фильму смонтировано режиме только для чтения: ", + "MountArtistHealthCheckMessage": "Смонтированный путь к фильму смонтировано режиме только для чтения: ", "NegateHelpText": "Если отмечено, то настроенный формат не будет применён при условии {0}.", "RemotePathMappingCheckBadDockerPath": "Вы используете docker; клиент загрузки {0} сообщил о файлах в {1}, но это не корректный путь {2}. Проверьте правильность указанного пути и настройки клиента загрузки.", "RemotePathMappingCheckDockerFolderMissing": "Вы используете docker; клиент загрузки {0} размещает загрузки в {1}, но этот каталог, похоже, не существует внутри контейнера. Проверьте соответствие путей к файлам и настройки тома контейнера.", diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 815ac1440..8aa75ab32 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -773,7 +773,7 @@ "MinFormatScoreHelpText": "Lägsta möjliga anpassade formatpoäng tillåtet att ladda ner", "Monitor": "Bevakning", "Monitoring": "Bevakar", - "MountCheckMessage": "Montering (eng. Mount) innehållande filmsökväg är monterad med endast Läs-behörighet: ", + "MountArtistHealthCheckMessage": "Montering (eng. Mount) innehållande filmsökväg är monterad med endast Läs-behörighet: ", "PreferTorrent": "Föredrar Torrent", "PreferUsenet": "Föredra Usenet", "ReplaceWithDash": "Ersätt med bindestreck", diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index 744e5956e..2096cac97 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -610,7 +610,7 @@ "IndexerStatusCheckSingleClientMessage": "ตัวจัดทำดัชนีไม่พร้อมใช้งานเนื่องจากความล้มเหลว: {0}", "MaintenanceRelease": "รุ่นการบำรุงรักษา: การแก้ไขข้อบกพร่องและการปรับปรุงอื่น ๆ ดู Github Commit History สำหรับรายละเอียดเพิ่มเติม", "MinFormatScoreHelpText": "คะแนนรูปแบบกำหนดเองขั้นต่ำที่อนุญาตให้ดาวน์โหลด", - "MountCheckMessage": "เมาท์ที่มีเส้นทางภาพยนตร์ถูกเมาท์แบบอ่านอย่างเดียว: ", + "MountArtistHealthCheckMessage": "เมาท์ที่มีเส้นทางภาพยนตร์ถูกเมาท์แบบอ่านอย่างเดียว: ", "NegateHelpText": "หากเลือกรูปแบบที่กำหนดเองจะใช้ไม่ได้หากเงื่อนไข {0} นี้ตรง", "ReplaceWithDash": "แทนที่ด้วย Dash", "ReplaceWithSpaceDash": "แทนที่ด้วย Space Dash", diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 5ccf74762..416e9609b 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -609,7 +609,7 @@ "IndexerSearchCheckNoInteractiveMessage": "Etkileşimli Arama etkinleştirilmiş fakat dizinleyici mevcut değil; {appName} herhangi bir etkileşimli arama sonucu sağlayamayacaktır", "IndexerStatusCheckAllClientMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor", "IndexerStatusCheckSingleClientMessage": "Hatalar nedeniyle dizinleyiciler kullanılamıyor: {0}", - "MountCheckMessage": "Bir film yolu içeren bağlama, salt okunur olarak bağlanır: ", + "MountArtistHealthCheckMessage": "Bir film yolu içeren bağlama, salt okunur olarak bağlanır: ", "ProxyCheckBadRequestMessage": "Proxy ile test edilemedi. DurumKodu: {0}", "ProxyCheckFailedToTestMessage": "Proxy ile test edilemedi: {0}", "ProxyCheckResolveIpMessage": "{0} Yapılandırılmış Proxy Ana Bilgisayarının IP Adresi çözülemedi", diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 5f12c68d6..a7085c28d 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -751,7 +751,7 @@ "ResetTitlesHelpText": "Скинути заголовки визначень, а також значення", "NoChange": "Без змін", "PreferredSize": "Бажаний розмір", - "MountCheckMessage": "Монтування, що містить шлях до фільму, монтується лише для читання: ", + "MountArtistHealthCheckMessage": "Монтування, що містить шлях до фільму, монтується лише для читання: ", "PreferUsenet": "Віддавайте перевагу Usenet", "ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Щоб отримати додаткову інформацію про окремі списки імпорту, натисніть інформаційні кнопки.", "DeleteSelectedDownloadClientsMessageText": "Ви впевнені, що хочете видалити тег {0} ?", diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index 0c8eb3893..5d59e2d0a 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -577,7 +577,7 @@ "HiddenClickToShow": "Ẩn, bấm để hiển thị", "ImportListStatusCheckAllClientMessage": "Tất cả danh sách không có sẵn do lỗi", "MaintenanceRelease": "Bản phát hành bảo trì: sửa lỗi và các cải tiến khác. Xem Lịch sử cam kết Github để biết thêm chi tiết", - "MountCheckMessage": "Mount chứa đường dẫn phim được mount ở chế độ chỉ đọc: ", + "MountArtistHealthCheckMessage": "Mount chứa đường dẫn phim được mount ở chế độ chỉ đọc: ", "PreferTorrent": "Thích Torrent", "PreferUsenet": "Ưu tiên Usenet", "ReplaceWithSpaceDash": "Thay thế bằng Dấu gạch ngang", diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index d80c8dd4c..959357ac5 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -849,7 +849,7 @@ "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "添加新的艺术家很容易,只需开始输入要添加的艺术家的名称即可。", "Loading": "加载中", "Monitor": "追踪", - "MountCheckMessage": "挂载的电影目录包含只读的目录: ", + "MountArtistHealthCheckMessage": "挂载的电影目录包含只读的目录: ", "NegateHelpText": "如勾选,当条件 {0} 满足时不会应用自定义格式。", "PreferTorrent": "首选Torrent", "PreferUsenet": "首选Usenet", From 29d17c634770cd79aba33a8337091df3919fb4e6 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 4 Nov 2024 18:57:10 +0200 Subject: [PATCH 096/275] Fixed: Root folder existence for import lists health check Closes #5218 --- .../Checks/ImportListRootFolderCheck.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/HealthCheck/Checks/ImportListRootFolderCheck.cs b/src/NzbDrone.Core/HealthCheck/Checks/ImportListRootFolderCheck.cs index cbf6ecfec..aed0a82e5 100644 --- a/src/NzbDrone.Core/HealthCheck/Checks/ImportListRootFolderCheck.cs +++ b/src/NzbDrone.Core/HealthCheck/Checks/ImportListRootFolderCheck.cs @@ -1,15 +1,19 @@ using System.Collections.Generic; using System.Linq; using NzbDrone.Common.Disk; +using NzbDrone.Common.Extensions; using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.ImportLists; using NzbDrone.Core.Localization; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Music.Events; using NzbDrone.Core.RootFolders; +using NzbDrone.Core.ThingiProvider.Events; namespace NzbDrone.Core.HealthCheck.Checks { + [CheckOn(typeof(ProviderUpdatedEvent))] + [CheckOn(typeof(ProviderDeletedEvent))] [CheckOn(typeof(ModelEvent))] [CheckOn(typeof(ArtistsDeletedEvent))] [CheckOn(typeof(ArtistMovedEvent))] @@ -19,17 +23,21 @@ namespace NzbDrone.Core.HealthCheck.Checks { private readonly IImportListFactory _importListFactory; private readonly IDiskProvider _diskProvider; + private readonly IRootFolderService _rootFolderService; - public ImportListRootFolderCheck(IImportListFactory importListFactory, IDiskProvider diskProvider, ILocalizationService localizationService) + public ImportListRootFolderCheck(IImportListFactory importListFactory, IDiskProvider diskProvider, IRootFolderService rootFolderService, ILocalizationService localizationService) : base(localizationService) { _importListFactory = importListFactory; _diskProvider = diskProvider; + _rootFolderService = rootFolderService; } public override HealthCheck Check() { var importLists = _importListFactory.All(); + var rootFolders = _rootFolderService.All(); + var missingRootFolders = new Dictionary>(); foreach (var importList in importLists) @@ -43,7 +51,10 @@ namespace NzbDrone.Core.HealthCheck.Checks continue; } - if (!_diskProvider.FolderExists(rootFolderPath)) + if (rootFolderPath.IsNullOrWhiteSpace() || + !rootFolderPath.IsPathValid(PathValidationType.CurrentOs) || + !rootFolders.Any(r => r.Path.PathEquals(rootFolderPath)) || + !_diskProvider.FolderExists(rootFolderPath)) { missingRootFolders.Add(rootFolderPath, new List { importList }); } From 3f81e0254f6ac7565f131f149ac2d0442e111b1f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 31 Oct 2024 17:16:33 +0200 Subject: [PATCH 097/275] Fixed: Loading queue with pending releases for deleted artists (cherry picked from commit 38c0135d7cd05b22bede934f8571c439dcf70a88) Closes #5214 --- .../Datastore/Extensions/BuilderExtensions.cs | 14 ++++++++++---- .../Download/Pending/PendingReleaseRepository.cs | 7 ++++++- .../Download/Pending/PendingReleaseService.cs | 7 ++----- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/NzbDrone.Core/Datastore/Extensions/BuilderExtensions.cs b/src/NzbDrone.Core/Datastore/Extensions/BuilderExtensions.cs index 3bff36b7a..66dd34adc 100644 --- a/src/NzbDrone.Core/Datastore/Extensions/BuilderExtensions.cs +++ b/src/NzbDrone.Core/Datastore/Extensions/BuilderExtensions.cs @@ -64,19 +64,25 @@ namespace NzbDrone.Core.Datastore public static SqlBuilder Join(this SqlBuilder builder, Expression> filter) { var wb = GetWhereBuilder(builder.DatabaseType, filter, false, builder.Sequence); - var rightTable = TableMapping.Mapper.TableNameMapping(typeof(TRight)); - return builder.Join($"\"{rightTable}\" ON {wb.ToString()}"); + return builder.Join($"\"{rightTable}\" ON {wb}"); } public static SqlBuilder LeftJoin(this SqlBuilder builder, Expression> filter) { var wb = GetWhereBuilder(builder.DatabaseType, filter, false, builder.Sequence); - var rightTable = TableMapping.Mapper.TableNameMapping(typeof(TRight)); - return builder.LeftJoin($"\"{rightTable}\" ON {wb.ToString()}"); + return builder.LeftJoin($"\"{rightTable}\" ON {wb}"); + } + + public static SqlBuilder InnerJoin(this SqlBuilder builder, Expression> filter) + { + var wb = GetWhereBuilder(builder.DatabaseType, filter, false, builder.Sequence); + var rightTable = TableMapping.Mapper.TableNameMapping(typeof(TRight)); + + return builder.InnerJoin($"\"{rightTable}\" ON {wb}"); } public static SqlBuilder GroupBy(this SqlBuilder builder, Expression> property) diff --git a/src/NzbDrone.Core/Download/Pending/PendingReleaseRepository.cs b/src/NzbDrone.Core/Download/Pending/PendingReleaseRepository.cs index 9fb8d86bc..9c88211d2 100644 --- a/src/NzbDrone.Core/Download/Pending/PendingReleaseRepository.cs +++ b/src/NzbDrone.Core/Download/Pending/PendingReleaseRepository.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using NzbDrone.Core.Datastore; using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.Music; namespace NzbDrone.Core.Download.Pending { @@ -30,7 +31,11 @@ namespace NzbDrone.Core.Download.Pending public List WithoutFallback() { - return Query(p => p.Reason != PendingReleaseReason.Fallback); + var builder = new SqlBuilder(_database.DatabaseType) + .InnerJoin((p, s) => p.ArtistId == s.Id) + .Where(p => p.Reason != PendingReleaseReason.Fallback); + + return Query(builder); } } } diff --git a/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs b/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs index f41cae0d4..334a5e2b6 100644 --- a/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs +++ b/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs @@ -273,10 +273,7 @@ namespace NzbDrone.Core.Download.Pending { foreach (var artist in knownRemoteAlbums.Values.Select(v => v.Artist)) { - if (!artistMap.ContainsKey(artist.Id)) - { - artistMap[artist.Id] = artist; - } + artistMap.TryAdd(artist.Id, artist); } } @@ -292,7 +289,7 @@ namespace NzbDrone.Core.Download.Pending // Just in case the artist was removed, but wasn't cleaned up yet (housekeeper will clean it up) if (artist == null) { - return null; + continue; } release.RemoteAlbum = new RemoteAlbum From cfb517a90fc56e6c060558675867c09ea32dc6b8 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 3 Nov 2024 15:24:06 -0800 Subject: [PATCH 098/275] Fixed: Filtering queue by multiple qualities (cherry picked from commit b8af3af9f16db96337832c2989f4e7ff3dc2ed30) Closes #5223 --- src/Lidarr.Api.V1/Queue/QueueController.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Lidarr.Api.V1/Queue/QueueController.cs b/src/Lidarr.Api.V1/Queue/QueueController.cs index 23808a566..730b50436 100644 --- a/src/Lidarr.Api.V1/Queue/QueueController.cs +++ b/src/Lidarr.Api.V1/Queue/QueueController.cs @@ -130,15 +130,15 @@ namespace Lidarr.Api.V1.Queue [HttpGet] [Produces("application/json")] - public PagingResource GetQueue([FromQuery] PagingRequestResource paging, bool includeUnknownArtistItems = false, bool includeArtist = false, bool includeAlbum = false, [FromQuery] int[] artistIds = null, DownloadProtocol? protocol = null, int? quality = null) + public PagingResource GetQueue([FromQuery] PagingRequestResource paging, bool includeUnknownArtistItems = false, bool includeArtist = false, bool includeAlbum = false, [FromQuery] int[] artistIds = null, DownloadProtocol? protocol = null, [FromQuery] int[] quality = null) { var pagingResource = new PagingResource(paging); var pagingSpec = pagingResource.MapToPagingSpec("timeleft", SortDirection.Ascending); - return pagingSpec.ApplyToPage((spec) => GetQueue(spec, artistIds?.ToHashSet(), protocol, quality, includeUnknownArtistItems), (q) => MapToResource(q, includeArtist, includeAlbum)); + return pagingSpec.ApplyToPage((spec) => GetQueue(spec, artistIds?.ToHashSet(), protocol, quality?.ToHashSet(), includeUnknownArtistItems), (q) => MapToResource(q, includeArtist, includeAlbum)); } - private PagingSpec GetQueue(PagingSpec pagingSpec, HashSet artistIds, DownloadProtocol? protocol, int? quality, bool includeUnknownArtistItems) + private PagingSpec GetQueue(PagingSpec pagingSpec, HashSet artistIds, DownloadProtocol? protocol, HashSet quality, bool includeUnknownArtistItems) { var ascending = pagingSpec.SortDirection == SortDirection.Ascending; var orderByFunc = GetOrderByFunc(pagingSpec); @@ -148,6 +148,8 @@ namespace Lidarr.Api.V1.Queue var pending = _pendingReleaseService.GetPendingQueue(); var hasArtistIdFilter = artistIds.Any(); + var hasQualityFilter = quality.Any(); + var fullQueue = filteredQueue.Concat(pending).Where(q => { var include = true; @@ -162,9 +164,9 @@ namespace Lidarr.Api.V1.Queue include &= q.Protocol == protocol.Value; } - if (include && quality.HasValue) + if (include && hasQualityFilter) { - include &= q.Quality.Quality.Id == quality.Value; + include &= quality.Contains(q.Quality.Quality.Id); } return include; From d2f5feab5dfc8c37823933ff2a956640bc9200da Mon Sep 17 00:00:00 2001 From: Servarr Date: Mon, 4 Nov 2024 17:26:59 +0000 Subject: [PATCH 099/275] Automated API Docs update --- src/Lidarr.Api.V1/openapi.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index d024a9c9b..51bf02eaa 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -6329,8 +6329,11 @@ "name": "quality", "in": "query", "schema": { - "type": "integer", - "format": "int32" + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } } } ], From c43a141b659bb27a2d7385c106a68984042384fc Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 7 Nov 2024 14:22:59 +0000 Subject: [PATCH 100/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Anonymous Co-authored-by: Lizandra Candido da Silva Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ar/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/he/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/id/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/is/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/it/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ja/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/lv/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nb_NO/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ro/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sv/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/th/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/uk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_TW/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ar.json | 7 +- src/NzbDrone.Core/Localization/Core/bg.json | 7 +- src/NzbDrone.Core/Localization/Core/ca.json | 4 +- src/NzbDrone.Core/Localization/Core/cs.json | 4 +- src/NzbDrone.Core/Localization/Core/da.json | 4 +- src/NzbDrone.Core/Localization/Core/es.json | 3 +- src/NzbDrone.Core/Localization/Core/he.json | 6 +- src/NzbDrone.Core/Localization/Core/hi.json | 7 +- src/NzbDrone.Core/Localization/Core/hr.json | 3 +- src/NzbDrone.Core/Localization/Core/id.json | 4 +- src/NzbDrone.Core/Localization/Core/is.json | 7 +- src/NzbDrone.Core/Localization/Core/it.json | 4 +- src/NzbDrone.Core/Localization/Core/ja.json | 6 +- src/NzbDrone.Core/Localization/Core/ko.json | 12 +- src/NzbDrone.Core/Localization/Core/lv.json | 4 +- .../Localization/Core/nb_NO.json | 4 +- src/NzbDrone.Core/Localization/Core/nl.json | 6 +- src/NzbDrone.Core/Localization/Core/pl.json | 5 +- .../Localization/Core/pt_BR.json | 242 +++++++++--------- src/NzbDrone.Core/Localization/Core/ro.json | 6 +- src/NzbDrone.Core/Localization/Core/ru.json | 3 +- src/NzbDrone.Core/Localization/Core/sk.json | 3 +- src/NzbDrone.Core/Localization/Core/sv.json | 6 +- src/NzbDrone.Core/Localization/Core/th.json | 6 +- src/NzbDrone.Core/Localization/Core/tr.json | 8 +- src/NzbDrone.Core/Localization/Core/uk.json | 4 +- .../Localization/Core/zh_TW.json | 5 +- 27 files changed, 220 insertions(+), 160 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index aac733306..87f988eb7 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -743,11 +743,14 @@ "DeleteSelectedCustomFormats": "حذف التنسيق المخصص", "IncludeCustomFormatWhenRenaming": "قم بتضمين تنسيق مخصص عند إعادة التسمية", "AptUpdater": "استخدم apt لتثبيت التحديث", - "CancelPendingTask": "هل أنت متأكد أنك تريد إلغاء هذه المهمة المعلقة؟", "ExternalUpdater": "تم تكوين {appName} لاستخدام آلية تحديث خارجية", "DockerUpdater": "تحديث حاوية عامل الإرساء لتلقي التحديث", "InstallLatest": "تثبيت الأحدث", "OnLatestVersion": "تم بالفعل تثبيت أحدث إصدار من {appName}", "Shutdown": "اغلق", - "UpdateAppDirectlyLoadError": "تعذر تحديث {appName} مباشرة ،" + "UpdateAppDirectlyLoadError": "تعذر تحديث {appName} مباشرة ،", + "UnmappedFiles": "المجلدات غير المعينة", + "Clone": "قريب", + "EditReleaseProfile": "تحرير ملف تعريف التأخير", + "AddReleaseProfile": "تحرير ملف تعريف التأخير" } diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index 3f4635424..fdff7363c 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -743,11 +743,14 @@ "DeleteSelectedCustomFormats": "Изтриване на потребителски формат", "IncludeCustomFormatWhenRenaming": "Включете персонализиран формат при преименуване", "AptUpdater": "Използвайте apt, за да инсталирате актуализацията", - "CancelPendingTask": "Наистина ли искате да отмените тази чакаща задача?", "DockerUpdater": "актуализирайте контейнера на докера, за да получите актуализацията", "ExternalUpdater": "{appName} е конфигуриран да използва външен механизъм за актуализация", "InstallLatest": "Инсталирайте най-новите", "OnLatestVersion": "Вече е инсталирана най-новата версия на {appName}", "Shutdown": "Изключвам", - "UpdateAppDirectlyLoadError": "Не може да се актуализира {appName} директно," + "UpdateAppDirectlyLoadError": "Не може да се актуализира {appName} директно,", + "EditReleaseProfile": "Редактиране на профил за забавяне", + "Clone": "Близо", + "AddReleaseProfile": "Редактиране на профил за забавяне", + "UnmappedFiles": "Немапирани папки" } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 18900052f..52e52df51 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -953,11 +953,11 @@ "DeleteSelectedCustomFormatsMessageText": "Esteu segur que voleu suprimir {count} llista(es) d'importació seleccionada(es)?", "IncludeCustomFormatWhenRenaming": "Inclou el format personalitzat en canviar el nom", "AptUpdater": "Utilitzeu apt per a instal·lar l'actualització", - "CancelPendingTask": "Esteu segur que voleu cancel·lar aquesta tasca pendent?", "DockerUpdater": "actualitzeu el contenidor Docker per a rebre l'actualització", "ExternalUpdater": "{appName} està configurat per a utilitzar un mecanisme d'actualització extern", "InstallLatest": "Instal·la l'últim", "OnLatestVersion": "La darrera versió de {appName} ja està instal·lada", "Shutdown": "Apaga", - "UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament," + "UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,", + "UnmappedFiles": "Carpetes sense mapejar" } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 52823afa6..4d1921648 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -876,11 +876,11 @@ "DeleteSelectedCustomFormatsMessageText": "Opravdu chcete smazat {count} vybraných seznamů k importu?", "IncludeCustomFormatWhenRenaming": "Při přejmenování zahrnout vlastní formát", "AptUpdater": "K instalaci aktualizace použijte apt", - "CancelPendingTask": "Opravdu chcete zrušit tento nevyřízený úkol?", "DockerUpdater": "aktualizujte kontejner dockeru, abyste aktualizaci obdrželi", "InstallLatest": "Nainstalujte nejnovější", "Shutdown": "Vypnout", "UpdateAppDirectlyLoadError": "{appName} nelze aktualizovat přímo,", "ExternalUpdater": "{appName} je nakonfigurován pro použití externího aktualizačního mechanismu", - "OnLatestVersion": "Nejnovější verze aplikace {appName} je již nainstalována" + "OnLatestVersion": "Nejnovější verze aplikace {appName} je již nainstalována", + "UnmappedFiles": "Nezmapované složky" } diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index 001a06d3d..db7c9bd09 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -781,5 +781,7 @@ "OnLatestVersion": "Den seneste version af {appName} er allerede installeret", "Shutdown": "Lukke ned", "UpdateAppDirectlyLoadError": "Kan ikke opdatere {appName} direkte,", - "CancelPendingTask": "Er du sikker på, at du vil annullere denne afventende opgave?" + "EditReleaseProfile": "Rediger forsinkelsesprofil", + "UnmappedFiles": "Ikke-kortlagte mapper", + "Clone": "Luk" } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 32976c4e1..257a5d4af 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -1329,5 +1329,6 @@ "PreviouslyInstalled": "Previamente instalado", "Shutdown": "Apagar", "UpdateAppDirectlyLoadError": "No se pudo actualizar {appName} directamente,", - "InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información." + "InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información.", + "ManageFormats": "Gestionar formatos" } diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index 8f61c7aa5..2166bbfed 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -785,5 +785,9 @@ "DockerUpdater": "עדכן את מיכל העגינה לקבל את העדכון", "InstallLatest": "התקן את האחרונה", "OnLatestVersion": "הגרסה האחרונה של {appName} כבר מותקנת", - "Shutdown": "לכבות" + "Shutdown": "לכבות", + "AddReleaseProfile": "ערוך פרופיל עיכוב", + "UnmappedFiles": "תיקיות לא ממופות", + "Clone": "סגור", + "EditReleaseProfile": "ערוך פרופיל עיכוב" } diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index 311fefdf2..364272900 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -738,10 +738,13 @@ "DeleteSelectedCustomFormats": "कस्टम प्रारूप हटाएं", "IncludeCustomFormatWhenRenaming": "नाम बदलने पर कस्टम प्रारूप शामिल करें", "AptUpdater": "अद्यतन स्थापित करने के लिए उपयुक्त का उपयोग करें", - "CancelPendingTask": "क्या आप वाकई इस लंबित कार्य को रद्द करना चाहते हैं?", "DockerUpdater": "अपडेट प्राप्त करने के लिए docker कंटेनर को अपडेट करें", "InstallLatest": "नवीनतम स्थापित करें", "OnLatestVersion": "रेडर का नवीनतम संस्करण पहले से ही स्थापित है", "Shutdown": "बंद करना", - "UpdateAppDirectlyLoadError": "सीधे {appName} अद्यतन करने में असमर्थ," + "UpdateAppDirectlyLoadError": "सीधे {appName} अद्यतन करने में असमर्थ,", + "AddReleaseProfile": "देरी प्रोफ़ाइल संपादित करें", + "UnmappedFiles": "बिना मोड़े हुए फोल्डर", + "Clone": "बंद करे", + "EditReleaseProfile": "देरी प्रोफ़ाइल संपादित करें" } diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index 3e77b54a2..4c1e5e478 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -302,5 +302,6 @@ "UnableToAddANewRootFolderPleaseTryAgain": "Neuspješno dodavanje novog indexera, molimo pokušaj ponovno.", "UnableToLoadRootFolders": "Neuspješno dodavanje korijenske mape", "AptUpdater": "Koristi apt kako bi instalirao ažuriranje", - "CancelPendingTask": "Jeste li sigurni da želite otkazati ovaj zadatak na čekanju?" + "Reason": "Sezona", + "Clone": "Zatvori" } diff --git a/src/NzbDrone.Core/Localization/Core/id.json b/src/NzbDrone.Core/Localization/Core/id.json index ad460813f..2deb041dc 100644 --- a/src/NzbDrone.Core/Localization/Core/id.json +++ b/src/NzbDrone.Core/Localization/Core/id.json @@ -129,5 +129,7 @@ "AutomaticSearch": "Penelusuran Otomatis", "AddToDownloadQueue": "Tambahkan ke antrean pengunduhan", "AddedToDownloadQueue": "Ditambahkan ke antrean pengunduhan", - "AptUpdater": "Gunakan apt untuk memasang pembaruan" + "AptUpdater": "Gunakan apt untuk memasang pembaruan", + "Clone": "Tutup", + "EnableSSL": "Aktifkan RSS" } diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index 07857a4b8..3191c60c1 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -738,11 +738,14 @@ "DeleteSelectedCustomFormats": "Eyða sérsniðnu sniði", "IncludeCustomFormatWhenRenaming": "Láttu sérsniðið snið fylgja með þegar þú endurnefnir", "AptUpdater": "Notaðu apt til að setja uppfærsluna upp", - "CancelPendingTask": "Ertu viss um að þú viljir hætta við þetta verkefni í bið?", "DockerUpdater": "uppfærðu bryggjugáminn til að fá uppfærsluna", "ExternalUpdater": "{appName} er stilltur til að nota ytri uppfærslu", "InstallLatest": "Settu upp nýjustu", "OnLatestVersion": "Nýjasta útgáfan af {appName} er þegar uppsett", "Shutdown": "Lokun", - "UpdateAppDirectlyLoadError": "Ekki er hægt að uppfæra {appName} beint," + "UpdateAppDirectlyLoadError": "Ekki er hægt að uppfæra {appName} beint,", + "EditReleaseProfile": "Breyta seinkunarprófíl", + "UnmappedFiles": "Ókortlagðar möppur", + "Clone": "Lokaðu", + "AddReleaseProfile": "Breyta seinkunarprófíl" } diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index 5029cca69..84ee62d15 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -1032,12 +1032,12 @@ "MonitorFirstAlbum": "Primo Album", "IndexerSettingsApiUrl": "API URL", "AptUpdater": "Usa apt per installare l'aggiornamento", - "CancelPendingTask": "Sei sicuro di voler cancellare questa operazione in sospeso?", "DockerUpdater": "Aggiorna il container di docker per ricevere l'aggiornamento", "ExternalUpdater": "{appName} è configurato per utilizzare un meccanismo di aggiornamento esterno", "InstallLatest": "Installa il più recente", "OnLatestVersion": "L'ultima versione di {appName} è già installata", "PreviouslyInstalled": "Precedentemente Installato", "Shutdown": "Spegnimento", - "UpdateAppDirectlyLoadError": "Impossibile aggiornare {appName} direttamente," + "UpdateAppDirectlyLoadError": "Impossibile aggiornare {appName} direttamente,", + "UnmappedFiles": "Cartelle Non Mappate" } diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index c62a8c41c..9706b895e 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -738,11 +738,13 @@ "DeleteSelectedCustomFormats": "カスタムフォーマットを削除する", "IncludeCustomFormatWhenRenaming": "名前を変更するときにカスタム形式を含める", "AptUpdater": "aptを使用してアップデートをインストールします", - "CancelPendingTask": "この保留中のタスクをキャンセルしてもよろしいですか?", "DockerUpdater": "Dockerコンテナを更新して、更新を受信します", "ExternalUpdater": "{appName}は、外部更新メカニズムを使用するように構成されています", "InstallLatest": "最新のインストール", "OnLatestVersion": "{appName}の最新バージョンはすでにインストールされています", "Shutdown": "シャットダウン", - "UpdateAppDirectlyLoadError": "{appName}を直接更新できません。" + "UpdateAppDirectlyLoadError": "{appName}を直接更新できません。", + "EditReleaseProfile": "遅延プロファイルの編集", + "UnmappedFiles": "マップされていないフォルダ", + "Clone": "閉じる" } diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 6d9216234..526bbaff9 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -722,5 +722,15 @@ "AppUpdatedVersion": "{appName}이 버전 `{version}`으로 업데이트되었습니다. 최신 변경 사항을 받으려면 {appName}을 다시 로드해야 합니다", "AppUpdated": "{appName} 업데이트", "AddConnectionImplementation": "연결 추가 - {implementationName}", - "AddConnection": "연결 추가" + "AddConnection": "연결 추가", + "EditConditionImplementation": "연결 추가 - {implementationName}", + "Clone": "닫기", + "EditDownloadClientImplementation": "다운로드 클라이언트 추가 - {implementationName}", + "IndexerSettingsRejectBlocklistedTorrentHashes": "동기화 중 차단 목록에 있는 토렌트 해시 거부", + "EditReleaseProfile": "지연 프로필 편집", + "ApiKeyValidationHealthCheckMessage": "API 키를 {length}자 이상으로 업데이트하세요. 설정 또는 구성 파일을 통해 이 작업을 수행할 수 있습니다.", + "AddConditionImplementation": "연결 추가 - {implementationName}", + "EditIndexerImplementation": "인덱서 추가 - {implementationName}", + "AddReleaseProfile": "지연 프로필 편집", + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "해시에 의해 토렌트가 차단된 경우 일부 인덱서의 RSS/검색 중에 토렌트가 제대로 거부되지 않을 수 있습니다. 이 기능을 활성화하면 토렌트를 가져온 후 클라이언트로 전송하기 전에 토렌트를 거부할 수 있습니다." } diff --git a/src/NzbDrone.Core/Localization/Core/lv.json b/src/NzbDrone.Core/Localization/Core/lv.json index add63ab68..41fd7792c 100644 --- a/src/NzbDrone.Core/Localization/Core/lv.json +++ b/src/NzbDrone.Core/Localization/Core/lv.json @@ -15,5 +15,7 @@ "ExportCustomFormat": "Pievienot Pielāgotu Formātu", "AddIndexerImplementation": "Pievienot Nosacījumu - {implementationName}", "EditConnectionImplementation": "Pievienot Savienojumu - {implementationName}", - "EditDelayProfile": "Pievienot Aizkaves Profilu" + "EditDelayProfile": "Pievienot Aizkaves Profilu", + "AddReleaseProfile": "Pievienot Aizkaves Profilu", + "EditReleaseProfile": "Pievienot Aizkaves Profilu" } diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index e37284df5..842266eb2 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -273,5 +273,7 @@ "BuiltIn": "Bygget inn", "DeleteSelectedCustomFormats": "Klon egendefinert format", "DeleteSelectedCustomFormatsMessageText": "Er du sikker på at du vil slette formattaggen {0}?", - "AptUpdater": "Bruk apt til å installere oppdateringen" + "AptUpdater": "Bruk apt til å installere oppdateringen", + "Clone": "Lukk", + "Reason": "Sesong" } diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index 6f169e2d8..3c806eb95 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -18,7 +18,7 @@ "Calendar": "Kalender", "CalendarWeekColumnHeaderHelpText": "Wordt getoond boven elke kolom wanneer de actieve weergave Week is", "Cancel": "Annuleer", - "CancelPendingTask": "Bent u zeker dat u deze taak in afwachting wilt annuleren?", + "CancelPendingTask": "Ben je zeker dat je deze onafgewerkte taak wil annuleren?", "CertificateValidation": "Certificaat Validatie", "CertificateValidationHelpText": "Wijzig hoe strict HTTPS certificaat validatie is. Wijzig dit niet behalve als je de risico's begrijpt.", "ChangeFileDate": "Wijzig Bestandsdatum", @@ -891,11 +891,11 @@ "BypassIfAboveCustomFormatScoreHelpText": "Schakel omleiding in als de release een score heeft die hoger is dan de geconfigureerde minimale aangepaste formaatscore", "MinimumCustomFormatScoreHelpText": "Minimumscore aangepast formaat vereist om vertraging voor het voorkeursprotocol te omzeilen", "AptUpdater": "Gebruik apt om de update te installeren", - "CancelPendingTask": "Ben je zeker dat je deze onafgewerkte taak wil annuleren?", "DockerUpdater": "Update de docker container om de update te ontvangen", "InstallLatest": "Installeer Nieuwste Versie", "OnLatestVersion": "De nieuwste versie van {appName} is al geïnstalleerd", "Shutdown": "Afsluiten", "ExternalUpdater": "{appName} is geconfigureerd om een extern update mechanisme te gebruiken", - "UpdateAppDirectlyLoadError": "Kan {appName} niet rechtstreeks updaten," + "UpdateAppDirectlyLoadError": "Kan {appName} niet rechtstreeks updaten,", + "UnmappedFiles": "Niet-toegewezen Mappen" } diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index df08dad98..3b1601ac2 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -840,11 +840,12 @@ "AddMetadataProfile": "profil metadanych", "EditMetadataProfile": "profil metadanych", "AptUpdater": "Użyj apt, aby zainstalować aktualizację", - "CancelPendingTask": "Czy na pewno chcesz anulować to oczekujące zadanie?", "DockerUpdater": "zaktualizuj kontener Dockera, aby otrzymać aktualizację", "ExternalUpdater": "{appName} jest skonfigurowany do korzystania z zewnętrznego mechanizmu aktualizacji", "InstallLatest": "Zainstaluj najnowsze", "OnLatestVersion": "Najnowsza wersja {appName} jest już zainstalowana", "Shutdown": "Zamknąć", - "UpdateAppDirectlyLoadError": "Nie można bezpośrednio zaktualizować {appName}," + "UpdateAppDirectlyLoadError": "Nie można bezpośrednio zaktualizować {appName},", + "UnmappedFiles": "Niezmapowane foldery", + "Clone": "Zamknij" } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 08c5a01cf..bf83f6482 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -2,7 +2,7 @@ "Language": "Idioma", "UiLanguage": "Idioma da interface", "20MinutesTwenty": "20 minutos: {0}", - "Blocklist": "Lista de Bloqueio", + "Blocklist": "Lista de bloqueio", "45MinutesFourtyFive": "45 minutos: {0}", "YesCancel": "Sim, Cancelar", "Actions": "Ações", @@ -10,7 +10,7 @@ "60MinutesSixty": "60 minutos: {0}", "Absolute": "Absoluto", "Time": "Tempo", - "AddingTag": "Adicionar tag", + "AddingTag": "Adicionar etiqueta", "Component": "Componente", "Level": "Nível", "Artist": "Artista", @@ -21,7 +21,7 @@ "Artists": "Artistas", "Authentication": "Autenticação", "AuthenticationMethodHelpText": "Exigir nome de usuário e senha para acessar o {appName}", - "AddListExclusion": "Adicionar Exclusão de Lista", + "AddListExclusion": "Adicionar exclusão à lista", "AlbumHasNotAired": "O álbum não foi lançado", "AlbumIsDownloading": "O álbum está baixando", "AppDataDirectory": "Diretório AppData", @@ -29,7 +29,7 @@ "AddNewItem": "Adicionar Novo Item", "AgeWhenGrabbed": "Tempo de vida (quando obtido)", "Album": "Álbum", - "ApplyTags": "Aplicar Tags", + "ApplyTags": "Aplicar etiquetas", "AlbumIsDownloadingInterp": "O álbum está baixando: {0}% {1}", "AlbumIsNotMonitored": "O álbum não está sendo monitorado", "AlbumStudio": "Album Studio", @@ -47,24 +47,24 @@ "AlternateTitleslength1Title": "Título", "AlternateTitleslength1Titles": "Títulos", "Analytics": "Análises", - "AnalyticsEnabledHelpText": "Envie informações anônimas de uso e erro para os servidores do {appName}. Isso inclui informações sobre seu navegador, quais páginas da interface Web do {appName} você usa, relatórios de erros, e a versão do sistema operacional e do tempo de execução. Usaremos essas informações para priorizar recursos e correções de bugs.", + "AnalyticsEnabledHelpText": "Envie informações anônimas de uso e erro para os servidores do {appName}. Isso inclui informações sobre seu navegador, quais páginas da interface Web do {appName} você usa, relatórios de erros, a versão do sistema operacional e do tempo de execução. Usaremos essas informações para priorizar recursos e correções de bugs.", "AnalyticsEnabledHelpTextWarning": "Requer reinício para ter efeito", "AnchorTooltip": "Este arquivo já está na sua biblioteca em um lançamento que está sendo importado no momento", "AnyReleaseOkHelpText": "O {appName} alternará automaticamente para o lançamento que melhor corresponde às faixas baixadas", "ApiKeyHelpTextWarning": "Requer reinício para ter efeito", "ArtistClickToChangeAlbum": "Clique para mudar o álbum", "APIKey": "Chave da API", - "AutoRedownloadFailedHelpText": "Procurar e tentar baixar automaticamente uma versão diferente", + "AutoRedownloadFailedHelpText": "Procurar e tentar baixar automaticamente um lançamento diferente", "BackupFolderHelpText": "Os caminhos relativos estarão no diretório AppData do {appName}", "BackupIntervalHelpText": "Intervalo para fazer backup do banco de dados e configurações do {appName}", "Automatic": "Automático", "AutomaticallySwitchRelease": "Trocar automaticamente de lançamento", "BackupNow": "Fazer backup agora", "RemotePathHelpText": "Caminho raiz para o diretório que o cliente de download acessa", - "CertificateValidationHelpText": "Altere a rigidez da validação da certificação HTTPS. Não mude a menos que você entenda os riscos.", - "BackupRetentionHelpText": "Backups automáticos anteriores ao período de retenção serão limpos automaticamente", + "CertificateValidationHelpText": "Alterar a rigidez da validação da certificação HTTPS. Não mude a menos que você entenda os riscos.", + "BackupRetentionHelpText": "Backups automáticos anteriores ao período de retenção serão excluídos automaticamente", "Backups": "Backups", - "BindAddress": "Fixar endereço", + "BindAddress": "Vincular endereço", "BindAddressHelpText": "Endereço IP válido, localhost ou '*' para todas as interfaces", "BindAddressHelpTextWarning": "Requer reiniciar para ter efeito", "BlocklistRelease": "Lançamento na lista de bloqueio", @@ -73,12 +73,12 @@ "Calendar": "Calendário", "CalendarWeekColumnHeaderHelpText": "Mostrar acima de cada coluna quando a semana está na exibição ativa", "Cancel": "Cancelar", - "CancelPendingTask": "Tem certeza que deseja cancelar esta tarefa pendente?", + "CancelPendingTask": "Tem certeza de que deseja cancelar esta tarefa pendente?", "CatalogNumber": "Número do Catálogo", "CertificateValidation": "Validação de certificado", "ChangeFileDate": "Alterar data do arquivo", - "ChangeHasNotBeenSavedYet": "Mudar o que não foi salvo ainda", - "ChmodFolder": "Fazer chmod de pasta", + "ChangeHasNotBeenSavedYet": "A alteração ainda não foi salva", + "ChmodFolder": "Fazer chmod na pasta", "UiLanguageHelpTextWarning": "É necessário recarregar o navegador", "UiSettings": "Configurações da interface", "UnableToAddANewDownloadClientPleaseTryAgain": "Não foi possível adicionar um novo cliente de download. Tente novamente.", @@ -133,8 +133,8 @@ "UseProxy": "Usar Proxy", "UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent fornecido pelo aplicativo que chamou a API", "Username": "Nome do usuário", - "UsingExternalUpdateMechanismBranchToUseToUpdateLidarr": "Ramificação para atualização do {appName}", - "UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Ramificação usada pelo mecanismo de atualização externo", + "UsingExternalUpdateMechanismBranchToUseToUpdateLidarr": "Ramificação para atualizar o {appName}", + "UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Ramificação usada pelo mecanismo externo de atualização", "Version": "Versão", "WatchLibraryForChangesHelpText": "Verificar novamente quando houver alteração em arquivos de uma pasta raiz", "WatchRootFoldersForFileChanges": "Monitorar alterações nas pastas raiz", @@ -143,10 +143,10 @@ "WriteMetadataToAudioFiles": "Gravar metadados em arquivos de áudio", "Year": "Ano", "ChmodFolderHelpText": "Octal, aplicado durante a importação/renomeação de pastas e arquivos de mídia (sem bits de execução)", - "ChmodFolderHelpTextWarning": "Isso só funciona se o usuário que executa {appName} for o proprietário do arquivo. É melhor garantir que o cliente de download defina as permissões corretamente.", + "ChmodFolderHelpTextWarning": "Isso só funciona se o usuário que executa o {appName} for o proprietário do arquivo. É melhor garantir que o cliente de download defina as permissões corretamente.", "ChownGroup": "Fazer chown em grupo", "ChownGroupHelpText": "Nome do grupo ou gid. Use gid para sistemas de arquivos remotos.", - "ChownGroupHelpTextWarning": "Isso só funciona se o usuário que executa {appName} for o proprietário do arquivo. É melhor garantir que o cliente de download use o mesmo grupo que {appName}.", + "ChownGroupHelpTextWarning": "Isso só funciona se o usuário que executa o {appName} for o proprietário do arquivo. É melhor garantir que o cliente de download use o mesmo grupo que o {appName}.", "Clear": "Limpar", "ClickToChangeQuality": "Clique para alterar a qualidade", "ClientPriority": "Prioridade do cliente", @@ -167,7 +167,7 @@ "CreateEmptyArtistFoldersHelpText": "Criar pastas de autor ausente durante a verificação do disco", "CreateGroup": "Criar grupo", "CutoffHelpText": "Assim que esta qualidade for alcançada, o {appName} não baixará mais filmes", - "CutoffUnmet": "Limite não alcançado", + "CutoffUnmet": "Corte não atingido", "DatabaseMigration": "Migração de banco de dados", "DefaultLidarrTags": "Etiquetas padrão do {appName}", "DefaultMetadataProfileIdHelpText": "Há um perfil de metadados padrão para autores nesta pasta", @@ -176,7 +176,7 @@ "DelayProfile": "Perfil de atraso", "DelayProfiles": "Perfis de atraso", "Delete": "Excluir", - "DeleteBackup": "Excluir Backup", + "DeleteBackup": "Excluir backup", "DeleteBackupMessageText": "Tem certeza de que deseja excluir o backup '{name}'?", "DeleteDelayProfile": "Excluir perfil de atraso", "DeleteDelayProfileMessageText": "Tem certeza de que deseja excluir este perfil de atraso?", @@ -196,14 +196,14 @@ "DeleteNotificationMessageText": "Tem certeza de que deseja excluir a notificação '{name}'?", "DeleteQualityProfile": "Excluir perfil de qualidade", "DeleteQualityProfileMessageText": "Tem certeza de que deseja excluir o perfil de qualidade '{name}'?", - "DeleteReleaseProfile": "Excluir Perfil de Lançamento", + "DeleteReleaseProfile": "Excluir perfil de lançamento", "DeleteReleaseProfileMessageText": "Tem certeza de que deseja excluir este perfil de lançamento?", "DeleteRootFolder": "Excluir pasta raiz", "DeleteRootFolderMessageText": "Tem certeza de que deseja excluir a pasta raiz '{name}'?", "DeleteSelectedTrackFiles": "Excluir arquivos do livro selecionado", "DeleteSelectedTrackFilesMessageText": "Tem certeza de que deseja excluir os arquivos do livro selecionado?", - "DeleteTag": "Excluir Etiqueta", - "DeleteTagMessageText": "Tem certeza de que deseja excluir a tag '{label}'?", + "DeleteTag": "Excluir etiqueta", + "DeleteTagMessageText": "Tem certeza de que deseja excluir a etiqueta '{label}'?", "DeleteTrackFileMessageText": "Tem certeza que deseja excluir {0}?", "DestinationPath": "Caminho de destino", "DetailedProgressBar": "Barra de progresso detalhada", @@ -231,7 +231,7 @@ "EnabledHelpText": "Marque para habilitar o perfil de lançamento", "EnableHelpText": "Habilitar criação de arquivo de metadados para este tipo de metadados", "EnableInteractiveSearch": "Ativar pesquisa interativa", - "EnableProfile": "Habilitar Perfil", + "EnableProfile": "Habilitar perfil", "EnableRSS": "Habilitar RSS", "EnableSSL": "Habilitar SSL", "EnableSslHelpText": " Requer a reinicialização com a execução como administrador para fazer efeito", @@ -255,7 +255,7 @@ "Folder": "Pasta", "Folders": "Pastas", "ForeignIdHelpText": "A ID do Musicbrainz para o autor/livro a excluir", - "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Para mais informações sobre clientes de download individuais, clique nos botões para mais informações.", + "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Para saber mais sobre os clientes de download individuais, clique nos botões Mais informações.", "ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Para saber mais sobre cada indexador, clique nos botões de informações.", "ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Para saber mais sobre cada lista, clique nos botões de informação.", "FutureDays": "Próximos dias", @@ -265,8 +265,8 @@ "GoToArtistListing": "Ir para listagem do autor", "GoToInterp": "Ir para {0}", "Grab": "Obter", - "GrabRelease": "Baixar Lançamento", - "GrabSelected": "Baixar Selecionado", + "GrabRelease": "Baixar lançamento", + "GrabSelected": "Baixar selecionado", "Group": "Grupo", "HasPendingChangesNoChanges": "Sem alterações", "HasPendingChangesSaveChanges": "Salvar alterações", @@ -280,7 +280,7 @@ "IconForCutoffUnmet": "Ícone para limite não atendido", "IfYouDontAddAnImportListExclusionAndTheArtistHasAMetadataProfileOtherThanNoneThenThisAlbumMayBeReaddedDuringTheNextArtistRefresh": "Se você não adicionar uma exclusão à lista de importação e o autor tiver um perfil de metadados diferente de \"Nenhum\", este livro poderá ser adicionado novamente durante a próxima atualização do autor.", "IgnoredAddresses": "Endereços ignorados", - "IgnoredHelpText": "O lançamento será rejeitado se contiver um ou mais destes termos (sem distinção entre maiúsculas e minúsculas)", + "IgnoredHelpText": "O lançamento será rejeitado se contiver um ou mais destes termos (não diferencia maiúsculas e minúsculas)", "IgnoredPlaceHolder": "Adicionar nova restrição", "IllRestartLater": "Reiniciarei mais tarde", "ImportedTo": "Importado para", @@ -290,7 +290,7 @@ "ImportFailures": "Falhas na importação", "Importing": "Importando", "ImportListExclusions": "Importar exclusões de lista", - "ImportLists": "Listas de importação", + "ImportLists": "Importar listas", "IncludeUnknownArtistItemsHelpText": "Mostrar itens sem um autor na fila. Isso pode incluir autores e filmes removidos, ou qualquer outra coisa na categoria do {appName}", "IncludeUnmonitored": "Incluir não monitorados", "Indexer": "Indexador", @@ -311,12 +311,12 @@ "IsShowingMonitoredUnmonitorSelected": "Deixar de monitorar selecionados", "IsTagUsedCannotBeDeletedWhileInUse": "Não pode ser excluído durante o uso", "Label": "Rótulo", - "LaunchBrowserHelpText": " Abrir o navegador Web e navegar até a página inicial do {appName} ao iniciar o aplicativo.", + "LaunchBrowserHelpText": " Abrir um navegador e navegar até a página inicial do {appName} ao iniciar o aplicativo.", "LidarrSupportsAnyDownloadClientThatUsesTheNewznabStandardAsWellAsOtherDownloadClientsListedBelow": "{appName} suporta muitos clientes de download torrent e usenet.", "LidarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "O {appName} oferece suporte a qualquer indexador que usa o padrão Newznab, além de outros indexadores, listados abaixo.", - "LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "O registro em log deve ser habilitado apenas temporariamente", + "LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "O registro em log para rastreamento deve ser habilitado apenas temporariamente", "LongDateFormat": "Formato longo de data", - "MaintenanceRelease": "Versão de manutenção: correções de bugs e outros aprimoramentos. Consulte o Histórico de Commit do Github para obter mais detalhes", + "MaintenanceRelease": "Versão de manutenção: correções de bugs e outras melhorias. Consulte o Histórico de commit do Github para saber mais", "ManualDownload": "Download manual", "ManualImport": "Importação manual", "MarkAsFailed": "Marcar como falha", @@ -336,8 +336,8 @@ "MetadataProfiles": "Perfis de metadados", "MetadataSettings": "Configurações de metadados", "MIA": "Ausentes", - "MinimumAge": "Idade miníma", - "MinimumAgeHelpText": "Somente Usenet: idade mínima, em minutos, dos NZBs antes de serem baixados. Use isso para dar aos novos lançamentos tempo para se propagar para seu provedor de Usenet.", + "MinimumAge": "Idade mínima", + "MinimumAgeHelpText": "Somente Usenet: idade mínima, em minutos, dos NZBs antes de serem obtidos. Use esta opção para dar aos novos lançamentos tempo para propagarem para seu provedor de Usenet.", "MinimumFreeSpace": "Mínimo de espaço livre", "MustNotContain": "Não deve conter", "NamingSettings": "Configurações de nomenclatura", @@ -423,7 +423,7 @@ "RetentionHelpText": "Somente Usenet: defina como zero para definir a retenção ilimitada", "RetryingDownloadOn": "Tentando baixar novamente em {date} às {time}", "RootFolder": "Pasta raiz", - "RootFolderPathHelpText": "Os itens da pasta raiz serão adicionados a", + "RootFolderPathHelpText": "Os itens da lista da pasta raiz serão adicionados a", "RootFolders": "Pastas Raiz", "RSSSync": "Sincronização RSS", "RSSSyncInterval": "Intervalo da sincronização RSS", @@ -510,7 +510,7 @@ "ShortDateFormat": "Formato de Data Curta", "ShowBanners": "Mostrar banners", "ShowBannersHelpText": "Mostrar banners em vez de nomes", - "ShowCutoffUnmetIconHelpText": "Mostrar ícone para arquivos quando o limite não foi atingindo", + "ShowCutoffUnmetIconHelpText": "Mostrar ícone para arquivos quando o limite não foi atingido", "ShowDateAdded": "Mostrar data de adição", "ShowMonitored": "Mostrar monitorado(s)", "ShowMonitoredHelpText": "Mostrar status de monitoramento sob o pôster", @@ -532,10 +532,10 @@ "Local": "Local", "LocalPath": "Caminho local", "LocalPathHelpText": "Caminho que o {appName} deve usar para acessar o caminho remoto localmente", - "LogFiles": "Arquivos de registro", + "LogFiles": "Arquivos de log", "Logging": "Registro em log", - "LogLevel": "Nível de registro", - "Logs": "Registros", + "LogLevel": "Nível de registro em log", + "Logs": "Logs", "MinimumFreeSpaceWhenImportingHelpText": "Impedir a importação se deixar menos do que esta quantidade de espaço em disco disponível", "MinimumLimits": "Limites mínimos", "Missing": "Ausente", @@ -552,7 +552,7 @@ "Profiles": "Perfis", "Proper": "Proper", "RemoveSelected": "Remover Selecionado", - "RemoveTagExistingTag": "Tag existente", + "RemoveTagExistingTag": "Etiqueta existente", "RemoveTagRemovingTag": "Removendo tag", "RenameTracksHelpText": "O {appName} usará o nome de arquivo existente se a renomeação estiver deshabilitada", "ReplaceIllegalCharacters": "Substituir Caracteres Ilegais", @@ -653,10 +653,10 @@ "Add": "Adicionar", "AddDelayProfile": "Adicionar perfil de atraso", "Added": "Adicionado", - "AddImportListExclusion": "Adicionar exclusão de lista de importação", + "AddImportListExclusion": "Adicionar exclusão à lista de importação", "AddIndexer": "Adicionar indexador", "AddMetadataProfile": "Adicionar perfil de metadados", - "AddNew": "Adicionar Novo", + "AddNew": "Adicionar novo", "AddQualityProfile": "Adicionar perfil de qualidade", "AddRemotePathMapping": "Adicionar mapeamento de caminho remoto", "AddRootFolder": "Adicionar pasta raiz", @@ -694,7 +694,7 @@ "Events": "Eventos", "EventType": "Tipo de evento", "Filters": "Filtros", - "FreeSpace": "Espaço Livre", + "FreeSpace": "Espaço livre", "General": "Geral", "Genres": "Gêneros", "Grabbed": "Obtido", @@ -702,15 +702,15 @@ "HideAdvanced": "Ocultar opções avançadas", "Ignored": "Ignorado", "IndexerDownloadClientHelpText": "Especifique qual cliente de download é usado para baixar deste indexador", - "IndexerTagHelpText": "Usar este indexador apenas para artista com pelo menos uma etiqueta correspondente. Deixe em branco para usar com todos os artistas.", + "IndexerTagHelpText": "Use este indexador apenas para artistas com pelo menos uma etiqueta correspondente. Deixe em branco para usar com todos os artistas.", "InstanceName": "Nome da instância", "InstanceNameHelpText": "Nome da instância na aba e para o nome do aplicativo Syslog", "InteractiveImport": "Importação interativa", "LastAlbum": "Último Álbum", - "LastDuration": "Última Duração", - "LastExecution": "Última Execução", + "LastDuration": "Última duração", + "LastExecution": "Última execução", "LastUsed": "Usado por último", - "LastWriteTime": "Hora da Última Gravação", + "LastWriteTime": "Hora da última gravação", "Library": "Biblioteca", "Location": "Localização", "Manual": "Manual", @@ -773,7 +773,7 @@ "Info": "Informações", "AddConnection": "Adicionar conexão", "EditMetadataProfile": "Editar perfil de metadados", - "AddReleaseProfile": "Adicionar um Perfil de Lançamento", + "AddReleaseProfile": "Adicionar perfil de lançamento", "AlbumRelease": "Lançamento do Álbum", "AlbumReleaseDate": "Data do Lançamento do Álbum", "AlbumStatus": "Estado do Álbum", @@ -789,9 +789,9 @@ "Discography": "Discografia", "DownloadImported": "Download Importado", "EditMetadata": "Editar metadados", - "EditReleaseProfile": "Editar Perfil de Lançamento", + "EditReleaseProfile": "Editar perfil de lançamento", "ForNewImportsOnly": "Para novas importações somente", - "ImportFailed": "Importação Falhou", + "ImportFailed": "Falha na importação", "MissingTracks": "Faixas Ausentes", "NewAlbums": "Novos Álbuns", "NextAlbum": "Próximo Álbum", @@ -827,14 +827,14 @@ "Inactive": "Inativo", "ChooseImportMethod": "Escolha o método de importação", "ClickToChangeReleaseGroup": "Clique para alterar o grupo de lançamento", - "EnableRssHelpText": "Será usado quando o {appName} procurar periodicamente lançamentos via RSS Sync", + "EnableRssHelpText": "Será usado quando o {appName} procurar periodicamente por lançamentos via RSS Sync", "BypassIfAboveCustomFormatScore": "Ignorar se estiver acima da pontuação do formato personalizado", - "BypassIfAboveCustomFormatScoreHelpText": "Ativar ignorar quando a versão tiver uma pontuação maior que a pontuação mínima configurada do formato personalizado", + "BypassIfAboveCustomFormatScoreHelpText": "Ignorar quando o lançamento tiver uma pontuação mais alta que a pontuação mínima configurada do formato personalizado", "BypassIfHighestQuality": "Ignorar se a qualidade é mais alta", - "BypassIfHighestQualityHelpText": "Ignorar atraso quando o lançamento tiver a qualidade mais alta habilitada no perfil de qualidade com o protocolo preferido", + "BypassIfHighestQualityHelpText": "Ignorar o atraso quando o lançamento tiver a qualidade mais alta habilitada no perfil de qualidade com o protocolo preferido", "CustomFormatScore": "Pontuação do formato personalizado", - "MinimumCustomFormatScore": "Pontuação mínima de formato personalizado", - "MinimumCustomFormatScoreHelpText": "Pontuação mínima de formato personalizado necessária para ignorar o atraso do protocolo preferido", + "MinimumCustomFormatScore": "Pontuação mínima do formato personalizado", + "MinimumCustomFormatScoreHelpText": "Pontuação mínima do formato personalizado necessária para ignorar o atraso do protocolo preferido", "UnableToLoadInteractiveSearch": "Não foi possível carregar os resultados desta pesquisa de álbum. Tente mais tarde", "UnableToLoadCustomFormats": "Não foi possível carregar os formatos personalizados", "CopyToClipboard": "Copiar para a área de transferência", @@ -877,7 +877,7 @@ "RemotePathMappingCheckLocalFolderMissing": "O cliente de download remoto {0} coloca os downloads em {1}, mas este diretório parece não existir. Mapeamento de caminho remoto provavelmente ausente ou incorreto.", "UpdateCheckUINotWritableMessage": "Não é possível instalar a atualização porque a pasta de IU '{0}' não pode ser gravada pelo usuário '{1}'.", "ApiKeyValidationHealthCheckMessage": "Atualize sua chave de API para ter pelo menos {0} caracteres. Você pode fazer isso através das configurações ou do arquivo de configuração", - "AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData na atualização", + "AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData", "ColonReplacement": "Substituto para dois-pontos", "DashOrSpaceDashDependingOnName": "Traço ou Espaço e Traço, dependendo do nome", "DeleteFormat": "Excluir Formato", @@ -889,13 +889,13 @@ "DownloadClientStatusCheckSingleClientMessage": "Clientes de download indisponíveis devido a falhas: {0}", "GroupInformation": "Informações do grupo", "ImportListStatusCheckSingleClientMessage": "Listas indisponíveis devido a falhas: {0}", - "ImportMechanismHealthCheckMessage": "Habilitar Gerenciamento de Download Concluído", - "IndexerJackettAll": "Indexadores usando o Jackett 'all' endpoint sem suporte: {0}", + "ImportMechanismHealthCheckMessage": "Habilitar gerenciamento de download concluído", + "IndexerJackettAll": "Indexadores que usam o ponto de extremidade \"all\" incompatível do Jackett: {0}", "IndexerLongTermStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a falhas por mais de 6 horas", "IndexerLongTermStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a falhas por mais de 6 horas: {0}", - "IndexerRssHealthCheckNoAvailableIndexers": "Todos os indexadores compatíveis com rss estão temporariamente indisponíveis devido a erros recentes do indexador", - "IndexerRssHealthCheckNoIndexers": "Nenhum indexador disponível com a sincronização RSS habilitada, {appName} não capturará novos lançamentos automaticamente", - "IndexerSearchCheckNoAutomaticMessage": "Nenhum indexador disponível com a Pesquisa Automática habilitada, {appName} não fornecerá nenhum resultado de pesquisa automática", + "IndexerRssHealthCheckNoAvailableIndexers": "Todos os indexadores compatíveis com RSS estão temporariamente indisponíveis devido a erros recentes do indexador", + "IndexerRssHealthCheckNoIndexers": "Nenhum indexador disponível com a sincronização RSS habilitada, o {appName} não capturará novos lançamentos automaticamente", + "IndexerSearchCheckNoAutomaticMessage": "Nenhum indexador disponível com a Pesquisa automática habilitada, o {appName} não fornecerá nenhum resultado de pesquisa automática", "IndexerSearchCheckNoAvailableIndexersMessage": "Todos os indexadores com capacidade de pesquisa estão temporariamente indisponíveis devido a erros recentes do indexador", "IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, {appName} não fornecerá resultados para pesquisas interativas", "IndexerStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a falhas", @@ -973,23 +973,23 @@ "NoImportListsFound": "Nenhuma lista de importação encontrada", "NoIndexersFound": "Nenhum indexador encontrado", "ManageDownloadClients": "Gerenciar clientes de download", - "ApplyChanges": "Aplicar Mudanças", + "ApplyChanges": "Aplicar mudanças", "AutoAdd": "Adicionar automaticamente", - "AutomaticAdd": "Adição Automática", + "AutomaticAdd": "Adição automática", "CountDownloadClientsSelected": "{selectedCount} cliente(s) de download selecionado(s)", "CountImportListsSelected": "{selectedCount} lista(s) de importação selecionada(s)", "DeleteSelectedDownloadClients": "Excluir Cliente(s) de Download Selecionado(s)", - "DeleteSelectedDownloadClientsMessageText": "Tem certeza de que deseja excluir {count} cliente(s) de download selecionado(s)?", + "DeleteSelectedDownloadClientsMessageText": "Tem certeza de que deseja excluir o(s) {count} cliente(s) de download selecionado(s)?", "DeleteSelectedImportLists": "Excluir lista(s) de importação", - "DeleteSelectedImportListsMessageText": "Tem certeza de que deseja excluir {count} lista(s) de importação selecionada(s)?", + "DeleteSelectedImportListsMessageText": "Tem certeza de que deseja excluir a(s) {count} lista(s) de importação selecionada(s)?", "DeleteSelectedIndexers": "Excluir indexador(es)", - "DeleteSelectedIndexersMessageText": "Tem certeza de que deseja excluir {count} indexadores selecionados?", + "DeleteSelectedIndexersMessageText": "Tem certeza de que deseja excluir o(s) {count} indexador(es) selecionado(s)?", "EditSelectedDownloadClients": "Editar clientes de download selecionados", "EditSelectedImportLists": "Editar listas de importação selecionadas", "EditSelectedIndexers": "Editar indexadores selecionados", - "ExistingTag": "Tag existente", + "ExistingTag": "Etiqueta existente", "Implementation": "Implementação", - "ManageClients": "Gerenciar Clientes", + "ManageClients": "Gerenciar clientes", "ManageIndexers": "Gerenciar indexadores", "NoChange": "Sem alteração", "RemovingTag": "Removendo a tag", @@ -1000,13 +1000,13 @@ "RemoveSelectedItemQueueMessageText": "Tem certeza de que deseja remover 1 item da fila?", "RemoveSelectedItemsQueueMessageText": "Tem certeza de que deseja remover {0} itens da fila?", "SkipRedownloadHelpText": "Evita que o {appName} tente baixar versões alternativas para os itens removidos", - "ApplyTagsHelpTextAdd": "Adicionar: Adicione as tags à lista existente de tags", - "ApplyTagsHelpTextRemove": "Remover: Remove as tags inseridas", - "ApplyTagsHelpTextReplace": "Substituir: Substitua as tags pelas tags inseridas (não digite nenhuma tag para limpar todas as tags)", + "ApplyTagsHelpTextAdd": "Adicionar: adicione as etiquetas à lista existente de etiquetas", + "ApplyTagsHelpTextRemove": "Remover: remove as etiquetas inseridas", + "ApplyTagsHelpTextReplace": "Substituir: substitui as etiquetas atuais pelas inseridas (deixe em branco para limpar todas as etiquetas)", "ApplyTagsHelpTextHowToApplyArtists": "Como aplicar tags aos artistas selecionados", - "ApplyTagsHelpTextHowToApplyDownloadClients": "Como aplicar tags aos clientes de download selecionados", - "ApplyTagsHelpTextHowToApplyImportLists": "Como aplicar tags às listas de importação selecionadas", - "ApplyTagsHelpTextHowToApplyIndexers": "Como aplicar tags aos indexadores selecionados", + "ApplyTagsHelpTextHowToApplyDownloadClients": "Como aplicar etiquetas aos clientes de download selecionados", + "ApplyTagsHelpTextHowToApplyImportLists": "Como aplicar etiquetas às listas de importação selecionadas", + "ApplyTagsHelpTextHowToApplyIndexers": "Como aplicar etiquetas aos indexadores selecionados", "RemoveCompletedDownloads": "Remover downloads concluídos", "RemoveFailedDownloads": "Remover downloads com falha", "FilterAlbumPlaceholder": "Filtrar álbum", @@ -1023,10 +1023,10 @@ "SomeResultsAreHiddenByTheAppliedFilter": "Alguns resultados estão ocultos pelo filtro aplicado", "AllResultsAreHiddenByTheAppliedFilter": "Todos os resultados estão ocultos pelo filtro aplicado", "AppUpdated": "{appName} atualizado", - "AppUpdatedVersion": "{appName} foi atualizado para a versão `{version}`. Para obter as alterações mais recentes, você precisará recarregar {appName}", + "AppUpdatedVersion": "O {appName} foi atualizado para a versão `{version}`. Para obter as alterações mais recentes, recarregue o {appName}", "ConnectionLost": "Conexão perdida", - "ConnectionLostReconnect": "{appName} tentará se conectar automaticamente ou você pode clicar em recarregar abaixo.", - "ConnectionLostToBackend": "{appName} perdeu a conexão com o backend e precisará ser recarregado para restaurar a funcionalidade.", + "ConnectionLostReconnect": "O {appName} tentará se conectar automaticamente ou você pode clicar em Recarregar abaixo.", + "ConnectionLostToBackend": "O {appName} perdeu a conexão com o backend e precisará ser recarregado para restaurar a funcionalidade.", "RecentChanges": "Mudanças Recentes", "WhatsNew": "O que há de novo?", "NotificationStatusAllClientHealthCheckMessage": "Todas as notificações estão indisponíveis devido a falhas", @@ -1037,14 +1037,14 @@ "AddImportList": "Adicionar lista de importação", "AddImportListImplementation": "Adicionar lista de importação - {implementationName}", "AddIndexerImplementation": "Adicionar indexador - {implementationName}", - "AutomaticUpdatesDisabledDocker": "As atualizações automáticas não têm suporte direto ao usar o mecanismo de atualização do Docker. Você precisará atualizar a imagem do contêiner fora de {appName} ou usar um script", + "AutomaticUpdatesDisabledDocker": "As atualizações automáticas não têm suporte direto ao usar o mecanismo de atualização do Docker. Você precisará atualizar a imagem do contêiner fora do {appName} ou usar um script", "EditDownloadClientImplementation": "Editar cliente de download - {implementationName}", "EditConditionImplementation": "Editar condição - {implementationName}", "EditConnectionImplementation": "Editar conexão - {implementationName}", "EditImportListImplementation": "Editar lista de importação - {implementationName}", "EditIndexerImplementation": "Editar indexador - {implementationName}", "RemotePathMappingsInfo": "Raramente são necessários mapeamentos de caminho remoto, se {appName} e seu cliente de download estiverem no mesmo sistema, é melhor combinar seus caminhos. Para mais informações, consulte o [wiki]({wikiLink})", - "CloneCondition": "Clonar Condição", + "CloneCondition": "Clonar condição", "Enabled": "Habilitado", "Priority": "Prioridade", "ErrorLoadingContent": "Ocorreu um erro ao carregar este conteúdo", @@ -1056,15 +1056,15 @@ "PreferProtocol": "Preferir {preferredProtocol}", "HealthMessagesInfoBox": "Para saber mais sobre a causa dessas mensagens de verificação de integridade, clique no link da wiki (ícone de livro) no final da linha ou verifique os [logs]({link}). Se tiver dificuldade em interpretar essas mensagens, entre em contato com nosso suporte nos links abaixo.", "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "O cliente de download {0} está configurado para remover downloads concluídos. Isso pode resultar na remoção dos downloads do seu cliente antes que {1} possa importá-los.", - "InfoUrl": "URL da info", + "InfoUrl": "URL de informações", "GrabId": "Obter ID", - "InvalidUILanguage": "Sua UI está definida com um idioma inválido, corrija-a e salve suas configurações", + "InvalidUILanguage": "Sua interface está definida com um idioma inválido, corrija-o e salve suas configurações", "AuthBasic": "Básico (pop-up do navegador)", "AuthenticationRequired": "Autenticação exigida", "AuthenticationMethod": "Método de autenticação", "AuthenticationRequiredHelpText": "Altere para quais solicitações a autenticação é necessária. Não mude a menos que você entenda os riscos.", "AuthenticationRequiredUsernameHelpTextWarning": "Digite um novo nome de usuário", - "AuthenticationRequiredWarning": "Para evitar o acesso remoto sem autenticação, {appName} agora exige que a autenticação esteja habilitada. Opcionalmente, você pode desabilitar a autenticação de endereços locais.", + "AuthenticationRequiredWarning": "Para evitar o acesso remoto sem autenticação, o {appName} agora exige que a autenticação esteja habilitada. Opcionalmente, você pode desabilitar a autenticação para endereços locais.", "DisabledForLocalAddresses": "Desabilitado para endereços locais", "External": "Externo", "AuthForm": "Formulário (página de login)", @@ -1106,25 +1106,25 @@ "EditSelectedArtists": "Editar Artistas Selecionados", "OrganizeSelectedArtists": "Organizar Artistas Selecionados", "UpdateFiltered": "Atualização Filtrada", - "ConditionUsingRegularExpressions": "Esta condição corresponde ao uso de Expressões Regulares. Observe que os caracteres `\\^$.|?*+()[{` têm significados especiais e precisam escape com um `\\`", - "ImportList": "Importar Lista", + "ConditionUsingRegularExpressions": "Esta condição corresponde ao uso de Expressões Regulares. Observe que os caracteres `\\^$.|?*+()[{` têm significados especiais e precisam de escape com um `\\`", + "ImportList": "Importar lista", "RegularExpressionsCanBeTested": "Expressões regulares podem ser testadas [aqui](http://regexstorm.net/tester).", "RegularExpressionsTutorialLink": "Mais detalhes sobre expressões regulares podem ser encontrados [aqui](https://www.regular-expressions.info/tutorial.html).", - "AddAutoTag": "Adicionar tag automática", + "AddAutoTag": "Adicionar etiqueta automática", "AddAutoTagError": "Não foi possível adicionar uma nova etiqueta automática, tente novamente.", - "AutoTaggingNegateHelpText": "se marcada, a regra de etiqueta automática não será aplicada se esta condição {implementationName} corresponder.", - "AutoTaggingRequiredHelpText": "Esta condição {implementationName} deve corresponder para que a regra de etiqueta automática seja aplicada. Caso contrário, uma única correspondência de {implementationName} será suficiente.", - "AddCondition": "Adicionar Condição", - "AddConditionError": "Não foi possível adicionar uma nova condição, por favor, tente novamente.", - "AutoTagging": "Tagging Automática", - "AutoTaggingLoadError": "Não foi possível carregar tagging automática", - "CloneAutoTag": "Clonar Tag Automática", + "AutoTaggingNegateHelpText": "Se marcada, a regra de etiquetas automáticas não será aplicada se corresponder à condição {implementationName}.", + "AutoTaggingRequiredHelpText": "Esta condição, {implementationName}, deve corresponder para que a regra de etiqueta automática seja aplicada. Caso contrário, uma única correspondência de {implementationName} será suficiente.", + "AddCondition": "Adicionar condição", + "AddConditionError": "Não foi possível adicionar uma nova condição, tente novamente.", + "AutoTagging": "Etiquetas automáticas", + "AutoTaggingLoadError": "Não foi possível carregar as etiquetas automáticas", + "CloneAutoTag": "Clonar etiqueta automática", "Connection": "Conexão", - "DeleteAutoTag": "Excluir Tag Automática", - "DeleteAutoTagHelpText": "Tem certeza de que deseja excluir a tag automática '{name}'?", - "DeleteSpecification": "Excluir Especificação", + "DeleteAutoTag": "Excluir etiqueta automática", + "DeleteAutoTagHelpText": "Tem certeza de que deseja excluir a etiqueta automática '{name}'?", + "DeleteSpecification": "Excluir especificação", "DeleteSpecificationHelpText": "Tem certeza de que deseja excluir a especificação '{name}'?", - "EditAutoTag": "Editar Tag Automática", + "EditAutoTag": "Editar etiqueta automática", "Negate": "Negar", "ReleaseProfile": "Perfil de Lançamento", "RemoveTagsAutomatically": "Remover Tags Automaticamente", @@ -1140,25 +1140,25 @@ "AddAlbumWithTitle": "Adicionar {albumTitle}", "AddNewAlbumSearchForNewAlbum": "Iniciar busca por novo álbum", "TrackFilesLoadError": "Não foi possível carregar arquivos das faixas", - "ExtraFileExtensionsHelpTextsExamples": "Exemplos: '.sub, .nfo' or 'sub,nfo'", - "ExtraFileExtensionsHelpText": "Lista separada por vírgulas de arquivos extras para importar (.nfo será importado como .nfo-orig)", - "DownloadClientQbittorrentSettingsContentLayout": "Layout de Conteúdo", + "ExtraFileExtensionsHelpTextsExamples": "Exemplos: \".sub, .nfo\" ou \"sub,nfo\"", + "ExtraFileExtensionsHelpText": "Lista separada por vírgulas de arquivos adicionais a importar (.nfo será importado como .nfo-orig)", + "DownloadClientQbittorrentSettingsContentLayout": "Layout de conteúdo", "NoLimitForAnyDuration": "Sem limite para qualquer duração", "NoMinimumForAnyDuration": "Sem mínimo para qualquer duração", "PreferredSize": "Tamanho Preferido", "Unlimited": "Ilimitado", - "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Seja para usar o layout de conteúdo configurado do qBittorrent, o layout original do torrent ou sempre criar uma subpasta (qBittorrent 4.3.2+)", - "AutoRedownloadFailed": "Falha no Novo Download", - "AutoRedownloadFailedFromInteractiveSearch": "Falha no Novo Download da Pesquisa Interativa", - "AutoRedownloadFailedFromInteractiveSearchHelpText": "Procure e tente baixar automaticamente uma versão diferente quando a versão com falha for obtida da pesquisa interativa", + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Se devemos usar o layout de conteúdo configurado do qBittorrent, o layout original do torrent ou sempre criar uma subpasta (qBittorrent 4.3.2+)", + "AutoRedownloadFailed": "Falha no novo download", + "AutoRedownloadFailedFromInteractiveSearch": "Falha no novo download usando a pesquisa interativa", + "AutoRedownloadFailedFromInteractiveSearchHelpText": "Procurar e tentar baixar automaticamente um lançamento diferente quando for obtido um lançamento com falha na pesquisa interativa", "DownloadClientAriaSettingsDirectoryHelpText": "Local opcional para colocar downloads, deixe em branco para usar o local padrão do Aria2", - "IndexerSettingsRejectBlocklistedTorrentHashes": "Rejeitar Hashes de Torrent Bloqueados Durante a Captura", - "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Se um torrent for bloqueado por hash, ele pode não ser rejeitado corretamente durante o RSS/Pesquisa de alguns indexadores. Ativar isso permitirá que ele seja rejeitado após o torrent ser capturado, mas antes de ser enviado ao cliente.", + "IndexerSettingsRejectBlocklistedTorrentHashes": "Rejeitar hashes de torrent bloqueados durante a captura", + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Se um torrent for bloqueado por hash, pode não ser rejeitado corretamente durante o RSS/Pesquisa de alguns indexadores. Ativar isso permitirá que ele seja rejeitado após o torrent ser capturado, mas antes de ser enviado ao cliente.", "TrackFileDeletedTooltip": "Arquivo da faixa excluído", "TrackFileMissingTooltip": "Arquivo da faixa ausente", "TrackFileRenamedTooltip": "Arquivo da faixa renomeado", "TrackFileTagsUpdatedTooltip": "Arquivo da faixa com etiquetas atualizadas", - "DownloadClientPriorityHelpText": "Prioridade do Cliente de Download de 1 (mais alta) a 50 (mais baixa). Padrão: 1. Round-Robin é usado para clientes com a mesma prioridade.", + "DownloadClientPriorityHelpText": "Prioridade do cliente de download de 1 (mais alta) a 50 (mais baixa). Padrão: 1. Usamos uma distribuição equilibrada para clientes com a mesma prioridade.", "BlocklistAndSearch": "Adicionar à lista de bloqueio e pesquisar", "BlocklistAndSearchHint": "Iniciar uma pesquisa por um substituto após adicionar à lista de bloqueio", "ChangeCategory": "Alterar categoria", @@ -1167,10 +1167,10 @@ "RemoveQueueItemConfirmation": "Tem certeza de que deseja remover '{sourceTitle}' da fila?", "RemoveQueueItemsRemovalMethodHelpTextWarning": "'Remover do Cliente de Download' removerá os downloads e os arquivos do cliente de download.", "DoNotBlocklistHint": "Remover sem colocar na lista de bloqueio", - "IgnoreDownload": "Ignorar Download", - "IgnoreDownloadHint": "Impede que {appName} processe ainda mais este download", - "IgnoreDownloads": "Ignorar Downloads", - "IgnoreDownloadsHint": "Impede que {appName} processe ainda mais esses downloads", + "IgnoreDownload": "Ignorar download", + "IgnoreDownloadHint": "Impede que o {appName} processe ainda mais este download", + "IgnoreDownloads": "Ignorar downloads", + "IgnoreDownloadsHint": "Impede que o {appName} processe ainda mais esses downloads", "BlocklistOnlyHint": "Adicionar à lista de bloqueio sem procurar por um substituto", "DoNotBlocklist": "Não coloque na lista de bloqueio", "RemoveFromDownloadClientHint": "Remove download e arquivo(s) do cliente de download", @@ -1184,36 +1184,36 @@ "RemoveQueueItemRemovalMethod": "Método de Remoção", "RemoveQueueItemRemovalMethodHelpTextWarning": "'Remover do cliente de download' removerá o download e os arquivos do cliente de download.", "ArtistIndexFooterDownloading": "Baixando", - "IncludeHealthWarnings": "Incluir Alertas de Saúde", + "IncludeHealthWarnings": "Incluir avisos de integridade", "OnArtistAdd": "Ao Adicionar Artista", "Donate": "Doar", "Menu": "Menu", - "AutomaticSearch": "Pesquisa Automática", - "KeyboardShortcuts": "Atalhos do Teclado", + "AutomaticSearch": "Pesquisa automática", + "KeyboardShortcuts": "Atalhos do teclado", "Links": "Links", "Logout": "Sair", "Dash": "Traço", - "DefaultCase": "Padrão Maiúscula ou Minúscula", + "DefaultCase": "Padrão maiúscula ou minúscula", "FileNameTokens": "Tokens de nome de arquivo", "Period": "Ponto", "Space": "Espaço", "Uppercase": "Maiuscula", "EmbedCoverArtInAudioFiles": "Incorporar capa em arquivos de áudio", "EmbedCoverArtHelpText": "Incorpore a arte do álbum Lidarr em arquivos de áudio ao escrever etiquetas", - "Lowercase": "Minúscula", + "Lowercase": "Minúsculas", "Underscore": "Sublinhar", "MassSearchCancelWarning": "Isso não pode ser cancelado depois de iniciado sem reiniciar {appName} ou desabilitar todos os seus indexadores.", "NoTracksInThisMedium": "Nenhuma faixa neste meio", "MonitoredStatus": "Monitorado/Status", "SearchForAllCutoffUnmetAlbumsConfirmationCount": "Tem certeza de que deseja pesquisar todos os álbuns do {totalRecords} corte não atingido?", "ConnectSettingsSummary": "Notificações, conexões com servidores/players de mídia e scripts personalizados", - "CustomFormatsSettingsSummary": "Configurações e Formatos Personalizados", + "CustomFormatsSettingsSummary": "Formatos personalizados e configurações", "IndexersSettingsSummary": "Indexadores e opções de indexador", "MediaManagementSettingsSummary": "Nomenclatura, configurações de gerenciamento de arquivos e pastas raiz", "QualitySettingsSummary": "Tamanhos e nomenclatura de qualidade", "TagsSettingsSummary": "Veja todas as etiquetas e como elas são usadas. Etiquetas não utilizadas podem ser removidas", "UiSettingsSummary": "Opções de calendário, data e cores para daltônicos", - "CustomFormatsSettings": "Configurações de Formatos Personalizados", + "CustomFormatsSettings": "Configurações de formatos personalizados", "DownloadClientsSettingsSummary": "Clientes de download, gerenciamento de download e mapeamentos de caminhos remotos", "GeneralSettingsSummary": "Porta, SSL, nome de usuário/senha, proxy, análises e atualizações", "ImportListsSettingsSummary": "Importe de outra instância do {appName} ou listas do Trakt e gerencie exclusões de listas", @@ -1274,12 +1274,12 @@ "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName} não conseguiu determinar a qual artista e álbum se destinava este lançamento. {appName} pode não conseguir importar esta versão automaticamente. Você quer pegar '{title}'?", "ClickToChangeIndexerFlags": "Clique para alterar os sinalizadores do indexador", "CustomFormatsSpecificationFlag": "Sinalizar", - "IndexerFlags": "Sinalizadores do Indexador", + "IndexerFlags": "Sinalizadores do indexador", "Rejections": "Rejeições", "SelectIndexerFlags": "Selecionar Sinalizadores do Indexador", "SetIndexerFlags": "Definir Sinalizadores de Indexador", "CustomFormatsSettingsTriggerInfo": "Um formato personalizado será aplicado a um lançamento ou arquivo quando corresponder a pelo menos um dos diferentes tipos de condição escolhidos.", - "IndexerPriorityHelpText": "Prioridade do indexador de 1 (mais alta) a 50 (mais baixa). Padrão: 25. Usado ao capturar lançamentos como desempate para lançamentos iguais, {appName} ainda usará todos os indexadores habilitados para sincronização e pesquisa de RSS", + "IndexerPriorityHelpText": "Prioridade do indexador de 1 (mais alta) a 50 (mais baixa). Padrão: 25. Usado como um desempate ao capturar lançamentos, o {appName} ainda usará todos os indexadores habilitados para a sincronização RSS e pesquisa", "AutoTaggingSpecificationTag": "Etiqueta", "NotificationsTelegramSettingsIncludeAppName": "Incluir {appName} no Título", "NotificationsTelegramSettingsIncludeAppNameHelpText": "Opcionalmente, prefixe o título da mensagem com {appName} para diferenciar notificações de diferentes aplicativos", @@ -1287,7 +1287,7 @@ "IndexerSettingsSeedRatioHelpText": "A proporção que um torrent deve atingir antes de parar, vazio usa o padrão do cliente de download. A proporção deve ser de pelo menos 1,0 e seguir as regras dos indexadores", "IndexerSettingsSeedTime": "Tempo de semeação", "IndexerSettingsSeedTimeHelpText": "O tempo que um torrent deve ser semeado antes de parar, vazio usa o padrão do cliente de download", - "InteractiveSearchModalHeader": "Pesquisa Interativa", + "InteractiveSearchModalHeader": "Pesquisa interativa", "InteractiveSearchModalHeaderTitle": "Pesquisa Interativa - {title}", "False": "Falso", "Parse": "Analisar", @@ -1319,8 +1319,7 @@ "IndexerSettingsApiUrlHelpText": "Não mude isso a menos que você saiba o que está fazendo. Já que sua chave API será enviada para esse host.", "LastSearched": "Última Pesquisa", "AptUpdater": "Usar apt para instalar atualizações", - "CancelPendingTask": "Tem certeza de que deseja cancelar esta tarefa pendente?", - "DockerUpdater": "Atualize o contêiner docker para receber a atualização", + "DockerUpdater": "Atualize o contêiner do Docker para receber a atualização", "ExternalUpdater": "O {appName} está configurado para usar um mecanismo de atualização externo", "Install": "Instalar", "InstallLatest": "Instalar o mais recente", @@ -1330,5 +1329,6 @@ "PreviouslyInstalled": "Instalado anteriormente", "Shutdown": "Desligar", "UpdateAppDirectlyLoadError": "Incapaz de atualizar o {appName} diretamente,", - "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?" + "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?", + "ManageFormats": "Gerenciar Formatos" } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index c8ac1fb3d..c49366316 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -787,5 +787,9 @@ "InstallLatest": "Instalați cel mai recent", "OnLatestVersion": "Cea mai recentă versiune a {appName} este deja instalată", "Shutdown": "Oprește", - "UpdateAppDirectlyLoadError": "Imposibil de actualizat direct {appName}," + "UpdateAppDirectlyLoadError": "Imposibil de actualizat direct {appName},", + "UnmappedFiles": "Foldere nemapate", + "EditReleaseProfile": "Editați profilul de întârziere", + "Clone": "Închide", + "AddReleaseProfile": "Editați profilul de întârziere" } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index 40fd68ce5..54effd35d 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -1075,5 +1075,6 @@ "Shutdown": "Выключить", "UpdateAppDirectlyLoadError": "Невозможно обновить {appName} напрямую,", "DockerUpdater": "Обновите контейнер Docker, чтобы получить обновление", - "CountCustomFormatsSelected": "{count} пользовательских форматов выбрано" + "CountCustomFormatsSelected": "{count} пользовательских форматов выбрано", + "UnmappedFiles": "Несопоставленные папки" } diff --git a/src/NzbDrone.Core/Localization/Core/sk.json b/src/NzbDrone.Core/Localization/Core/sk.json index 9edb4c00e..c0003a3cc 100644 --- a/src/NzbDrone.Core/Localization/Core/sk.json +++ b/src/NzbDrone.Core/Localization/Core/sk.json @@ -292,5 +292,6 @@ "BuiltIn": "Vstavaný", "DeleteSelectedCustomFormats": "Klonovať vlastný formát", "AptUpdater": "Použiť apt pre inštaláciu aktualizácie", - "CancelPendingTask": "Naozaj chcete zrušiť túto prebiehajúcu úlohu?" + "Clone": "Zatvoriť", + "Reason": "Séria" } diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 8aa75ab32..233ea80be 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -909,11 +909,13 @@ "DeleteSelectedCustomFormats": "Ta bort anpassat format", "IncludeCustomFormatWhenRenaming": "Inkludera anpassat format när du byter namn", "AptUpdater": "Använd apt för att installera uppdateringen", - "CancelPendingTask": "Är du säker på att du vill avbryta den väntande uppgiften?", "DockerUpdater": "uppdatera dockerbehållaren för att ta emot uppdateringen", "ExternalUpdater": "{appName} är konfigurerad för att använda en extern uppdateringsmekanism", "InstallLatest": "Installera senaste", "OnLatestVersion": "Den senaste versionen av {appName} är redan installerad", "Shutdown": "Stäng av", - "UpdateAppDirectlyLoadError": "Det går inte att uppdatera {appName} direkt," + "UpdateAppDirectlyLoadError": "Det går inte att uppdatera {appName} direkt,", + "AddReleaseProfile": "Redigera fördröjningsprofil", + "Clone": "Avsluta", + "EditReleaseProfile": "Redigera fördröjningsprofil" } diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index 2096cac97..782458c4f 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -740,5 +740,9 @@ "InstallLatest": "ติดตั้งล่าสุด", "OnLatestVersion": "มีการติดตั้ง {appName} เวอร์ชันล่าสุดแล้ว", "Shutdown": "ปิดตัวลง", - "UpdateAppDirectlyLoadError": "ไม่สามารถอัปเดต {appName} ได้โดยตรง" + "UpdateAppDirectlyLoadError": "ไม่สามารถอัปเดต {appName} ได้โดยตรง", + "Clone": "ปิด", + "AddReleaseProfile": "แก้ไขโปรไฟล์ความล่าช้า", + "UnmappedFiles": "โฟลเดอร์ที่ไม่ได้แมป", + "EditReleaseProfile": "แก้ไขโปรไฟล์ความล่าช้า" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 416e9609b..27c063831 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -1042,5 +1042,11 @@ "InstallMajorVersionUpdate": "Güncellemeyi Kur", "InstallMajorVersionUpdateMessage": "Bu güncelleştirme yeni bir ana sürüm yükleyecek ve sisteminizle uyumlu olmayabilir. Bu güncelleştirmeyi yüklemek istediğinizden emin misiniz?", "InstallMajorVersionUpdateMessageLink": "Daha fazla bilgi için lütfen [{domain}]({url}) adresini kontrol edin.", - "SmartReplace": "Akıllı Değiştir" + "SmartReplace": "Akıllı Değiştir", + "DashOrSpaceDashDependingOnName": "İsme bağlı olarak Dash veya Space Dash", + "Discography": "diskografi", + "UnmappedFiles": "Eşlenmemiş Klasörler", + "Artist": "sanatçı", + "Season": "Sezon", + "CatalogNumber": "katalog numarası" } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index a7085c28d..9a3b18317 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -901,12 +901,12 @@ "DeleteSelectedCustomFormats": "Видалити спеціальний формат", "IncludeCustomFormatWhenRenaming": "Включати спеціальний формат під час перейменування", "IndexerSettingsApiUrl": "API URL", - "CancelPendingTask": "Ви впевнені, що хочете скасувати це незавершене завдання?", "DockerUpdater": "Оновіть контейнер docker, щоб отримати оновлення", "ExternalUpdater": "{appName} налаштовано на використання зовнішнього механізму оновлення", "InstallLatest": "Встановити останній", "OnLatestVersion": "Остання версія {appName} вже встановлена", "Shutdown": "Вимкнення", "UpdateAppDirectlyLoadError": "Неможливо оновити {appName} безпосередньо,", - "AptUpdater": "Використовуйте apt для інсталяції оновлення" + "AptUpdater": "Використовуйте apt для інсталяції оновлення", + "UnmappedFiles": "Невідповідні папки" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_TW.json b/src/NzbDrone.Core/Localization/Core/zh_TW.json index 483c816d4..2f88a4434 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_TW.json +++ b/src/NzbDrone.Core/Localization/Core/zh_TW.json @@ -219,5 +219,8 @@ "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "加入新的電影很簡單,只需要輸入您想加入的電影名稱", "EditMetadataProfile": "中繼資料配置", "BuiltIn": "內建", - "AptUpdater": "使用apt安裝更新" + "AptUpdater": "使用apt安裝更新", + "AddReleaseProfile": "新增延時配置", + "EditReleaseProfile": "新增延時配置", + "Reason": "季" } From a3b78aacdc8a33ff643fe9a6cb9a6a1656d12810 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 7 Nov 2024 14:56:28 +0000 Subject: [PATCH 101/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Fixer Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ro/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ro.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index c49366316..66f90018a 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -199,8 +199,8 @@ "Clear": "Șterge", "ClickToChangeQuality": "Faceți clic pentru a schimba calitatea", "ClientPriority": "Prioritate client", - "CloneIndexer": "Clonă Indexer", - "CloneProfile": "Profil de clonare", + "CloneIndexer": "Clonează Indexer", + "CloneProfile": "Clonează Profil", "Columns": "Coloane", "CompletedDownloadHandling": "Am finalizat procesarea descărcării", "Component": "Componentă", @@ -559,7 +559,7 @@ "CustomFormatScore": "Scorul formatului personalizat", "MinimumCustomFormatScore": "Scor minim format personalizat", "Absolute": "Absolut", - "CloneCustomFormat": "Clonați format personalizat", + "CloneCustomFormat": "Clonează format personalizat", "ColonReplacement": "Înlocuirea colonului", "Conditions": "Condiții", "CopyToClipboard": "Copiați în clipboard", @@ -693,7 +693,7 @@ "QualitySettingsSummary": "Calitate - mărimi și denumiri", "Yesterday": "Ieri", "EditDownloadClientImplementation": "Adăugați client de descărcare - {implementationName}", - "CloneCondition": "Clonați condiție", + "CloneCondition": "Clonează condiție", "Enabled": "Activat", "AddNewArtistRootFolderHelpText": "Subfolderul „{0}” va fi creat automat", "ImportList": "Liste", @@ -790,6 +790,6 @@ "UpdateAppDirectlyLoadError": "Imposibil de actualizat direct {appName},", "UnmappedFiles": "Foldere nemapate", "EditReleaseProfile": "Editați profilul de întârziere", - "Clone": "Închide", + "Clone": "Clonează", "AddReleaseProfile": "Editați profilul de întârziere" } From 8d32a532e4aa01526cd521c3b88d62d5cc477916 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 15 Nov 2024 21:48:26 +0200 Subject: [PATCH 102/275] Pin ReportGenerator in Azure Pipelines for .NET 6 (cherry picked from commit 50ce480abf043140e209d2d2959fbea8dd5dd2ab) --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5f585c8e6..0f428126a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1229,7 +1229,7 @@ stages: - task: SonarCloudAnalyze@2 condition: eq(variables['System.PullRequest.IsFork'], 'False') displayName: Publish SonarCloud Results - - task: reportgenerator@5 + - task: reportgenerator@5.3.11 displayName: Generate Coverage Report inputs: reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml' From abe0090f94380a3dcda39077ebf65f968d6a6fd8 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 14 Nov 2024 19:01:38 -0800 Subject: [PATCH 103/275] Fixed: Allow files to be moved from Torrent Blackhole even when remove is disabled (cherry picked from commit f739fd0900695e2ff312d13985c87d84ae00ea75) --- .../Blackhole/TorrentBlackholeFixture.cs | 2 +- .../Download/Clients/Blackhole/TorrentBlackhole.cs | 5 ++--- .../Download/Clients/Blackhole/UsenetBlackhole.cs | 10 ++++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/TorrentBlackholeFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/TorrentBlackholeFixture.cs index 6b09201cf..36bb07540 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/TorrentBlackholeFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/TorrentBlackholeFixture.cs @@ -123,7 +123,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole VerifyCompleted(result); - result.CanBeRemoved.Should().BeFalse(); + result.CanBeRemoved.Should().BeTrue(); result.CanMoveFiles.Should().BeFalse(); } diff --git a/src/NzbDrone.Core/Download/Clients/Blackhole/TorrentBlackhole.cs b/src/NzbDrone.Core/Download/Clients/Blackhole/TorrentBlackhole.cs index 22ed44a40..27e2560ec 100644 --- a/src/NzbDrone.Core/Download/Clients/Blackhole/TorrentBlackhole.cs +++ b/src/NzbDrone.Core/Download/Clients/Blackhole/TorrentBlackhole.cs @@ -102,9 +102,8 @@ namespace NzbDrone.Core.Download.Clients.Blackhole Status = item.Status }; - queueItem.CanMoveFiles = queueItem.CanBeRemoved = - queueItem.DownloadClientInfo.RemoveCompletedDownloads && - !Settings.ReadOnly; + queueItem.CanMoveFiles = !Settings.ReadOnly; + queueItem.CanBeRemoved = queueItem.DownloadClientInfo.RemoveCompletedDownloads; yield return queueItem; } diff --git a/src/NzbDrone.Core/Download/Clients/Blackhole/UsenetBlackhole.cs b/src/NzbDrone.Core/Download/Clients/Blackhole/UsenetBlackhole.cs index aedbc03c1..279ef6fcd 100644 --- a/src/NzbDrone.Core/Download/Clients/Blackhole/UsenetBlackhole.cs +++ b/src/NzbDrone.Core/Download/Clients/Blackhole/UsenetBlackhole.cs @@ -57,7 +57,7 @@ namespace NzbDrone.Core.Download.Clients.Blackhole { foreach (var item in _scanWatchFolder.GetItems(Settings.WatchFolder, ScanGracePeriod)) { - yield return new DownloadClientItem + var queueItem = new DownloadClientItem { DownloadClientInfo = DownloadClientItemClientInfo.FromDownloadClient(this, false), DownloadId = Definition.Name + "_" + item.DownloadId, @@ -70,10 +70,12 @@ namespace NzbDrone.Core.Download.Clients.Blackhole OutputPath = item.OutputPath, Status = item.Status, - - CanBeRemoved = true, - CanMoveFiles = true }; + + queueItem.CanMoveFiles = true; + queueItem.CanBeRemoved = queueItem.DownloadClientInfo.RemoveCompletedDownloads; + + yield return queueItem; } } From f23d75d031042d3c4a7215483022b4efdd9c4376 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 3 Nov 2024 16:22:32 -0800 Subject: [PATCH 104/275] Fixed: Normalize unicode characters when comparing paths for equality (cherry picked from commit ceeec091f85d0094e07537b7f62f18292655a710) --- src/NzbDrone.Common.Test/PathExtensionFixture.cs | 10 ++++++++++ src/NzbDrone.Common/Extensions/PathExtensions.cs | 4 ++++ src/NzbDrone.Common/PathEqualityComparer.cs | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Common.Test/PathExtensionFixture.cs b/src/NzbDrone.Common.Test/PathExtensionFixture.cs index 1943e3a59..38ec414a5 100644 --- a/src/NzbDrone.Common.Test/PathExtensionFixture.cs +++ b/src/NzbDrone.Common.Test/PathExtensionFixture.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Text; using FluentAssertions; using Moq; using NUnit.Framework; @@ -316,5 +317,14 @@ namespace NzbDrone.Common.Test result[2].Should().Be(@"Music"); result[3].Should().Be(@"Artist Title"); } + + [Test] + public void should_be_equal_with_different_unicode_representations() + { + var path1 = @"C:\Test\file.mkv".AsOsAgnostic().Normalize(NormalizationForm.FormC); + var path2 = @"C:\Test\file.mkv".AsOsAgnostic().Normalize(NormalizationForm.FormD); + + path1.PathEquals(path2); + } } } diff --git a/src/NzbDrone.Common/Extensions/PathExtensions.cs b/src/NzbDrone.Common/Extensions/PathExtensions.cs index dad4cdc5f..917797540 100644 --- a/src/NzbDrone.Common/Extensions/PathExtensions.cs +++ b/src/NzbDrone.Common/Extensions/PathExtensions.cs @@ -59,6 +59,10 @@ namespace NzbDrone.Common.Extensions public static bool PathEquals(this string firstPath, string secondPath, StringComparison? comparison = null) { + // Normalize paths to ensure unicode characters are represented the same way + firstPath = firstPath.Normalize(); + secondPath = secondPath?.Normalize(); + if (!comparison.HasValue) { comparison = DiskProviderBase.PathStringComparison; diff --git a/src/NzbDrone.Common/PathEqualityComparer.cs b/src/NzbDrone.Common/PathEqualityComparer.cs index 5b9c3aa1c..bd6fa430d 100644 --- a/src/NzbDrone.Common/PathEqualityComparer.cs +++ b/src/NzbDrone.Common/PathEqualityComparer.cs @@ -21,10 +21,10 @@ namespace NzbDrone.Common { if (OsInfo.IsWindows) { - return obj.CleanFilePath().ToLower().GetHashCode(); + return obj.CleanFilePath().Normalize().ToLower().GetHashCode(); } - return obj.CleanFilePath().GetHashCode(); + return obj.CleanFilePath().Normalize().GetHashCode(); } } } From 2b1684a793b37dfc741b4b61e781de6166bf84d6 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 23 Nov 2024 16:48:05 -0800 Subject: [PATCH 105/275] Webpack web target (cherry picked from commit a90866a73e6cff9a286c23e60c74672f4c0d317a) --- frontend/build/webpack.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/build/webpack.config.js b/frontend/build/webpack.config.js index 85056b3cd..53f8ef431 100644 --- a/frontend/build/webpack.config.js +++ b/frontend/build/webpack.config.js @@ -26,6 +26,7 @@ module.exports = (env) => { const config = { mode: isProduction ? 'production' : 'development', devtool: isProduction ? 'source-map' : 'eval-source-map', + target: 'web', stats: { children: false From beabad5e3a07155641c55637314be0154400ab86 Mon Sep 17 00:00:00 2001 From: d-rez Date: Thu, 28 Nov 2024 09:14:39 +1100 Subject: [PATCH 106/275] Fixed: Updated Base Url for Redacted (#5250) --- .../IndexerTests/RedactedTests/RedactedFixture.cs | 4 ++-- .../Migration/080_update_redacted_baseurl.cs | 14 ++++++++++++++ .../HealthCheck/Checks/RedactedGazelleCheck.cs | 2 +- src/NzbDrone.Core/Indexers/Redacted/Redacted.cs | 2 +- .../Indexers/Redacted/RedactedSettings.cs | 2 +- 5 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 src/NzbDrone.Core/Datastore/Migration/080_update_redacted_baseurl.cs diff --git a/src/NzbDrone.Core.Test/IndexerTests/RedactedTests/RedactedFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/RedactedTests/RedactedFixture.cs index f08bc8b1b..335aff721 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/RedactedTests/RedactedFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/RedactedTests/RedactedFixture.cs @@ -47,8 +47,8 @@ namespace NzbDrone.Core.Test.IndexerTests.RedactedTests releaseInfo.Title.Should().Be("Shania Twain - Shania Twain (1993) [Album] [FLAC 24bit Lossless / WEB]"); releaseInfo.DownloadProtocol.Should().Be(DownloadProtocol.Torrent); - releaseInfo.DownloadUrl.Should().Be("https://redacted.ch/ajax.php?action=download&id=1541452"); - releaseInfo.InfoUrl.Should().Be("https://redacted.ch/torrents.php?id=106951&torrentid=1541452"); + releaseInfo.DownloadUrl.Should().Be("https://redacted.sh/ajax.php?action=download&id=1541452"); + releaseInfo.InfoUrl.Should().Be("https://redacted.sh/torrents.php?id=106951&torrentid=1541452"); releaseInfo.CommentUrl.Should().Be(null); releaseInfo.Indexer.Should().Be(Subject.Definition.Name); releaseInfo.PublishDate.Should().Be(DateTime.Parse("2017-12-11 00:17:53")); diff --git a/src/NzbDrone.Core/Datastore/Migration/080_update_redacted_baseurl.cs b/src/NzbDrone.Core/Datastore/Migration/080_update_redacted_baseurl.cs new file mode 100644 index 000000000..8855571a0 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/080_update_redacted_baseurl.cs @@ -0,0 +1,14 @@ +using FluentMigrator; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(080)] + public class update_redacted_baseurl : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + Execute.Sql("UPDATE \"Indexers\" SET \"Settings\" = Replace(\"Settings\", '//redacted.ch', '//redacted.sh') WHERE \"Implementation\" = 'Redacted'"); + } + } +} diff --git a/src/NzbDrone.Core/HealthCheck/Checks/RedactedGazelleCheck.cs b/src/NzbDrone.Core/HealthCheck/Checks/RedactedGazelleCheck.cs index 40639d633..2168bcc6f 100644 --- a/src/NzbDrone.Core/HealthCheck/Checks/RedactedGazelleCheck.cs +++ b/src/NzbDrone.Core/HealthCheck/Checks/RedactedGazelleCheck.cs @@ -26,7 +26,7 @@ namespace NzbDrone.Core.HealthCheck.Checks { var definition = (IndexerDefinition)indexer.Definition; - if (definition.Settings is GazelleSettings { BaseUrl: "https://redacted.ch" }) + if (definition.Settings is GazelleSettings { BaseUrl: "https://redacted.sh" or "https://redacted.ch" }) { return new HealthCheck(GetType(), HealthCheckResult.Warning, "You have set up Redacted as a Gazelle indexer, please reconfigure using the Redacted indexer setting"); } diff --git a/src/NzbDrone.Core/Indexers/Redacted/Redacted.cs b/src/NzbDrone.Core/Indexers/Redacted/Redacted.cs index 871e0f8bb..997a16923 100644 --- a/src/NzbDrone.Core/Indexers/Redacted/Redacted.cs +++ b/src/NzbDrone.Core/Indexers/Redacted/Redacted.cs @@ -11,7 +11,7 @@ namespace NzbDrone.Core.Indexers.Redacted { public class Redacted : HttpIndexerBase { - public override string Name => "Redacted.ch"; + public override string Name => "Redacted"; public override DownloadProtocol Protocol => DownloadProtocol.Torrent; public override bool SupportsRss => true; public override bool SupportsSearch => true; diff --git a/src/NzbDrone.Core/Indexers/Redacted/RedactedSettings.cs b/src/NzbDrone.Core/Indexers/Redacted/RedactedSettings.cs index 6fad07bed..f1fb2e3de 100644 --- a/src/NzbDrone.Core/Indexers/Redacted/RedactedSettings.cs +++ b/src/NzbDrone.Core/Indexers/Redacted/RedactedSettings.cs @@ -19,7 +19,7 @@ namespace NzbDrone.Core.Indexers.Redacted public RedactedSettings() { - BaseUrl = "https://redacted.ch"; + BaseUrl = "https://redacted.sh"; Categories = new[] { (int)RedactedCategory.Music From eef55f65c6dfe75f62c75b9746f4676d58c13b2b Mon Sep 17 00:00:00 2001 From: Gylesie <86306812+Gylesie@users.noreply.github.com> Date: Mon, 2 Dec 2024 01:22:04 +0100 Subject: [PATCH 107/275] Remove unnecessary heap allocations in local IP check (cherry picked from commit ed536a85ad5f2062bf6f01f80efddb19fa935f63) --- src/NzbDrone.Common/Extensions/IpAddressExtensions.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Common/Extensions/IpAddressExtensions.cs b/src/NzbDrone.Common/Extensions/IpAddressExtensions.cs index 7feb431c4..b60d4271a 100644 --- a/src/NzbDrone.Common/Extensions/IpAddressExtensions.cs +++ b/src/NzbDrone.Common/Extensions/IpAddressExtensions.cs @@ -39,18 +39,18 @@ namespace NzbDrone.Common.Extensions private static bool IsLocalIPv4(byte[] ipv4Bytes) { // Link local (no IP assigned by DHCP): 169.254.0.0 to 169.254.255.255 (169.254.0.0/16) - bool IsLinkLocal() => ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254; + var isLinkLocal = ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254; // Class A private range: 10.0.0.0 – 10.255.255.255 (10.0.0.0/8) - bool IsClassA() => ipv4Bytes[0] == 10; + var isClassA = ipv4Bytes[0] == 10; // Class B private range: 172.16.0.0 – 172.31.255.255 (172.16.0.0/12) - bool IsClassB() => ipv4Bytes[0] == 172 && ipv4Bytes[1] >= 16 && ipv4Bytes[1] <= 31; + var isClassB = ipv4Bytes[0] == 172 && ipv4Bytes[1] >= 16 && ipv4Bytes[1] <= 31; // Class C private range: 192.168.0.0 – 192.168.255.255 (192.168.0.0/16) - bool IsClassC() => ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168; + var isClassC = ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168; - return IsLinkLocal() || IsClassA() || IsClassC() || IsClassB(); + return isLinkLocal || isClassA || isClassC || isClassB; } } } From ecb7d9f6a6165745ae355398c7e7e5dc7d9066b0 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 4 Dec 2024 15:44:36 +0200 Subject: [PATCH 108/275] Fix adding delay profile error message --- .../Settings/Profiles/Delay/EditDelayProfileModalContent.js | 6 +++--- src/NzbDrone.Core/Localization/Core/en.json | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js b/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js index da1bf7f44..598a5b178 100644 --- a/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js +++ b/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js @@ -87,9 +87,9 @@ function EditDelayProfileModalContent(props) { { !isFetching && !!error ? -
- {translate('UnableToAddANewQualityProfilePleaseTryAgain')} -
: + + {translate('AddDelayProfileError')} + : null } diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 621e04b29..b63990c30 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -18,6 +18,7 @@ "AddConnection": "Add Connection", "AddConnectionImplementation": "Add Connection - {implementationName}", "AddDelayProfile": "Add Delay Profile", + "AddDelayProfileError": "Unable to add a new delay profile, please try again.", "AddDownloadClientImplementation": "Add Download Client - {implementationName}", "AddImportList": "Add Import List", "AddImportListExclusion": "Add Import List Exclusion", From b298bfd9321875c29b9b7b020ad32b26879eb624 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 4 Dec 2024 15:51:29 +0200 Subject: [PATCH 109/275] Fix tags help message --- frontend/src/Calendar/iCal/CalendarLinkModalContent.js | 2 +- .../ImportLists/ImportLists/EditImportListModalContent.js | 2 +- .../Notifications/EditNotificationModalContent.js | 2 +- .../Profiles/Delay/EditDelayProfileModalContent.js | 4 ++-- .../Profiles/Release/EditReleaseProfileModalContent.js | 2 +- src/NzbDrone.Core/Localization/Core/en.json | 8 ++++++-- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/frontend/src/Calendar/iCal/CalendarLinkModalContent.js b/frontend/src/Calendar/iCal/CalendarLinkModalContent.js index 844ffec5f..3473f4c31 100644 --- a/frontend/src/Calendar/iCal/CalendarLinkModalContent.js +++ b/frontend/src/Calendar/iCal/CalendarLinkModalContent.js @@ -164,7 +164,7 @@ class CalendarLinkModalContent extends Component { type={inputTypes.TAG} name="tags" value={tags} - helpText={translate('TagsHelpText')} + helpText={translate('ICalTagsArtistHelpText')} onChange={this.onInputChange} /> diff --git a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js index 2799af7d8..d50fb2385 100644 --- a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js +++ b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js @@ -292,7 +292,7 @@ function EditImportListModalContent(props) { diff --git a/frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js b/frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js index 383cf057b..ee51799f2 100644 --- a/frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js +++ b/frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js @@ -105,7 +105,7 @@ function EditNotificationModalContent(props) { diff --git a/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js b/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js index 598a5b178..0d1225a93 100644 --- a/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js +++ b/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js @@ -186,7 +186,7 @@ function EditDelayProfileModalContent(props) { { id === 1 ? - {translate('DefaultDelayProfileHelpText')} + {translate('DefaultDelayProfileArtist')} : @@ -196,7 +196,7 @@ function EditDelayProfileModalContent(props) { type={inputTypes.TAG} name="tags" {...tags} - helpText={translate('TagsHelpText')} + helpText={translate('DelayProfileArtistTagsHelpText')} onChange={onInputChange} /> diff --git a/frontend/src/Settings/Profiles/Release/EditReleaseProfileModalContent.js b/frontend/src/Settings/Profiles/Release/EditReleaseProfileModalContent.js index c6c297c81..e1c695c42 100644 --- a/frontend/src/Settings/Profiles/Release/EditReleaseProfileModalContent.js +++ b/frontend/src/Settings/Profiles/Release/EditReleaseProfileModalContent.js @@ -119,7 +119,7 @@ function EditReleaseProfileModalContent(props) { diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index b63990c30..24a02144c 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -282,13 +282,14 @@ "Dates": "Dates", "Deceased": "Deceased", "DefaultCase": "Default Case", - "DefaultDelayProfileHelpText": "This is the default profile. It applies to all artist that don't have an explicit profile.", + "DefaultDelayProfileArtist": "This is the default profile. It applies to all artists that don't have an explicit profile.", "DefaultLidarrTags": "Default {appName} Tags", "DefaultMetadataProfileIdHelpText": "Default Metadata Profile for artists detected in this folder", "DefaultMonitorOptionHelpText": "Which albums should be monitored on initial add for artists detected in this folder", "DefaultQualityProfileIdHelpText": "Default Quality Profile for artists detected in this folder", "DefaultTagsHelpText": "Default {appName} Tags for artists detected in this folder", "DelayProfile": "Delay Profile", + "DelayProfileArtistTagsHelpText": "Applies to artists with at least one matching tag", "DelayProfiles": "Delay Profiles", "DelayingDownloadUntil": "Delaying download until {date} at {time}", "Delete": "Delete", @@ -551,6 +552,7 @@ "ICalFeed": "iCal Feed", "ICalHttpUrlHelpText": "Copy this URL to your client(s) or click to subscribe if your browser supports webcal", "ICalLink": "iCal Link", + "ICalTagsArtistHelpText": "Feed will only contain artists with at least one matching tag", "IconForCutoffUnmet": "Icon for Cutoff Unmet", "IfYouDontAddAnImportListExclusionAndTheArtistHasAMetadataProfileOtherThanNoneThenThisAlbumMayBeReaddedDuringTheNextArtistRefresh": "If you don't add an import list exclusion and the artist has a metadata profile other than 'None' then this album may be re-added during the next artist refresh.", "IgnoreDownload": "Ignore Download", @@ -577,6 +579,7 @@ "ImportListSpecificSettings": "Import List Specific Settings", "ImportListStatusCheckAllClientMessage": "All lists are unavailable due to failures", "ImportListStatusCheckSingleClientMessage": "Lists unavailable due to failures: {0}", + "ImportListTagsHelpText": "Tags that will be added on import from this list", "ImportLists": "Import Lists", "ImportListsSettingsSummary": "Import from another {appName} instance or Trakt lists and manage list exclusions", "ImportMechanismHealthCheckMessage": "Enable Completed Download Handling", @@ -833,6 +836,7 @@ "NotificationsSettingsUpdateMapPathsTo": "Map Paths To", "NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName} path, used to modify series paths when {serviceName} sees library path location differently from {appName} (Requires 'Update Library')", "NotificationsSettingsUseSslHelpText": "Connect to {serviceName} over HTTPS instead of HTTP", + "NotificationsTagsArtistHelpText": "Only send notifications for artists with at least one matching tag", "NotificationsTelegramSettingsIncludeAppName": "Include {appName} in Title", "NotificationsTelegramSettingsIncludeAppNameHelpText": "Optionally prefix message title with {appName} to differentiate notifications from different applications", "Ok": "Ok", @@ -955,6 +959,7 @@ "ReleaseDate": "Release Date", "ReleaseGroup": "Release Group", "ReleaseProfile": "Release Profile", + "ReleaseProfileTagArtistHelpText": "Release profiles will apply to artists with at least one matching tag. Leave blank to apply to all artists", "ReleaseProfiles": "Release Profiles", "ReleaseRejected": "Release Rejected", "ReleaseStatuses": "Release Statuses", @@ -1184,7 +1189,6 @@ "TagAudioFilesWithMetadata": "Tag Audio Files with Metadata", "TagIsNotUsedAndCanBeDeleted": "Tag is not used and can be deleted", "Tags": "Tags", - "TagsHelpText": "Release profiles will apply to artists with at least one matching tag. Leave blank to apply to all artists", "TagsSettingsSummary": "See all tags and how they are used. Unused tags can be removed", "Tasks": "Tasks", "Test": "Test", From f87a8fa9f5e084e1b19f88dd2d9e7b8715c5ea45 Mon Sep 17 00:00:00 2001 From: soup Date: Mon, 2 Dec 2024 01:20:08 +0100 Subject: [PATCH 110/275] New: Add config file setting for CGNAT authentication bypass (cherry picked from commit 4c41a4f368046f73f82306bbd73bec992392938b) --- .../Config/HostConfigResource.cs | 1 + .../Authentication/UiAuthorizationHandler.cs | 9 ++++++--- .../IPAddressExtensionsFixture.cs | 19 +++++++++++++++++++ .../Extensions/IpAddressExtensions.cs | 6 ++++++ src/NzbDrone.Common/Options/AuthOptions.cs | 1 + .../Configuration/ConfigFileProvider.cs | 3 +++ .../Configuration/ConfigService.cs | 6 ++++++ 7 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Lidarr.Api.V1/Config/HostConfigResource.cs b/src/Lidarr.Api.V1/Config/HostConfigResource.cs index 596b77c73..a7f13c1ca 100644 --- a/src/Lidarr.Api.V1/Config/HostConfigResource.cs +++ b/src/Lidarr.Api.V1/Config/HostConfigResource.cs @@ -45,6 +45,7 @@ namespace Lidarr.Api.V1.Config public string BackupFolder { get; set; } public int BackupInterval { get; set; } public int BackupRetention { get; set; } + public bool TrustCgnatIpAddresses { get; set; } } public static class HostConfigResourceMapper diff --git a/src/Lidarr.Http/Authentication/UiAuthorizationHandler.cs b/src/Lidarr.Http/Authentication/UiAuthorizationHandler.cs index a8d212659..2270a7ade 100644 --- a/src/Lidarr.Http/Authentication/UiAuthorizationHandler.cs +++ b/src/Lidarr.Http/Authentication/UiAuthorizationHandler.cs @@ -27,10 +27,13 @@ namespace NzbDrone.Http.Authentication if (_authenticationRequired == AuthenticationRequiredType.DisabledForLocalAddresses) { if (context.Resource is HttpContext httpContext && - IPAddress.TryParse(httpContext.GetRemoteIP(), out var ipAddress) && - ipAddress.IsLocalAddress()) + IPAddress.TryParse(httpContext.GetRemoteIP(), out var ipAddress)) { - context.Succeed(requirement); + if (ipAddress.IsLocalAddress() || + (_configService.TrustCgnatIpAddresses && ipAddress.IsCgnatIpAddress())) + { + context.Succeed(requirement); + } } } diff --git a/src/NzbDrone.Common.Test/ExtensionTests/IPAddressExtensionsFixture.cs b/src/NzbDrone.Common.Test/ExtensionTests/IPAddressExtensionsFixture.cs index f7ed71f94..39c71d33d 100644 --- a/src/NzbDrone.Common.Test/ExtensionTests/IPAddressExtensionsFixture.cs +++ b/src/NzbDrone.Common.Test/ExtensionTests/IPAddressExtensionsFixture.cs @@ -21,9 +21,28 @@ namespace NzbDrone.Common.Test.ExtensionTests [TestCase("1.2.3.4")] [TestCase("172.55.0.1")] [TestCase("192.55.0.1")] + [TestCase("100.64.0.1")] + [TestCase("100.127.255.254")] public void should_return_false_for_public_ip_address(string ipAddress) { IPAddress.Parse(ipAddress).IsLocalAddress().Should().BeFalse(); } + + [TestCase("100.64.0.1")] + [TestCase("100.127.255.254")] + [TestCase("100.100.100.100")] + public void should_return_true_for_cgnat_ip_address(string ipAddress) + { + IPAddress.Parse(ipAddress).IsCgnatIpAddress().Should().BeTrue(); + } + + [TestCase("1.2.3.4")] + [TestCase("192.168.5.1")] + [TestCase("100.63.255.255")] + [TestCase("100.128.0.0")] + public void should_return_false_for_non_cgnat_ip_address(string ipAddress) + { + IPAddress.Parse(ipAddress).IsCgnatIpAddress().Should().BeFalse(); + } } } diff --git a/src/NzbDrone.Common/Extensions/IpAddressExtensions.cs b/src/NzbDrone.Common/Extensions/IpAddressExtensions.cs index b60d4271a..cbc1f5f83 100644 --- a/src/NzbDrone.Common/Extensions/IpAddressExtensions.cs +++ b/src/NzbDrone.Common/Extensions/IpAddressExtensions.cs @@ -52,5 +52,11 @@ namespace NzbDrone.Common.Extensions return isLinkLocal || isClassA || isClassC || isClassB; } + + public static bool IsCgnatIpAddress(this IPAddress ipAddress) + { + var bytes = ipAddress.GetAddressBytes(); + return bytes.Length == 4 && bytes[0] == 100 && bytes[1] >= 64 && bytes[1] <= 127; + } } } diff --git a/src/NzbDrone.Common/Options/AuthOptions.cs b/src/NzbDrone.Common/Options/AuthOptions.cs index 2b63308d3..64330b68b 100644 --- a/src/NzbDrone.Common/Options/AuthOptions.cs +++ b/src/NzbDrone.Common/Options/AuthOptions.cs @@ -6,4 +6,5 @@ public class AuthOptions public bool? Enabled { get; set; } public string Method { get; set; } public string Required { get; set; } + public bool? TrustCgnatIpAddresses { get; set; } } diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 04b4b339e..442a6fcd9 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -64,6 +64,7 @@ namespace NzbDrone.Core.Configuration string PostgresPassword { get; } string PostgresMainDb { get; } string PostgresLogDb { get; } + bool TrustCgnatIpAddresses { get; } } public class ConfigFileProvider : IConfigFileProvider @@ -470,5 +471,7 @@ namespace NzbDrone.Core.Configuration { SetValue("ApiKey", GenerateApiKey()); } + + public bool TrustCgnatIpAddresses => _authOptions.TrustCgnatIpAddresses ?? GetValueBoolean("TrustCgnatIpAddresses", false, persist: false); } } diff --git a/src/NzbDrone.Core/Configuration/ConfigService.cs b/src/NzbDrone.Core/Configuration/ConfigService.cs index 239f000d6..34b94c927 100644 --- a/src/NzbDrone.Core/Configuration/ConfigService.cs +++ b/src/NzbDrone.Core/Configuration/ConfigService.cs @@ -426,6 +426,12 @@ namespace NzbDrone.Core.Configuration public string ApplicationUrl => GetValue("ApplicationUrl", string.Empty); + public bool TrustCgnatIpAddresses + { + get { return GetValueBoolean("TrustCgnatIpAddresses", false); } + set { SetValue("TrustCgnatIpAddresses", value); } + } + private string GetValue(string key) { return GetValue(key, string.Empty); From f3a697ca6868242c9a8be7c54e109ac17ad7960e Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 26 Nov 2024 17:36:53 -0800 Subject: [PATCH 111/275] Deluge communication improvements (cherry picked from commit 183b8b574a4dd948b5fada94d0e645b87710f223) --- .../Download/Clients/Deluge/Deluge.cs | 31 ++++++----- .../Download/Clients/Deluge/DelugeProxy.cs | 52 +++++++------------ 2 files changed, 39 insertions(+), 44 deletions(-) diff --git a/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs b/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs index 8d685ed5d..5ad0f2387 100644 --- a/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs +++ b/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs @@ -19,6 +19,7 @@ namespace NzbDrone.Core.Download.Clients.Deluge public class Deluge : TorrentClientBase { private readonly IDelugeProxy _proxy; + private bool _hasAttemptedReconnecting; public Deluge(IDelugeProxy proxy, ITorrentFileInfoReader torrentFileInfoReader, @@ -126,14 +127,9 @@ namespace NzbDrone.Core.Download.Clients.Deluge foreach (var torrent in torrents) { - // Silently ignore torrents with no hash - if (torrent.Hash.IsNullOrWhiteSpace()) - { - continue; - } - - // Ignore torrents without a name, but track to log a single warning for all invalid torrents. - if (torrent.Name.IsNullOrWhiteSpace()) + // Ignore torrents without a hash or name, but track to log a single warning + // for all invalid torrents as well as reconnect to the Daemon. + if (torrent.Hash.IsNullOrWhiteSpace() || torrent.Name.IsNullOrWhiteSpace()) { ignoredCount++; continue; @@ -197,9 +193,20 @@ namespace NzbDrone.Core.Download.Clients.Deluge items.Add(item); } - if (ignoredCount > 0) + if (ignoredCount > 0 && _hasAttemptedReconnecting) { - _logger.Warn("{0} torrent(s) were ignored because they did not have a title. Check Deluge and remove any invalid torrents"); + if (_hasAttemptedReconnecting) + { + _logger.Warn("{0} torrent(s) were ignored because they did not have a hash or title. Deluge may have disconnected from it's daemon. If you continue to see this error, check Deluge for invalid torrents.", ignoredCount); + } + else + { + _proxy.ReconnectToDaemon(Settings); + } + } + else + { + _hasAttemptedReconnecting = false; } return items; @@ -319,9 +326,9 @@ namespace NzbDrone.Core.Download.Clients.Deluge return null; } - var enabledPlugins = _proxy.GetEnabledPlugins(Settings); + var methods = _proxy.GetMethods(Settings); - if (!enabledPlugins.Contains("Label")) + if (!methods.Any(m => m.StartsWith("label."))) { return new NzbDroneValidationFailure("MusicCategory", "Label plugin not activated") { diff --git a/src/NzbDrone.Core/Download/Clients/Deluge/DelugeProxy.cs b/src/NzbDrone.Core/Download/Clients/Deluge/DelugeProxy.cs index e6071fb53..cbe32f8e9 100644 --- a/src/NzbDrone.Core/Download/Clients/Deluge/DelugeProxy.cs +++ b/src/NzbDrone.Core/Download/Clients/Deluge/DelugeProxy.cs @@ -18,8 +18,7 @@ namespace NzbDrone.Core.Download.Clients.Deluge Dictionary GetConfig(DelugeSettings settings); DelugeTorrent[] GetTorrents(DelugeSettings settings); DelugeTorrent[] GetTorrentsByLabel(string label, DelugeSettings settings); - string[] GetAvailablePlugins(DelugeSettings settings); - string[] GetEnabledPlugins(DelugeSettings settings); + string[] GetMethods(DelugeSettings settings); string[] GetAvailableLabels(DelugeSettings settings); DelugeLabel GetLabelOptions(DelugeSettings settings); void SetTorrentLabel(string hash, string label, DelugeSettings settings); @@ -30,6 +29,7 @@ namespace NzbDrone.Core.Download.Clients.Deluge string AddTorrentFromFile(string filename, byte[] fileContent, DelugeSettings settings); bool RemoveTorrent(string hash, bool removeData, DelugeSettings settings); void MoveTorrentToTopInQueue(string hash, DelugeSettings settings); + void ReconnectToDaemon(DelugeSettings settings); } public class DelugeProxy : IDelugeProxy @@ -51,25 +51,14 @@ namespace NzbDrone.Core.Download.Clients.Deluge public string GetVersion(DelugeSettings settings) { - try + var methods = GetMethods(settings); + + if (methods.Contains("daemon.get_version")) { - var response = ProcessRequest(settings, "daemon.info"); - - return response; + return ProcessRequest(settings, "daemon.get_version"); } - catch (DownloadClientException ex) - { - if (ex.Message.Contains("Unknown method")) - { - // Deluge v2 beta replaced 'daemon.info' with 'daemon.get_version'. - // It may return or become official, for now we just retry with the get_version api. - var response = ProcessRequest(settings, "daemon.get_version"); - return response; - } - - throw; - } + return ProcessRequest(settings, "daemon.info"); } public Dictionary GetConfig(DelugeSettings settings) @@ -101,6 +90,13 @@ namespace NzbDrone.Core.Download.Clients.Deluge return GetTorrents(response); } + public string[] GetMethods(DelugeSettings settings) + { + var response = ProcessRequest(settings, "system.listMethods"); + + return response; + } + public string AddTorrentFromMagnet(string magnetLink, DelugeSettings settings) { dynamic options = new ExpandoObject(); @@ -158,20 +154,6 @@ namespace NzbDrone.Core.Download.Clients.Deluge ProcessRequest(settings, "core.queue_top", (object)new string[] { hash }); } - public string[] GetAvailablePlugins(DelugeSettings settings) - { - var response = ProcessRequest(settings, "core.get_available_plugins"); - - return response; - } - - public string[] GetEnabledPlugins(DelugeSettings settings) - { - var response = ProcessRequest(settings, "core.get_enabled_plugins"); - - return response; - } - public string[] GetAvailableLabels(DelugeSettings settings) { var response = ProcessRequest(settings, "label.get_labels"); @@ -222,6 +204,12 @@ namespace NzbDrone.Core.Download.Clients.Deluge ProcessRequest(settings, "label.set_torrent", hash, label); } + public void ReconnectToDaemon(DelugeSettings settings) + { + ProcessRequest(settings, "web.disconnect"); + ConnectDaemon(BuildRequest(settings)); + } + private JsonRpcRequestBuilder BuildRequest(DelugeSettings settings) { var url = HttpRequestBuilder.BuildBaseUrl(settings.UseSsl, settings.Host, settings.Port, settings.UrlBase); From 14716a140560af4ee2be89a3d74623776ba0c593 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Fri, 22 Nov 2024 18:39:35 -0800 Subject: [PATCH 112/275] New: Support for new SABnzbd history retention values (cherry picked from commit e361f18837d98c089f7dc9c0190221ca8e2cf225) --- .../SabnzbdTests/SabnzbdFixture.cs | 31 +++++++++++ .../Download/Clients/Sabnzbd/Sabnzbd.cs | 53 ++++++++++++++----- .../Clients/Sabnzbd/SabnzbdCategory.cs | 2 + 3 files changed, 72 insertions(+), 14 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabnzbdTests/SabnzbdFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabnzbdTests/SabnzbdFixture.cs index e22ede193..c6df33c28 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabnzbdTests/SabnzbdFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabnzbdTests/SabnzbdFixture.cs @@ -478,6 +478,37 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue(); } + [TestCase("all", 0)] + [TestCase("days-archive", 15)] + [TestCase("days-delete", 15)] + public void should_set_history_removes_completed_downloads_false_for_separate_properties(string option, int number) + { + _config.Misc.history_retention_option = option; + _config.Misc.history_retention_number = number; + + var downloadClientInfo = Subject.GetStatus(); + + downloadClientInfo.RemovesCompletedDownloads.Should().BeFalse(); + } + + [TestCase("number-archive", 10)] + [TestCase("number-delete", 10)] + [TestCase("number-archive", 0)] + [TestCase("number-delete", 0)] + [TestCase("days-archive", 3)] + [TestCase("days-delete", 3)] + [TestCase("all-archive", 0)] + [TestCase("all-delete", 0)] + public void should_set_history_removes_completed_downloads_true_for_separate_properties(string option, int number) + { + _config.Misc.history_retention_option = option; + _config.Misc.history_retention_number = number; + + var downloadClientInfo = Subject.GetStatus(); + + downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue(); + } + [TestCase(@"Y:\nzbget\root", @"completed\downloads", @"vv", @"Y:\nzbget\root\completed\downloads", @"Y:\nzbget\root\completed\downloads\vv")] [TestCase(@"Y:\nzbget\root", @"completed", @"vv", @"Y:\nzbget\root\completed", @"Y:\nzbget\root\completed\vv")] [TestCase(@"/nzbget/root", @"completed/downloads", @"vv", @"/nzbget/root/completed/downloads", @"/nzbget/root/completed/downloads/vv")] diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs index eea96653e..05d565718 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs @@ -276,20 +276,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd status.OutputRootFolders = new List { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, category.FullPath) }; } - if (config.Misc.history_retention.IsNullOrWhiteSpace()) - { - status.RemovesCompletedDownloads = false; - } - else if (config.Misc.history_retention.EndsWith("d")) - { - int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1), - out var daysRetention); - status.RemovesCompletedDownloads = daysRetention < 14; - } - else - { - status.RemovesCompletedDownloads = config.Misc.history_retention != "0"; - } + status.RemovesCompletedDownloads = RemovesCompletedDownloads(config); return status; } @@ -531,6 +518,44 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd return categories.Contains(category); } + private bool RemovesCompletedDownloads(SabnzbdConfig config) + { + var retention = config.Misc.history_retention; + var option = config.Misc.history_retention_option; + var number = config.Misc.history_retention_number; + + switch (option) + { + case "all": + return false; + case "number-archive": + case "number-delete": + return true; + case "days-archive": + case "days-delete": + return number < 14; + case "all-archive": + case "all-delete": + return true; + } + + // TODO: Remove these checks once support for SABnzbd < 4.3 is removed + + if (retention.IsNullOrWhiteSpace()) + { + return false; + } + + if (retention.EndsWith("d")) + { + int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1), + out var daysRetention); + return daysRetention < 14; + } + + return retention != "0"; + } + private bool ValidatePath(DownloadClientItem downloadClientItem) { var downloadItemOutputPath = downloadClientItem.OutputPath; diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdCategory.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdCategory.cs index 189b08257..4c678ce75 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdCategory.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdCategory.cs @@ -30,6 +30,8 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd public bool enable_date_sorting { get; set; } public bool pre_check { get; set; } public string history_retention { get; set; } + public string history_retention_option { get; set; } + public int history_retention_number { get; set; } } public class SabnzbdCategory From cc409d50f5a6994f662fdddf929481506128c63e Mon Sep 17 00:00:00 2001 From: Jared Date: Sun, 5 May 2024 01:54:42 +0000 Subject: [PATCH 113/275] New: Config file setting to disable log database (cherry picked from commit 92eab4b2e26741b7f20b6b7177418402cb15a3aa) --- src/Lidarr.Api.V1/Logs/LogController.cs | 10 +++++++++- src/Lidarr.Api.V1/Update/UpdateController.cs | 13 +++++++++++-- src/Lidarr.Http/PagingResource.cs | 2 +- .../ServiceFactoryFixture.cs | 1 + src/NzbDrone.Common/Options/LogOptions.cs | 1 + .../Configuration/ConfigFileProvider.cs | 3 ++- .../Extensions/CompositionExtensions.cs | 12 ++++++++++++ .../Update/History/UpdateHistoryService.cs | 7 +++++-- .../Update/RecentUpdateProvider.cs | 2 +- src/NzbDrone.Host/Bootstrap.cs | 19 +++++++++++++++++++ src/NzbDrone.Host/Startup.cs | 8 ++++++-- 11 files changed, 68 insertions(+), 10 deletions(-) diff --git a/src/Lidarr.Api.V1/Logs/LogController.cs b/src/Lidarr.Api.V1/Logs/LogController.cs index e08f56333..c232e3f58 100644 --- a/src/Lidarr.Api.V1/Logs/LogController.cs +++ b/src/Lidarr.Api.V1/Logs/LogController.cs @@ -2,6 +2,7 @@ using Lidarr.Http; using Lidarr.Http.Extensions; using Microsoft.AspNetCore.Mvc; using NzbDrone.Common.Extensions; +using NzbDrone.Core.Configuration; using NzbDrone.Core.Instrumentation; namespace Lidarr.Api.V1.Logs @@ -10,16 +11,23 @@ namespace Lidarr.Api.V1.Logs public class LogController : Controller { private readonly ILogService _logService; + private readonly IConfigFileProvider _configFileProvider; - public LogController(ILogService logService) + public LogController(ILogService logService, IConfigFileProvider configFileProvider) { _logService = logService; + _configFileProvider = configFileProvider; } [HttpGet] [Produces("application/json")] public PagingResource GetLogs([FromQuery] PagingRequestResource paging, string level) { + if (!_configFileProvider.LogDbEnabled) + { + return new PagingResource(); + } + var pagingResource = new PagingResource(paging); var pageSpec = pagingResource.MapToPagingSpec(); diff --git a/src/Lidarr.Api.V1/Update/UpdateController.cs b/src/Lidarr.Api.V1/Update/UpdateController.cs index 27cecce17..b67cae998 100644 --- a/src/Lidarr.Api.V1/Update/UpdateController.cs +++ b/src/Lidarr.Api.V1/Update/UpdateController.cs @@ -3,6 +3,7 @@ using System.Linq; using Lidarr.Http; using Microsoft.AspNetCore.Mvc; using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Core.Configuration; using NzbDrone.Core.Update; using NzbDrone.Core.Update.History; @@ -13,11 +14,13 @@ namespace Lidarr.Api.V1.Update { private readonly IRecentUpdateProvider _recentUpdateProvider; private readonly IUpdateHistoryService _updateHistoryService; + private readonly IConfigFileProvider _configFileProvider; - public UpdateController(IRecentUpdateProvider recentUpdateProvider, IUpdateHistoryService updateHistoryService) + public UpdateController(IRecentUpdateProvider recentUpdateProvider, IUpdateHistoryService updateHistoryService, IConfigFileProvider configFileProvider) { _recentUpdateProvider = recentUpdateProvider; _updateHistoryService = updateHistoryService; + _configFileProvider = configFileProvider; } [HttpGet] @@ -45,7 +48,13 @@ namespace Lidarr.Api.V1.Update installed.Installed = true; } - var installDates = _updateHistoryService.InstalledSince(resources.Last().ReleaseDate) + if (!_configFileProvider.LogDbEnabled) + { + return resources; + } + + var updateHistory = _updateHistoryService.InstalledSince(resources.Last().ReleaseDate); + var installDates = updateHistory .DistinctBy(v => v.Version) .ToDictionary(v => v.Version); diff --git a/src/Lidarr.Http/PagingResource.cs b/src/Lidarr.Http/PagingResource.cs index c5381f6d9..c38440df1 100644 --- a/src/Lidarr.Http/PagingResource.cs +++ b/src/Lidarr.Http/PagingResource.cs @@ -21,7 +21,7 @@ namespace Lidarr.Http public string SortKey { get; set; } public SortDirection SortDirection { get; set; } public int TotalRecords { get; set; } - public List Records { get; set; } + public List Records { get; set; } = new (); public PagingResource() { diff --git a/src/NzbDrone.Common.Test/ServiceFactoryFixture.cs b/src/NzbDrone.Common.Test/ServiceFactoryFixture.cs index 5ed08a3db..237febe74 100644 --- a/src/NzbDrone.Common.Test/ServiceFactoryFixture.cs +++ b/src/NzbDrone.Common.Test/ServiceFactoryFixture.cs @@ -30,6 +30,7 @@ namespace NzbDrone.Common.Test .AddNzbDroneLogger() .AutoAddServices(Bootstrap.ASSEMBLIES) .AddDummyDatabase() + .AddDummyLogDatabase() .AddStartupContext(new StartupContext("first", "second")); container.RegisterInstance(new Mock().Object); diff --git a/src/NzbDrone.Common/Options/LogOptions.cs b/src/NzbDrone.Common/Options/LogOptions.cs index 421059381..6460eeaa6 100644 --- a/src/NzbDrone.Common/Options/LogOptions.cs +++ b/src/NzbDrone.Common/Options/LogOptions.cs @@ -13,4 +13,5 @@ public class LogOptions public string SyslogServer { get; set; } public int? SyslogPort { get; set; } public string SyslogLevel { get; set; } + public bool? DbEnabled { get; set; } } diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 442a6fcd9..389728f84 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -57,6 +57,7 @@ namespace NzbDrone.Core.Configuration string SyslogServer { get; } int SyslogPort { get; } string SyslogLevel { get; } + bool LogDbEnabled { get; } string Theme { get; } string PostgresHost { get; } int PostgresPort { get; } @@ -238,7 +239,7 @@ namespace NzbDrone.Core.Configuration public string PostgresMainDb => _postgresOptions?.MainDb ?? GetValue("PostgresMainDb", "lidarr-main", persist: false); public string PostgresLogDb => _postgresOptions?.LogDb ?? GetValue("PostgresLogDb", "lidarr-log", persist: false); public int PostgresPort => (_postgresOptions?.Port ?? 0) != 0 ? _postgresOptions.Port : GetValueInt("PostgresPort", 5432, persist: false); - + public bool LogDbEnabled => _logOptions.DbEnabled ?? GetValueBoolean("LogDbEnabled", true, persist: false); public bool LogSql => _logOptions.Sql ?? GetValueBoolean("LogSql", false, persist: false); public int LogRotate => _logOptions.Rotate ?? GetValueInt("LogRotate", 50, persist: false); public int LogSizeLimit => Math.Min(Math.Max(_logOptions.SizeLimit ?? GetValueInt("LogSizeLimit", 1, persist: false), 0), 10); diff --git a/src/NzbDrone.Core/Datastore/Extensions/CompositionExtensions.cs b/src/NzbDrone.Core/Datastore/Extensions/CompositionExtensions.cs index c5e31f92c..67e251805 100644 --- a/src/NzbDrone.Core/Datastore/Extensions/CompositionExtensions.cs +++ b/src/NzbDrone.Core/Datastore/Extensions/CompositionExtensions.cs @@ -8,6 +8,12 @@ namespace NzbDrone.Core.Datastore.Extensions public static IContainer AddDatabase(this IContainer container) { container.RegisterDelegate(f => new MainDatabase(f.Create()), Reuse.Singleton); + + return container; + } + + public static IContainer AddLogDatabase(this IContainer container) + { container.RegisterDelegate(f => new LogDatabase(f.Create(MigrationType.Log)), Reuse.Singleton); return container; @@ -16,6 +22,12 @@ namespace NzbDrone.Core.Datastore.Extensions public static IContainer AddDummyDatabase(this IContainer container) { container.RegisterInstance(new MainDatabase(null)); + + return container; + } + + public static IContainer AddDummyLogDatabase(this IContainer container) + { container.RegisterInstance(new LogDatabase(null)); return container; diff --git a/src/NzbDrone.Core/Update/History/UpdateHistoryService.cs b/src/NzbDrone.Core/Update/History/UpdateHistoryService.cs index 09cf70602..7be7349e1 100644 --- a/src/NzbDrone.Core/Update/History/UpdateHistoryService.cs +++ b/src/NzbDrone.Core/Update/History/UpdateHistoryService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using NLog; using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Core.Configuration; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Update.History.Events; @@ -18,13 +19,15 @@ namespace NzbDrone.Core.Update.History { private readonly IUpdateHistoryRepository _repository; private readonly IEventAggregator _eventAggregator; + private readonly IConfigFileProvider _configFileProvider; private readonly Logger _logger; private Version _prevVersion; - public UpdateHistoryService(IUpdateHistoryRepository repository, IEventAggregator eventAggregator, Logger logger) + public UpdateHistoryService(IUpdateHistoryRepository repository, IEventAggregator eventAggregator, IConfigFileProvider configFileProvider, Logger logger) { _repository = repository; _eventAggregator = eventAggregator; + _configFileProvider = configFileProvider; _logger = logger; } @@ -58,7 +61,7 @@ namespace NzbDrone.Core.Update.History public void Handle(ApplicationStartedEvent message) { - if (BuildInfo.Version.Major == 10) + if (BuildInfo.Version.Major == 10 || !_configFileProvider.LogDbEnabled) { // Don't save dev versions, they change constantly return; diff --git a/src/NzbDrone.Core/Update/RecentUpdateProvider.cs b/src/NzbDrone.Core/Update/RecentUpdateProvider.cs index a3264300d..08cc39865 100644 --- a/src/NzbDrone.Core/Update/RecentUpdateProvider.cs +++ b/src/NzbDrone.Core/Update/RecentUpdateProvider.cs @@ -29,7 +29,7 @@ namespace NzbDrone.Core.Update { var branch = _configFileProvider.Branch; var version = BuildInfo.Version; - var prevVersion = _updateHistoryService.PreviouslyInstalled(); + var prevVersion = _configFileProvider.LogDbEnabled ? _updateHistoryService.PreviouslyInstalled() : null; return _updatePackageProvider.GetRecentUpdates(branch, version, prevVersion); } } diff --git a/src/NzbDrone.Host/Bootstrap.cs b/src/NzbDrone.Host/Bootstrap.cs index b8843c5a4..1e1c25ec6 100644 --- a/src/NzbDrone.Host/Bootstrap.cs +++ b/src/NzbDrone.Host/Bootstrap.cs @@ -94,6 +94,15 @@ namespace NzbDrone.Host .AddStartupContext(startupContext) .Resolve() .Route(appMode); + + if (config.GetValue(nameof(ConfigFileProvider.LogDbEnabled), true)) + { + c.AddLogDatabase(); + } + else + { + c.AddDummyLogDatabase(); + } }) .ConfigureServices(services => { @@ -139,6 +148,7 @@ namespace NzbDrone.Host var enableSsl = config.GetValue($"Lidarr:Server:{nameof(ServerOptions.EnableSsl)}") ?? config.GetValue(nameof(ConfigFileProvider.EnableSsl), false); var sslCertPath = config.GetValue($"Lidarr:Server:{nameof(ServerOptions.SslCertPath)}") ?? config.GetValue(nameof(ConfigFileProvider.SslCertPath)); var sslCertPassword = config.GetValue($"Lidarr:Server:{nameof(ServerOptions.SslCertPassword)}") ?? config.GetValue(nameof(ConfigFileProvider.SslCertPassword)); + var logDbEnabled = config.GetValue($"Lidarr:Log:{nameof(LogOptions.DbEnabled)}") ?? config.GetValue(nameof(ConfigFileProvider.LogDbEnabled), true); var urls = new List { BuildUrl("http", bindAddress, port) }; @@ -156,6 +166,15 @@ namespace NzbDrone.Host .AddNzbDroneLogger() .AddDatabase() .AddStartupContext(context); + + if (logDbEnabled) + { + c.AddLogDatabase(); + } + else + { + c.AddDummyLogDatabase(); + } }) .ConfigureServices(services => { diff --git a/src/NzbDrone.Host/Startup.cs b/src/NzbDrone.Host/Startup.cs index 75f393726..75f19260e 100644 --- a/src/NzbDrone.Host/Startup.cs +++ b/src/NzbDrone.Host/Startup.cs @@ -239,9 +239,13 @@ namespace NzbDrone.Host // instantiate the databases to initialize/migrate them _ = mainDatabaseFactory.Value; - _ = logDatabaseFactory.Value; - dbTarget.Register(); + if (configFileProvider.LogDbEnabled) + { + _ = logDatabaseFactory.Value; + dbTarget.Register(); + } + SchemaBuilder.Initialize(container); if (OsInfo.IsNotWindows) From 1f76f6cb192c913b333f41339059140e1099c118 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 30 Jun 2024 20:49:41 +0300 Subject: [PATCH 114/275] Fixed: Trimming disabled logs database (cherry picked from commit d5dff8e8d6301b661a713702e1c476705423fc4f) --- .../Housekeeping/Housekeepers/TrimLogDatabase.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Housekeeping/Housekeepers/TrimLogDatabase.cs b/src/NzbDrone.Core/Housekeeping/Housekeepers/TrimLogDatabase.cs index a719652af..5763a563e 100644 --- a/src/NzbDrone.Core/Housekeeping/Housekeepers/TrimLogDatabase.cs +++ b/src/NzbDrone.Core/Housekeeping/Housekeepers/TrimLogDatabase.cs @@ -1,18 +1,26 @@ -using NzbDrone.Core.Instrumentation; +using NzbDrone.Core.Configuration; +using NzbDrone.Core.Instrumentation; namespace NzbDrone.Core.Housekeeping.Housekeepers { public class TrimLogDatabase : IHousekeepingTask { private readonly ILogRepository _logRepo; + private readonly IConfigFileProvider _configFileProvider; - public TrimLogDatabase(ILogRepository logRepo) + public TrimLogDatabase(ILogRepository logRepo, IConfigFileProvider configFileProvider) { _logRepo = logRepo; + _configFileProvider = configFileProvider; } public void Clean() { + if (!_configFileProvider.LogDbEnabled) + { + return; + } + _logRepo.Trim(); } } From 4048f2bd72cad9fede454bf695e23d981b45a809 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 4 Dec 2024 15:32:54 +0000 Subject: [PATCH 115/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Albrt9527 <2563009889@qq.com> Co-authored-by: Anonymous Co-authored-by: Ardenet <1213193613@qq.com> Co-authored-by: GkhnGRBZ Co-authored-by: Havok Dan Co-authored-by: Languages add-on Co-authored-by: Mizuyoru_TW Co-authored-by: Robin Dadswell Co-authored-by: Rodion Co-authored-by: Weblate Co-authored-by: Weblate Co-authored-by: farebyting Co-authored-by: mryx007 Co-authored-by: sagstickler Co-authored-by: thelooter Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ar/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/de/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/el/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/he/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hu/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/id/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/is/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/it/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ja/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nb_NO/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ro/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sv/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/th/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/uk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/vi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_HANS/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_Hans/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_TW/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ar.json | 5 +- src/NzbDrone.Core/Localization/Core/bg.json | 5 +- src/NzbDrone.Core/Localization/Core/ca.json | 4 +- src/NzbDrone.Core/Localization/Core/cs.json | 5 +- src/NzbDrone.Core/Localization/Core/da.json | 5 +- src/NzbDrone.Core/Localization/Core/de.json | 420 +++++++++++------- src/NzbDrone.Core/Localization/Core/el.json | 6 +- src/NzbDrone.Core/Localization/Core/es.json | 6 +- src/NzbDrone.Core/Localization/Core/fi.json | 7 +- src/NzbDrone.Core/Localization/Core/fr.json | 6 +- src/NzbDrone.Core/Localization/Core/he.json | 5 +- src/NzbDrone.Core/Localization/Core/hi.json | 5 +- src/NzbDrone.Core/Localization/Core/hr.json | 4 +- src/NzbDrone.Core/Localization/Core/hu.json | 9 +- src/NzbDrone.Core/Localization/Core/id.json | 3 +- src/NzbDrone.Core/Localization/Core/is.json | 5 +- src/NzbDrone.Core/Localization/Core/it.json | 6 +- src/NzbDrone.Core/Localization/Core/ja.json | 6 +- src/NzbDrone.Core/Localization/Core/ko.json | 8 +- .../Localization/Core/nb_NO.json | 3 +- src/NzbDrone.Core/Localization/Core/nl.json | 4 +- src/NzbDrone.Core/Localization/Core/pl.json | 4 +- src/NzbDrone.Core/Localization/Core/pt.json | 6 +- .../Localization/Core/pt_BR.json | 12 +- src/NzbDrone.Core/Localization/Core/ro.json | 6 +- src/NzbDrone.Core/Localization/Core/ru.json | 8 +- src/NzbDrone.Core/Localization/Core/sk.json | 3 +- src/NzbDrone.Core/Localization/Core/sv.json | 7 +- src/NzbDrone.Core/Localization/Core/th.json | 5 +- src/NzbDrone.Core/Localization/Core/tr.json | 149 ++++--- src/NzbDrone.Core/Localization/Core/uk.json | 7 +- src/NzbDrone.Core/Localization/Core/vi.json | 12 +- .../Localization/Core/zh_CN.json | 11 +- .../Localization/Core/zh_Hans.json | 7 + .../Localization/Core/zh_TW.json | 17 +- 35 files changed, 475 insertions(+), 306 deletions(-) create mode 100644 src/NzbDrone.Core/Localization/Core/zh_Hans.json diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 87f988eb7..4efd0bcee 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -467,7 +467,6 @@ "Connect": "الاتصال", "CustomFilters": "مرشحات مخصصة", "Date": "تاريخ", - "DefaultDelayProfileHelpText": "هذا هو ملف التعريف الافتراضي. ينطبق هذا على جميع الأفلام التي ليس لها ملف تعريف صريح.", "Deleted": "تم الحذف", "Details": "تفاصيل", "Donations": "التبرعات", @@ -752,5 +751,7 @@ "UnmappedFiles": "المجلدات غير المعينة", "Clone": "قريب", "EditReleaseProfile": "تحرير ملف تعريف التأخير", - "AddReleaseProfile": "تحرير ملف تعريف التأخير" + "AddReleaseProfile": "تحرير ملف تعريف التأخير", + "Season": "السبب", + "AddDelayProfileError": "غير قادر على إضافة ملف تعريف جودة جديد ، يرجى المحاولة مرة أخرى." } diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index fdff7363c..f8feea85f 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -467,7 +467,6 @@ "Backup": "Архивиране", "Close": "Близо", "Date": "Дата", - "DefaultDelayProfileHelpText": "Това е профилът по подразбиране. Прилага се за всички филми, които нямат изричен профил.", "Deleted": "Изтрито", "Details": "Подробности", "Donations": "Дарения", @@ -752,5 +751,7 @@ "EditReleaseProfile": "Редактиране на профил за забавяне", "Clone": "Близо", "AddReleaseProfile": "Редактиране на профил за забавяне", - "UnmappedFiles": "Немапирани папки" + "UnmappedFiles": "Немапирани папки", + "Season": "Причина", + "AddDelayProfileError": "Не може да се добави нов качествен профил, моля, опитайте отново." } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 52e52df51..5513910cc 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -482,7 +482,6 @@ "Custom": "Personalitzat", "CustomFilters": "Filtres personalitzats", "Date": "Data", - "DefaultDelayProfileHelpText": "Aquest és el perfil predeterminat. S'aplica a totes les pel·lícules que no tenen un perfil explícit.", "Deleted": "S'ha suprimit", "Details": "Detalls", "Error": "Error", @@ -959,5 +958,6 @@ "OnLatestVersion": "La darrera versió de {appName} ja està instal·lada", "Shutdown": "Apaga", "UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,", - "UnmappedFiles": "Carpetes sense mapejar" + "UnmappedFiles": "Carpetes sense mapejar", + "AddDelayProfileError": "No s'ha pogut afegir un perfil de retard, torna-ho a provar." } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 4d1921648..b0b11a77f 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -477,7 +477,6 @@ "Custom": "Zvyk", "CustomFilters": "Vlastní filtry", "Date": "datum", - "DefaultDelayProfileHelpText": "Toto je výchozí profil. Platí pro všechny filmy, které nemají explicitní profil.", "DoNotPrefer": "Nepřednostňovat", "DoNotUpgradeAutomatically": "Neupgradovat automaticky", "DownloadFailed": "Stažení se nezdařilo", @@ -882,5 +881,7 @@ "UpdateAppDirectlyLoadError": "{appName} nelze aktualizovat přímo,", "ExternalUpdater": "{appName} je nakonfigurován pro použití externího aktualizačního mechanismu", "OnLatestVersion": "Nejnovější verze aplikace {appName} je již nainstalována", - "UnmappedFiles": "Nezmapované složky" + "UnmappedFiles": "Nezmapované složky", + "DownloadImported": "Stahování ignorováno", + "AddDelayProfileError": "Nelze přidat nový kvalitní profil, zkuste to znovu." } diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index db7c9bd09..31aab4bae 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -466,7 +466,6 @@ "Close": "Luk", "Connect": "Tilslut", "Date": "Dato", - "DefaultDelayProfileHelpText": "Dette er standardprofilen. Det gælder for alle film, der ikke har en eksplicit profil.", "Deleted": "Slettet", "Details": "Detaljer", "DownloadFailed": "Download fejlede", @@ -783,5 +782,7 @@ "UpdateAppDirectlyLoadError": "Kan ikke opdatere {appName} direkte,", "EditReleaseProfile": "Rediger forsinkelsesprofil", "UnmappedFiles": "Ikke-kortlagte mapper", - "Clone": "Luk" + "Clone": "Luk", + "AddReleaseProfile": "Rediger forsinkelsesprofil", + "AddDelayProfileError": "Kan ikke tilføje en ny forsinkelsesprofil. Prøv venligst igen." } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index f5b846086..f4e73212f 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -31,11 +31,11 @@ "DiskSpace": "Speicherplatz", "DownloadClientSettings": "Downloader Einstellungen", "DownloadWarningCheckDownloadClientForMoreDetails": "Download Warnung: Prüfe den Downloader für mehr Details", - "EnableColorImpairedMode": "Farbbeeinträchtigter Modus aktivieren", - "EnableCompletedDownloadHandlingHelpText": "Importiere fertige Downloads vom Downloader automatisch", + "EnableColorImpairedMode": "Farbenblindmodus aktivieren", + "EnableCompletedDownloadHandlingHelpText": "Automatischer Import abgeschlossener Downloads vom Download Client", "EnableSSL": "SSL", "EnableSslHelpText": " Erfordert einen Neustart als Administrator", - "ErrorLoadingContents": "Fehler beim laden der Inhalte", + "ErrorLoadingContents": "Fehler beim Laden von Inhalten", "CutoffUnmet": "Schwelle nicht erreicht", "Actions": "Aktionen", "Authentication": "Authentifizierung", @@ -71,16 +71,16 @@ "DetailedProgressBarHelpText": "Text auf Fortschrittsbalken anzeigen", "Docker": "Docker", "DownloadClient": "Downloader", - "DownloadClients": "Downloader", + "DownloadClients": "Download Clients", "DownloadFailedCheckDownloadClientForMoreDetails": "Download fehlgeschlagen: Prüfe den Downloader für mehr Details", "DownloadFailedInterp": "Download fehlgeschlagen: {0}", - "Downloading": "Lädt herunter", + "Downloading": "wird runtergeladen", "Edit": "Bearbeiten", "Enable": "Aktivieren", - "EnableAutomaticAdd": "Automatisch hinzufügen", + "EnableAutomaticAdd": "Automatisches Hinzufügen aktivieren", "EnableAutomaticSearch": "Automatische Suche einschalten", - "EnableColorImpairedModeHelpText": "Alternativer Stil, um farbbeeinträchtigten Benutzern eine bessere Unterscheidung farbcodierter Informationen zu ermöglichen", - "EnableHelpText": "Metadaten Dateien erstellen für diesen Metadata Typ", + "EnableColorImpairedModeHelpText": "Stiländerung, um es Farbenblinden Benutzern zu ermöglichen, farbcodierte Informationen besser zu unterscheiden", + "EnableHelpText": "Aktiviere die Erstellung von Metadaten-Dateien für diesen Metadaten-Typ", "EnableInteractiveSearch": "Interaktive Suche einschalten", "EnableRSS": "RSS aktivieren", "Ended": "Beendet", @@ -111,7 +111,7 @@ "ArtistAlbumClickToChangeTrack": "Klicken um den Film zu bearbeiten", "ArtistNameHelpText": "Der Name des auszuschließenden Autors/Buches (kann etwas Sinnvolles sein)", "CalendarWeekColumnHeaderHelpText": "Wird in der Wochenansicht über jeder Spalte angezeigt", - "CancelPendingTask": "Diese laufende Aufgabe wirklich abbrechen?", + "CancelPendingTask": "Möchten Sie diese ausstehende Aufgabe wirklich abbrechen?", "ChownGroupHelpText": "Gruppenname oder gid. Verwenden Sie gid für entfernte Dateisysteme.", "ChownGroupHelpTextWarning": "Dies funktioniert nur, wenn der Benutzer, der {appName} ausführt, der Eigentümer der Datei ist. Es ist besser, sicherzustellen, dass der Download-Client die gleiche Gruppe wie {appName} verwendet.", "CreateEmptyArtistFoldersHelpText": "Leere Filmordner für fehlende Filme beim Scan erstellen", @@ -151,21 +151,21 @@ "MarkAsFailed": "Als fehlgeschlagen markieren", "MarkAsFailedMessageText": "'{0}' wirklich als fehlgeschlagen markieren?", "MaximumSizeHelpText": "Maximale Größe für ein zu erfassendes Release in MB. 0 bedeutet unbegrenzt.", - "Mechanism": "Verfahren", + "Mechanism": "Mechanismus", "Message": "Nachricht", - "MetadataSettings": "Metadaten Einstellungen", + "MetadataSettings": "Einstellungen für Metadaten", "GeneralSettings": "Allgemeine Einstellungen", - "Global": "Global", + "Global": "Weltweit", "GoToInterp": "Zu {0} gehen", - "MinimumAgeHelpText": "Nur Usenet: Mindestalter in Minuten der NZBs bevor sie erfasst werden. Gebe damit neuen Releases Zeit, sich bei deinem Usenet Provider zu verbreiten.", + "MinimumAgeHelpText": "Nur Usenet: Mindestalter in Minuten von NZBs, bevor sie heruntergeladen werden. Verwende dies, um neuen Releases Zeit zu geben, zu deinem Usenet-Anbieter zu propagieren.", "MinimumFreeSpaceWhenImportingHelpText": "Importieren verhindern wenn weniger als dieser Wert als freier Speicher zur Verfügung steht", - "MinimumLimits": "Mindest Grenzen", + "MinimumLimits": "Minimale Grenzen", "Missing": "Fehlend", "Options": "Optionen", "PageSizeHelpText": "Anzahl der Einträge pro Seite", "Port": "Port", - "PortNumber": "Port Nummer", - "PosterSize": "Plakatgröße", + "PortNumber": "Portnummer", + "PosterSize": "Postergröße", "Profiles": "Profile", "Proper": "Korrekt", "PropersAndRepacks": "Propers und Repacks", @@ -174,45 +174,45 @@ "ProxyBypassFilterHelpText": "Verwenden Sie ',' als Trennzeichen und '*.' als Wildcard für Subdomains", "ProxyPasswordHelpText": "Sie müssen nur einen Benutzernamen und ein Passwort eingeben, wenn dies erforderlich ist. Andernfalls lassen Sie sie leer.", "ProxyType": "Proxy-Typ", - "Grab": "Erfassen", + "Grab": "Holen", "PublishedDate": "Veröffentlichungsdatum", "Quality": "Qualität", "RemoveFromBlocklist": "Aus der Sperrliste entfernen", "RemoveFromDownloadClient": "Aus dem Download Client entfernen", - "RemoveFromQueue": "Aus der Warteschlage entfernen", + "RemoveFromQueue": "Aus der Warteschlange entfernen", "RemoveTagRemovingTag": "Tag entfernen", "RenameTracksHelpText": "{appName} verwendet den vorhandenen Dateinamen, wenn die Umbenennung deaktiviert ist", - "Reorder": "Neu sortieren", - "ReplaceIllegalCharacters": "Sonderzeichen ersetzen", + "Reorder": "Neu anordnen", + "ReplaceIllegalCharacters": "Illegale Zeichen ersetzen", "ReplaceIllegalCharactersHelpText": "Ersetze illegale Zeichen. Wenn nicht ausgewählt, werden sie stattdessen von {appName} entfernt", "RequiredHelpText": "Das Release mus mindesten eines der Begriffe beinhalten ( Groß-/Kleinschreibung wird nicht beachtet )", "RescanArtistFolderAfterRefresh": "Nach dem aktualisieren den Filmordner neu scannen", "ResetAPIKeyMessageText": "Bist du sicher, dass du den API-Schlüssel zurücksetzen willst?", "RestartNow": "Jetzt neustarten", "Restore": "Wiederherstellen", - "Retention": "Aufbewahrung ( Retention )", + "Retention": "Aufbewahrung", "RetryingDownloadOn": "Erneuter Downloadversuch am {date} um {time}", "ShownAboveEachColumnWhenWeekIsTheActiveView": "Wird in der Wochenansicht über jeder Spalte angezeigt", - "ShowQualityProfileHelpText": "Qualitätsprofil unter dem Plakat anzeigen", - "ShowRelativeDates": "Relatives Datum anzeigen", - "ShowRelativeDatesHelpText": "Relatives (z.B.: Heute, gestern, etc) oder absolutes Datum anzeigen", + "ShowQualityProfileHelpText": "Qualitätsprofil unter dem Poster anzeigen", + "ShowRelativeDates": "Relative Daten anzeigen", + "ShowRelativeDatesHelpText": "Relative (Heute/Gestern/etc.) oder absolute Daten anzeigen", "ShowSearchActionHelpText": "Suchbutton anzeigen beim draufzeigen", "ShowUnknownArtistItems": "Unzugeordente Filmeinträge anzeigen", "SslCertPasswordHelpText": "Passwort für die PFX Datei", "SslCertPasswordHelpTextWarning": "Erfordert einen Neustart", "SSLPort": "SSL Port", "SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Der Indexer unterstützt keine Suchen", - "GrabRelease": "Release erfassen", - "GrabSelected": "Auswahl erfassen", + "GrabRelease": "Release holen", + "GrabSelected": "Auswahl abrufen", "Group": "Gruppe", "SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByLidarr": "Wird verwendet, wenn die automatische Suche über die Benutzeroberfläche oder durch {appName} durchgeführt wird", "SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Wird für die manuelle Suche benutzt", - "RssSyncIntervalHelpText": "Intervall in Minuten. Zum deaktivieren auf 0 setzen ( Dies wird das automatische Release erfassen deaktivieren )", + "RssSyncIntervalHelpText": "Intervall in Minuten. Setze auf null, um es zu deaktivieren (dies stoppt alle automatischen Release-Abfragen)", "SSLCertPath": "Pfad zum SSL Zertifikat", "AlternateTitleslength1Titles": "Titel", "AnalyticsEnabledHelpTextWarning": "Erfordert einen Neustart", "AnyReleaseOkHelpText": "{appName} wechselt automatisch zu der Edition, die am besten zu den heruntergeladenen Dateien passt", - "SearchAll": "Suche alle", + "SearchAll": "Alle durchsuchen", "SslPortHelpTextWarning": "Erfordert einen Neustart", "StandardTrackFormat": "Standard Filmformat", "UnableToAddANewDownloadClientPleaseTryAgain": "Der neue Downloader konnte nicht hinzugefügt werden, bitte erneut probieren.", @@ -244,12 +244,12 @@ "UnableToLoadTags": "Tags konnten nicht geladen werden", "UnableToLoadTheCalendar": "Kalender konnte nicht geladen werden", "UnableToLoadUISettings": "Oberflächen Einstellungen konnten nicht geladen werden", - "Ungroup": "Gruppe entfernen", - "Unmonitored": "Nicht beobachtet", + "Ungroup": "Gruppierung aufheben", + "Unmonitored": "Nicht überwacht", "UnmonitoredHelpText": "Nicht beobachtete Filme im iCal-Feed einschließen", "UpdateAll": "Alle aktualisieren", "UpdateAutomaticallyHelpText": "Updates automatisch herunteraden und installieren. Es kann weiterhin unter \"System -> Updates\" ein manuelles Update angestoßen werden", - "UpdateMechanismHelpText": "{appName}'s Build-In Updater oder ein Script nutzen", + "UpdateMechanismHelpText": "Verwenden Sie den integrierten Updater von {appName} oder ein Skript", "UpdateScriptPathHelpText": "Pfad zu einem benutzerdefinierten Skript, das ein extrahiertes Update-Paket übernimmt und den Rest des Update-Prozesses abwickelt", "UpgradeAllowedHelpText": "Wenn deaktiviert wird die Qualität nicht verbessert", "Uptime": "Laufzeit", @@ -265,10 +265,10 @@ "Host": "Host", "HostHelpText": "Derselbe Host, den du für den Remote-Download-Client angegeben hast", "Hostname": "Hostname", - "ICalFeed": "iCal-Feed", + "ICalFeed": "iCal Feed", "UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Git-Branch für den externen Updateablauf", "Version": "Version", - "WeekColumnHeader": "Wochen Spalten Titel", + "WeekColumnHeader": "Spaltenüberschrift „Woche“.", "WriteMetadataToAudioFiles": "Metadaten in Audiodateien schreiben", "Year": "Jahr", "YesCancel": "Ja, abbrechen", @@ -281,20 +281,20 @@ "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "Der Indexer unterstützt kein RSS", "BindAddressHelpTextWarning": "Erfordert einen Neustart", "UsingExternalUpdateMechanismBranchToUseToUpdateLidarr": "Verwendeter Git-Branch, um {appName} zu aktualisieren", - "SearchForMissing": "Suche fehlende", - "SearchSelected": "Auswahl suchen", + "SearchForMissing": "Suche nach fehlenden Episoden", + "SearchSelected": "Ausgewählte durchsuchen", "Season": "Staffel", "Security": "Sicherheit", "SendAnonymousUsageData": "Anonyme Nutzungsdaten übertragen", - "SetPermissions": "Rechte setzen", - "SetPermissionsLinuxHelpText": "Soll CHMOD ausgeführt werden wenn Datien importiert/umbenannt werden?", + "SetPermissions": "Berechtigungen festlegen", + "SetPermissionsLinuxHelpText": "Soll chmod beim Importieren/Umbenennen von Dateien ausgeführt werden?", "SetPermissionsLinuxHelpTextWarning": "Ändere diese Einstellung nur, wenn du weißt was sie bewirken.", "Settings": "Einstellungen", "ShortDateFormat": "Kurzes Datumsformat", "ShowCutoffUnmetIconHelpText": "Symbol zeigen wenn die Qualitätsschwelle noch nicht erreicht wurde", "ShowDateAdded": "Datum \"Hinzugefügt\" anzeigen", - "ShowMonitored": "Beobachtete anzeigen", - "ShowMonitoredHelpText": "Beobachtungsstatus unter dem Plakat anzeigen", + "ShowMonitored": "Überwachter Status anzeigen", + "ShowMonitoredHelpText": "Überwachungsstatus unter dem Poster anzeigen", "Size": " Größe", "SkipFreeSpaceCheck": "Prüfung des freien Speichers überspringen", "ICalHttpUrlHelpText": "Füge diese URL in deinen Client ein oder klicke auf abonnieren wenn dein Browser Webcal untertützt", @@ -309,54 +309,54 @@ "IgnoredPlaceHolder": "Neue Beschränkung hinzufügen", "IllRestartLater": "Später neustarten", "ImportedTo": "Importiert nach", - "ImportExtraFiles": "Extra Dateien importieren", + "ImportExtraFiles": "Zusätzliche Dateien importieren", "ImportExtraFilesHelpText": "Importiere zutreffende Extra Dateien (Untertitel, nfo, etc.) nach dem Importieren einer Filmdatei", "ImportFailedInterp": "Import fehlgeschlagen: {0}", "Importing": "Importiere", - "IncludeUnmonitored": "Nicht beobachtete einbeziehen", - "IndexerPriority": "Priorität", + "IncludeUnmonitored": "Unüberwachte einbeziehen", + "IndexerPriority": "Indexer-Priorität", "Indexers": "Indexer", - "IndexerSettings": "Indexer Einstellungen", + "IndexerSettings": "Indexer-Einstellungen", "Label": "Label", "LaunchBrowserHelpText": " Öffne die Startseite von {appName} im Webbrowser nach dem Start.", - "Level": "Stufe", + "Level": "Level", "LidarrSupportsAnyDownloadClientThatUsesTheNewznabStandardAsWellAsOtherDownloadClientsListedBelow": "{appName} unterstützt viele populäre Torrent und Usenet Download Clients.", "Local": "Lokal", "LogFiles": "Protokolldateien", "Logging": "Protokollierung", - "LogLevel": "Log Level", + "LogLevel": "Protokollstufe", "LongDateFormat": "Langes Datumsformat", "MaximumLimits": "Maximale Grenzen", "MaximumSize": "Maximale Größe", - "MediaInfo": "Medien Information", - "MediaManagementSettings": "Medienverwaltungs Einstellungen", + "MediaInfo": "Medieninfo", + "MediaManagementSettings": "Einstellungen zur Medienverwaltung", "Medium": "Medium", "MIA": "MIA", "MinimumAge": "Mindestalter", - "MinimumFreeSpace": "Mindest freier Speicher", + "MinimumFreeSpace": "Mindestfreier Speicherplatz", "Mode": "Modus", - "Monitored": "Beobachtet", + "Monitored": "Überwacht", "MoreInfo": "Mehr Infos", - "MustContain": "Muss beinhalten", - "MustNotContain": "Darf nicht beinhalten", + "MustContain": "Muss enthalten", + "MustNotContain": "Darf nicht enthalten", "Name": "Name", - "NamingSettings": "Bennenungs Einstellungen", + "NamingSettings": "Benennungseinstellungen", "New": "Neu", - "NoBackupsAreAvailable": "Es sind keine Backups vorhanden", + "NoBackupsAreAvailable": "Keine Sicherungen verfügbar", "NoHistory": "Kein Verlauf.", - "NoLeaveIt": "Nein, nicht ändern", - "NoLogFiles": "Keine Log-Dateien", + "NoLeaveIt": "Nein, lass es", + "NoLogFiles": "Keine Logdateien", "None": "Keine", - "NotificationTriggers": "Benachrichtigungs Auslöser", + "NotificationTriggers": "Benachrichtigungs-Auslöser", "NoUpdatesAreAvailable": "Es sind keine Updates verfügbar", "OpenBrowserOnStart": "Browser beim Start öffnen", - "Original": "Orginal", - "PackageVersion": "Paket Version", + "Original": "Original", + "PackageVersion": "Paketversion", "PageSize": "Einträge pro Seite", "Password": "Passwort", "Path": "Pfad", - "Permissions": "Rechte", - "PreviewRename": "Umbenennen", + "Permissions": "Berechtigungen", + "PreviewRename": "Vorschau Umbenennung", "Proxy": "Proxy", "ProxyUsernameHelpText": "Sie müssen nur einen Benutzernamen und ein Passwort eingeben, wenn dies erforderlich ist. Andernfalls lassen Sie sie leer.", "QualityProfile": "Qualitätsprofil", @@ -379,16 +379,16 @@ "ReleaseRejected": "Release abgelehnt", "ReleaseStatuses": "Releasestatus", "ReleaseWillBeProcessedInterp": "Release wird verarbeitet {0}", - "Reload": "Neuladen", - "RemotePath": "Entfernter Pfad", + "Reload": "Neu laden", + "RemotePath": "Remote-Pfad", "RemotePathHelpText": "Root-Pfad zum Verzeichnis, auf das der Download-Client zugreift", "RemotePathMappings": "Remote-Pfadzuordnungen", "Remove": "Entfernen", - "RemoveCompletedDownloadsHelpText": "Importierte Downloads aus dem Downloader Verlauf entfernen", + "RemoveCompletedDownloadsHelpText": "Entferne importierte Downloads aus der Download-Client-Historie", "RemovedFromTaskQueue": "Aus der Aufgabenwarteschlage entfernt", "RemoveFailedDownloadsHelpText": "Fehlgeschlagene Downloads aus dem Downloader Verlauf entfernen", "RemoveFilter": "Filter entfernen", - "RemoveSelected": "Auswahl entfernen", + "RemoveSelected": "Ausgewählte entfernen", "RemoveTagExistingTag": "Vorhandener Tag", "RequiredPlaceHolder": "Neue Beschränkung hinzufügen", "RequiresRestartToTakeEffect": "Erfordert einen Neustart", @@ -401,14 +401,14 @@ "RestoreBackup": "Backup einspielen", "Result": "Ergebnis", "RetentionHelpText": "Nur Usenet: Für eine umbegrenzte Aufbewahrung auf 0 setzen", - "RootFolder": "Stammverzeichnis", + "RootFolder": "Root-Ordner", "RSSSync": "RSS-Sync", "RSSSyncInterval": "RSS Synchronisierungs Intervall", "ShowPath": "Pfad anzeigen", - "ShowQualityProfile": "Qualitätsdefinition anzeigen", + "ShowQualityProfile": "Qualitätsprofil anzeigen", "ShowSearch": "Suche anzeigen", - "ShowSizeOnDisk": "Belegter Speicherplatz anzeigen", - "TagIsNotUsedAndCanBeDeleted": "Tag wird nicht benutzt und kann gelöscht werden", + "ShowSizeOnDisk": "Größe auf der Festplatte anzeigen", + "TagIsNotUsedAndCanBeDeleted": "Tag wird nicht verwendet und kann gelöscht werden", "Tags": "Tags", "Tasks": "Aufgaben", "TestAll": "Alle testen", @@ -428,7 +428,7 @@ "Type": "Typ", "UiSettings": "Benutzeroberflächen Einstellungen", "Tracks": "Trace", - "RootFolders": "Stammordner", + "RootFolders": "Root-Ordner", "SSLCertPassword": "SSL Zertifikat Passwort", "20MinutesTwenty": "20 Minuten: {0}", "45MinutesFourtyFive": "45 Minuten: {0}", @@ -447,8 +447,8 @@ "ApiKeyHelpTextWarning": "Erfordert einen Neustart", "NETCore": ".NET", "Scheduled": "Geplant", - "ScriptPath": "Script Pfad", - "Search": "Suche", + "ScriptPath": "Skript-Pfad", + "Search": "Suchen", "SslCertPathHelpText": "Pfad zur PFX Datei", "SslCertPathHelpTextWarning": "Erfordert einen Neustart", "ArtistFolderFormat": "Autor Orderformat", @@ -493,7 +493,7 @@ "ExistingTagsScrubbed": "Vorhandene Tags wurden gelöscht", "ExpandEPByDefaultHelpText": "Folgen", "HideTracks": "Titel verstecken", - "ImportListExclusions": "Ausschlüsse der Importliste", + "ImportListExclusions": "Ausschlüsse aus der Importliste", "IsInUseCantDeleteAQualityProfileThatIsAttachedToAnArtistOrImportList": "Ein Qualitätsprofil, dass einem Künstler oder einer Importliste zugeordnet ist, kann nicht gelöscht werden", "IsShowingMonitoredMonitorSelected": "Beobachte ausgewählte", "MissingAlbums": "Fehlende Alben", @@ -501,7 +501,7 @@ "MusicBrainzRecordingID": "MusicBrainz Aufnahme Id", "NoneData": "Es werden keine Alben beobachtet", "OnApplicationUpdate": "Bei Anwendungsaktualisierung", - "OnGrab": "Bei Erfassung", + "OnGrab": "Bei Abruf", "OnImportFailure": "Bei fehlgeschlagenem Import", "PathHelpTextWarning": "Dies muss ein anderes Verzeichnis sein als das, in dem der Download Client die Dateien ablegt", "PreviewRetag": "Retag Vorschau", @@ -516,7 +516,7 @@ "TrackFilesCountMessage": "Keine Titeldateien", "SearchForAllMissingAlbums": "Suche nach allen fehlenden Alben", "SearchForMonitoredAlbums": "Suche nach beobachteten Alben", - "SearchMonitored": "Suche beobachtete", + "SearchMonitored": "Suche überwachte Episoden", "SecondaryAlbumTypes": "Sekundäre Albentypen", "SecondaryTypes": "Sekundärtypen", "SelectedCountArtistsSelectedInterp": "{selectedCount} Künstler ausgewählt", @@ -589,7 +589,7 @@ "MissingTracksArtistNotMonitored": "Fehlende Titel (Künstler nicht beobachtet)", "MonitorArtist": "Beobachte Künstler", "MonitoredHelpText": "Herunterladen von beobachteten Alben dieses Künstlers", - "MonitoringOptions": "Beobachtungsoptionen", + "MonitoringOptions": "Überwachungsoptionen", "MultiDiscTrackFormat": "Multi-Disc-Titel-Format", "MusicBrainzAlbumID": "MusicBrainz Album Id", "MusicBrainzArtistID": "MusicBranz Künstler Id", @@ -606,8 +606,8 @@ "PathHelpText": "Stammordner für die Musikbibliothek", "QualityProfileIdHelpText": "Qualitätsprofil mit dem Listemelemente hinzugefügt werden sollen", "Release": " Veröffentlichung", - "ReleaseProfiles": "Veröffentlichungsprofile", - "RemoveDownloadsAlert": "Die Einstellungen zum Entfernen wurden in die individuellen Download Client Einstellungen in der obigen Tabelle verschoben.", + "ReleaseProfiles": "Release-Profile", + "RemoveDownloadsAlert": "Die Entfernen-Einstellungen wurden in die einzelnen Download-Client-Einstellungen in der Tabelle oben verschoben.", "RemoveFailed": "Fehlgeschlagene entfernen", "RootFolderPathHelpText": "Die Elemente im Stammverzeichnis werden hinzugefügt zu", "SceneInformation": "Szeneninformationen", @@ -622,10 +622,9 @@ "ShowLastAlbum": "Zeige neuestes Album", "ShowName": "Zeige Name", "ShowTitleHelpText": "Zeige Künstlername unter Poster", - "SkipRedownload": "Überspringe erneuten Download", + "SkipRedownload": "Neu-Download überspringen", "SpecificAlbum": "Bestimmtes Album", "StatusEndedContinuing": "Fortfahren", - "TagsHelpText": "Veröffentlichungsprofile gelten für Künstler mit mindestens einem passenden Tag. Leer lassen, damit es für alle Künstler gilt", "TheAlbumsFilesWillBeDeleted": "Die Dateien des Albums werden gelöscht.", "TheArtistFolderStrongpathstrongAndAllOfItsContentWillBeDeleted": "Der Ordner des Künstlers '{0}' und der gesamte Inhalt werden gelöscht.", "TotalTrackCountTracksTotalTrackFileCountTracksWithFilesInterp": "{0} Titel insgesamt. {1} Titel mit Dateien.", @@ -640,7 +639,7 @@ "WriteAudioTagsHelpTextWarning": "Wenn Sie \"Alle Dateien\" auswählen, werden vorhandene Dateien beim Import geändert.", "MusicbrainzId": "MusicBrainz Id", "AlbumStudio": "Albumstudio", - "OnHealthIssue": "Bei Zustandsproblem", + "OnHealthIssue": "Bei Gesundheitsproblem", "AddedArtistSettings": "Autor Einstellungen hinzugefügt", "ImportListSpecificSettings": "Listenspezifische Einstellungen importieren", "Activity": "Aktivität", @@ -670,52 +669,51 @@ "Connect": "Verbinden", "CustomFilters": "Eigene Filter", "Date": "Datum", - "DefaultDelayProfileHelpText": "Dies ist das Standart Profil. Es wird auf alle Filme angewendet die kein expliziertes Profil haben.", "Deleted": "Gelöscht", "Details": "Details", "Donations": "Spenden", "DoNotPrefer": "Nicht bevorzugen", "DoNotUpgradeAutomatically": "Nicht automatisch upgraden", - "DownloadFailed": "Download fehlgeschlagen", - "EditDelayProfile": "Verzögerungsprofil bearbeiten", - "EditImportListExclusion": "Importlisten Ausschluss löschen", + "DownloadFailed": "Download gescheitert", + "EditDelayProfile": "Delay Profil bearbeiten", + "EditImportListExclusion": "Importliste-Ausnahmen bearbeiten", "EditQualityProfile": "Qualitätsprofil bearbeiten", - "EditRemotePathMapping": "Entfernte Pfadzuordnung bearbeiten", + "EditRemotePathMapping": "Remote Pfadzuordnung bearbeiten", "EditRootFolder": "Stammordner hinzufügen", - "ErrorRestoringBackup": "Fehler beim Wiederherstellen", - "Events": "Events", - "EventType": "Event Typ", + "ErrorRestoringBackup": "Fehler beim Wiederherstellen der Sicherung", + "Events": "Ereignisse", + "EventType": "Ereignistyp", "Filters": "Filter", - "FreeSpace": "Freier Speicher", + "FreeSpace": "Freier Platz", "General": "Allgemein", "Genres": "Genres", - "Grabbed": "Erfasste", + "Grabbed": "Geholt", "HardlinkCopyFiles": "Hardlink/Dateien kopieren", - "HideAdvanced": "Erweiterte Ansicht", + "HideAdvanced": "Erweiterte Einstellungen ausblenden", "Ignored": "Ignoriert", - "Import": "Importieren", - "IndexerDownloadClientHelpText": "Wähle aus, welcher Download-Client für diesen Indexer verwendet wird", + "Import": "Import", + "IndexerDownloadClientHelpText": "Gib an, welcher Download-Client für Abrufe von diesem Indexer verwendet wird", "IndexerTagHelpText": "Benutze den Indexer nur für Filme mit mindesens einen zutreffenden Tag. Leer lassen für alle Filme.", "Info": "Info", "InstanceName": "Instanzname", - "InstanceNameHelpText": "Instanzname im Browser-Tab und für Syslog-Anwendungsname", - "InteractiveImport": "Interaktiver Import", + "InstanceNameHelpText": "Instanzname im Tab und für den Syslog-App-Namen", + "InteractiveImport": "Interaktive Importe", "LastAlbum": "Neuestes Album", "LastDuration": "Letzte Dauer", - "LastUsed": "Zuletzt benutzt", - "LastWriteTime": "Zuletzt beschrieben", + "LastUsed": "Zuletzt verwendet", + "LastWriteTime": "Letzte Schreibzeit", "Library": "Bibliothek", "Metadata": "Metadaten", - "MonitoredOnly": "Nur beobachtete", + "MonitoredOnly": "Nur überwacht", "MoveAutomatically": "Automatisch verschieben", "MoveFiles": "Dateien verschieben", "NextExecution": "Nächste Ausführung", - "NoTagsHaveBeenAddedYet": "Es wurden noch keine Tags erstellt", - "OnlyTorrent": "Nur Torrents", + "NoTagsHaveBeenAddedYet": "Es wurden noch keine Tags hinzugefügt", + "OnlyTorrent": "Nur Torrent", "OnlyUsenet": "Nur Usenet", "Organize": "Organisieren", "Peers": "Peers", - "PreferAndUpgrade": "Bevorzugen und upgraden", + "PreferAndUpgrade": "Bevorzugen und Upgrade", "PreferredProtocol": "Bevorzugtes Protokoll", "Presets": "Voreinstellungen", "Progress": "Fortschritt", @@ -723,7 +721,7 @@ "Queued": "In Warteschlange", "Rating": "Bewertung", "RejectionCount": "Anzahl der Ablehnungen", - "ReleaseTitle": "Release Titel", + "ReleaseTitle": "Release-Titel", "Renamed": "Umbenannt", "Replace": "Ersetzen", "RestartRequiredHelpTextWarning": "Erfordert einen Neustart", @@ -732,7 +730,7 @@ "Select...": "Auswählen...", "SelectQuality": "Qualität auswählen", "ShowAdvanced": "Einfache Ansicht", - "SizeLimit": "Grössenlimit", + "SizeLimit": "Größenlimit", "SizeOnDisk": "Größe", "Started": "gestartet", "System": "System", @@ -742,7 +740,7 @@ "TotalSpace": "Speicherkapazität", "Ui": "Oberfläche", "UnmappedFilesOnly": "Nur nicht zugeordnete Dateien", - "UnmonitoredOnly": "Nur beobachtete", + "UnmonitoredOnly": "Nur nicht überwacht", "UpgradesAllowed": "Upgrades erlaubt", "Wanted": "Gesucht", "Warn": "Warnung", @@ -750,20 +748,20 @@ "Age": "Alter", "LastExecution": "Letzte Ausführung", "Manual": "Manuell", - "Never": "Niemals", + "Never": "Nie", "OutputPath": "Ausgabe-Pfad", "SourceTitle": "Release Titel", "Custom": "Benutzerdefiniert", "Error": "Fehler", - "Location": "Speicherort", + "Location": "Standort", "MediaManagement": "Medienverwaltung", - "Ok": "OK", + "Ok": "Ok", "RestoreBackupAdditionalInfo": "Hinweis: Während der wiederherstellung wird {appName} automatisch neugestartet und die Oberfläche neugelade.", "SelectFolder": "Ordner auswählen", "AddConnection": "Verbindung hinzufügen", "EditMetadataProfile": "Metadaten Profil", "Database": "Datenbank", - "EditReleaseProfile": "Release Profile bearbeiten", + "EditReleaseProfile": "Release Profil bearbeiten", "ShouldSearchHelpText": "Dursuche Indexer nach neu hinzugefügten Einträgen. Vorsichtig benutzen bei großen Listen.", "TrackTitle": "Track Titel", "WriteMetadataTags": "Schreibe Metadaten Tags", @@ -785,7 +783,7 @@ "EditMetadata": "Metadaten bearbeiten", "ForNewImportsOnly": "Nur für neue Imports", "ImportFailed": "Import fehlgeschlagen", - "EndedOnly": "Nur abgeschlossene", + "EndedOnly": "Nur beendete", "MassAlbumsCutoffUnmetWarning": "Bist du dir sicher, dass du nach allen '{0}' Alben suchen willst deren Schwelle nicht erreicht worden ist?", "SearchForAllMissingAlbumsConfirmationCount": "Bist du dir sicher, dass du nach allen '{0}' fehlenden Alben suchen willst?", "MissingTracks": "Fehlende Tracks", @@ -795,7 +793,7 @@ "MediaCount": "Medien Anzahl", "NewAlbums": "Neues Album", "DoneEditingGroups": "Editieren der Gruppen abschließen", - "EditGroups": "Gruppen bearbeiten", + "EditGroups": "Gruppen Bearbeiten", "NextAlbum": "Nächstes Album", "NoneMonitoringOptionHelpText": "Künstler oder Album nicht beobachten", "NotDiscography": "Keine Diskographie", @@ -812,8 +810,8 @@ "ClickToChangeReleaseGroup": "Releasegruppe ändern", "BypassIfHighestQuality": "Ignoriere wenn höchste Qualität", "CustomFormatScore": "Eigenes Format Bewertungspunkte", - "EnableRssHelpText": "Wird benutzt, wenn {appName} mittels RSS-Sync regelmäßig nach Releases schaut", - "MinimumCustomFormatScore": "Minimum der eigenen Formate Bewertungspunkte", + "EnableRssHelpText": "Wird verwendet, wenn {appName} regelmäßig nach Releases über RSS-Sync sucht", + "MinimumCustomFormatScore": "Mindestwert für benutzerdefinierte Formate", "CloneCustomFormat": "Eigenes Format kopieren", "Conditions": "Bedingungen", "CopyToClipboard": "In die Zwischenablage kopieren", @@ -824,20 +822,20 @@ "DeleteCustomFormat": "Eigenes Format löschen", "DeleteCustomFormatMessageText": "Bist du sicher, dass du das benutzerdefinierte Format '{name}' wirklich löschen willst?", "DeleteFormatMessageText": "Bist du sicher, dass du das Formatierungstag '{name}' wirklich löschen willst?", - "DownloadPropersAndRepacksHelpTextWarning": "Benutze eigene Formate um automatisch auf Proper oder Repack releases zu upgraden", + "DownloadPropersAndRepacksHelpTextWarning": "Verwende benutzerdefinierte Formate für automatische Upgrades auf Propers/Repacks", "DownloadedUnableToImportCheckLogsForDetails": "Heruntergeladen - Aber Import nicht möglich: Schaue in die Logs für mehr Details", - "ExportCustomFormat": "Eigenes Format exportieren", + "ExportCustomFormat": "Benutzerdefiniertes Format exportieren", "FailedDownloadHandling": "Verarbeitung fehlgeschlagener Downloads", "FailedLoadingSearchResults": "Suchergebnisse konnten nicht geladen werden, bitte erneut versuchen.", "ForeignId": "Fremd-Id", "Formats": "Formate", "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "Es ist einfach einen neuen Film hinzuzufügen. Gib einfach den Namen des Filmes ein, den du hinzufügen möchtest", "MinFormatScoreHelpText": "Mindester eigener Format Score bis zum Download", - "Monitor": "Beobachten", + "Monitor": "Überwachen", "Monitoring": "Überwachung", "NegateHelpText": "Wenn aktiviert wird das eigene Format nicht angewendet solange diese {0} Bedingung zutrifft.", - "PreferTorrent": "Torrent bevorzugt", - "PreferUsenet": "Usenet bevorzugt", + "PreferTorrent": "Bevorzuge Torrent", + "PreferUsenet": "Bevorzuge Usenet", "ResetDefinitionTitlesHelpText": "Definitionstitel und Werte zurücksetzen", "ResetDefinitions": "Definitionen zurücksetzen", "ResetTitles": "Titel zurücksetzen", @@ -848,7 +846,7 @@ "Customformat": "Eigenes Format", "CutoffFormatScoreHelpText": "Sobald dieser Wert für das benutzerdefinierte Format erreicht wird, werden keine neuen Releases mehr abgerufen", "IncludeCustomFormatWhenRenamingHelpText": "In {Custom Formats} umbennenungs Format", - "HiddenClickToShow": "Versteckt, klicken zum anzeigen", + "HiddenClickToShow": "Versteckt, zum Anzeigen anklicken", "RemotePathMappingCheckBadDockerPath": "Docker erkannt; Downloader {0} speichert Downloads in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Remote-Pfadzuordnungen und die Downloader Einstellungen.", "ShownClickToHide": "Angezeigt, zum verstecken klicken", "AppDataLocationHealthCheckMessage": "Ein Update ist nicht möglich, um das Löschen von AppData beim Update zu verhindern", @@ -887,7 +885,7 @@ "ReplaceWithSpaceDash": "Mit Leerzeichen Bindestrich ersetzen", "RootFolderCheckSingleMessage": "Fehlender Stammordner: {0}", "RootFolderCheckMultipleMessage": "Es fehlen mehrere Stammordner: {0}", - "UpdateAvailableHealthCheckMessage": "Neue Version verfügbar", + "UpdateAvailableHealthCheckMessage": "Ein neues Update ist verfügbar: {version}", "UpdateCheckStartupNotWritableMessage": "Update kann nicht installiert werden, da der Startordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.", "UpdateCheckStartupTranslocationMessage": "Update kann nicht installiert werden, da sich der Startordner '{0}' in einem App Translocation-Ordner befindet.", "UpdateCheckUINotWritableMessage": "Update kann nicht installiert werden, da der Benutzeroberflächenordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.", @@ -902,7 +900,7 @@ "ReplaceWithSpaceDashSpace": "Mit Leerzeichen Bindestrich Leerzeichen ersetzen", "SystemTimeCheckMessage": "Die Systemzeit ist um einen Tag versetzt. Bis die Zeit korrigiert wurde, könnten die geplanten Aufgaben nicht korrekt ausgeführt werden", "ApiKeyValidationHealthCheckMessage": "Bitte den API Schlüssel korrigieren, dieser muss mindestens {0} Zeichen lang sein. Die Änderung kann über die Einstellungen oder die Konfigurationsdatei erfolgen", - "OnHealthRestored": "Bei Wiederherstellung des Zustands", + "OnHealthRestored": "Bei Wiederherstellung der Gesundheit", "ThereWasAnErrorLoadingThisItem": "Beim Laden des Eintrags ist ein Fehler aufgetreten", "ThereWasAnErrorLoadingThisPage": "Beim Laden der Seite ist ein Fehler aufgetreten", "DeleteCondition": "Bedingung löschen", @@ -943,7 +941,7 @@ "AppUpdatedVersion": "{appName} wurde auf die Version `{version}` aktualisiert. Um die neusten Funktionen zu bekommen lade {appName} neu", "AddNewArtistSearchForMissingAlbums": "Suche nach fehlenden Alben starten", "AuthenticationRequiredHelpText": "Ändern, welche anfragen Authentifizierung benötigen. Ändere nichts wenn du dir nicht des Risikos bewusst bist.", - "AuthenticationRequiredUsernameHelpTextWarning": "Gib einen neuen Benutzernamen ein", + "AuthenticationRequiredUsernameHelpTextWarning": "Neuen Benutzernamen eingeben", "AddNewAlbum": "Neues Album hinzufügen", "AddNewArtist": "Neue:n Künstler:in hinzufügen", "AddNewArtistRootFolderHelpText": "'{folder}' Unterordner wird automatisch erstellt werden", @@ -957,7 +955,7 @@ "AddNewAlbumSearchForNewAlbum": "Suche nach neuem Album starten", "AddArtistWithName": "{artistName} hinzufügen", "AuthenticationRequired": "Authentifizierung benötigt", - "AuthenticationRequiredPasswordHelpTextWarning": "Gib ein neues Passwort ein", + "AuthenticationRequiredPasswordHelpTextWarning": "Neues Passwort eingeben", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Neues Passwort bestätigen", "UpdateSelected": "Auswahl aktualisieren", "RemoveFailedDownloads": "Fehlgeschlagene Downloads entfernen", @@ -975,7 +973,7 @@ "ChangeCategory": "Kategorie wechseln", "AutoTaggingNegateHelpText": "Falls aktiviert wird die Auto Tagging Regel nicht angewendet, solange diese Bedingung {implementationName} zutrifft.", "Clone": "Klonen", - "AutoTaggingRequiredHelpText": "Diese {0} Bedingungen müssen erfüllt sein, damit das eigene Format zutrifft. Ansonsten reicht ein einzelner {1} Treffer.", + "AutoTaggingRequiredHelpText": "Diese {implementationName}-Bedingung muss übereinstimmen, damit die automatische Tagging-Regel angewendet wird. Andernfalls reicht ein einziges {implementationName}-Match aus.", "AddImportListExclusionAlbumHelpText": "Verhindert, dass ein Album über Importlisten zu {appName} hinzugefügt wird", "ApplyTagsHelpTextAdd": "Hinzufügen: Füge Tags zu den bestehenden Tags hinzu", "ApplyTagsHelpTextRemove": "Entfernen: Entferne die hinterlegten Tags", @@ -1013,7 +1011,7 @@ "ChangeCategoryHint": "Änderung des Downloads in die 'Post-Import-Kategorie' vom Download-Client", "ChangeCategoryMultipleHint": "Änderung der Downloads in die 'Post-Import-Kategorie' vom Download-Client", "IgnoreDownloads": "Downloads ignorieren", - "DeleteSelected": "Markierte löschen", + "DeleteSelected": "Ausgewählte löschen", "CustomFormatsSpecificationRegularExpression": "Regulären Ausdruck", "DownloadClientPriorityHelpText": "Download-Client-Priorität von 1 (Höchste) bis 50 (Niedrigste). Standard: 1. Round-Robin wird für Clients mit der gleichen Priorität verwendet.", "IgnoreDownload": "Download ignorieren", @@ -1022,16 +1020,16 @@ "CustomFormatsSettingsTriggerInfo": "Ein Eigenes Format wird auf eine Veröffentlichung oder Datei angewandt, wenn sie mindestens einer der verschiedenen ausgewählten Bedingungen entspricht.", "ConnectionSettingsUrlBaseHelpText": "Fügt ein Präfix zur {connectionName} URL hinzu, z. B. {url}", "DownloadClientDelugeSettingsDirectory": "Download Verzeichnis", - "DownloadClientDelugeSettingsDirectoryCompleted": "Verschieben, wenn Verzeichnis abgeschlossen", + "DownloadClientDelugeSettingsDirectoryCompleted": "Verschieben, wenn abgeschlossen Verzeichnis", "IndexerDownloadClientHealthCheckMessage": "Indexer mit ungültigen Downloader: {0}.", "Dash": "Bindestrich", - "Lowercase": "Kleingeschrieben", + "Lowercase": "Kleinbuchstaben", "GrabReleaseUnknownArtistOrAlbumMessageText": "Das Release konnte keinem Film zugeordnet werden. Ein automatischer Import wird nicht möglich sein. Trotzdem '{0}' erfassen?", "NotificationStatusSingleClientHealthCheckMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {0}", "ConnectionLostReconnect": "{appName} wird versuchen, automatisch eine Verbindung herzustellen, oder Sie können unten auf „Neu laden“ klicken.", "ConnectionLostToBackend": "{appName} hat die Verbindung zum Backend verloren und muss neu geladen werden, um die Funktionalität wiederherzustellen.", - "EditDownloadClientImplementation": "Download-Client hinzufügen - {implementationName}", - "ImportList": "Liste", + "EditDownloadClientImplementation": "Download Client bearbeiten - {implementationName}", + "ImportList": "Importliste", "ImportListRootFolderMultipleMissingRootsHealthCheckMessage": "Mehrere Stammverzeichnisse fehlen für Importlist: {0}", "MonitorExistingAlbums": "Vorhandene Alben", "Negate": "Negieren", @@ -1044,18 +1042,18 @@ "MonitorFirstAlbum": "Erstes Album", "MonitorFutureAlbums": "Zukünftige Alben", "Negated": "Negiert", - "OverviewOptions": "Übersichts Optionen", + "OverviewOptions": "Überblick-Optionen", "RegularExpressionsTutorialLink": "Weitere Details zu regulären Ausdrücken finden Sie [hier](https://www.regular-expressions.info/tutorial.html).", "UseSsl": "SSL verwenden", - "DownloadClientsSettingsSummary": "Download Clients, Downloadverarbeitung und Remote-Pfadzuordnungen", - "EditConditionImplementation": "Verbindung hinzufügen - {implementationName}", + "DownloadClientsSettingsSummary": "Download Clients, Download-Verwaltung und Remote-Pfadzuordnungen", + "EditConditionImplementation": "Bedingung bearbeiten - {implementationName}", "Enabled": "Aktiviert", "KeyboardShortcuts": "Tastenkürzel", "MonitorArtists": "Beobachte Künstler", "MonitorLastestAlbum": "Neuestes Album", "MonitorNoAlbums": "Keine", - "PosterOptions": "Poster Optionen", - "Posters": "Plakate", + "PosterOptions": "Poster-Optionen", + "Posters": "Poster", "RemoveSelectedItemQueueMessageText": "Bist du sicher, dass du ein Eintrag aus der Warteschlange entfernen willst?", "RemovingTag": "Tag entfernen", "Yesterday": "Gestern", @@ -1066,19 +1064,19 @@ "CloneCondition": "Bedingung klonen", "CountIndexersSelected": "{selectedCount} Künstler ausgewählt", "MonitorNewAlbums": "Neues Album", - "EditConnectionImplementation": "Verbindung hinzufügen - {implementationName}", + "EditConnectionImplementation": "Verbindung bearbeiten - {implementationName}", "No": "Nein", "Priority": "Priorität", - "NoEventsFound": "Keine Events gefunden", + "NoEventsFound": "Keine Ereignisse gefunden", "ResetQualityDefinitions": "Qualitätsdefinitionen zurücksetzen", "DeleteConditionMessageText": "Bist du sicher, dass du die Bedingung '{name}' löschen willst?", "Links": "Links", "Space": "Platz", - "Unlimited": "Unlimitiert", + "Unlimited": "Unbegrenzt", "DownloadClientTagHelpText": "Benutze den Indexer nur für Filme mit mindesens einen zutreffenden Tag. Leer lassen für alle Filme.", - "ExtraFileExtensionsHelpText": "Kommaseparierte Liste von Dateiendungen die als Extra Dateien importiert werden sollen ( .nfo wird in .nfo-orig umbenannt )", - "ExtraFileExtensionsHelpTextsExamples": "Vorschläge: sub, nfo, srt, jpg", - "NotificationStatusAllClientHealthCheckMessage": "Wegen Fehlern sind keine Applikationen verfügbar", + "ExtraFileExtensionsHelpText": "Kommagetrennte Liste von zusätzlichen Dateien, die importiert werden sollen (.nfo wird als .nfo-orig importiert)", + "ExtraFileExtensionsHelpTextsExamples": "Beispiele: '.sub, .nfo' oder 'sub,nfo'", + "NotificationStatusAllClientHealthCheckMessage": "Alle Benachrichtigungen sind aufgrund von Fehlern nicht verfügbar", "BypassIfAboveCustomFormatScore": "Umgehen, wenn über dem Wert des benutzerdefinierten Formats liegt", "Donate": "Spenden", "MonitorMissingAlbums": "Fehlende Alben", @@ -1087,9 +1085,9 @@ "RemoveCompletedDownloads": "Entferne abgeschlossene Downloads", "SomeResultsAreHiddenByTheAppliedFilter": "Einige Ergebnisse werden durch den angewendeten Filter ausgeblendet", "SearchForAllCutoffUnmetAlbumsConfirmationCount": "Bist du dir sicher, dass du nach allen '{0}' fehlenden Alben suchen willst?", - "MonitoredStatus": "Beobachtet/Status", + "MonitoredStatus": "Überwacht/Status", "DownloadClientSortingCheckMessage": "Im Download-Client {downloadClientName} ist die Sortierung {sortingMode} für die Kategorie von {appName} aktiviert. Sie sollten die Sortierung in Ihrem Download-Client deaktivieren, um Importprobleme zu vermeiden.", - "ImportListsSettingsSummary": "Listen importieren, Listenausschlüsse", + "ImportListsSettingsSummary": "Importiere von einer anderen {appName}-Instanz oder Trakt-Listen und verwalte Listen-Ausschlüsse", "MetadataSettingsArtistSummary": "Metadaten-Dateien erstellen, wenn Bücher importiert oder Autoren aktualisiert werden", "QualitySettingsSummary": "Qualitätsgrößen und Namensgebung", "UiSettingsSummary": "Kalender-, Datums- und Farboptionen", @@ -1097,29 +1095,29 @@ "DefaultCase": "Standardfall", "IndexerFlags": "Indexer-Flags", "Rejections": "Ablehnungen", - "ReleaseProfile": "Veröffentlichungsprofile", + "ReleaseProfile": "Release-Profil", "MinimumCustomFormatScoreHelpText": "Mindestwert für benutzerdefiniertes Format, der erforderlich ist, um Verzögerungen für das bevorzugte Protokoll zu umgehen", "NoLimitForAnyDuration": "Keine Begrenzung der Laufzeiten", "AutomaticUpdatesDisabledDocker": "Automatische Updates werden bei Verwendung des Docker-Update-Mechanismus nicht direkt unterstützt. Sie müssen das Container-Image außerhalb von {appName} aktualisieren oder ein Skript verwenden", - "GeneralSettingsSummary": "Port, SSL, Benutzername/Passwort, Proxy, Analytik und Updates", + "GeneralSettingsSummary": "Port, SSL, Benutzername/Kennwort, Proxy, Analyse und Updates", "BypassIfAboveCustomFormatScoreHelpText": "Aktivieren Sie die Umgehung, wenn die Veröffentlichung einen Wert hat, der höher ist als der konfigurierte Mindestwert für das benutzerdefinierte Format", "ConnectSettingsSummary": "Benachrichtigungen, Verbindungen zu Medienservern/-playern und benutzerdefinierte Skripte", "DisabledForLocalAddresses": "Für lokale Adressen deaktiviert", - "FileNameTokens": "Dateinamen Teile", + "FileNameTokens": "Dateinamen Token", "ImportListRootFolderMissingRootHealthCheckMessage": "Fehlendes Stammverzeichnis für Importlist(en): {0}", "ProfilesSettingsArtistSummary": "Qualität, Metadaten, Verzögerung und Release Profile", - "EditImportListImplementation": "Importliste hinzufügen - {implementationName}", - "EditIndexerImplementation": "Indexer hinzufügen - {implementationName}", + "EditImportListImplementation": "Import-Liste bearbeiten - {implementationName}", + "EditIndexerImplementation": "Indexer bearbeiten - {implementationName}", "SetTags": "Tags festlegen", "NoResultsFound": "Keine Ergebnisse gefunden", - "GrabId": "Erfass ID", + "GrabId": "ID holen", "Large": "Groß", "RenameFiles": "Dateien umbenennen", "Small": "Klein", "CountDownloadClientsSelected": "{count} Download-Client(s) ausgewählt", "Loading": "Lade", "RemoveSelectedItemsQueueMessageText": "Bist du sicher, dass du {0} Einträge aus der Warteschlange entfernen willst?", - "ErrorLoadingContent": "Beim Laden des Eintrags ist ein Fehler aufgetreten", + "ErrorLoadingContent": "Es ist ein Fehler beim Laden dieses Inhalts aufgetreten", "AuthBasic": "Basis (Browser-Popup)", "AuthForm": "Formulare (Anmeldeseite)", "AuthenticationMethod": "Authentifizierungsmethode", @@ -1128,14 +1126,14 @@ "CountImportListsSelected": "{selectedCount} Künstler ausgewählt", "ExistingTag": "Vorhandener Tag", "FormatAgeDays": "Tage", - "FormatAgeHour": "Stunden", + "FormatAgeHour": "Stunde", "FormatAgeHours": "Stunden", - "FormatAgeMinute": "Minuten", + "FormatAgeMinute": "Minute", "FormatAgeMinutes": "Minuten", - "MediaManagementSettingsSummary": "Namensgebung, Dateimanagement-Einstellungen und Root-Ordner", + "MediaManagementSettingsSummary": "Einstellungen zu Benennung, Dateiverwaltung und Root-Ordnern", "MonitorAllAlbums": "Alle Alben", "OrganizeSelectedArtists": "Ausgewählte Filme organisieren", - "Overview": "Übersicht", + "Overview": "Überblick", "TagsSettingsSummary": "Sehen Sie sich alle Tags und deren Verwendung an. Nicht verwendete Tags können entfernt werden", "Tomorrow": "Morgen", "ClearBlocklistMessageText": "Sind Sie sicher, dass Sie alle Elemente aus der Sperrliste löschen möchten?", @@ -1146,13 +1144,13 @@ "DeleteAutoTagHelpText": "Sind Sie sicher, dass Sie das automatische Tag „{name}“ löschen möchten?", "DeleteSelectedDownloadClientsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Download-Clients löschen möchten?", "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Der Download-Client {downloadClientName} ist so eingestellt, dass abgeschlossene Downloads entfernt werden. Dies kann dazu führen, dass Downloads von Ihrem Client entfernt werden, bevor {appName} sie importieren kann.", - "IncludeHealthWarnings": "Zustandswarnung", + "IncludeHealthWarnings": "Gesundheitswarnungen einbeziehen", "Required": "Erforderlich", "ResetTitlesHelpText": "Definitionstitel und -werte zurücksetzen", - "UpdateFiltered": "Gefilterte updaten", + "UpdateFiltered": "Update gefiltert", "Yes": "Ja", - "RemoveQueueItemConfirmation": "Bist du sicher, dass du {0} Einträge aus der Warteschlange entfernen willst?", - "RemoveSelectedItem": "Entferne ausgewählten Eintrag", + "RemoveQueueItemConfirmation": "Bist du sicher, dass du '{sourceTitle}' aus der Warteschlange entfernen möchtest?", + "RemoveSelectedItem": "Ausgewähltes Element entfernen", "AutoTaggingLoadError": "Automatisches Tagging konnte nicht geladen werden", "RemoveTagsAutomatically": "Tags automatisch entfernen", "BypassIfHighestQualityHelpText": "Umgehungs-Verzögerung, wenn die Freigabe die höchste aktivierte Qualität im Qualitätsprofil mit dem bevorzugten Protokoll hat", @@ -1170,11 +1168,11 @@ "AutoTagging": "Automatisches Tagging", "DeleteSelectedIndexersMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte(n) Indexer löschen möchten?", "DeleteSpecification": "Spezifikation löschen", - "IndexerPriorityHelpText": "Indexer Priorität von 1 (höchste) bis 50 (niedrigste). Standard: 25. Wird beim Erfassen von Releases als Entscheidungskriterium für andernfalls gleiche Releases verwendet, {appName} wird trotzdem alle aktivierten Indexer für RSS-Sync und Suche verwenden", + "IndexerPriorityHelpText": "Indexer-Priorität von 1 (Höchste) bis 50 (Niedrigste). Standard: 25. Wird verwendet, um bei gleichwertigen Releases eine Entscheidung zu treffen, {appName} wird jedoch weiterhin alle aktivierten Indexer für RSS-Sync und Suche verwenden", "DeleteArtistFoldersHelpText": "Löschen Sie die Serienordner und ihren gesamten Inhalt", "DeleteSpecificationHelpText": "Sind Sie sicher, dass Sie die Spezifikation „{name}“ löschen möchten?", - "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Optionaler Speicherort für Downloads. Lassen Sie das Feld leer, um den standardmäßigen rTorrent-Speicherort zu verwenden", - "DownloadClientDelugeSettingsDirectoryHelpText": "Optionaler Speicherort für Downloads. Lassen Sie das Feld leer, um den standardmäßigen rTorrent-Speicherort zu verwenden", + "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Optionaler Ort, an den abgeschlossene Downloads verschoben werden, leer lassen, um den Standard-Deluge-Ort zu verwenden", + "DownloadClientDelugeSettingsDirectoryHelpText": "Optionaler Ort für Downloads, leer lassen, um den Standard-Deluge-Ort zu verwenden", "WhatsNew": "Was ist neu?", "TestParsing": "Parsing testen", "True": "WAHR", @@ -1182,16 +1180,106 @@ "Any": "Beliebig", "BuiltIn": "Eingebaut", "Script": "Skript", - "DeleteSelectedCustomFormats": "Benutzerdefiniertes Format löschen", - "IncludeCustomFormatWhenRenaming": "Eigenes Format beim umbennen einfügen", - "DeleteSelectedCustomFormatsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Importliste(n) löschen möchten?", + "DeleteSelectedCustomFormats": "Custom Format(s) löschen", + "IncludeCustomFormatWhenRenaming": "Benutzerdefiniertes Format beim Umbenennen einbeziehen", + "DeleteSelectedCustomFormatsMessageText": "Bist du sicher, dass du {count} ausgewählte Custom Format(s) löschen möchtest?", "IndexerSettingsApiUrl": "API-URL", "AptUpdater": "Verwenden Sie apt, um das Update zu installieren", - "CancelPendingTask": "Möchten Sie diese ausstehende Aufgabe wirklich abbrechen?", "DockerUpdater": "Aktualisieren Sie den Docker-Container, um das Update zu erhalten", - "ExternalUpdater": "{appName} wurde so konfiguriert, dass ein externer Update Mechanismus benutzt wird", - "InstallLatest": "Jetzt updaten", + "ExternalUpdater": "{appName} ist so konfiguriert, dass es einen externen Aktualisierungsmechanismus verwendet", + "InstallLatest": "Neueste Version installieren", "Shutdown": "Herunterfahren", "UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden.", - "OnLatestVersion": "Die aktuellste Version ist bereits installiert" + "OnLatestVersion": "Die neueste Version von {appName} ist bereits installiert", + "External": "Extern", + "False": "Falsch", + "FormatAgeDay": "Tag", + "DownloadClientQbittorrentSettingsContentLayout": "Inhaltslayout", + "FormatDateTime": "{formattedDate} {formattedTime}", + "EditAutoTag": "Automatische Tags bearbeiten", + "FormatDateTimeRelative": "{relativeDay}, {formattedDate} {formattedTime}", + "EditSelectedCustomFormats": "Ausgewählte benutzerdefinierte Formate bearbeiten", + "FormatRuntimeMinutes": "{minutes}m", + "FormatShortTimeSpanSeconds": "{seconds} Sekunde(n)", + "IndexerSettingsRejectBlocklistedTorrentHashes": "Blockierte Torrent-Hashes beim Abrufen ablehnen", + "IndexerSettingsSeedTimeHelpText": "Die Zeit, die ein Torrent gesät werden sollte, bevor er gestoppt wird. Leer verwendet die Standardzeit des Download-Clients", + "NotificationsKodiSettingsDisplayTime": "Anzeigezeit", + "NotificationsSettingsUseSslHelpText": "Mit {serviceName} über HTTPS anstatt HTTP verbinden", + "RemoveMultipleFromDownloadClientHint": "Entfernt Downloads und Dateien aus dem Download-Client", + "LogSizeLimit": "Protokollgrößenlimit", + "LogSizeLimitHelpText": "Maximale Protokolldateigröße in MB, bevor archiviert wird. Standard ist 1MB.", + "UpdateMonitoring": "Update-Überwachung", + "ManageFormats": "Formate verwalten", + "NoCustomFormatsFound": "Keine benutzerdefinierten Formate gefunden", + "NotificationsKodiSettingAlwaysUpdateHelpText": "Bibliothek auch aktualisieren, wenn ein Video abgespielt wird?", + "NotificationsKodiSettingsDisplayTimeHelpText": "Wie lange die Benachrichtigung angezeigt wird (in Sekunden)", + "NotificationsKodiSettingsGuiNotification": "GUI-Benachrichtigung", + "PreviouslyInstalled": "Früher installiert", + "SupportedAutoTaggingProperties": "{appName} unterstützt die folgenden Eigenschaften für Auto-Tagging-Regeln", + "SkipFreeSpaceCheckHelpText": "Verwenden, wenn {appName} den freien Speicherplatz des Root-Ordners nicht erkennen kann", + "NotificationsSettingsUpdateLibrary": "Bibliothek aktualisieren", + "NotificationsSettingsUpdateMapPathsFrom": "Pfade von", + "NotificationsSettingsUpdateMapPathsTo": "Pfade zu", + "FormatTimeSpanDays": "{days}d {time}", + "Parse": "Parsen", + "ParseModalHelpTextDetails": "{appName} wird versuchen, den Titel zu parsen und dir Details darüber zu zeigen", + "Period": "Periode", + "RemoveQueueItemRemovalMethodHelpTextWarning": "'Aus dem Download-Client entfernen' wird den Download und die Datei(en) aus dem Download-Client löschen.", + "RemoveQueueItemsRemovalMethodHelpTextWarning": "'Aus dem Download-Client entfernen' wird die Downloads und die Dateien aus dem Download-Client löschen.", + "NotificationsKodiSettingAlwaysUpdate": "Immer aktualisieren", + "NotificationsKodiSettingsCleanLibrary": "Bibliothek bereinigen", + "RootFolderPath": "Root-Ordner-Pfad", + "SelectIndexerFlags": "Indexer-Flags auswählen", + "Menu": "Menü", + "NotificationsEmbySettingsSendNotifications": "Benachrichtigungen senden", + "PreferProtocol": "Bevorzuge {preferredProtocol}", + "LabelIsRequired": "Label ist erforderlich", + "RemotePathMappingsInfo": "Remote-Pfadzuordnungen sind sehr selten erforderlich. Wenn {appName} und dein Download-Client auf demselben System sind, ist es besser, deine Pfade abzugleichen. Weitere Informationen findest du im [Wiki]({wikiLink}).", + "NotificationsTelegramSettingsIncludeAppNameHelpText": "Optional den Nachrichtentitel mit {appName} voranstellen, um Benachrichtigungen von verschiedenen Anwendungen zu unterscheiden", + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Ob das konfigurierte Inhaltslayout von qBittorrent, das ursprüngliche Layout des Torrents oder immer ein Unterordner erstellt werden soll (qBittorrent 4.3.2+)", + "FormatShortTimeSpanMinutes": "{minutes} Minute(n)", + "IndexerSettingsSeedRatio": "Seed-Verhältnis", + "Install": "Installieren", + "InstallMajorVersionUpdate": "Update installieren", + "NotificationsKodiSettingsCleanLibraryHelpText": "Bibliothek nach der Aktualisierung bereinigen", + "NotificationsPlexSettingsAuthenticateWithPlexTv": "Mit Plex.tv authentifizieren", + "NotificationsTelegramSettingsIncludeAppName": "{appName} im Titel einfügen", + "RemoveFromDownloadClientHint": "Entfernt den Download und die Datei(en) aus dem Download-Client", + "SmartReplace": "Smart Replace", + "InfoUrl": "Info-URL", + "CountCustomFormatsSelected": "{count} benutzerdefiniertes Format(e) ausgewählt", + "InstallMajorVersionUpdateMessageLink": "Weitere Informationen findest du unter [{domain}]({url}).", + "ManageCustomFormats": "Benutzerdefinierte Formate verwalten", + "Repack": "Repacken", + "IndexerSettingsApiUrlHelpText": "Ändere dies nicht, es sei denn, du weißt, was du tust. Dein API-Schlüssel wird an diesen Host gesendet.", + "ParseModalUnableToParse": "Kann den angegebenen Titel nicht parsen, bitte versuche es erneut.", + "Underscore": "Unterstrich", + "LastSearched": "Letzte Suche", + "PasswordConfirmation": "Passwortbestätigung", + "FormatRuntimeHours": "{hours}h", + "FormatShortTimeSpanHours": "{hours} Stunde(n)", + "HealthMessagesInfoBox": "Weitere Informationen zur Ursache dieser Gesundheitsprüfungsnachrichten findest du, indem du auf den Wiki-Link (Buch-Symbol) am Ende der Zeile klickst oder deine [Protokolle]({link}) überprüfst. Wenn du Schwierigkeiten hast, diese Nachrichten zu interpretieren, kannst du unseren Support kontaktieren, über die Links unten.", + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Wenn ein Torrent durch einen Hash blockiert wird, wird er möglicherweise nicht korrekt abgelehnt während RSS/Recherche für einige Indexer. Diese Option aktiviert die Ablehnung des Torrents nach dem Abrufen, aber bevor er an den Client gesendet wird.", + "IndexerSettingsSeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen muss, bevor er gestoppt wird. Leer verwendet das Standardverhältnis des Download-Clients. Das Verhältnis sollte mindestens 1,0 betragen und den Regeln des Indexers folgen.", + "IndexerSettingsSeedTime": "Seed-Zeit", + "IndexersSettingsSummary": "Indexer und Indexer-Optionen", + "InstallMajorVersionUpdateMessage": "Dieses Update wird eine neue Hauptversion installieren und ist möglicherweise nicht mit deinem System kompatibel. Bist du sicher, dass du dieses Update installieren möchtest?", + "InvalidUILanguage": "Die UI ist auf eine ungültige Sprache eingestellt, korrigiere sie und speichere die Einstellungen", + "Logout": "Abmelden", + "MassSearchCancelWarning": "Dies kann nicht abgebrochen werden, sobald es gestartet wurde, ohne {appName} neu zu starten oder alle Indexer zu deaktivieren.", + "NotificationsKodiSettingsUpdateLibraryHelpText": "Bibliothek bei Import & Umbenennung aktualisieren?", + "NotificationsPlexSettingsAuthToken": "Auth-Token", + "ParseModalErrorParsing": "Fehler beim Parsen, bitte versuche es erneut.", + "ParseModalHelpText": "Gib einen Release-Titel im Eingabefeld oben ein", + "RemoveQueueItem": "Entfernen - {sourceTitle}", + "RemoveQueueItemRemovalMethod": "Entfernmethode", + "SetIndexerFlags": "Indexer-Flags festlegen", + "NoMissingItems": "Keine fehlenden Einträge", + "AddDelayProfileError": "Verzögerungsprofil konnte nicht hinzugefügt werden. Bitte erneut versuchen.", + "ImportListTagsHelpText": "Tags, die beim Import aus dieser Liste hinzugefügt werden", + "NoCutoffUnmetItems": "Keine nicht erfüllten Cutoff-Elemente", + "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')", + "NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')", + "DashOrSpaceDashDependingOnName": "Dash oder Space Dash je nach Name", + "NotificationsEmbySettingsUpdateLibraryHelpText": "Bibliothek bei Import, Umbenennung oder Löschung aktualisieren" } diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index 2f04c7b6f..08e161409 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -468,7 +468,6 @@ "Custom": "Εθιμο", "CustomFilters": "Custom Φιλτρα", "Date": "Ημερομηνία", - "DefaultDelayProfileHelpText": "Αυτό είναι το προεπιλεγμένο προφίλ. Ισχύει για όλους τους καλλιτέχνες που δεν έχουν ρητό προφίλ.", "Deleted": "Διαγράφηκε", "Details": "Λεπτομέρειες", "Donations": "Δωρεές", @@ -677,7 +676,6 @@ "ShowName": "Εμφάνιση ονόματος", "SkipRedownload": "Παράλειψη επανάληψης λήψης", "SpecificAlbum": "Συγκεκριμένο άλμπουμ", - "TagsHelpText": "Τα προφίλ κυκλοφορίας θα ισχύουν για καλλιτέχνες με τουλάχιστον μία αντίστοιχη ετικέτα. Αφήστε το κενό για να εφαρμοστεί σε όλους τους καλλιτέχνες", "TBA": "TBA", "AutomaticallySwitchRelease": "Αυτόματη εναλλαγή απελευθέρωσης", "ContinuingMoreAlbumsAreExpected": "Αναμένονται περισσότερα άλμπουμ", @@ -1111,11 +1109,11 @@ "DeleteSelectedCustomFormats": "Διαγραφή προσαρμοσμένης μορφής", "IncludeCustomFormatWhenRenaming": "Συμπεριλάβετε προσαρμοσμένη μορφή κατά τη μετονομασία", "AptUpdater": "Χρησιμοποιήστε το apt για να εγκαταστήσετε την ενημέρωση", - "CancelPendingTask": "Είστε βέβαιοι ότι θέλετε να ακυρώσετε αυτήν την εργασία σε εκκρεμότητα;", "DockerUpdater": "ενημερώστε το κοντέινερ για να λάβετε την ενημέρωση", "ExternalUpdater": "Το {appName} έχει ρυθμιστεί να χρησιμοποιεί έναν εξωτερικό μηχανισμό ενημέρωσης", "InstallLatest": "Εγκατάσταση πιο πρόσφατου", "OnLatestVersion": "Η τελευταία έκδοση του {appName} είναι ήδη εγκατεστημένη", "Shutdown": "ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣ", - "UpdateAppDirectlyLoadError": "Δεν είναι δυνατή η απευθείας ενημέρωση του {appName}," + "UpdateAppDirectlyLoadError": "Δεν είναι δυνατή η απευθείας ενημέρωση του {appName},", + "AddDelayProfileError": "Δεν είναι δυνατή η προσθήκη ενός νέου προφίλ ποιότητας. Δοκιμάστε ξανά." } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 257a5d4af..70f425b9c 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -483,7 +483,6 @@ "Backup": "Copia de seguridad", "Connect": "Conectar", "Date": "Fecha", - "DefaultDelayProfileHelpText": "Este es el perfil predeterminado. Se aplica a todas las películas que no tienen un perfil explícito.", "Deleted": "Eliminado", "Details": "Detalles", "Donations": "Donaciones", @@ -1207,7 +1206,6 @@ "MusicBrainzArtistID": "ID de artista de MusicBrainz", "SetIndexerFlags": "Establecer indicadores del indexador", "SelectIndexerFlags": "Seleccionar indicadores del indexador", - "TagsHelpText": "Los perfiles de lanzamiento se aplicarán a artistas con al menos una etiqueta coincidente. Dejar en blanco para aplicar a todos los artistas", "MultiDiscTrackFormat": "Formato de pista multi-disco", "SecondaryAlbumTypes": "Tipos de álbum secundario", "ShouldMonitorExistingHelpText": "Monitoriza automáticamente los álbumes de esta lista que ya estén en {appName}", @@ -1330,5 +1328,7 @@ "Shutdown": "Apagar", "UpdateAppDirectlyLoadError": "No se pudo actualizar {appName} directamente,", "InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información.", - "ManageFormats": "Gestionar formatos" + "ManageFormats": "Gestionar formatos", + "AddDelayProfileError": "No se pudo añadir un nuevo perfil de retraso, por favor inténtalo de nuevo.", + "ImportListTagsHelpText": "Etiquetas que se añadirán en la importación a partir de esta lista" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 43e36f00e..5860b4374 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -27,7 +27,6 @@ "RemoveTagRemovingTag": "Tunniste poistetaan", "ChmodFolderHelpText": "Octal, sovelletaan tuonnin/nimeämisen yhteydessä mediakansioihin ja -tiedostoihin (ilman suoritusbittejä).", "LaunchBrowserHelpText": " Avaa {appName}in verkkokäyttöliittymä verkkoselaimeen sovelluksen käynnistyksen yhteydessä.", - "TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille esittäjille. Käytä kaikille jättämällä tyhjäksi.", "WriteAudioTagsHelpTextWarning": "'Kaikki tiedostot' -valinnat käsittelevät myös olemassa olevien tiedostojen tagit tuonnin yhteydessä.", "Refresh": "Päivitä", "ResetAPIKey": "Korvaa rajapinnan avain", @@ -543,7 +542,6 @@ "Custom": "Mukautettu", "CustomFilters": "Omat suodattimet", "Date": "Päiväys", - "DefaultDelayProfileHelpText": "Tämä on oletusprofiili, jota sovelletaan kaikkiin esittäjiin, joille ei ole määritetty erillistä profiilia.", "Deleted": "Poistettu", "Details": "Tiedot", "Donations": "Lahjoitukset", @@ -1257,12 +1255,13 @@ "IndexerSettingsApiUrl": "Rajapinnan URL-osoite", "IndexerSettingsApiUrlHelpText": "Älä muuta tätä, jos et tiedä mitä teet, koska rajapinta-avaimesi lähetetään kyseiselle palvelimelle.", "AptUpdater": "Asenna päivitys APT-työkalun avulla", - "CancelPendingTask": "Haluatko varmasti perua tämän odottavan tehtävän?", "DockerUpdater": "Hanki päivitys päivittämällä Docker-säiliö", "ExternalUpdater": "{appName} on määritetty käyttämään ulkoista päivitysratkaisua.", "InstallLatest": "Asenna uusin", "OnLatestVersion": "Uusin {appName}-versio on jo asennettu", "PreviouslyInstalled": "Edellinen asennettu versio", "Shutdown": "Sammuta", - "UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan," + "UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan,", + "AddDelayProfileError": "Virhe lisättäessä viiveporofiilia. Yritä uudelleen.", + "ImportListTagsHelpText": "Tunnisteet, joilla tältä tuontilistalta lisätyt kohteet merkitään." } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 5627711c8..e373b22e8 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -533,7 +533,6 @@ "Custom": "Personnaliser", "CustomFilters": "Filtres personnalisés", "Date": "Date", - "DefaultDelayProfileHelpText": "Ceci est le profil par défaut. Il est appliqué à tous les films qui n'ont pas de profils spécifiques.", "Deleted": "Supprimé", "Details": "Détails", "Donations": "Dons", @@ -977,7 +976,6 @@ "ShouldMonitorExistingHelpText": "Surveiller automatiquement les albums de cette liste qui sont déjà dans {appName}", "ShowNextAlbum": "Afficher l'album suivant", "ShowName": "Afficher le nom", - "TagsHelpText": "Baliser les fichiers audio avec des métadonnées, les profils de publication s'appliqueront aux artistes avec au moins une balise correspondante. Laisser vide pour postuler à tous les artistes", "TrackImported": "Piste importée", "TrackMissingFromDisk": "Piste manquante sur le disque", "TrackDownloaded": "Piste téléchargée", @@ -1329,5 +1327,7 @@ "Shutdown": "Éteindre", "UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName},", "SkipFreeSpaceCheckHelpText": "Utiliser quand {appName} ne parvient pas à détecter l'espace disponible de votre dossier racine", - "LastSearched": "Dernière recherche" + "LastSearched": "Dernière recherche", + "AddDelayProfileError": "Impossible d'ajouter un nouveau profil de délai, veuillez réessayer.", + "ImportListTagsHelpText": "Balises qui seront ajoutées lors de l'importation à partir de cette liste" } diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index 2166bbfed..b393c8214 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -471,7 +471,6 @@ "Connect": "לְחַבֵּר", "Custom": "המותאם אישית", "CustomFilters": "מסננים מותאמים אישית", - "DefaultDelayProfileHelpText": "זהו פרופיל ברירת המחדל. זה חל על כל הסרטים שאין להם פרופיל מפורש.", "Deleted": "נמחק", "Donations": "תרומות", "DoNotPrefer": "לא מעדיפים", @@ -789,5 +788,7 @@ "AddReleaseProfile": "ערוך פרופיל עיכוב", "UnmappedFiles": "תיקיות לא ממופות", "Clone": "סגור", - "EditReleaseProfile": "ערוך פרופיל עיכוב" + "EditReleaseProfile": "ערוך פרופיל עיכוב", + "Season": "סיבה", + "AddDelayProfileError": "לא ניתן להוסיף פרופיל איכות חדש, נסה שוב." } diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index 364272900..1dbb46dea 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -471,7 +471,6 @@ "Custom": "रिवाज", "CustomFilters": "कस्टम फ़िल्टर", "Date": "दिनांक", - "DefaultDelayProfileHelpText": "यह डिफ़ॉल्ट प्रोफ़ाइल है। यह उन सभी फिल्मों पर लागू होता है जिनमें स्पष्ट प्रोफ़ाइल नहीं है।", "Deleted": "हटाए गए", "Details": "विवरण", "Donations": "दान", @@ -746,5 +745,7 @@ "AddReleaseProfile": "देरी प्रोफ़ाइल संपादित करें", "UnmappedFiles": "बिना मोड़े हुए फोल्डर", "Clone": "बंद करे", - "EditReleaseProfile": "देरी प्रोफ़ाइल संपादित करें" + "EditReleaseProfile": "देरी प्रोफ़ाइल संपादित करें", + "Season": "कारण", + "AddDelayProfileError": "नई गुणवत्ता प्रोफ़ाइल जोड़ने में असमर्थ, कृपया पुनः प्रयास करें।" } diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index 4c1e5e478..a57121e08 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -303,5 +303,7 @@ "UnableToLoadRootFolders": "Neuspješno dodavanje korijenske mape", "AptUpdater": "Koristi apt kako bi instalirao ažuriranje", "Reason": "Sezona", - "Clone": "Zatvori" + "Clone": "Zatvori", + "DeleteSelectedTrackFilesMessageText": "Jeste li sigurni da želite obrisati ovaj profil odgode?", + "AddDelayProfileError": "Neuspješno dodavanje profila odgode, molimo pokušaj ponovno." } diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index 93e3889da..ea5499860 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -216,7 +216,7 @@ "BlocklistRelease": "Blokklista Release", "Calendar": "Naptár", "CalendarWeekColumnHeaderHelpText": "Minden oszlop felett jelenjen meg, hogy melyik hét az aktuális", - "CancelPendingTask": "Biztosan törlöd ezt a függőben lévő feladatot?", + "CancelPendingTask": "Biztosan törölni szeretné ezt a függőben lévő feladatot?", "CatalogNumber": "Katalógus szám", "ChangeFileDate": "Fájl Dátumának Módosítása", "ChmodFolder": "chmod Mappa", @@ -272,7 +272,6 @@ "RemotePathHelpText": "Gyökérútvonal a könyvtárhoz, amelyhez a letöltőkliens hozzáfér", "UpdateMechanismHelpText": "Használja a {appName} beépített frissítőjét vagy szkriptjét", "SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByLidarr": "Akkor használatos, ha az automatikus keresést a felhasználói felületen vagy a {appName} segítségével hajtja végre", - "TagsHelpText": "A kiadási profilok azokra az előadókra vonatkoznak, akik legalább egy megfelelő címkével rendelkeznek. Hagyja üresen, ha minden előadóra vonatkozik", "TorrentDelay": "Torrent Késleltetés", "TotalTrackCountTracksTotalTrackFileCountTracksWithFilesInterp": "Összesen: {0} szám. {1} szám fájlokkal.", "TrackTitle": "Dal címe", @@ -677,7 +676,6 @@ "Custom": "Egyedi", "CustomFilters": "Egyedi Szűrők", "Date": "Dátum", - "DefaultDelayProfileHelpText": "Ez az alapértelmezett profil. Minden filmre vonatkozik, amelynek nincs más profilja.", "Deleted": "Törölve", "Details": "Részletek", "Donations": "Adományok", @@ -1215,12 +1213,13 @@ "DeleteSelectedCustomFormatsMessageText": "Biztosan törölni szeretne {count} kiválasztott importlistát?", "IncludeCustomFormatWhenRenaming": "Átnevezéskor adja meg az Egyéni formátumot", "AptUpdater": "A frissítés telepítéséhez használja az apt-t", - "CancelPendingTask": "Biztosan törölni szeretné ezt a függőben lévő feladatot?", "DockerUpdater": "Frissítse a docker-tárolót a frissítés fogadásához", "ExternalUpdater": "A {appName} egy külső frissítési mechanizmus használatára van konfigurálva", "InstallLatest": "Legfrissebb telepítése", "OnLatestVersion": "A {appName} legújabb verziója már telepítva van", "PreviouslyInstalled": "Korábban telepítve", "Shutdown": "Leállitás", - "UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t" + "UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t", + "ImportListTagsHelpText": "Címkék, amelyek a listáról történő importáláskor kerülnek hozzáadásra", + "AddDelayProfileError": "Nem sikerült új késleltetési profilt hozzáadni, próbálkozzon újra." } diff --git a/src/NzbDrone.Core/Localization/Core/id.json b/src/NzbDrone.Core/Localization/Core/id.json index 2deb041dc..edb56c64a 100644 --- a/src/NzbDrone.Core/Localization/Core/id.json +++ b/src/NzbDrone.Core/Localization/Core/id.json @@ -131,5 +131,6 @@ "AddedToDownloadQueue": "Ditambahkan ke antrean pengunduhan", "AptUpdater": "Gunakan apt untuk memasang pembaruan", "Clone": "Tutup", - "EnableSSL": "Aktifkan RSS" + "EnableSSL": "Aktifkan RSS", + "AddDelayProfile": "Tambah Delay Profile" } diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index 3191c60c1..2101d7eea 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -470,7 +470,6 @@ "Custom": "Sérsniðin", "CustomFilters": "Sérsniðin síur", "Date": "Dagsetning", - "DefaultDelayProfileHelpText": "Þetta er sjálfgefið snið. Það á við um allar kvikmyndir sem hafa ekki skýran prófíl.", "Deleted": "Eytt", "Donations": "Framlög", "DoNotPrefer": "Ekki frekar", @@ -747,5 +746,7 @@ "EditReleaseProfile": "Breyta seinkunarprófíl", "UnmappedFiles": "Ókortlagðar möppur", "Clone": "Lokaðu", - "AddReleaseProfile": "Breyta seinkunarprófíl" + "AddReleaseProfile": "Breyta seinkunarprófíl", + "Season": "Ástæða", + "AddDelayProfileError": "Ekki er hægt að bæta við nýjum gæðaprófíl, reyndu aftur." } diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index 84ee62d15..a5ffc2acc 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -513,7 +513,6 @@ "Custom": "Personalizzato", "CustomFilters": "Filtri Personalizzati", "Date": "Data", - "DefaultDelayProfileHelpText": "Questo è il profilo predefinito. Si applica a tutti i film che non hanno un profilo esplicito.", "Deleted": "Cancellato", "Details": "Dettagli", "DoNotPrefer": "Non Preferire", @@ -1039,5 +1038,8 @@ "PreviouslyInstalled": "Precedentemente Installato", "Shutdown": "Spegnimento", "UpdateAppDirectlyLoadError": "Impossibile aggiornare {appName} direttamente,", - "UnmappedFiles": "Cartelle Non Mappate" + "UnmappedFiles": "Cartelle Non Mappate", + "MissingAlbums": "Albums esistente", + "MonitorMissingAlbums": "Albums esistente", + "AddDelayProfileError": "Impossibile aggiungere un nuovo profilo di ritardo, riprova." } diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index 9706b895e..28c880719 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -470,7 +470,6 @@ "Custom": "カスタム", "CustomFilters": "カスタムフィルター", "Date": "日付", - "DefaultDelayProfileHelpText": "これはデフォルトのプロファイルです。これは、明示的なプロファイルを持たないすべての映画に適用されます。", "Deleted": "削除", "Details": "詳細", "Donations": "寄付", @@ -746,5 +745,8 @@ "UpdateAppDirectlyLoadError": "{appName}を直接更新できません。", "EditReleaseProfile": "遅延プロファイルの編集", "UnmappedFiles": "マップされていないフォルダ", - "Clone": "閉じる" + "Clone": "閉じる", + "AddReleaseProfile": "遅延プロファイルの編集", + "Season": "理由", + "AddDelayProfileError": "新しい品質プロファイルを追加できません。再試行してください。" } diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 526bbaff9..2ea48f18b 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -470,7 +470,6 @@ "Custom": "사용자 지정", "CustomFilters": "사용자 지정 필터", "Date": "날짜", - "DefaultDelayProfileHelpText": "이것이 기본 프로필입니다. 명시적인 프로필이 없는 모든 영화에 적용됩니다.", "Deleted": "삭제됨", "Donations": "기부", "DoNotPrefer": "선호하지 않음", @@ -732,5 +731,10 @@ "AddConditionImplementation": "연결 추가 - {implementationName}", "EditIndexerImplementation": "인덱서 추가 - {implementationName}", "AddReleaseProfile": "지연 프로필 편집", - "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "해시에 의해 토렌트가 차단된 경우 일부 인덱서의 RSS/검색 중에 토렌트가 제대로 거부되지 않을 수 있습니다. 이 기능을 활성화하면 토렌트를 가져온 후 클라이언트로 전송하기 전에 토렌트를 거부할 수 있습니다." + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "해시에 의해 토렌트가 차단된 경우 일부 인덱서의 RSS/검색 중에 토렌트가 제대로 거부되지 않을 수 있습니다. 이 기능을 활성화하면 토렌트를 가져온 후 클라이언트로 전송하기 전에 토렌트를 거부할 수 있습니다.", + "Albums": "앨범", + "EditConnectionImplementation": "연결 추가 - {implementationName}", + "ExpandAlbumByDefaultHelpText": "앨범", + "Season": "이유", + "AddDelayProfileError": "새 품질 프로필을 추가 할 수 없습니다. 다시 시도하십시오." } diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index 842266eb2..8169786a0 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -275,5 +275,6 @@ "DeleteSelectedCustomFormatsMessageText": "Er du sikker på at du vil slette formattaggen {0}?", "AptUpdater": "Bruk apt til å installere oppdateringen", "Clone": "Lukk", - "Reason": "Sesong" + "Reason": "Sesong", + "AddDelayProfileError": "Ikke mulig å legge til ny betingelse, vennligst prøv igjen" } diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index 3c806eb95..98588964a 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -482,7 +482,6 @@ "Custom": "Aangepast", "CustomFilters": "Aangepaste Filters", "Date": "Datum", - "DefaultDelayProfileHelpText": "Dit is het standaard profiel. Het wordt toegepast op alle films die geen specifiek profiel hebben.", "Donations": "Donaties", "DoNotPrefer": "Niet De Voorkeur Geven", "DoNotUpgradeAutomatically": "Niet Automatisch Upgraden", @@ -897,5 +896,6 @@ "Shutdown": "Afsluiten", "ExternalUpdater": "{appName} is geconfigureerd om een extern update mechanisme te gebruiken", "UpdateAppDirectlyLoadError": "Kan {appName} niet rechtstreeks updaten,", - "UnmappedFiles": "Niet-toegewezen Mappen" + "UnmappedFiles": "Niet-toegewezen Mappen", + "AddDelayProfileError": "Mislukt om vertragingsprofiel toe te voegen, probeer het later nog eens." } diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 3b1601ac2..80d30e945 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -474,7 +474,6 @@ "Backup": "Kopia zapasowa", "BeforeUpdate": "Przed aktualizacją", "Close": "Blisko", - "DefaultDelayProfileHelpText": "To jest profil domyślny. Dotyczy to wszystkich filmów, które nie mają wyraźnego profilu.", "Deleted": "Usunięto", "Details": "Detale", "Donations": "Darowizny", @@ -847,5 +846,6 @@ "Shutdown": "Zamknąć", "UpdateAppDirectlyLoadError": "Nie można bezpośrednio zaktualizować {appName},", "UnmappedFiles": "Niezmapowane foldery", - "Clone": "Zamknij" + "Clone": "Zamknij", + "AddDelayProfileError": "Nie można dodać nowego profilu opóźnienia, spróbuj później." } diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index 81c67bf69..0986c3f19 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -538,7 +538,6 @@ "Connect": "Conexões", "Custom": "Personalizado", "CustomFilters": "Filtros personalizados", - "DefaultDelayProfileHelpText": "Este é o perfil padrão. Isso se aplica a todos os filmes que não têm um perfil explícito.", "Deleted": "Eliminado", "Details": "Detalhes", "Donations": "Doações", @@ -1012,11 +1011,12 @@ "IncludeCustomFormatWhenRenaming": "Incluir formato personalizado ao renomear", "CountCustomFormatsSelected": "{count} formatos selecionados", "AptUpdater": "Utilize o apt para instalar a atualização", - "CancelPendingTask": "Tem a certeza que quer cancelar esta tarefa pendente?", "ExternalUpdater": "O {appName} está definido para usar um mecanismo de atualização externo", "InstallLatest": "Instalar o mais recente", "OnLatestVersion": "A versão mais recente do {appName} já está instalada", "Shutdown": "Encerrar", "UpdateAppDirectlyLoadError": "Não foi possível atualizar o {appName} diretamente,", - "DockerUpdater": "atualize o contentor do Docker para receber a atualização" + "DockerUpdater": "atualize o contentor do Docker para receber a atualização", + "DownloadImported": "Transferência Ignorada", + "AddDelayProfileError": "Não foi possível adicionar um novo perfil de qualidade, tenta novamente." } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index bf83f6482..ccdf934c8 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -535,7 +535,7 @@ "LogFiles": "Arquivos de log", "Logging": "Registro em log", "LogLevel": "Nível de registro em log", - "Logs": "Logs", + "Logs": "Registros", "MinimumFreeSpaceWhenImportingHelpText": "Impedir a importação se deixar menos do que esta quantidade de espaço em disco disponível", "MinimumLimits": "Limites mínimos", "Missing": "Ausente", @@ -629,7 +629,6 @@ "TrackStatus": "Estado da faixa", "ShouldMonitorHelpText": "Monitorar artistas e álbuns adicionados desta lista", "SpecificAlbum": "Álbum Específico", - "TagsHelpText": "Perfis de lançamento se aplicarão a artistas com pelo menos uma etiqueta correspondente. Deixe em branco para aplicar a todos os artistas", "TheArtistFolderStrongpathstrongAndAllOfItsContentWillBeDeleted": "A pasta do artista '{0}' e todo o seu conteúdo serão excluídos.", "ExpandEPByDefaultHelpText": "EPs", "ExpandSingleByDefaultHelpText": "Singles", @@ -660,7 +659,7 @@ "AddQualityProfile": "Adicionar perfil de qualidade", "AddRemotePathMapping": "Adicionar mapeamento de caminho remoto", "AddRootFolder": "Adicionar pasta raiz", - "AfterManualRefresh": "Após a atualização manual", + "AfterManualRefresh": "Após a Atualização Manual", "Age": "Tempo de vida", "Albums": "Álbum", "All": "Todos", @@ -677,7 +676,6 @@ "Custom": "Personalizado", "CustomFilters": "Filtros personalizados", "Date": "Data", - "DefaultDelayProfileHelpText": "Este é o perfil padrão. Ele se aplica a todos os artistas que não possuem um perfil explícito.", "Deleted": "Excluído", "Details": "Detalhes", "Donations": "Doações", @@ -877,7 +875,7 @@ "RemotePathMappingCheckLocalFolderMissing": "O cliente de download remoto {0} coloca os downloads em {1}, mas este diretório parece não existir. Mapeamento de caminho remoto provavelmente ausente ou incorreto.", "UpdateCheckUINotWritableMessage": "Não é possível instalar a atualização porque a pasta de IU '{0}' não pode ser gravada pelo usuário '{1}'.", "ApiKeyValidationHealthCheckMessage": "Atualize sua chave de API para ter pelo menos {0} caracteres. Você pode fazer isso através das configurações ou do arquivo de configuração", - "AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData", + "AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData na Atualização", "ColonReplacement": "Substituto para dois-pontos", "DashOrSpaceDashDependingOnName": "Traço ou Espaço e Traço, dependendo do nome", "DeleteFormat": "Excluir Formato", @@ -1330,5 +1328,7 @@ "Shutdown": "Desligar", "UpdateAppDirectlyLoadError": "Incapaz de atualizar o {appName} diretamente,", "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?", - "ManageFormats": "Gerenciar Formatos" + "ManageFormats": "Gerenciar Formatos", + "AddDelayProfileError": "Não foi possível adicionar um novo perfil de atraso. Tente novamente.", + "ImportListTagsHelpText": "Tags que serão adicionadas ao importar esta lista" } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 66f90018a..83cc41168 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -471,7 +471,6 @@ "Connect": "Conectează", "Custom": "Personalizat", "CustomFilters": "Filtre personalizate", - "DefaultDelayProfileHelpText": "Acesta este profilul implicit. Se aplică tuturor filmelor care nu au un profil explicit.", "Deleted": "Șters", "Details": "Detalii", "Donations": "Donații", @@ -791,5 +790,8 @@ "UnmappedFiles": "Foldere nemapate", "EditReleaseProfile": "Editați profilul de întârziere", "Clone": "Clonează", - "AddReleaseProfile": "Editați profilul de întârziere" + "AddReleaseProfile": "Editați profilul de întârziere", + "DownloadImported": "Descărcarea ignorată", + "Season": "Motiv", + "AddDelayProfileError": "Imposibil de adăugat un nou profil de calitate, încercați din nou." } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index 54effd35d..d3c447627 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -483,7 +483,6 @@ "Connect": "Подключить", "Custom": "Настраиваемый", "CustomFilters": "Настраиваемые фильтры", - "DefaultDelayProfileHelpText": "Это профиль по умолчанию. Он относится ко всем фильмам, у которых нет явного профиля.", "Deleted": "Удалено", "Donations": "Пожертвования", "DoNotPrefer": "Не предпочитать", @@ -1031,7 +1030,6 @@ "MetadataSettingsArtistSummary": "Создавать файлы метаданных при импорте эпизодов или обновлении сериалов", "ContinuingAllTracksDownloaded": "Продолжается (все эпизоды скачаны)", "RootFolderPathHelpText": "Элементы списка корневых папок будут добавлены в", - "TagsHelpText": "Профили релиза будут применяться к сериалам, имеющим хотя бы один соответствующий тег. Оставьте поле пустым, чтобы применить ко всем", "Any": "Любой", "AlbumStudioTruncated": "Показаны только последние 25 сезонов. Чтобы просмотреть все сезоны, перейдите к подробной информации", "AllAlbumsData": "Следите за всеми эпизодами, кроме специальных", @@ -1076,5 +1074,9 @@ "UpdateAppDirectlyLoadError": "Невозможно обновить {appName} напрямую,", "DockerUpdater": "Обновите контейнер Docker, чтобы получить обновление", "CountCustomFormatsSelected": "{count} пользовательских форматов выбрано", - "UnmappedFiles": "Несопоставленные папки" + "UnmappedFiles": "Несопоставленные папки", + "DownloadImported": "Загрузка игнорируется", + "AddAlbumWithTitle": "rus", + "AddDelayProfileError": "Не удалось добавить новый профиль задержки. Повторите попытку.", + "ImportListTagsHelpText": "Теги, которые будут добавлены при импорте из этого списка" } diff --git a/src/NzbDrone.Core/Localization/Core/sk.json b/src/NzbDrone.Core/Localization/Core/sk.json index c0003a3cc..388e4316a 100644 --- a/src/NzbDrone.Core/Localization/Core/sk.json +++ b/src/NzbDrone.Core/Localization/Core/sk.json @@ -293,5 +293,6 @@ "DeleteSelectedCustomFormats": "Klonovať vlastný formát", "AptUpdater": "Použiť apt pre inštaláciu aktualizácie", "Clone": "Zatvoriť", - "Reason": "Séria" + "Reason": "Séria", + "AddDelayProfileError": "Nie je možné pridať novú podmienku, skúste to znova." } diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 233ea80be..b95ba0d2a 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -651,7 +651,6 @@ "Custom": "Beställnings", "CustomFilters": "Anpassade Filter", "Date": "Datum", - "DefaultDelayProfileHelpText": "Detta är standardprofilen. Det gäller alla filmer som inte har en uttrycklig profil.", "Deleted": "Raderad", "Details": "Detaljer", "Donations": "Donationer", @@ -917,5 +916,9 @@ "UpdateAppDirectlyLoadError": "Det går inte att uppdatera {appName} direkt,", "AddReleaseProfile": "Redigera fördröjningsprofil", "Clone": "Avsluta", - "EditReleaseProfile": "Redigera fördröjningsprofil" + "EditReleaseProfile": "Redigera fördröjningsprofil", + "MonitorMissingAlbums": "Existerande Albums", + "MissingAlbums": "Existerande Albums", + "DownloadImported": "Nerladdning ignorerad", + "AddDelayProfileError": "Det gick inte att lägga till en ny kvalitetsprofil. Försök igen." } diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index 782458c4f..159b23e92 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -483,7 +483,6 @@ "Custom": "กำหนดเอง", "CustomFilters": "ตัวกรองที่กำหนดเอง", "Date": "วันที่", - "DefaultDelayProfileHelpText": "นี่คือโปรไฟล์เริ่มต้น ใช้กับภาพยนตร์ทุกเรื่องที่ไม่มีโปรไฟล์โจ่งแจ้ง", "Deleted": "ลบแล้ว", "Details": "รายละเอียด", "Donations": "การบริจาค", @@ -744,5 +743,7 @@ "Clone": "ปิด", "AddReleaseProfile": "แก้ไขโปรไฟล์ความล่าช้า", "UnmappedFiles": "โฟลเดอร์ที่ไม่ได้แมป", - "EditReleaseProfile": "แก้ไขโปรไฟล์ความล่าช้า" + "EditReleaseProfile": "แก้ไขโปรไฟล์ความล่าช้า", + "Season": "เหตุผล", + "AddDelayProfileError": "ไม่สามารถเพิ่มโปรไฟล์คุณภาพใหม่ได้โปรดลองอีกครั้ง" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 27c063831..fa0bc6aed 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -68,32 +68,32 @@ "Actions": "Eylemler", "ArtistAlbumClickToChangeTrack": "Filmi değiştirmek için tıklayın", "Authentication": "Doğrulama", - "AuthenticationMethodHelpText": "{appName}'a erişmek için Kullanıcı Adı ve Şifre gerektir", + "AuthenticationMethodHelpText": "{appName}'e erişmek için Kullanıcı Adı ve Parola gereklidir", "AutoRedownloadFailedHelpText": "Otomatik olarak farklı bir Yayın arayın ve indirmeye çalışın", - "BackupFolderHelpText": "Göreli yollar {appName}'ın AppData dizini altında olacaktır", - "BackupNow": "Şimdi yedekle", - "BackupRetentionHelpText": "Saklama süresinden daha eski olan otomatik yedeklemeler otomatik olarak temizlenecektir", + "BackupFolderHelpText": "Bağıl yollar {appName}'ın AppData dizini altında olacak", + "BackupNow": "Şimdi Yedekle", + "BackupRetentionHelpText": "Saklama süresinden daha eski otomatik yedeklemeler otomatik olarak temizlenecektir", "Backups": "Yedeklemeler", "BindAddress": "Bind Adresi", "BindAddressHelpText": "Tüm arayüzler için geçerli IP adresi, localhost veya '*'", "BindAddressHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir", - "Blocklist": "Kara liste", + "Blocklist": "Engellenenler listesi", "BlocklistRelease": "Kara Liste Sürümü", "Branch": "Şube", - "BypassProxyForLocalAddresses": "Yerel Adresler için Proxy'yi Atla", + "BypassProxyForLocalAddresses": "Yerel Adresler için Proxy'yi Kullanma", "Calendar": "Takvim", "CalendarWeekColumnHeaderHelpText": "Aktif görünüm hafta olduğunda her bir sütunun üzerinde gösterilir", "Cancel": "Vazgeç", - "CancelPendingTask": "Bu bekleyen görevi iptal etmek istediğinizden emin misiniz?", - "CertificateValidation": "Sertifika Doğrulama", + "CancelPendingTask": "Bekleyen görevi iptal etmek istediğinizden emin misiniz?", + "CertificateValidation": "Sertifika Doğrulaması", "CertificateValidationHelpText": "HTTPS sertifika doğrulamasının sıkılığını değiştirin. Riskleri anlamadığınız sürece değişmeyin.", "ChangeFileDate": "Dosya Tarihini Değiştir", "ChangeHasNotBeenSavedYet": "Değişiklik henüz kaydedilmedi", "ChmodFolder": "chmod Klasörü", "ChmodFolderHelpText": "Sekizli, medya klasörlerine ve dosyalara içe aktarma / yeniden adlandırma sırasında uygulanır (yürütme bitleri olmadan)", - "ChmodFolderHelpTextWarning": "Bu, yalnızca {appName}'ı çalıştıran kullanıcı dosyanın sahibi ise çalışır. İndirme istemcisinin izinleri doğru şekilde ayarladığından emin olmak daha iyidir.", + "ChmodFolderHelpTextWarning": "Bu yalnızca {appName} uygulamasını çalıştıran kullanıcı, dosyanın sahibiyse işe yarar. İndirme istemci izinlerinin doğruluğundan emin olmak önerilir.", "ChownGroupHelpText": "Grup adı veya gid. Uzak dosya sistemleri için gid kullanın.", - "ChownGroupHelpTextWarning": "Bu, yalnızca {appName}'ı çalıştıran kullanıcı dosyanın sahibi ise çalışır. İndirme istemcisinin {appName} ile aynı grubu kullanmasını sağlamak daha iyidir.", + "ChownGroupHelpTextWarning": "Bu yalnızca {appName} uygulamasını çalıştıran kullanıcı, dosyanın sahibiyse işe yarar. İndirme istemcisinin {appName} ile aynı grubu kullandığından emin olmak önerilir.", "Clear": "Temizle", "ClickToChangeQuality": "Kaliteyi değiştirmek için tıklayın", "ClientPriority": "Müşteri Önceliği", @@ -143,9 +143,9 @@ "DetailedProgressBar": "Ayrıntılı İlerleme Çubuğu", "DetailedProgressBarHelpText": "İlerleme çubuğundaki metni göster", "DiskSpace": "Disk Alanı", - "DownloadClient": "İstemciyi İndir", + "DownloadClient": "İndirme İstemcisi", "DownloadClients": "İndirme İstemcileri", - "DownloadClientSettings": "İstemci Ayarlarını İndir", + "DownloadClientSettings": "İndirme İstemcisi Ayarlarını", "DownloadFailedCheckDownloadClientForMoreDetails": "İndirme başarısız oldu: Daha fazla ayrıntı için indirme istemcisini kontrol edin", "DownloadFailedInterp": "İndirme başarısız oldu: {0}", "Downloading": "İndiriliyor", @@ -156,19 +156,19 @@ "EnableAutomaticAdd": "Otomatik Eklemeyi Etkinleştir", "EnableAutomaticSearch": "Otomatik Aramayı Etkinleştir", "EnableColorImpairedMode": "Renk Bozukluğu Modunu Etkinleştir", - "EnableColorImpairedModeHelpText": "Renk bozukluğu olan kullanıcıların renk kodlu bilgileri daha iyi ayırt etmesine olanak tanıyan değiştirilmiş stil", + "EnableColorImpairedModeHelpText": "Renk engelli kullanıcıların renkleri daha iyi ayırt edebilmelerini sağlamak için değiştirilmiş stil", "EnableCompletedDownloadHandlingHelpText": "Tamamlanan indirmeleri indirme istemcisinden otomatik olarak içe aktarın", - "EnableHelpText": "Bu meta veri türü için meta veri dosyası oluşturmayı etkinleştirin", + "EnableHelpText": "Bu meta veri türü için meta veri dosyası oluşturmayı etkinleştir", "EnableInteractiveSearch": "Etkileşimli Aramayı Etkinleştir", "EnableRSS": "RSS'yi etkinleştir", "EnableSSL": "SSL'yi etkinleştir", "EnableSslHelpText": " Etkili olması için yönetici olarak yeniden çalıştırmayı gerektirir", - "Ended": "Bitti", + "Ended": "Biten", "ErrorLoadingContents": "İçerik yüklenirken hata oluştu", "ErrorLoadingPreviews": "Önizlemeler yüklenirken hata oluştu", "Exception": "İstisna", "FileDateHelpText": "İçe aktarmada / yeniden taramada dosya tarihini değiştirin", - "FileManagement": "Dosya idare", + "FileManagement": "Dosya Yönetimi", "Filename": "Dosya adı", "FileNames": "Dosya Adları", "Files": "Dosyalar", @@ -189,7 +189,7 @@ "HasPendingChangesNoChanges": "Değişiklikler yok", "HasPendingChangesSaveChanges": "Değişiklikleri Kaydet", "History": "Geçmiş", - "Host": "Ana bilgisayar", + "Host": "Sunucu", "HostHelpText": "Uzaktan İndirme İstemcisi için belirttiğiniz ana bilgisayar", "Hostname": "Hostname", "ICalFeed": "iCal Beslemesi", @@ -204,7 +204,7 @@ "ImportExtraFiles": "Ekstra Dosyaları İçe Aktar", "ImportExtraFilesHelpText": "Bir film dosyasını içe aktardıktan sonra eşleşen ekstra dosyaları (altyazılar, bilgi notları vb.) İçe aktarın", "ImportFailedInterp": "İçe aktarma başarısız oldu: {0}", - "Importing": "İçe aktarılıyor", + "Importing": "İçe Aktarma", "IncludeUnknownArtistItemsHelpText": "Kuyrukta film olmayan öğeleri gösterin. Bu, kaldırılan filmleri veya {appName}'ın kategorisindeki herhangi bir şeyi içerebilir", "IncludeUnmonitored": "Takip Edilmeyenleri Dahil Et", "Indexer": "Dizinleyici", @@ -228,23 +228,23 @@ "Logging": "Loglama", "LogLevel": "Günlük Düzeyi", "LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "İzleme günlük kaydı yalnızca geçici olarak etkinleştirilmelidir", - "Logs": "Kütükler", + "Logs": "Günlükler", "LongDateFormat": "Uzun Tarih Formatı", "ManualImport": "Manuel İçe Aktar", "MarkAsFailed": "Başarısız olarak işaretle", "MarkAsFailedMessageText": "'{0}' başarısız olarak işaretlemek istediğinizden emin misiniz?", "MaximumLimits": "Maksimum Sınırlar", - "MaximumSize": "En büyük boy", + "MaximumSize": "Maksimum Boyut", "MaximumSizeHelpText": "MB cinsinden alınacak bir sürüm için maksimum boyut. Sınırsız olarak ayarlamak için sıfıra ayarlayın", "Mechanism": "İşleyiş", "MediaInfo": "Medya bilgisi", "MediaManagementSettings": "Medya Yönetimi Ayarları", "Medium": "Orta", - "Message": "İleti", + "Message": "Mesaj", "MetadataSettings": "Meta Veri Ayarları", "MIA": "MIA", - "MinimumAge": "Asgari yaş", - "MinimumAgeHelpText": "Yalnızca Usenet: NZB'lerin alınmadan önceki dakika cinsinden minimum yaşı. Yeni yayınların usenet sağlayıcınıza yayılması için zaman tanımak için bunu kullanın.", + "MinimumAge": "Minimum Geçen Süre", + "MinimumAgeHelpText": "Yalnızca Usenet: NZB'lerin yakalanmadan önceki minimum geçen süre (dakika cinsinden). Bunu, yeni sürümlerin usenet sağlayıcınıza yayılması için zaman vermek amacıyla kullanın.", "MinimumFreeSpace": "Minimum Boş Alan", "MinimumFreeSpaceWhenImportingHelpText": "Bu miktardan daha az kullanılabilir disk alanı bırakacaksa içe aktarmayı önleyin", "MinimumLimits": "Minimum Limitler", @@ -272,7 +272,7 @@ "Password": "Şifre", "Path": "Yol", "Permissions": "İzinler", - "Port": "Liman", + "Port": "Port No", "PortNumber": "Port numarası", "PosterSize": "Poster Boyutu", "PreviewRename": "Yeniden Adlandır ve Önizle", @@ -292,7 +292,7 @@ "QualityProfile": "Kalite Profili", "QualityProfiles": "Kalite Profileri", "QualitySettings": "Kalite Ayarları", - "Queue": "Sırada", + "Queue": "Kuyruk", "ReadTheWikiForMoreInformation": "Daha fazla bilgi için Wiki'yi okuyun", "Real": "Gerçek", "Reason": "Nedeni", @@ -300,7 +300,7 @@ "RecycleBinCleanupDaysHelpTextWarning": "Geri dönüşüm kutusundaki, seçilen gün sayısından daha eski olan dosyalar otomatik olarak temizlenecektir", "RecycleBinHelpText": "Film dosyaları, kalıcı olarak silinmek yerine silindiğinde buraya gider", "RecyclingBin": "Geri dönüşüm Kutusu", - "RecyclingBinCleanup": "Geri Dönüşüm Kutusu Temizleme", + "RecyclingBinCleanup": "Geri Dönüşüm Kutusu Temizle", "Redownload": "Yeniden indir", "Refresh": "Yenile", "RefreshInformationAndScanDisk": "Bilgileri ve tarama diskini yenileyin", @@ -325,7 +325,7 @@ "RemoveTagRemovingTag": "Etiket kaldırılıyor", "RenameTracksHelpText": "Yeniden adlandırma devre dışı bırakılırsa, {appName} mevcut dosya adını kullanacaktır", "Reorder": "Yeniden sırala", - "ReplaceIllegalCharacters": "Yasadışı Karakterleri Değiştirin", + "ReplaceIllegalCharacters": "Geçersiz Karakterleri Değiştirin", "ReplaceIllegalCharactersHelpText": "Geçersiz karakterleri değiştirin. İşaretlenmezse bunun yerine {appName} bunları kaldıracak", "RequiredHelpText": "Sürüm, bu terimlerden en az birini içermelidir (büyük / küçük harfe duyarlı değildir)", "RequiredPlaceHolder": "Yeni kısıtlama ekle", @@ -349,7 +349,7 @@ "RootFolders": "Kök klasörler", "RSSSync": "RSS Senkronizasyonu", "RSSSyncInterval": "RSS Senkronizasyon Aralığı", - "RssSyncIntervalHelpText": "Dakika cinsinden periyot. Devre dışı bırakmak için sıfıra ayarlayın (tüm otomatik yayın yakalamayı durduracaktır)", + "RssSyncIntervalHelpText": "Dakika cinsinden aralık. Devre dışı bırakmak için sıfıra ayarlayın (tüm otomatik yayın yakalamayı durduracaktır)", "ShownAboveEachColumnWhenWeekIsTheActiveView": "Aktif görünüm hafta olduğunda her bir sütunun üzerinde gösterilir", "ShowPath": "Yolu Göster", "ShowQualityProfile": "Kalite Profilini Göster", @@ -361,7 +361,7 @@ "ShowSizeOnDisk": "Diskte Boyutu Göster", "ShowUnknownArtistItems": "Bilinmeyen Film Öğelerini Göster", "SSLCertPassword": "SSL Sertifika Parolası", - "SslCertPasswordHelpText": "Pfx dosyasının şifresi", + "SslCertPasswordHelpText": "Pfx dosyası için şifre", "SslCertPasswordHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir", "SSLCertPath": "SSL Sertifika Yolu", "SslCertPathHelpText": "Pfx dosyasının yolu", @@ -438,7 +438,7 @@ "20MinutesTwenty": "60 Dakika: {0}", "Automatic": "Otomatik", "DelayingDownloadUntil": "İndirme işlemi {date} tarihine, {time} tarihine kadar erteleniyor", - "Docker": "Liman işçisi", + "Docker": "Docker", "Dates": "Tarih", "Name": "İsim", "RemoveFilter": "Filtreyi kaldır", @@ -449,7 +449,7 @@ "Tracks": "İzleme", "NETCore": ".NET Çekirdeği", "Ok": "Tamam", - "Test": "Sına", + "Test": "Test Et", "UnmappedFilesOnly": "Yalnızca Eşlenmemiş Dosyalar", "Activity": "Etkinlik", "Add": "Ekle", @@ -463,8 +463,8 @@ "TimeLeft": "Kalan zaman", "Title": "Başlık", "TotalSpace": "Toplam alan", - "UnmonitoredOnly": "Sadece İzlenenler", - "UpgradesAllowed": "Yükseltmelere İzin Verildi", + "UnmonitoredOnly": "Sadece Takip Edilmeyen", + "UpgradesAllowed": "Yükseltmelere İzin Ver", "Wanted": "Arananlar", "Warn": "Uyar", "Connect": "Bildirimler", @@ -479,13 +479,12 @@ "All": "Hepsi", "AllFiles": "Tüm dosyalar", "Always": "Her zaman", - "AudioInfo": "Ses Bilgileri", + "AudioInfo": "Ses Bilgisi", "BeforeUpdate": "Güncellemeden önce", "Close": "Kapat", "Custom": "Özel", "CustomFilters": "Özel Filtreler", "Date": "Tarih", - "DefaultDelayProfileHelpText": "Bu varsayılan profildir. Açık bir profili olmayan tüm filmler için geçerlidir.", "Deleted": "Silindi", "Donations": "Bağışlar", "DoNotPrefer": "Tercih etmeme", @@ -498,7 +497,7 @@ "EditRootFolder": "Kök Klasör Ekle", "Error": "Hata", "ErrorRestoringBackup": "Yedeği geri yüklerken hata", - "Events": "Etkinlikler", + "Events": "Olaylar", "EventType": "Etkinlik tipi", "Filters": "Filtreler", "FreeSpace": "Boş alan", @@ -509,9 +508,9 @@ "Ignored": "Yok sayıldı", "Import": "İçe aktar", "InteractiveImport": "Etkileşimli İçe Aktarma", - "Location": "yer", + "Location": "Konum", "Manual": "Manuel", - "MediaManagement": "Medya işletme", + "MediaManagement": "Medya Yönetimi", "Metadata": "Meta veri", "MonitoredOnly": "Sadece Takip Edilen", "MoveAutomatically": "Otomatik Olarak Taşı", @@ -554,7 +553,7 @@ "DoneEditingGroups": "Grupları Düzenleme Bitti", "QualitiesHelpText": "Listede üst sıralarda yer alan nitelikler işaretlenmese bile en çok tercih edilendir. Aynı grup içindeki nitelikler eşittir. Yalnızca kontrol edilen nitelikler aranır", "EditGroups": "Grupları Düzenle", - "CustomFormatScore": "Özel Biçim Puanı", + "CustomFormatScore": "Özel Format Puanı", "MinimumCustomFormatScore": "Minimum Özel Format Puanı", "CloneCustomFormat": "Özel Formatı Klonla", "CopyToClipboard": "Panoya kopyala", @@ -566,7 +565,7 @@ "Customformat": "Özel Biçimler", "CutoffFormatScoreHelpText": "Bu özel format puanına ulaşıldığında, {appName} artık film indirmeyecektir", "DeleteCustomFormat": "Özel Formatı Sil", - "DeleteCustomFormatMessageText": "'{name}' özel biçimini silmek istediğinizden emin misiniz?", + "DeleteCustomFormatMessageText": "'{name}' özel formatı silmek istediğinizden emin misiniz?", "DeleteFormatMessageText": "{0} biçim etiketini silmek istediğinizden emin misiniz?", "DownloadPropersAndRepacksHelpTextWarning": "Propers / Repacks'e otomatik yükseltmeler için özel formatlar kullanın", "DownloadedUnableToImportCheckLogsForDetails": "İndirildi - İçe Aktarılamıyor: ayrıntılar için günlükleri kontrol edin", @@ -597,16 +596,16 @@ "HiddenClickToShow": "Gizli, göstermek için tıklayın", "AppDataLocationHealthCheckMessage": "Güncelleme sırasında AppData'nın silinmesini önlemek için güncelleme yapılmayacaktır", "ColonReplacement": "Kolon Değiştirme", - "ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm listeler kullanılamıyor", + "ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor", "ImportListStatusCheckSingleClientMessage": "Hatalar nedeniyle kullanılamayan listeler: {0}", "ImportMechanismHealthCheckMessage": "Tamamlanan İndirme İşlemini Etkinleştir", "IndexerLongTermStatusCheckSingleClientMessage": "6 saatten uzun süredir yaşanan arızalar nedeniyle dizinleyiciler kullanılamıyor: {0}", "IndexerLongTermStatusCheckAllClientMessage": "6 saatten uzun süren arızalar nedeniyle tüm dizinleyiciler kullanılamıyor", - "IndexerRssHealthCheckNoAvailableIndexers": "Son indeksleyici hataları nedeniyle tüm rss özellikli indeksleyiciler geçici olarak kullanılamıyor", + "IndexerRssHealthCheckNoAvailableIndexers": "Son zamanlardaki dizinleyici hataları nedeniyle tüm rss uyumlu dizinleyiciler geçici olarak kullanılamıyor", "IndexerRssHealthCheckNoIndexers": "RSS senkronizasyonunun etkin olduğu dizinleyici yok, {appName} yeni yayınlar otomatik olarak almayacak", - "IndexerSearchCheckNoAutomaticMessage": "Otomatik Arama etkinken indeksleyici yok, {appName} herhangi bir otomatik arama sonucu sağlamayacak", - "IndexerSearchCheckNoAvailableIndexersMessage": "Son indeksleyici hataları nedeniyle arama özellikli indeksleyicilerin tümü geçici olarak kullanılamıyor", - "IndexerSearchCheckNoInteractiveMessage": "Etkileşimli Arama etkinleştirilmiş fakat dizinleyici mevcut değil; {appName} herhangi bir etkileşimli arama sonucu sağlayamayacaktır", + "IndexerSearchCheckNoAutomaticMessage": "Otomatik Arama etkinleştirildiğinde hiçbir dizinleyici kullanılamaz, {appName} herhangi bir otomatik arama sonucu sağlamayacaktır", + "IndexerSearchCheckNoAvailableIndexersMessage": "Son zamanlardaki dizinleyici hataları nedeniyle tüm arama yeteneğine sahip dizinleyiciler geçici olarak kullanılamıyor", + "IndexerSearchCheckNoInteractiveMessage": "Etkileşimli Arama etkinleştirildiğinde hiçbir dizinleyici kullanılamaz, {appName} herhangi bir etkileşimli arama sonucu sağlamayacaktır", "IndexerStatusCheckAllClientMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor", "IndexerStatusCheckSingleClientMessage": "Hatalar nedeniyle dizinleyiciler kullanılamıyor: {0}", "MountArtistHealthCheckMessage": "Bir film yolu içeren bağlama, salt okunur olarak bağlanır: ", @@ -652,8 +651,8 @@ "NoResultsFound": "Sonuç bulunamadı", "SuggestTranslationChange": "Çeviri değişikliği önerin", "UpdateSelected": "Seçilmişleri güncelle", - "AllResultsAreHiddenByTheAppliedFilter": "Tüm sonuçlar, uygulanan filtre tarafından gizlenir", - "SomeResultsAreHiddenByTheAppliedFilter": "Bazı sonuçlar, uygulanan filtre tarafından gizlendi", + "AllResultsAreHiddenByTheAppliedFilter": "Tüm sonuçlar uygulanan filtre tarafından gizlendi", + "SomeResultsAreHiddenByTheAppliedFilter": "Bazı sonuçlar uygulanan filtre tarafından gizlendi", "ConnectionLost": "Bağlantı koptu", "RecentChanges": "Son değişiklikler", "WhatsNew": "Ne var ne yok?", @@ -661,7 +660,7 @@ "NotificationStatusSingleClientHealthCheckMessage": "Hatalar nedeniyle kullanılamayan listeler: {0}", "ConnectionLostReconnect": "{appName} otomatik bağlanmayı deneyecek veya aşağıda yeniden yükle seçeneğini işaretleyebilirsiniz.", "MetadataProfile": "üstveri profili", - "Episode": "bölüm", + "Episode": "Bölüm", "Enabled": "Etkin", "Library": "kütüphane", "MetadataProfiles": "üstveri profili", @@ -678,17 +677,17 @@ "EditConditionImplementation": "Koşulu Düzenle - {implementationName}", "Overview": "Genel Bakış", "GrabId": "ID'den Yakala", - "AddIndexerImplementation": "Yeni Dizin Ekle - {implementationName}", + "AddIndexerImplementation": "Yeni Dizinleyici Ekle - {implementationName}", "DeleteArtistFolderHelpText": "Film klasörünü ve içeriğini silin", "DeleteAutoTagHelpText": "'{name}' etiketini otomatik silmek istediğinizden emin misiniz?", "DeleteSpecification": "Spesifikasyonu Sil", "DisabledForLocalAddresses": "Yerel Adreslerde Devre Dışı Bırak", - "EditConnectionImplementation": "Koşul Ekle - {implementationName}", + "EditConnectionImplementation": "Bildirimi Düzenle - {implementationName}", "Negate": "Reddet", "OverviewOptions": "Genel Bakış Seçenekler", "PosterOptions": "Poster Seçenekleri", "Posters": "Posterler", - "AuthForm": "Formlar (Giriş Sayfası)", + "AuthForm": "Form (Giriş Sayfası)", "Large": "Büyük", "OrganizeSelectedArtists": "Seçili Filmleri Düzenleyin", "Table": "Tablo", @@ -734,7 +733,7 @@ "ImportList": "Listeler", "Uppercase": "Büyük Harf", "TagsSettingsSummary": "Tüm etiketleri ve nasıl kullanıldıklarını göster. Kullanılmayan etiketler kaldırılabilinir", - "UiSettingsSummary": "Takvim, tarih ve renk engelli seçenekler", + "UiSettingsSummary": "Takvim, tarih ve renk körlüğü seçenekleri", "ConnectSettingsSummary": "Bildirimler, medya sunucularına/oynatıcılara bağlantılar ve özel komut dosyaları", "CustomFormatsSettings": "Özel Format Ayarları", "CustomFormatsSettingsSummary": "Özel Formatlar ve Ayarlar", @@ -815,7 +814,7 @@ "DownloadClientAriaSettingsDirectoryHelpText": "İndirilenlerin yerleştirileceği isteğe bağlı konum, varsayılan Aria2 konumunu kullanmak için boş bırakın", "Database": "Veri tabanı", "DeleteRootFolder": "Kök Klasörü Sil", - "RegularExpressionsCanBeTested": "Normal ifadeler [burada](http://regexstorm.net/tester) test edilebilir.", + "RegularExpressionsCanBeTested": "Düzenli ifadeler [burada]({url}) test edilebilir.", "AutoTaggingSpecificationTag": "Etiket", "DoNotBlocklistHint": "Engellenenler listesine eklemeden kaldır", "DownloadClientDelugeSettingsDirectory": "İndirme Dizini", @@ -944,7 +943,7 @@ "RemoveTagsAutomatically": "Otomatik Etiketlemeyi Kaldır", "Started": "Başlatıldı", "RemoveFailedDownloads": "Başarısız İndirmeleri Kaldır", - "RegularExpressionsTutorialLink": "Normal ifadelerle ilgili daha fazla ayrıntıyı [burada](https://www.regular-expressions.info/tutorial.html) bulabilirsiniz.", + "RegularExpressionsTutorialLink": "Düzenli ifadeler hakkında daha fazla ayrıntı [burada]({url}) bulunabilir.", "SelectReleaseGroup": "Yayımlama Grubunu Seçin", "QueueFilterHasNoItems": "Seçilen kuyruk filtresinde hiç öğe yok", "NotificationsSettingsUpdateMapPathsFrom": "Harita Yolları", @@ -960,7 +959,7 @@ "InteractiveSearchModalHeader": "Etkileşimli Arama", "NoMissingItems": "Eksik öğe yok", "QualityProfileIdHelpText": "Kalite Profili listesi öğeleri şu şekilde eklenecektir:", - "ReleaseProfile": "Yayımlama Profilleri", + "ReleaseProfile": "Sürüm Profili", "RemotePathMappingCheckFilesGenericPermissions": "{downloadClientName} istemcisinin {path} dizininde rapor ettiği dosyaları indiriyor, ancak {appName} bu dizini göremiyor. Klasörün izinlerini ayarlamanız gerekebilir.", "IndexerJackettAll": "Desteklenmeyen Jackett 'hepsi' uç noktasını kullanan dizinleyiciler: {indexerNames}", "RootFolderPathHelpText": "Kök Klasör listesi öğeleri eklenecek", @@ -975,7 +974,7 @@ "RemotePathMappingCheckFilesLocalWrongOSPath": "Yerel indirme istemcisi {downloadClientName}, {path} yolunda dosyalar bildirdi ancak bu geçerli bir {osName} yolu değil. İndirme istemcisi ayarlarınızı gözden geçirin.", "RemotePathMappingCheckRemoteDownloadClient": "Uzaktan indirme istemcisi {downloadClientName}, {path} yolunda dosyalar bildirdi ancak bu dizin mevcut görünmüyor. Muhtemelen uzak yol eşlemesi eksik.", "RemotePathMappingCheckFilesBadDockerPath": "Docker kullanıyorsunuz; {downloadClientName} indirme istemcisi, {path} yolunda dosyalar bildirdi ancak bu geçerli bir {osName} yolu değil. Uzak yol eşlemelerinizi gözden geçirin ve istemci ayarlarını indirin.", - "RemotePathMappingsInfo": "Uzak Yol Eşlemeleri çok nadiren gereklidir; {appName} ve indirme istemciniz aynı sistemdeyse yollarınızı eşleştirmek daha iyidir. Daha fazla bilgi için [wiki]({wikiLink}) sayfasına bakın.", + "RemotePathMappingsInfo": "Uzak Yol Eşlemeleri çok nadiren gereklidir, {appName} ve indirme istemciniz aynı sistemdeyse yollarınızı eşleştirmeniz daha iyidir. Daha fazla bilgi için [wiki]({wikiLink}) adresini ziyaret edin", "RecycleBinUnableToWriteHealthCheck": "Yapılandırılmış geri dönüşüm kutusu klasörüne yazılamıyor: {path}. Bu yolun mevcut olduğundan ve {appName} uygulamasını çalıştıran kullanıcı tarafından yazılabilir olduğundan emin olun", "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "{downloadClientName} indirme istemcisi, tamamlanan indirmeleri kaldıracak şekilde ayarlandı. Bu, indirilenlerin {appName} içe aktarılmadan önce istemcinizden kaldırılmasına neden olabilir.", "RemotePathMappingCheckFilesWrongOSPath": "Uzaktan indirme istemcisi {downloadClientName}, {path} yolunda dosyalar bildirdi ancak bu geçerli bir {osName} yolu değil. Uzak yol eşlemelerinizi gözden geçirin ve istemci ayarlarını indirin.", @@ -991,12 +990,11 @@ "RemotePathMappingCheckLocalFolderMissing": "Uzaktan indirme istemcisi {downloadClientName}, indirmeleri {path} dizinine yerleştiriyor ancak bu dizin mevcut görünmüyor. Muhtemelen eksik veya yanlış uzak yol eşlemesi.", "ResetTitlesHelpText": "Değerlerin yanı sıra tanım başlıklarını da sıfırlayın", "SearchForAllCutoffUnmetAlbumsConfirmationCount": "{totalRecords} Karşılanmayan Kesim filmlerinin tamamını aramak istediğinizden emin misiniz?", - "ErrorLoadingContent": "Bu öğe yüklenirken bir hata oluştu", + "ErrorLoadingContent": "Bu içerik yüklenirken bir hata oluştu", "Loading": "Yükleniyor", "IsShowingMonitoredUnmonitorSelected": "Seçili Takipleri Kaldır", "RemotePathMappingCheckFolderPermissions": "{appName}, {path} indirme dizinini görebilir ancak erişemez. Olası izin hatası.", "ExpandAlbumByDefaultHelpText": "Albüm", - "TagsHelpText": "Yayımlama profilleri, en az bir eşleşen etikete sahip filmlere uygulanacaktır. Tüm filmlere uygulamak için boş bırakın", "SearchForAllMissingAlbums": "Eksik tüm filmleri arayın", "UserAgentProvidedByTheAppThatCalledTheAPI": "API'yi çağıran uygulama tarafından sağlanan Kullanıcı Aracısı", "NoCutoffUnmetItems": "Karşılanmayan son öğe yok", @@ -1017,7 +1015,7 @@ "Script": "Hazır Metin", "Any": "Herhangi", "DeleteSelected": "Seçileni Sil", - "CountCustomFormatsSelected": "{count} özel biçim seçildi", + "CountCustomFormatsSelected": "{count} özel format seçildi", "EditSelectedCustomFormats": "Seçilen Özel Formatları Düzenle", "IncludeCustomFormatWhenRenaming": "Yeniden Adlandırırken Özel Formatı Dahil Et", "ManageCustomFormats": "Özel Formatları Yönet", @@ -1030,11 +1028,11 @@ "Logout": "Çıkış", "IndexerSettingsApiUrl": "API URL'si", "LastSearched": "Son Aranan", - "AptUpdater": "Güncellemeyi yüklemek için apt kullanın", + "AptUpdater": "Güncellemeyi yüklemek için apt'ı kullanın", "DockerUpdater": "güncellemeyi almak için docker konteynerini güncelleyin", "ExternalUpdater": "{appName}, harici bir güncelleme mekanizması kullanacak şekilde yapılandırıldı", "InstallLatest": "En Sonu Yükle", - "OnLatestVersion": "{appName}'ın en son sürümü zaten kurulu", + "OnLatestVersion": "{appName}'ın en son sürümü kurulu", "PreviouslyInstalled": "Önceden Yüklenmiş", "Shutdown": "Kapat", "UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor,", @@ -1048,5 +1046,32 @@ "UnmappedFiles": "Eşlenmemiş Klasörler", "Artist": "sanatçı", "Season": "Sezon", - "CatalogNumber": "katalog numarası" + "CatalogNumber": "katalog numarası", + "Artists": "sanatçı", + "DownloadImported": "Yoksayılanları İndir", + "ManageFormats": "Formatları Yönet", + "Continuing": "Devam Ediyor", + "AutoAdd": "Otomatik Ekle", + "Monitoring": "Takip Etme", + "MonitoringOptions": "Takip Etme Seçenekleri", + "Other": "Diğer", + "MediaManagementSettingsSummary": "Adlandırma ve dosya yönetimi ayarları", + "EndedOnly": "Sadece Biten", + "IndexersSettingsSummary": "Dizinleyiciler ve yayımlama kısıtlamaları", + "ContinuingOnly": "Sadece Devam Eden", + "IndexerSettingsApiUrlHelpText": "Ne yaptığınızı bilmiyorsanız bunu değiştirmeyin. API anahtarınız ana sunucuya gönderilecektir.", + "ShowBanners": "Bannerları Göster", + "UpdateMonitoring": "Takip Edilenleri Güncelle", + "WithFiles": "Dosyalarla", + "SearchMonitored": "Takip Edilenleri Ara", + "SceneInformation": "Sahne Bilgileri", + "Total": "Toplam", + "AddDelayProfileError": "Yeni bir gecikme profili eklenemiyor, lütfen tekrar deneyin.", + "AllExpandedCollapseAll": "Tümünü Daralt", + "AllExpandedExpandAll": "Tümünü Genişlet", + "EpisodeDoesNotHaveAnAbsoluteEpisodeNumber": "Bölümün kesin bir bölüm numarası yoktur", + "ExpandOtherByDefaultHelpText": "Diğer", + "ImportListTagsHelpText": "Etiketler listesi öğeleri eklenecek", + "SceneNumberHasntBeenVerifiedYet": "Sahne numarası henüz doğrulanmadı", + "StatusEndedContinuing": "Devam Ediyor" } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 9a3b18317..068e9caf0 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -105,7 +105,6 @@ "Custom": "Настроюваний", "CustomFilters": "Користувацькі фільтри", "Date": "Дата", - "DefaultDelayProfileHelpText": "Це профіль за замовчуванням. Це стосується всіх фільмів, які не мають явного профілю.", "EditDelayProfile": "Додати профіль затримки", "EditQualityProfile": "Додати профіль якості", "EditRemotePathMapping": "Додати віддалений шлях", @@ -908,5 +907,9 @@ "Shutdown": "Вимкнення", "UpdateAppDirectlyLoadError": "Неможливо оновити {appName} безпосередньо,", "AptUpdater": "Використовуйте apt для інсталяції оновлення", - "UnmappedFiles": "Невідповідні папки" + "UnmappedFiles": "Невідповідні папки", + "Season": "Причина", + "CountCustomFormatsSelected": "Користувацькі формати обрано {count}", + "AutoTaggingRequiredHelpText": "Ця умова {0} має збігатися, щоб користувацький формат застосовувався. В іншому випадку достатньо одного збігу {1}.", + "AddDelayProfileError": "Неможливо додати новий профіль затримки, будь ласка спробуйте ще." } diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index 5d59e2d0a..5dec882a5 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -474,7 +474,6 @@ "Custom": "Tập quán", "CustomFilters": "Bộ lọc tùy chỉnh", "Date": "Ngày", - "DefaultDelayProfileHelpText": "Đây là cấu hình mặc định. Nó áp dụng cho tất cả các phim không có hồ sơ rõ ràng.", "Deleted": "Đã xóa", "Details": "Chi tiết", "Donations": "Quyên góp", @@ -774,5 +773,14 @@ "AuthenticationRequiredPasswordHelpTextWarning": "Nhập mật khẩu mới", "AuthenticationRequiredUsernameHelpTextWarning": "Nhập tên người dùng mới", "AuthenticationRequiredWarning": "Để ngăn truy cập từ xa mà không cần xác thực, {appName} hiện yêu cầu bật xác thực. Bạn có thể tùy ý tắt xác thực từ các địa chỉ cục bộ.", - "AutomaticUpdatesDisabledDocker": "Cập nhật tự động không được hỗ trợ trực tiếp khi sử dụng cơ chế cập nhật Docker. Bạn sẽ cần cập nhật container image của {appName} hoặc sử dụng tập lệnh" + "AutomaticUpdatesDisabledDocker": "Cập nhật tự động không được hỗ trợ trực tiếp khi sử dụng cơ chế cập nhật Docker. Bạn sẽ cần cập nhật container image của {appName} hoặc sử dụng tập lệnh", + "UnmappedFiles": "Thư mục chưa được ánh xạ", + "EditIndexerImplementation": "Thêm điều kiện - {implementationName}", + "EditReleaseProfile": "Chỉnh sửa hồ sơ độ trễ", + "Clone": "Đóng", + "EditConditionImplementation": "Thêm điều kiện - {implementationName}", + "Season": "Lý do", + "AddReleaseProfile": "Chỉnh sửa hồ sơ độ trễ", + "EditConnectionImplementation": "Thêm điều kiện - {implementationName}", + "AddDelayProfileError": "Không thể thêm hồ sơ chất lượng mới, vui lòng thử lại." } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 959357ac5..7889efca1 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -570,7 +570,6 @@ "Country": "国家", "CustomFilters": "自定义过滤器", "Date": "日期", - "DefaultDelayProfileHelpText": "这是默认配置档案,它适用于所有没有明确配置档案的歌手。", "Deleted": "已删除", "DeleteFilesHelpText": "删除曲目文件及艺术家文件夹", "DeleteImportList": "删除导入的列表", @@ -845,7 +844,7 @@ "IncludeCustomFormatWhenRenamingHelpText": "在 {Custom Formats} 中包含重命名格式", "IndexerRssHealthCheckNoAvailableIndexers": "由于最近索引器错误,所有支持 RSS 的索引器暂时不可用", "IndexerRssHealthCheckNoIndexers": "没有索引器开启 RSS 同步,{appName} 将不会自动抓取新版本", - "IndexerSearchCheckNoInteractiveMessage": "没有索引器开启手动搜索,{appName} 将不会提供任何手动搜索结果", + "IndexerSearchCheckNoInteractiveMessage": "没有启用交互式搜索的索引器,{appName}将不提供任何交互式搜索结果", "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "添加新的艺术家很容易,只需开始输入要添加的艺术家的名称即可。", "Loading": "加载中", "Monitor": "追踪", @@ -885,7 +884,7 @@ "RemotePathMappingCheckLocalFolderMissing": "远程下载客户端 {0} 的下载目录为 {1} ,但该目录似乎不存在。可能是远程路径映射缺失或错误。", "RemotePathMappingCheckRemoteDownloadClient": "远程下载客户端 {0} 的下载目录为 {1} ,但该目录似乎不存在。可能是远程路径映射缺失。", "RemotePathMappingCheckWrongOSPath": "远程下载客户端 {0} 的下载目录为 {1} ,但该路径 {2} 无效。请检查您的远程路径映射和下载客户端设置。", - "AppDataLocationHealthCheckMessage": "无法更新,以防止在更新时删除 AppData", + "AppDataLocationHealthCheckMessage": "为防止在更新时删除 AppData,更新将无法进行", "ColonReplacement": "替换冒号", "CopyToClipboard": "复制到剪贴板", "DeleteCustomFormat": "删除自定义格式", @@ -1033,7 +1032,6 @@ "MinimumCustomFormatScoreHelpText": "跳过首选协议延迟所需的最低自定义格式分数", "SmartReplace": "智能替换", "IndexerDownloadClientHealthCheckMessage": "有无效下载客户端的索引器:{0}。", - "TagsHelpText": "发布配置将应用于至少有一个匹配标记的剧集。留空适用于所有剧集", "AddNewArtistRootFolderHelpText": "将自动创建 '{folder}' 子文件夹", "NoAlbums": "没有专辑", "AlbumCount": "专辑数量", @@ -1325,5 +1323,8 @@ "Install": "安装", "InstallMajorVersionUpdateMessage": "此更新将安装新的主要版本,这可能与您的系统不兼容。您确定要安装此更新吗?", "InstallMajorVersionUpdate": "安装更新", - "InstallMajorVersionUpdateMessageLink": "请查看 [{domain}]({url}) 以获取更多信息。" + "InstallMajorVersionUpdateMessageLink": "请查看 [{domain}]({url}) 以获取更多信息。", + "ManageFormats": "管理格式", + "AddDelayProfileError": "无法添加新的延迟配置,请重试。", + "ImportListTagsHelpText": "从此列表导入时将添加标记" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_Hans.json b/src/NzbDrone.Core/Localization/Core/zh_Hans.json new file mode 100644 index 000000000..b49f406e7 --- /dev/null +++ b/src/NzbDrone.Core/Localization/Core/zh_Hans.json @@ -0,0 +1,7 @@ +{ + "Add": "添加", + "About": "关于", + "Always": "总是", + "Analytics": "分析", + "Username": "用户名" +} diff --git a/src/NzbDrone.Core/Localization/Core/zh_TW.json b/src/NzbDrone.Core/Localization/Core/zh_TW.json index 2f88a4434..bcf2fabcd 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_TW.json +++ b/src/NzbDrone.Core/Localization/Core/zh_TW.json @@ -81,7 +81,7 @@ "UpdateMechanismHelpText": "使用 {appName}內建的更新程式或是腳本文件", "Username": "使用者名稱", "Artist": "演員", - "UnableToAddANewIndexerPleaseTryAgain": "無法加入新的條件,請重新嘗試。", + "UnableToAddANewIndexerPleaseTryAgain": "無法加入新的索引器,請重新嘗試。", "Updates": "更新", "Rating": "評分", "Connection": "連接", @@ -222,5 +222,18 @@ "AptUpdater": "使用apt安裝更新", "AddReleaseProfile": "新增延時配置", "EditReleaseProfile": "新增延時配置", - "Reason": "季" + "Reason": "季", + "UnableToLoadUISettings": "無法載入 UI 設定", + "Any": "任何", + "UpdateAvailableHealthCheckMessage": "可用的新版本: {version}", + "UnableToLoadIndexers": "無法載入索引器", + "UnableToLoadTags": "無法載入標籤", + "Uptime": "上線時間", + "UpdateAppDirectlyLoadError": "無法直接更新 {appName},", + "Version": "版本", + "UiSettings": "使用者介面設定", + "UiLanguage": "使用者介面語言", + "UnableToLoadHistory": "無法載入歷史記錄", + "UiLanguageHelpText": "{appName} 介面所使用的語言", + "AddDelayProfileError": "無法加入新的條件,請重新嘗試。" } From 88196340a8f898838212d12b72624ffe47e8403e Mon Sep 17 00:00:00 2001 From: Servarr Date: Wed, 4 Dec 2024 15:39:53 +0000 Subject: [PATCH 116/275] Automated API Docs update --- src/Lidarr.Api.V1/openapi.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index 51bf02eaa..c92dfe454 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -10025,6 +10025,9 @@ "backupRetention": { "type": "integer", "format": "int32" + }, + "trustCgnatIpAddresses": { + "type": "boolean" } }, "additionalProperties": false From 11af8a5e05fd8b3c6e62e243e1978112949880ac Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 8 Dec 2024 18:17:10 +0200 Subject: [PATCH 117/275] Bump version to 2.8.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0f428126a..a55d6cd6a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.8.1' + majorVersion: '2.8.2' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 0fd6c263b1316b89dec59673328451db78bd80ff Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 14 Dec 2024 00:32:55 +0000 Subject: [PATCH 118/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Dani Talens Co-authored-by: GkhnGRBZ Co-authored-by: Havok Dan Co-authored-by: Tomer Horowitz Co-authored-by: Weblate Co-authored-by: fordas Co-authored-by: hhjuhl Co-authored-by: keysuck Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/he/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ca.json | 7 +- src/NzbDrone.Core/Localization/Core/da.json | 75 ++++++++++--------- src/NzbDrone.Core/Localization/Core/es.json | 7 +- src/NzbDrone.Core/Localization/Core/he.json | 9 ++- src/NzbDrone.Core/Localization/Core/ko.json | 24 +++--- .../Localization/Core/pt_BR.json | 7 +- src/NzbDrone.Core/Localization/Core/tr.json | 70 ++++++++--------- 7 files changed, 112 insertions(+), 87 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 5513910cc..141e08d94 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -959,5 +959,10 @@ "Shutdown": "Apaga", "UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,", "UnmappedFiles": "Carpetes sense mapejar", - "AddDelayProfileError": "No s'ha pogut afegir un perfil de retard, torna-ho a provar." + "AddDelayProfileError": "No s'ha pogut afegir un perfil de retard, torna-ho a provar.", + "AddAlbumWithTitle": "Afegeix {albumTitle}", + "AddArtistWithName": "Afegeix {artistName}", + "AddNewAlbumSearchForNewAlbum": "Inicia la cerca de nous àlbums", + "AddMissing": "Afegeix faltants", + "AddNewAlbum": "Afegeix nou àlbum" } diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index 31aab4bae..ff449397c 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -3,7 +3,7 @@ "UiLanguage": "UI-sprog", "ICalFeed": "iCal-feed", "ICalHttpUrlHelpText": "Kopier denne URL til dine klienter eller klik for at abonnere, hvis din browser understøtter webcal", - "ICalLink": "iCal Link", + "ICalLink": "iCal-link", "IconForCutoffUnmet": "Ikon til Cutoff Unmet", "IgnoredHelpText": "Frigivelsen afvises, hvis den indeholder et eller flere af vilkårene (store og små bogstaver)", "IgnoredPlaceHolder": "Tilføj ny begrænsning", @@ -77,7 +77,7 @@ "ReleaseWillBeProcessedInterp": "Udgivelsen behandles {0}", "RemotePath": "Fjern sti", "RemotePathHelpText": "Sti til den mappe, som Download-klienten har adgang til", - "RemotePathMappings": "Remote Path Mappings", + "RemotePathMappings": "Sammenkædning med fjernsti", "RemoveCompletedDownloadsHelpText": "Fjern importerede downloads fra downloadklienthistorik", "RemovedFromTaskQueue": "Fjernet fra opgavekøen", "RemoveFailedDownloadsHelpText": "Fjern mislykkede downloads fra downloadklienthistorik", @@ -105,7 +105,7 @@ "RestoreBackup": "Gendan sikkerhedskopi", "Retention": "Tilbageholdelse", "RetentionHelpText": "Kun Usenet: Sæt til nul for at indstille til ubegrænset fastholdelse", - "RetryingDownloadOn": "Prøver igen at downloade {0} kl. {1}", + "RetryingDownloadOn": "Prøver igen at downloade d. {date} kl. {time}", "RootFolder": "Rodmappe", "RootFolders": "Rodmapper", "RSSSync": "RSS-synkronisering", @@ -197,7 +197,7 @@ "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Klik på informationsknapperne for at få flere oplysninger om de enkelte downloadklienter.", "ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Klik på info-knapperne for at få flere oplysninger om de enkelte indeksatorer.", "Grab": "Tag fat", - "GrabRelease": "Grab Release", + "GrabRelease": "Hent udgivelse", "NamingSettings": "Navngivningsindstillinger", "New": "Ny", "NoHistory": "Ingen historie", @@ -236,7 +236,7 @@ "SourcePath": "Kildesti", "Actions": "Handlinger", "AddListExclusion": "Tilføj ekskludering af liste", - "AppDataDirectory": "AppData-bibliotek", + "AppDataDirectory": "AppData-mappe", "ApplyTags": "Anvend tags", "ApplyTagsHelpTextReplace": "Erstat: Udskift tags med de indtastede tags (indtast ingen tags for at rydde alle tags)", "ArtistAlbumClickToChangeTrack": "Klik for at skifte film", @@ -257,7 +257,7 @@ "Cancel": "Afbryd", "CancelPendingTask": "Er du sikker på, at du vil annullere denne afventende opgave?", "CertificateValidation": "Validering af certifikat", - "CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er", + "CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er. Ændr kun dette hvis du forstå risiciene.", "ChangeFileDate": "Skift fildato", "ChangeHasNotBeenSavedYet": "Ændring er endnu ikke gemt", "ChmodFolder": "chmod mappe", @@ -279,29 +279,29 @@ "CreateEmptyArtistFoldersHelpText": "Opret manglende filmmapper under diskscanning", "CreateGroup": "Opret gruppe", "CutoffHelpText": "Når denne kvalitet er nået, downloader {appName} ikke længere film", - "CutoffUnmet": "Afskåret ude", + "CutoffUnmet": "Grænse ikke opnået", "Dates": "Datoer", "DatabaseMigration": "DB Migration", "DelayProfile": "Udskyd Profiler", "DelayProfiles": "Udskyd Profiler", "Delete": "Slet", "DeleteBackup": "Slet sikkerhedskopi", - "DeleteBackupMessageText": "Er du sikker på, at du vil slette sikkerhedskopien '{0}'?", + "DeleteBackupMessageText": "Er du sikker på, at du vil slette sikkerhedskopien »{name}«?", "DeleteDelayProfile": "Slet forsinkelsesprofil", "DeleteDelayProfileMessageText": "Er du sikker på, at du vil slette denne forsinkelsesprofil?", "DeleteDownloadClient": "Slet Download Client", - "DeleteDownloadClientMessageText": "Er du sikker på, at du vil slette downloadklienten '{0}'?", + "DeleteDownloadClientMessageText": "Er du sikker på, at du vil fjerne downloadklienten »{name}«?", "DeleteEmptyFolders": "Slet tomme mapper", - "DeleteNotificationMessageText": "Er du sikker på, at du vil slette underretningen '{0}'?", + "DeleteNotificationMessageText": "Er du sikker på, at du vil slette notifikationen »{name}«?", "DeleteQualityProfile": "Slet kvalitetsprofil", - "DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}", - "DeleteReleaseProfile": "Slet forsinkelsesprofil", + "DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen »{name}«?", + "DeleteReleaseProfile": "Slet udgivelsesprofil", "DeleteReleaseProfileMessageText": "Er du sikker på, at du vil slette denne forsinkelsesprofil?", "DeleteRootFolderMessageText": "Er du sikker på, at du vil slette indeksøren '{0}'?", "DeleteSelectedTrackFiles": "Slet valgte filmfiler", "DeleteSelectedTrackFilesMessageText": "Er du sikker på, at du vil slette de valgte filmfiler?", "DeleteTag": "Slet tag", - "DeleteTagMessageText": "Er du sikker på, at du vil slette tagget '{0}'?", + "DeleteTagMessageText": "Er du sikker på, at du vil slette etiketten »{label}«?", "DestinationPath": "Destinationssti", "DetailedProgressBar": "Detaljeret statuslinje", "DetailedProgressBarHelpText": "Vis tekst på statuslinjen", @@ -418,7 +418,7 @@ "UiLanguageHelpTextWarning": "Browser genindlæsning påkrævet", "UpdateAll": "Opdater alle", "UpdateAutomaticallyHelpText": "Download og installer opdateringer automatisk. Du kan stadig installere fra System: Updates", - "UpdateMechanismHelpText": "Brug {appName}s indbyggede opdatering eller et script", + "UpdateMechanismHelpText": "Brug {appName}s indbyggede opdateringsfunktion eller et script", "UpdateScriptPathHelpText": "Sti til et brugerdefineret script, der tager en udpakket opdateringspakke og håndterer resten af opdateringsprocessen", "UpgradeAllowedHelpText": "Hvis deaktiveret, vil kvalitet ikke vil blive opgraderet", "Uptime": "Oppetid", @@ -430,13 +430,13 @@ "WeekColumnHeader": "Ugens kolonneoverskrift", "CalendarWeekColumnHeaderHelpText": "Vist over hver kolonne, når ugen er den aktive visning", "CloneProfile": "Klonprofil", - "DelayingDownloadUntil": "Forsinker download indtil {0} kl. {1}", + "DelayingDownloadUntil": "Forsinker download indtil {date} kl. {time}", "Columns": "Kolonner", "DeleteImportListExclusion": "Slet udelukkelse af importliste", "DeleteImportListExclusionMessageText": "Er du sikker på, at du vil slette denne undtagelse fra importlisten?", - "DeleteImportListMessageText": "Er du sikker på, at du vil slette listen '{0}'?", + "DeleteImportListMessageText": "Er du sikker på, at du vil slette listen »{name}«?", "DeleteIndexer": "Slet Indexer", - "DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren '{0}'?", + "DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren »{name}«?", "DeleteMetadataProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}", "DeleteNotification": "Slet underretning", "DownloadFailedCheckDownloadClientForMoreDetails": "Download mislykkedes: tjek downloadklienten for flere detaljer", @@ -540,7 +540,7 @@ "SizeOnDisk": "Størrelse på disk", "UpgradesAllowed": "Opgraderinger tilladt", "Wanted": "Ønskede", - "WouldYouLikeToRestoreBackup": "Vil du gendanne sikkerhedskopien {0}?", + "WouldYouLikeToRestoreBackup": "Vil du gendanne sikkerhedskopien »{name}«?", "InteractiveImport": "Interaktiv import", "LastDuration": "Seneste varighed", "LastExecution": "Seneste udførelse", @@ -558,7 +558,7 @@ "Library": "Bibliotek", "DeleteTrackFileMessageText": "Er du sikker på at du vil fjerne {0}?", "ReleaseProfiles": "udgivelsesprofil", - "CustomFormatScore": "Bruger Tilpasset Format score", + "CustomFormatScore": "Brugerdefineret formats resultat", "MinimumCustomFormatScore": "Minimum tilpasset format score", "Season": "Sæson", "CloneCustomFormat": "Klon brugerdefineret format", @@ -595,7 +595,7 @@ "ReplaceWithDash": "Udskift med Dash", "ReplaceWithSpaceDash": "Udskift med Space Dash", "AppDataLocationHealthCheckMessage": "Opdatering vil ikke være muligt for at undgå at slette AppData under opdatering", - "ColonReplacement": "Udskiftning af tyktarm", + "ColonReplacement": "Udskiftning af kolon", "Disabled": "deaktiveret", "DownloadClientCheckDownloadingToRoot": "Download klient {0} placerer downloads i rodmappen {1}. Du skal ikke downloade til en rodmappe.", "DownloadClientCheckNoneAvailableMessage": "Ingen download klient tilgængelig", @@ -645,7 +645,7 @@ "SetTags": "Indstil tags", "NoEventsFound": "Ingen begivenheder fundet", "ApplyTagsHelpTextRemove": "Fjern: Fjern de indtastede tags", - "RemoveSelectedItemQueueMessageText": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?", + "RemoveSelectedItemQueueMessageText": "Er du sikker på, at du vil fjerne 1 element fra køen?", "RemoveSelectedItemsQueueMessageText": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?", "Yes": "Ja", "DeleteSelectedDownloadClientsMessageText": "Er du sikker på, at du vil slette indeksøren '{0}'?", @@ -660,10 +660,10 @@ "AllResultsAreHiddenByTheAppliedFilter": "Alle resultater skjules af det anvendte filter", "NoResultsFound": "Ingen resultater fundet", "SomeResultsAreHiddenByTheAppliedFilter": "Nogle resultater skjules af det anvendte filter", - "ConnectionLost": "Forbindelse Mistet", + "ConnectionLost": "Forbindelse mistet", "RecentChanges": "Seneste ændringer", "WhatsNew": "Hvad er nyt?", - "ConnectionLostReconnect": "Radarr vil prøve at tilslutte automatisk, eller du kan klikke genindlæs forneden.", + "ConnectionLostReconnect": "{appName} vil prøve at tilslutte automatisk. Ellers du kan klikke genindlæs forneden.", "NotificationStatusAllClientHealthCheckMessage": "Alle lister er utilgængelige på grund af fejl", "NotificationStatusSingleClientHealthCheckMessage": "Lister utilgængelige på grund af fejl: {0}", "Enabled": "Aktiveret", @@ -672,7 +672,7 @@ "AddNewItem": "Tilføj Ny Genstand", "Absolute": "Absolut", "AddImportListExclusionArtistHelpText": "Undgå, at film føjes til {appName} af lister", - "GrabId": "Grab ID", + "GrabId": "Hent ID", "AddListExclusionHelpText": "Undgå, at film føjes til {appName} af lister", "DeleteArtistFolderHelpText": "Slet filmmappen og dens indhold", "Large": "Stor", @@ -684,11 +684,11 @@ "Table": "Tabel", "AuthBasic": "Grundlæggende (pop op-browser)", "AuthForm": "Formularer (login-side)", - "AddAutoTagError": "Kan ikke tilføje en ny liste, prøv igen.", + "AddAutoTagError": "Kan ikke tilføje en ny automatisk etiket. Prøv igen.", "AddConditionError": "Kan ikke tilføje en ny betingelse, prøv igen.", "AddNewArtistSearchForMissingAlbums": "Start søgning efter manglende film", "AlbumsLoadError": "Kunne ikke indlæse sikkerhedskopier", - "ConditionUsingRegularExpressions": "Denne betingelse stemmer overens med brug af regulære udtryk. Bemærk, at tegnene {0} har en særlig betydning og skal undslippe med en {1}", + "ConditionUsingRegularExpressions": "Denne betingelse stemmer overens ved brug af regulære udtryk. Bemærk, at tegnene »\\^$.|?*+()[{« har en særlig betydning og skal indledes med indkodningstegnet »\\«", "Connection": "Forbindelser", "DeleteSpecification": "Slet underretning", "Negate": "Negere", @@ -696,7 +696,7 @@ "RenameFiles": "Omdøb filer", "Small": "Lille", "ReleaseProfile": "udgivelsesprofil", - "DeleteAutoTagHelpText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}", + "DeleteAutoTagHelpText": "Er du sikker på, at du vil slette den automatiske etiket »{name}«?", "NoLimitForAnyDuration": "Ingen grænse for nogen runtime", "NoMinimumForAnyDuration": "Intet minimum for enhver driftstid", "PreferredSize": "Foretrukken størrelse", @@ -705,14 +705,14 @@ "ExtraFileExtensionsHelpText": "Kommasepareret liste over ekstra filer, der skal importeres (.nfo importeres som .nfo-orig)", "ExtraFileExtensionsHelpTextsExamples": "Eksempler: '.sub, .nfo' eller 'sub, nfo'", "DeleteArtistFoldersHelpText": "Slet filmmappen og dens indhold", - "DeleteSpecificationHelpText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}", + "DeleteSpecificationHelpText": "Er du sikker på, at du vil slette specifikationen »{name}«?", "IncludeHealthWarnings": "Inkluder sundhedsadvarsler", - "RemoveQueueItemConfirmation": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?", + "RemoveQueueItemConfirmation": "Er du sikker på, at du vil fjerne »{sourceTitle}« fra køen?", "AutoRedownloadFailed": "Download fejlede", "AddConditionImplementation": "Tilføj betingelse - {implementationName}", "AddConnectionImplementation": "Tilføj forbindelse - {implementationName}", "AddConnection": "Tilføj forbindelse", - "AddAutoTag": "Tilføj automatisk Tag", + "AddAutoTag": "Tilføj automatisk etiket", "AddCondition": "Tilføj betingelse", "DefaultCase": "Standard sag", "FileNameTokens": "Filnavn tokens", @@ -724,13 +724,13 @@ "EditIndexerImplementation": "Tilføj betingelse - {implementationName}", "KeyboardShortcuts": "Keyboard Genveje", "MonitoredStatus": "Overvåget / Status", - "ConnectSettingsSummary": "Notifikationer, forbindelser til media servere/afspillere og custom scripts", - "ImportListsSettingsSummary": "Importlister, listeekskluderinger", + "ConnectSettingsSummary": "Notifikationer, forbindelser til medieservere/-afspillere og brugerdefinerede scripts", + "ImportListsSettingsSummary": "Importér fra en anden {appName}-instans eller fra Trakt-lister og håndter listeekskluderinger", "Links": "Links", "QualitySettingsSummary": "Kvalitetsstørrelser og navngivning", "TagsSettingsSummary": "Se alle tags og hvordan de bruges. Ubrugte tags kan fjernes", "UiSettingsSummary": "Indstillinger for kalender, dato og farve", - "AddIndexerImplementation": "Tilføj betingelse - {implementationName}", + "AddIndexerImplementation": "Tilføj indeksør - {implementationName}", "EditConnectionImplementation": "Tilføj forbindelse - {implementationName}", "CustomFormatsSettings": "Indstillinger for brugerdefinerede formater", "CustomFormatsSettingsSummary": "Bruger Tilpassede Formater og Indstillinger", @@ -763,8 +763,8 @@ "Release": " udgivelse", "InteractiveSearchModalHeader": "Interaktiv søgning", "FormatAgeHour": "Timer", - "IndexerPriorityHelpText": "Indekseringsprioritet fra 1 (højest) til 50 (lavest). Standard: 25.", - "AutoTaggingNegateHelpText": "Hvis dette er markeret, gælder det tilpassede format ikke, hvis denne {0} betingelse stemmer overens.", + "IndexerPriorityHelpText": "Indeksatorprioritet fra 1 (højest) til 50 (lavest). Standard: 25. Anvendes til at vælge mellem udgivelser med ellers lige mange point. {appName} vil stadig bruge alle aktiverede indeksatorer til RSS-synkronisering og søgning", + "AutoTaggingNegateHelpText": "Hvis dette er markeret, vil reglen for automatisk etiket ikke blive anvendt, hvis denne {implementationName}-betingelse stemmer overens.", "BuiltIn": "Indbygget", "Script": "Manuskript", "DeleteSelectedCustomFormats": "Slet brugerdefineret format", @@ -784,5 +784,8 @@ "UnmappedFiles": "Ikke-kortlagte mapper", "Clone": "Luk", "AddReleaseProfile": "Rediger forsinkelsesprofil", - "AddDelayProfileError": "Kan ikke tilføje en ny forsinkelsesprofil. Prøv venligst igen." + "AddDelayProfileError": "Kan ikke tilføje en ny forsinkelsesprofil. Prøv igen.", + "RegularExpressionsCanBeTested": "Regulære udtryk kan testes [her](http://regexstorm.net/tester).", + "AddToDownloadQueue": "Føj til downloadkø", + "AddedToDownloadQueue": "Føjet til downloadkø" } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 70f425b9c..6ed8dc2cd 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -1330,5 +1330,10 @@ "InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información.", "ManageFormats": "Gestionar formatos", "AddDelayProfileError": "No se pudo añadir un nuevo perfil de retraso, por favor inténtalo de nuevo.", - "ImportListTagsHelpText": "Etiquetas que se añadirán en la importación a partir de esta lista" + "ImportListTagsHelpText": "Etiquetas que se añadirán en la importación a partir de esta lista", + "ReleaseProfileTagArtistHelpText": "El lanzamiento de perfiles se aplica a los artistas con al menos una etiqueta coincidente. Dejar en blanco para aplicar a todos los artistas", + "DefaultDelayProfileArtist": "Este es el perfil predeterminado. Se aplica a todos los artistas que no tienen un perfil explícito.", + "DelayProfileArtistTagsHelpText": "Se aplica a los artistas con al menos una etiqueta coincidente", + "NotificationsTagsArtistHelpText": "Envía notificaciones solo para artistas con al menos una etiqueta coincidente", + "ICalTagsArtistHelpText": "El canal solo contendrá artistas con al menos una etiqueta coincidente" } diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index b393c8214..d34fd9395 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -707,9 +707,9 @@ "AlbumsLoadError": "לא ניתן לטעון גיבויים", "ConditionUsingRegularExpressions": "תנאי זה תואם שימוש בביטויים רגולריים. שים לב שלדמויות {0} יש משמעויות מיוחדות וצריך לברוח באמצעות {1}", "Connection": "חיבור", - "AddAutoTagError": "לא ניתן להוסיף רשימה חדשה, אנא נסה שוב.", - "AddAutoTag": "הוסף טגית אוטומטית", - "AddConditionError": "לא ניתן להוסיף תנאי חדש, נסה שוב.", + "AddAutoTagError": "לא ניתן להוסיף תג חדש, נסה שנית.", + "AddAutoTag": "הוסף תג אוטומטית", + "AddConditionError": "לא ניתן להוסיף תנאי חדש, נסה שנית.", "DeleteSpecification": "מחק הודעה", "Large": "גָדוֹל", "Negate": "לִשְׁלוֹל", @@ -790,5 +790,6 @@ "Clone": "סגור", "EditReleaseProfile": "ערוך פרופיל עיכוב", "Season": "סיבה", - "AddDelayProfileError": "לא ניתן להוסיף פרופיל איכות חדש, נסה שוב." + "AddDelayProfileError": "לא ניתן להוסיף פרופיל איכות חדש, נסה שוב.", + "AddCondition": "הוסף תנאי" } diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 2ea48f18b..aed304b50 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -287,8 +287,8 @@ "TestAllLists": "모든 목록 테스트", "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "이는 모든 인덱서에 적용됩니다. 해당 인덱서가 정한 규칙을 따르십시오.", "TimeFormat": "시간 형식", - "TorrentDelay": "급류 지연", - "TorrentDelayHelpText": "급류를 잡기 전에 대기하는 데 몇 분이 걸립니다.", + "TorrentDelay": "토렌트 지연", + "TorrentDelayHelpText": "토렌트를 잡기 전에 대기까지 소요되는 지연 (분)", "UiLanguageHelpText": "Radarr가 UI에 사용할 언어", "UiLanguageHelpTextWarning": "브라우저 새로 고침 필요", "UiSettings": "UI 설정", @@ -331,7 +331,7 @@ "UnmonitoredHelpText": "iCal 피드에 모니터링되지 않는 동영상 포함", "UpdateAll": "모두 업데이트", "UpdateAutomaticallyHelpText": "업데이트를 자동으로 다운로드하고 설치합니다. 시스템 : 업데이트에서 계속 설치할 수 있습니다.", - "UpdateMechanismHelpText": "Radarr의 내장 업데이트 프로그램 또는 스크립트 사용", + "UpdateMechanismHelpText": "{appName}의 내장 업데이트 도구 또는 스크립트 사용", "Updates": "업데이트", "UpdateScriptPathHelpText": "추출 된 업데이트 패키지를 사용하고 나머지 업데이트 프로세스를 처리하는 사용자 지정 스크립트에 대한 경로", "UpgradeAllowedHelpText": "비활성화 된 자질은 업그레이드되지 않습니다.", @@ -419,7 +419,7 @@ "TestAll": "모두 테스트", "TestAllClients": "모든 클라이언트 테스트", "TestAllIndexers": "모든 인덱서 테스트", - "Torrents": "급류", + "Torrents": "토렌트", "TotalFileSize": "총 파일 크기", "Type": "유형", "Usenet": "유즈넷", @@ -541,7 +541,7 @@ "UpgradesAllowed": "허용되는 업그레이드", "Wanted": "구함", "Warn": "경고", - "WouldYouLikeToRestoreBackup": "{0} 백업을 복원 하시겠습니까?", + "WouldYouLikeToRestoreBackup": "'{name}' 백업을 복원하시겠습니까?", "Renamed": "이름이 변경됨", "Ui": "UI", "Always": "항상", @@ -659,8 +659,8 @@ "DeleteArtistFolderHelpText": "동영상 폴더 및 내용 삭제", "AuthBasic": "기본 (브라우저 팝업)", "AuthForm": "양식 (로그인 페이지)", - "AddAutoTagError": "새 목록을 추가 할 수 없습니다. 다시 시도하십시오.", - "AddConditionError": "새 알림을 추가 할 수 없습니다. 다시 시도하십시오.", + "AddAutoTagError": "새 자동 태그을 추가 할 수 없습니다. 다시 시도해주세요.", + "AddConditionError": "새 조건을 추가 할 수 없습니다. 다시 시도해주세요.", "AlbumsLoadError": "백업을로드 할 수 없습니다.", "RenameFiles": "파일 이름 바꾸기", "AutoTaggingNegateHelpText": "선택하면이 {0} 조건이 일치하면 맞춤 형식이 적용되지 않습니다.", @@ -728,7 +728,7 @@ "IndexerSettingsRejectBlocklistedTorrentHashes": "동기화 중 차단 목록에 있는 토렌트 해시 거부", "EditReleaseProfile": "지연 프로필 편집", "ApiKeyValidationHealthCheckMessage": "API 키를 {length}자 이상으로 업데이트하세요. 설정 또는 구성 파일을 통해 이 작업을 수행할 수 있습니다.", - "AddConditionImplementation": "연결 추가 - {implementationName}", + "AddConditionImplementation": "조건 추가 - {implementationName}", "EditIndexerImplementation": "인덱서 추가 - {implementationName}", "AddReleaseProfile": "지연 프로필 편집", "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "해시에 의해 토렌트가 차단된 경우 일부 인덱서의 RSS/검색 중에 토렌트가 제대로 거부되지 않을 수 있습니다. 이 기능을 활성화하면 토렌트를 가져온 후 클라이언트로 전송하기 전에 토렌트를 거부할 수 있습니다.", @@ -736,5 +736,11 @@ "EditConnectionImplementation": "연결 추가 - {implementationName}", "ExpandAlbumByDefaultHelpText": "앨범", "Season": "이유", - "AddDelayProfileError": "새 품질 프로필을 추가 할 수 없습니다. 다시 시도하십시오." + "AddDelayProfileError": "새 지연 프로필을 추가할 수 없습니다. 다시 시도해주세요.", + "AddImportListImplementation": "가져오기 목록 추가 - {implementationName}", + "UseSsl": "SSL 사용", + "AddAutoTag": "자동 태그 추가", + "AddCondition": "조건 추가", + "AddImportList": "가져오기 목록 추가", + "UpdateAvailableHealthCheckMessage": "새 업데이트 사용 가능: {version}" } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index ccdf934c8..3dba2f712 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -1330,5 +1330,10 @@ "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?", "ManageFormats": "Gerenciar Formatos", "AddDelayProfileError": "Não foi possível adicionar um novo perfil de atraso. Tente novamente.", - "ImportListTagsHelpText": "Tags que serão adicionadas ao importar esta lista" + "ImportListTagsHelpText": "Tags que serão adicionadas ao importar esta lista", + "DefaultDelayProfileArtist": "Este é o perfil padrão. Aplica-se a todos os artistas que não possuem um perfil explícito.", + "ICalTagsArtistHelpText": "O feed conterá apenas artistas com pelo menos uma etiqueta correspondente", + "NotificationsTagsArtistHelpText": "Envie notificações apenas para artistas com pelo menos uma etiqueta correspondente", + "ReleaseProfileTagArtistHelpText": "Os perfis de lançamento serão aplicados as artistas com pelo menos uma etiqueta correspondente. Deixe em branco para aplicar a todos os artistas", + "DelayProfileArtistTagsHelpText": "Aplica-se a artistas com pelo menos uma etiqueta correspondente" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index fa0bc6aed..841e8e6fe 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -33,13 +33,13 @@ "About": "Hakkında", "AddListExclusion": "Hariç Tutma Listesine Ekle", "AddingTag": "Etiket ekleniyor", - "AgeWhenGrabbed": "Yıl (yakalandığında)", + "AgeWhenGrabbed": "Yıl (alındığında)", "AlbumIsDownloadingInterp": "Film indiriliyor - {0}% {1}", "AlreadyInYourLibrary": "Kütüphanenizde mevcut", "AlternateTitles": "Alternatif Başlıklar", "AlternateTitleslength1Title": "Başlık", "AlternateTitleslength1Titles": "Başlıklar", - "Analytics": "Analitik", + "Analytics": "Analiz", "AnalyticsEnabledHelpText": "Anonim kullanım ve hata bilgilerini {appName} sunucularına gönderin. Buna, tarayıcınız, hangi {appName} WebUI sayfalarını kullandığınız, hata raporlamanın yanı sıra işletim sistemi ve çalışma zamanı sürümü hakkındaki bilgiler de dahildir. Bu bilgiyi özelliklere ve hata düzeltmelerine öncelik vermek için kullanacağız.", "AnalyticsEnabledHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir", "ApiKeyHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir", @@ -173,7 +173,7 @@ "FileNames": "Dosya Adları", "Files": "Dosyalar", "FirstDayOfWeek": "Haftanın ilk günü", - "Fixed": "Sabit", + "Fixed": "Düzeltilen", "Folder": "Klasör", "Folders": "Klasörler", "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Bireysel indirme istemcileri hakkında daha fazla bilgi için bilgi düğmelerine tıklayın.", @@ -183,8 +183,8 @@ "Global": "Küresel", "GoToInterp": "{0} adresine gidin", "Grab": "Kapmak", - "GrabRelease": "Yayın Yakalama", - "GrabSelected": "Seçilenleri Kap", + "GrabRelease": "Yayın Alma", + "GrabSelected": "Seçilenleri Al", "Group": "Grup", "HasPendingChangesNoChanges": "Değişiklikler yok", "HasPendingChangesSaveChanges": "Değişiklikleri Kaydet", @@ -224,11 +224,11 @@ "Local": "Yerel", "LocalPath": "Yerel Yol", "LocalPathHelpText": "{appName}'ın uzak yola yerel olarak erişmek için kullanması gereken yol", - "LogFiles": "Log dosyaları", + "LogFiles": "Log Kayıtları", "Logging": "Loglama", - "LogLevel": "Günlük Düzeyi", + "LogLevel": "Log Seviyesi", "LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "İzleme günlük kaydı yalnızca geçici olarak etkinleştirilmelidir", - "Logs": "Günlükler", + "Logs": "Kayıtlar", "LongDateFormat": "Uzun Tarih Formatı", "ManualImport": "Manuel İçe Aktar", "MarkAsFailed": "Başarısız olarak işaretle", @@ -236,7 +236,7 @@ "MaximumLimits": "Maksimum Sınırlar", "MaximumSize": "Maksimum Boyut", "MaximumSizeHelpText": "MB cinsinden alınacak bir sürüm için maksimum boyut. Sınırsız olarak ayarlamak için sıfıra ayarlayın", - "Mechanism": "İşleyiş", + "Mechanism": "Teknik", "MediaInfo": "Medya bilgisi", "MediaManagementSettings": "Medya Yönetimi Ayarları", "Medium": "Orta", @@ -244,14 +244,14 @@ "MetadataSettings": "Meta Veri Ayarları", "MIA": "MIA", "MinimumAge": "Minimum Geçen Süre", - "MinimumAgeHelpText": "Yalnızca Usenet: NZB'lerin yakalanmadan önceki minimum geçen süre (dakika cinsinden). Bunu, yeni sürümlerin usenet sağlayıcınıza yayılması için zaman vermek amacıyla kullanın.", + "MinimumAgeHelpText": "Yalnızca Usenet: NZB'lerin almadan önceki minimum geçen süre (dakika cinsinden). Bunu, yeni sürümlerin usenet sağlayıcınıza yayılması için zaman vermek amacıyla kullanın.", "MinimumFreeSpace": "Minimum Boş Alan", "MinimumFreeSpaceWhenImportingHelpText": "Bu miktardan daha az kullanılabilir disk alanı bırakacaksa içe aktarmayı önleyin", "MinimumLimits": "Minimum Limitler", "Missing": "Eksik", "Mode": "Mod", "Monitored": "Takip Ediliyor", - "MoreInfo": "Daha fazla bilgi", + "MoreInfo": "Daha Fazla Bilgi", "MustContain": "İçermeli", "MustNotContain": "İçermemeli", "NamingSettings": "Adlandırma Ayarları", @@ -259,7 +259,7 @@ "NoBackupsAreAvailable": "Kullanılabilir yedek yok", "NoHistory": "Tarih yok", "NoLeaveIt": "Hayır, Bırak", - "NoLogFiles": "Günlük dosyası yok", + "NoLogFiles": "Log kayıt dosyası henüz yok", "None": "Yok", "NotificationTriggers": "Bildirim Tetikleyicileri", "NoUpdatesAreAvailable": "Güncelleme yok", @@ -267,7 +267,7 @@ "Options": "Seçenekler", "Original": "Orijinal", "PackageVersion": "Paket Versiyonu", - "PageSize": "Sayfa boyutu", + "PageSize": "Sayfa Boyutu", "PageSizeHelpText": "Her sayfada gösterilecek öğe sayısı", "Password": "Şifre", "Path": "Yol", @@ -346,10 +346,10 @@ "RetentionHelpText": "Yalnızca Usenet: Sınırsız saklamaya ayarlamak için sıfıra ayarlayın", "RetryingDownloadOn": "{date} tarihinde, {time} itibarıyla indirme işlemi yeniden deneniyor", "RootFolder": "Kök Klasör", - "RootFolders": "Kök klasörler", + "RootFolders": "Kök Klasörler", "RSSSync": "RSS Senkronizasyonu", "RSSSyncInterval": "RSS Senkronizasyon Aralığı", - "RssSyncIntervalHelpText": "Dakika cinsinden aralık. Devre dışı bırakmak için sıfıra ayarlayın (tüm otomatik yayın yakalamayı durduracaktır)", + "RssSyncIntervalHelpText": "Dakika cinsinden aralık. Devre dışı bırakmak için sıfıra ayarlayın (tüm otomatik yayın almayı durduracaktır)", "ShownAboveEachColumnWhenWeekIsTheActiveView": "Aktif görünüm hafta olduğunda her bir sütunun üzerinde gösterilir", "ShowPath": "Yolu Göster", "ShowQualityProfile": "Kalite Profilini Göster", @@ -384,7 +384,7 @@ "Tasks": "Görevler", "TestAll": "Tümünü Test Et", "TestAllClients": "Tüm İstemcileri Test Et", - "TestAllIndexers": "Tüm Dizinleyicileri Test Et", + "TestAllIndexers": "Dizinleyicileri Test Et", "TestAllLists": "Tüm Listeleri Test Et", "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Bu, tüm dizin oluşturucular için geçerli olacaktır, lütfen onlar tarafından belirlenen kurallara uyun", "Time": "Zaman", @@ -442,7 +442,7 @@ "Dates": "Tarih", "Name": "İsim", "RemoveFilter": "Filtreyi kaldır", - "OnGrab": "Yakalandığında", + "OnGrab": "Alındığında", "OnHealthIssue": "Sağlık Sorunu Hakkında", "OnRename": "Yeniden Adlandırıldığında", "OnUpgrade": "Yükseltme sırasında", @@ -468,7 +468,7 @@ "Wanted": "Arananlar", "Warn": "Uyar", "Connect": "Bildirimler", - "Added": "Eklendi", + "Added": "Eklenme", "AddIndexer": "Dizinleyici Ekle", "AddNew": "Yeni Ekle", "AddQualityProfile": "Kalite Profili Ekle", @@ -486,7 +486,7 @@ "CustomFilters": "Özel Filtreler", "Date": "Tarih", "Deleted": "Silindi", - "Donations": "Bağışlar", + "Donations": "Bağış", "DoNotPrefer": "Tercih etmeme", "DoNotUpgradeAutomatically": "Otomatik Olarak Yükseltme", "DownloadFailed": "Yükleme başarısız", @@ -502,13 +502,13 @@ "Filters": "Filtreler", "FreeSpace": "Boş alan", "General": "Genel", - "Grabbed": "Yakalandı", + "Grabbed": "Alındı", "HardlinkCopyFiles": "Hardlink / Dosyaları Kopyala", "HideAdvanced": "Gelişmiş'i Gizle", "Ignored": "Yok sayıldı", "Import": "İçe aktar", "InteractiveImport": "Etkileşimli İçe Aktarma", - "Location": "Konum", + "Location": "Klasör Yolu", "Manual": "Manuel", "MediaManagement": "Medya Yönetimi", "Metadata": "Meta veri", @@ -521,7 +521,7 @@ "OnlyUsenet": "Sadece Usenet", "Organize": "Düzenle", "OutputPath": "Çıkış yolu", - "Peers": "Akranlar", + "Peers": "Eşler", "PreferAndUpgrade": "Tercih Et ve Yükselt", "Presets": "Ön ayarlar", "QualityLimitsHelpText": "Sınırlar, film çalışma süresine göre otomatik olarak ayarlanır.", @@ -676,7 +676,7 @@ "Release": " Yayınlandı", "EditConditionImplementation": "Koşulu Düzenle - {implementationName}", "Overview": "Genel Bakış", - "GrabId": "ID'den Yakala", + "GrabId": "ID'den Al", "AddIndexerImplementation": "Yeni Dizinleyici Ekle - {implementationName}", "DeleteArtistFolderHelpText": "Film klasörünü ve içeriğini silin", "DeleteAutoTagHelpText": "'{name}' etiketini otomatik silmek istediğinizden emin misiniz?", @@ -738,14 +738,14 @@ "CustomFormatsSettings": "Özel Format Ayarları", "CustomFormatsSettingsSummary": "Özel Formatlar ve Ayarlar", "DownloadClientsSettingsSummary": "İndirme İstemcileri, indirme işlemleri ve uzaktan yol eşlemeleri", - "GeneralSettingsSummary": "Port, SSL, kullanıcı adı/şifre, proxy, analitikler ve güncellemeler", + "GeneralSettingsSummary": "Port, SSL, kullanıcı adı/şifre, proxy, analizler ve güncellemeler", "ImportListsSettingsSummary": "Başka bir {appName} örneğinden veya Trakt listelerinden içe aktarın ve liste hariç tutma işlemlerini yönetin", "QualitySettingsSummary": "Kalite boyutları ve adlandırma", "ArtistIndexFooterDownloading": "İndiriliyor", "AutomaticSearch": "Otomatik Arama", "Links": "Bağlantılar", "AppUpdated": "{appName} Güncellendi", - "AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; en son değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gerekli", + "AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gerekli", "ConnectionLostToBackend": "{appName}'ın arka uçla bağlantısı kesildi ve işlevselliğin geri kazanılması için yeniden yüklenmesi gerekecek.", "ApplyChanges": "Değişiklikleri Uygula", "CustomFilter": "Özel Filtre", @@ -843,9 +843,9 @@ "NotificationsKodiSettingsDisplayTimeHelpText": "Bildirimin ne kadar süreyle görüntüleneceği (Saniye cinsinden)", "NotificationsKodiSettingsGuiNotification": "GUI Bildirimi", "NotificationsKodiSettingsUpdateLibraryHelpText": "İçe Aktarma ve Yeniden Adlandırmada kitaplık güncellensin mi?", - "IndexerDownloadClientHelpText": "Bu dizinleyiciden yakalamak için hangi indirme istemcisinin kullanılacağını belirtin", + "IndexerDownloadClientHelpText": "Bu dizinleyiciden almak için hangi indirme istemcisinin kullanılacağını belirtin", "Never": "Asla", - "HealthMessagesInfoBox": "Satırın sonundaki wiki bağlantısını (kitap simgesi) tıklayarak veya [günlüklerinizi]({link}) kontrol ederek bu durum kontrolü mesajlarının nedeni hakkında daha fazla bilgi bulabilirsiniz. Bu mesajları yorumlamakta zorluk yaşıyorsanız aşağıdaki bağlantılardan destek ekibimize ulaşabilirsiniz.", + "HealthMessagesInfoBox": "Satırın sonundaki wiki bağlantısını (kitap simgesi) tıklayarak veya [log kayıtlarınızı]({link}) kontrol ederek bu durum kontrolü mesajlarının nedeni hakkında daha fazla bilgi bulabilirsiniz. Bu mesajları yorumlamakta zorluk yaşıyorsanız aşağıdaki bağlantılardan destek ekibimize ulaşabilirsiniz.", "Menu": "Menü", "NoImportListsFound": "İçe aktarma listesi bulunamadı", "EditSelectedDownloadClients": "Seçilen İndirme İstemcilerini Düzenle", @@ -878,7 +878,7 @@ "ManageClients": "İstemcileri Yönet", "ManageDownloadClients": "İndirme İstemcilerini Yönet", "InfoUrl": "Bilgi URL'si", - "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Bir torrent hash tarafından engellenirse, bazı dizinleyiciler için RSS / Arama sırasında düzgün bir şekilde reddedilmeyebilir, bunun etkinleştirilmesi, torrent yakalandıktan sonra, ancak istemciye gönderilmeden önce reddedilmesine izin verecektir.", + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Bir torrent hash tarafından engellenirse, bazı dizinleyiciler için RSS / Arama sırasında düzgün bir şekilde reddedilmeyebilir, bunun etkinleştirilmesi, torrent alındıktan sonra, ancak istemciye gönderilmeden önce reddedilmesine izin verecektir.", "EditSelectedImportLists": "Seçilen İçe Aktarma Listelerini Düzenle", "NoIndexersFound": "Dizinleyici bulunamadı", "NotificationsEmbySettingsSendNotificationsHelpText": "MediaBrowser'ın yapılandırılmış sağlayıcılara bildirim göndermesini sağlayın", @@ -890,7 +890,7 @@ "ManageImportLists": "İçe Aktarma Listelerini Yönet", "NotificationsEmbySettingsSendNotifications": "Bildirim Gönder", "NotificationsKodiSettingsCleanLibraryHelpText": "Güncellemeden sonra kitaplığı temizle", - "IndexerSettingsRejectBlocklistedTorrentHashes": "Yakalarken Engellenen Torrent Karmalarını Reddet", + "IndexerSettingsRejectBlocklistedTorrentHashes": "Alırken Engellenen Torrent Karmalarını Reddet", "ThereWasAnErrorLoadingThisItem": "Bu öğe yüklenirken bir hata oluştu", "NotificationsPlexSettingsAuthenticateWithPlexTv": "Plex.tv ile kimlik doğrulaması yapın", "NotificationsSettingsUpdateLibrary": "Kitaplığı Güncelle", @@ -950,8 +950,8 @@ "PreferProtocol": "{preferredProtocol}'u tercih edin", "IndexerSettingsSeedTime": "Seed Süresi", "IndexerSettingsSeedRatio": "Seed Oranı", - "IndexerSettingsSeedTimeHelpText": "Bir torrentin durmadan önce seed edilmesi gereken süre. Boş bırakılırsa indirme istemcisinin varsayılan ayarını kullanır", - "IndexerSettingsSeedRatioHelpText": "Bir torrentin durmadan önce ulaşması gereken oran. Boş bırakılırsa indirme istemcisinin varsayılan değerini kullanır. Oran en az 1,0 olmalı ve indeksleyici kurallarına uygun olmalıdır", + "IndexerSettingsSeedTimeHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran, boş bırakıldığında uygulamanın varsayılanı kullanılır", + "IndexerSettingsSeedRatioHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran. Boş bırakılırsa indirme istemcisinin varsayılan değerini kullanır. Oran en az 1,0 olmalı ve indeksleyici kurallarına uygun olmalıdır", "External": "Harici", "InteractiveSearchModalHeaderTitle": "İnteraktif Arama - {title}", "MassSearchCancelWarning": "Bu işlem, {appName} yeniden başlatılmadan veya tüm dizin oluşturucularınız devre dışı bırakılmadan başlatılır ise iptal edilemez.", @@ -1012,7 +1012,7 @@ "TestParsing": "Ayrıştırma Testi", "True": "Aktif", "BuiltIn": "Dahili", - "Script": "Hazır Metin", + "Script": "Komut Dosyası", "Any": "Herhangi", "DeleteSelected": "Seçileni Sil", "CountCustomFormatsSelected": "{count} özel format seçildi", @@ -1029,11 +1029,11 @@ "IndexerSettingsApiUrl": "API URL'si", "LastSearched": "Son Aranan", "AptUpdater": "Güncellemeyi yüklemek için apt'ı kullanın", - "DockerUpdater": "güncellemeyi almak için docker konteynerini güncelleyin", + "DockerUpdater": "Güncellemeyi almak için docker konteynerini güncelleyin", "ExternalUpdater": "{appName}, harici bir güncelleme mekanizması kullanacak şekilde yapılandırıldı", "InstallLatest": "En Sonu Yükle", "OnLatestVersion": "{appName}'ın en son sürümü kurulu", - "PreviouslyInstalled": "Önceden Yüklenmiş", + "PreviouslyInstalled": "Daha Önce Kurulmuş", "Shutdown": "Kapat", "UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor,", "Install": "Kur", @@ -1052,7 +1052,7 @@ "ManageFormats": "Formatları Yönet", "Continuing": "Devam Ediyor", "AutoAdd": "Otomatik Ekle", - "Monitoring": "Takip Etme", + "Monitoring": "Takip Durumu", "MonitoringOptions": "Takip Etme Seçenekleri", "Other": "Diğer", "MediaManagementSettingsSummary": "Adlandırma ve dosya yönetimi ayarları", From 502cb2089843d2149f506cdc8fd33162d8343776 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 10 Dec 2024 19:25:13 -0800 Subject: [PATCH 119/275] Fixed: Error getting processes in some cases (cherry picked from commit b552d4e9f7ca7388404aa0d52566010a54cb0244) --- src/NzbDrone.Common/Processes/ProcessProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Common/Processes/ProcessProvider.cs b/src/NzbDrone.Common/Processes/ProcessProvider.cs index 4e23a7e0c..3c86a06b1 100644 --- a/src/NzbDrone.Common/Processes/ProcessProvider.cs +++ b/src/NzbDrone.Common/Processes/ProcessProvider.cs @@ -313,7 +313,7 @@ namespace NzbDrone.Common.Processes processInfo = new ProcessInfo(); processInfo.Id = process.Id; processInfo.Name = process.ProcessName; - processInfo.StartPath = process.MainModule.FileName; + processInfo.StartPath = process.MainModule?.FileName; if (process.Id != GetCurrentProcessId() && process.HasExited) { From 4bcdc49777c21808389dcf70127a4ccb7b5dd008 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 11 Dec 2024 14:36:38 +0200 Subject: [PATCH 120/275] Fixed: Refresh backup list on deletion (cherry picked from commit 3b00112447361b19c04851a510e63f812597a043) --- src/Lidarr.Api.V1/System/Backup/BackupController.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Lidarr.Api.V1/System/Backup/BackupController.cs b/src/Lidarr.Api.V1/System/Backup/BackupController.cs index fba675267..22f017d03 100644 --- a/src/Lidarr.Api.V1/System/Backup/BackupController.cs +++ b/src/Lidarr.Api.V1/System/Backup/BackupController.cs @@ -50,7 +50,7 @@ namespace Lidarr.Api.V1.System.Backup } [RestDeleteById] - public void DeleteBackup(int id) + public object DeleteBackup(int id) { var backup = GetBackup(id); @@ -67,6 +67,8 @@ namespace Lidarr.Api.V1.System.Backup } _diskProvider.DeleteFile(path); + + return new { }; } [HttpPost("restore/{id:int}")] From ad084cdf917d1f84d967be01b09891fe5d19653b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 16 Dec 2024 16:25:58 +0200 Subject: [PATCH 121/275] Fixed: Parse FLAC 24-bit/24_bit/24.bit as FLAC 24bit --- src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs | 3 +++ src/NzbDrone.Core/Parser/QualityParser.cs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs index d2a0b1858..f2e6039c6 100644 --- a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs @@ -126,6 +126,9 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("Green_Day-Father_Of_All-24-44-WEB-FLAC-2020-OBZEN", null, 0, 0)] [TestCase("", "Flac Audio", 5057, 24)] [TestCase("[TR24][OF] Good Charlotte - Generation Rx - 2018 (Pop-Punk | Alternative Rock)", null, 0, 0)] + [TestCase("Green Day - Father Of All [FLAC (M4A) 24-bit Lossless]", null, 0, 0)] + [TestCase("Green_Day-Father_Of_All_FLAC_M4A_24_bit_Lossless", null, 0, 0)] + [TestCase("Green.Day-Father.Of.All.FLAC.M4A.24.bit.Lossless", null, 0, 0)] public void should_parse_flac_24bit_quality(string title, string desc, int bitrate, int sampleSize) { ParseAndVerifyQuality(title, desc, bitrate, Quality.FLAC_24, sampleSize); diff --git a/src/NzbDrone.Core/Parser/QualityParser.cs b/src/NzbDrone.Core/Parser/QualityParser.cs index 9b3c2d6c9..32b7e7542 100644 --- a/src/NzbDrone.Core/Parser/QualityParser.cs +++ b/src/NzbDrone.Core/Parser/QualityParser.cs @@ -36,7 +36,7 @@ namespace NzbDrone.Core.Parser (?V2[ ]?kbps|V2|[\[\(].*V2.*[\]\)]))\b", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); - private static readonly Regex SampleSizeRegex = new (@"\b(?:(?24[ ]?bit|tr24|24-(?:44|48|96|192)|[\[\(].*24bit.*[\]\)]))\b", RegexOptions.Compiled); + private static readonly Regex SampleSizeRegex = new (@"\b(?:(?24[-._ ]?bit|tr24|24-(?:44|48|96|192)|[\[\(].*24bit.*[\]\)]))\b", RegexOptions.Compiled); private static readonly Regex CodecRegex = new (@"\b(?:(?MPEG Version \d(.5)? Audio, Layer 1|MP1)|(?MPEG Version \d(.5)? Audio, Layer 2|MP2)|(?MP3.*VBR|MPEG Version \d(.5)? Audio, Layer 3 vbr)|(?MP3|MPEG Version \d(.5)? Audio, Layer 3)|(?(web)?flac|TR24)|(?wavpack|wv)|(?alac)|(?WMA\d?)|(?WAV|PCM)|(?M4A|M4P|M4B|AAC|mp4a|MPEG-4 Audio(?!.*alac))|(?OGG|OGA|Vorbis))\b|(?monkey's audio|[\[|\(].*\bape\b.*[\]|\)])|(?Opus Version \d(.5)? Audio|[\[|\(].*\bopus\b.*[\]|\)])", RegexOptions.Compiled | RegexOptions.IgnoreCase); From 13bb8f5089247fced3c2f107d3eb9479003d34cb Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 16 Dec 2024 21:04:53 +0200 Subject: [PATCH 122/275] Bump version to 2.9.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a55d6cd6a..3e2698acc 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.8.2' + majorVersion: '2.9.0' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From f92935e3d2549d768684f247edc79e8606dee094 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 15 Dec 2024 18:50:16 +0200 Subject: [PATCH 123/275] Set minor version for core-js in babel/preset-env (cherry picked from commit 2e83d59f61957cbc2171bef097fe2410e72729ad) --- frontend/build/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/build/webpack.config.js b/frontend/build/webpack.config.js index 53f8ef431..9b3a1151d 100644 --- a/frontend/build/webpack.config.js +++ b/frontend/build/webpack.config.js @@ -188,7 +188,7 @@ module.exports = (env) => { loose: true, debug: false, useBuiltIns: 'entry', - corejs: 3 + corejs: '3.39' } ] ] From c42e96b55dfd35d25c8b1fbf6999da2c1fa3f80c Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 15 Dec 2024 08:44:18 -0800 Subject: [PATCH 124/275] Upgrade babel to 7.26.0 (cherry picked from commit bfcd017012730c97eb587ae2d2e91f72ee7a1de3) --- package.json | 12 +- yarn.lock | 1245 +++++++++++++++++++++++++++----------------------- 2 files changed, 668 insertions(+), 589 deletions(-) diff --git a/package.json b/package.json index 7f75cf6a1..8c07e66e2 100644 --- a/package.json +++ b/package.json @@ -89,13 +89,13 @@ "typescript": "5.1.6" }, "devDependencies": { - "@babel/core": "7.25.8", - "@babel/eslint-parser": "7.25.8", - "@babel/plugin-proposal-export-default-from": "7.25.8", + "@babel/core": "7.26.0", + "@babel/eslint-parser": "7.25.9", + "@babel/plugin-proposal-export-default-from": "7.25.9", "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/preset-env": "7.25.8", - "@babel/preset-react": "7.25.7", - "@babel/preset-typescript": "7.25.7", + "@babel/preset-env": "7.26.0", + "@babel/preset-react": "7.26.3", + "@babel/preset-typescript": "7.26.0", "@types/lodash": "4.14.195", "@types/react-lazyload": "3.2.3", "@types/react-router-dom": "5.3.3", diff --git a/yarn.lock b/yarn.lock index 3909ddb77..1a3ad81e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,7 +15,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.25.7": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.7.tgz#438f2c524071531d643c6f0188e1e28f130cebc7" integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== @@ -23,47 +23,62 @@ "@babel/highlight" "^7.25.7" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7", "@babel/compat-data@^7.25.8": +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7": version "7.25.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.8.tgz#0376e83df5ab0eb0da18885c0140041f0747a402" integrity sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA== -"@babel/core@7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.8.tgz#a57137d2a51bbcffcfaeba43cb4dd33ae3e0e1c6" - integrity sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg== +"@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== + +"@babel/core@7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.25.7" - "@babel/generator" "^7.25.7" - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helpers" "^7.25.7" - "@babel/parser" "^7.25.8" - "@babel/template" "^7.25.7" - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.8" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/eslint-parser@7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.8.tgz#0119dec46be547d7a339978dedb9d29e517c2443" - integrity sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg== +"@babel/eslint-parser@7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz#603c68a63078796527bc9d0833f5e52dd5f9224c" + integrity sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.7.tgz#de86acbeb975a3e11ee92dd52223e6b03b479c56" - integrity sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA== +"@babel/generator@^7.26.0", "@babel/generator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== dependencies: - "@babel/types" "^7.25.7" + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" @@ -75,15 +90,14 @@ dependencies: "@babel/types" "^7.25.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz#d721650c1f595371e0a23ee816f1c3c488c0d622" - integrity sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg== +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/types" "^7.25.9" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.7": +"@babel/helper-compilation-targets@^7.22.6": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz#11260ac3322dda0ef53edfae6e97b961449f5fa4" integrity sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A== @@ -94,20 +108,31 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz#5d65074c76cae75607421c00d6bd517fe1892d6b" - integrity sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw== +"@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-member-expression-to-functions" "^7.25.7" - "@babel/helper-optimise-call-expression" "^7.25.7" - "@babel/helper-replace-supers" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.7": +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz#dcb464f0e2cdfe0c25cc2a0a59c37ab940ce894e" integrity sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ== @@ -116,6 +141,15 @@ regexpu-core "^6.1.1" semver "^6.3.1" +"@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" @@ -127,109 +161,120 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-member-expression-to-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz#541a33b071f0355a63a0fa4bdf9ac360116b8574" - integrity sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA== +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-module-imports@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz#dba00d9523539152906ba49263e36d7261040472" - integrity sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw== +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-module-transforms@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz#2ac9372c5e001b19bc62f1fe7d96a18cb0901d1a" - integrity sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ== +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== dependencies: - "@babel/helper-module-imports" "^7.25.7" - "@babel/helper-simple-access" "^7.25.7" - "@babel/helper-validator-identifier" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-optimise-call-expression@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz#1de1b99688e987af723eed44fa7fc0ee7b97d77a" - integrity sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng== +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== dependencies: - "@babel/types" "^7.25.7" + "@babel/types" "^7.25.9" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz#8ec5b21812d992e1ef88a9b068260537b6f0e36c" integrity sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw== -"@babel/helper-remap-async-to-generator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz#9efdc39df5f489bcd15533c912b6c723a0a65021" - integrity sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-wrap-function" "^7.25.7" - "@babel/traverse" "^7.25.7" +"@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== -"@babel/helper-replace-supers@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz#38cfda3b6e990879c71d08d0fef9236b62bd75f5" - integrity sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw== +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.7" - "@babel/helper-optimise-call-expression" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-simple-access@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz#5eb9f6a60c5d6b2e0f76057004f8dacbddfae1c0" - integrity sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ== +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-skip-transparent-expression-wrappers@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz#382831c91038b1a6d32643f5f49505b8442cb87c" - integrity sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA== +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== dependencies: - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" "@babel/helper-string-parser@^7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54" integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + "@babel/helper-validator-identifier@^7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@babel/helper-validator-option@^7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz#97d1d684448228b30b506d90cace495d6f492729" integrity sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ== -"@babel/helper-wrap-function@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz#9f6021dd1c4fdf4ad515c809967fc4bac9a70fe7" - integrity sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg== - dependencies: - "@babel/template" "^7.25.7" - "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== -"@babel/helpers@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.7.tgz#091b52cb697a171fe0136ab62e54e407211f09c2" - integrity sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA== +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== dependencies: - "@babel/template" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" "@babel/highlight@^7.25.7": version "7.25.7" @@ -241,58 +286,58 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.25.7", "@babel/parser@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2" - integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== +"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== dependencies: - "@babel/types" "^7.25.8" + "@babel/types" "^7.26.3" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz#93969ac50ef4d68b2504b01b758af714e4cbdd64" - integrity sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz#a338d611adb9dcd599b8b1efa200c88ebeffe046" - integrity sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz#c5f755e911dfac7ef6957300c0f9c4a8c18c06f4" - integrity sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz#3b7ea04492ded990978b6deaa1dfca120ad4455a" - integrity sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/plugin-transform-optional-chaining" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz#9622b1d597a703aa3a921e6f58c9c2d9a028d2c5" - integrity sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-proposal-export-default-from@7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.8.tgz#fa22151caa240683c3659796037237813767f348" - integrity sha512-5SLPHA/Gk7lNdaymtSVS9jH77Cs7yuHTR3dYj+9q+M7R7tNLXhNuvnmOfafRIzpWL+dtMibuu1I4ofrc768Gkw== +"@babel/plugin-proposal-export-default-from@7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz#52702be6ef8367fc8f18b8438278332beeb8f87c" + integrity sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -306,33 +351,33 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-import-assertions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz#8ce248f9f4ed4b7ed4cb2e0eb4ed9efd9f52921f" - integrity sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ== +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-import-attributes@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz#d78dd0499d30df19a598e63ab895e21b909bc43f" - integrity sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw== +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-jsx@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz#5352d398d11ea5e7ef330c854dea1dae0bf18165" - integrity sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw== +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-typescript@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz#bfc05b0cc31ebd8af09964650cee723bb228108b" - integrity sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g== +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -342,498 +387,505 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz#1b9ed22e6890a0e9ff470371c73b8c749bcec386" - integrity sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg== +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-async-generator-functions@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz#3331de02f52cc1f2c75b396bec52188c85b0b1ec" - integrity sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA== +"@babel/plugin-transform-async-generator-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-remap-async-to-generator" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-async-to-generator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz#a44c7323f8d4285a6c568dd43c5c361d6367ec52" - integrity sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg== +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== dependencies: - "@babel/helper-module-imports" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-remap-async-to-generator" "^7.25.7" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" -"@babel/plugin-transform-block-scoped-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz#e0b8843d5571719a2f1bf7e284117a3379fcc17c" - integrity sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ== +"@babel/plugin-transform-block-scoped-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458" + integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-block-scoping@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz#6dab95e98adf780ceef1b1c3ab0e55cd20dd410a" - integrity sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow== +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-properties@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz#a389cfca7a10ac80e3ff4c75fca08bd097ad1523" - integrity sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g== +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-static-block@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz#a8af22028920fe404668031eceb4c3aadccb5262" - integrity sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ== +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-classes@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz#5103206cf80d02283bbbd044509ea3b65d0906bb" - integrity sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg== +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-replace-supers" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz#7f621f0aa1354b5348a935ab12e3903842466f65" - integrity sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA== +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/template" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" -"@babel/plugin-transform-destructuring@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz#f6f26a9feefb5aa41fd45b6f5838901b5333d560" - integrity sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA== +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dotall-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz#9d775c4a3ff1aea64045300fcd4309b4a610ef02" - integrity sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ== +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-keys@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz#fbba7d1155eab76bd4f2a038cbd5d65883bd7a93" - integrity sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg== +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz#102b31608dcc22c08fbca1894e104686029dc141" - integrity sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dynamic-import@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz#f1edbe75b248cf44c70c8ca8ed3818a668753aaa" - integrity sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A== +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-exponentiation-operator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz#5961a3a23a398faccd6cddb34a2182807d75fb5f" - integrity sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg== +"@babel/plugin-transform-exponentiation-operator@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-export-namespace-from@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz#d1988c3019a380b417e0516418b02804d3858145" - integrity sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw== +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-for-of@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz#0acfea0f27aa290818b5b48a5a44b3f03fc13669" - integrity sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw== +"@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-function-name@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz#7e394ccea3693902a8b50ded8b6ae1fa7b8519fd" - integrity sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ== +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-json-strings@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz#6fb3ec383a2ea92652289fdba653e3f9de722694" - integrity sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA== +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz#70cbdc742f2cfdb1a63ea2cbd018d12a60b213c3" - integrity sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w== +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-logical-assignment-operators@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz#01868ff92daa9e525b4c7902aa51979082a05710" - integrity sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g== +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-member-expression-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz#0a36c3fbd450cc9e6485c507f005fa3d1bc8fca5" - integrity sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw== +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-amd@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz#bb4e543b5611f6c8c685a2fd485408713a3adf3d" - integrity sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA== +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-commonjs@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz#173f0c791bb7407c092ce6d77ee90eb3f2d1d2fd" - integrity sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg== +"@babel/plugin-transform-modules-commonjs@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-simple-access" "^7.25.7" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-systemjs@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz#8b14d319a177cc9c85ef8b0512afd429d9e2e60b" - integrity sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g== +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-identifier" "^7.25.7" - "@babel/traverse" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-modules-umd@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz#00ee7a7e124289549381bfb0e24d87fd7f848367" - integrity sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw== +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: - "@babel/helper-module-transforms" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz#a2f3f6d7f38693b462542951748f0a72a34d196d" - integrity sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-new-target@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz#52b2bde523b76c548749f38dc3054f1f45e82bc9" - integrity sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA== +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-nullish-coalescing-operator@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz#befb4900c130bd52fccf2b926314557987f1b552" - integrity sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ== +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-numeric-separator@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz#91e370486371637bd42161052f2602c701386891" - integrity sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q== +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-object-rest-spread@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz#0904ac16bcce41df4db12d915d6780f85c7fb04b" - integrity sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g== +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== dependencies: - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-transform-parameters" "^7.25.7" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" -"@babel/plugin-transform-object-super@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz#582a9cea8cf0a1e02732be5b5a703a38dedf5661" - integrity sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA== +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-replace-supers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" -"@babel/plugin-transform-optional-catch-binding@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz#2649b86a3bb202c6894ec81a6ddf41b94d8f3103" - integrity sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg== +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-optional-chaining@^7.25.7", "@babel/plugin-transform-optional-chaining@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz#f46283b78adcc5b6ab988a952f989e7dce70653f" - integrity sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg== +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-parameters@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz#80c38b03ef580f6d6bffe1c5254bb35986859ac7" - integrity sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ== +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-methods@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz#c790a04f837b4bd61d6b0317b43aa11ff67dce80" - integrity sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA== +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-property-in-object@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz#1234f856ce85e061f9688764194e51ea7577c434" - integrity sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow== +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-property-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz#a8612b4ea4e10430f00012ecf0155662c7d6550d" - integrity sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw== +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-display-name@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz#2753e875a1b702fb1d806c4f5d4c194d64cadd88" - integrity sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA== +"@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-development@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz#2fbd77887b8fa2942d7cb61edf1029ea1b048554" - integrity sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg== +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== dependencies: - "@babel/plugin-transform-react-jsx" "^7.25.7" + "@babel/plugin-transform-react-jsx" "^7.25.9" -"@babel/plugin-transform-react-jsx@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz#f5e2af6020a562fe048dd343e571c4428e6c5632" - integrity sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q== +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-module-imports" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-jsx" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-transform-react-pure-annotations@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz#6d0b8dadb2d3c5cbb8ade68c5efd49470b0d65f7" - integrity sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA== +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-regenerator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz#6eb006e6d26f627bc2f7844a9f19770721ad6f3e" - integrity sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ== +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz#dc56b25e02afaabef3ce0c5b06b0916e8523e995" - integrity sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng== +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-shorthand-properties@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz#92690a9c671915602d91533c278cc8f6bf12275f" - integrity sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA== +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-spread@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz#df83e899a9fc66284ee601a7b738568435b92998" - integrity sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw== +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-sticky-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz#341c7002bef7f29037be7fb9684e374442dd0d17" - integrity sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw== +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-template-literals@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz#e566c581bb16d8541dd8701093bb3457adfce16b" - integrity sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA== +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typeof-symbol@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz#debb1287182efd20488f126be343328c679b66eb" - integrity sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA== +"@babel/plugin-transform-template-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" + integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typescript@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz#8fc7c3d28ddd36bce45b9b48594129d0e560cfbe" - integrity sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q== +"@babel/plugin-transform-typeof-symbol@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b" + integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.7" - "@babel/helper-create-class-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/plugin-syntax-typescript" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-escapes@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz#973592b6d13a914794e1de8cf1383e50e0f87f81" - integrity sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ== +"@babel/plugin-transform-typescript@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" + integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" -"@babel/plugin-transform-unicode-property-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz#25349197cce964b1343f74fa7cfdf791a1b1919e" - integrity sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w== +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz#f93a93441baf61f713b6d5552aaa856bfab34809" - integrity sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g== +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-sets-regex@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz#d1b3295d29e0f8f4df76abc909ad1ebee919560c" - integrity sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw== +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/preset-env@7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.8.tgz#dc6b719627fb29cd9cccbbbe041802fd575b524c" - integrity sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg== +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== dependencies: - "@babel/compat-data" "^7.25.8" - "@babel/helper-compilation-targets" "^7.25.7" - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-option" "^7.25.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.7" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1" + integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== + dependencies: + "@babel/compat-data" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.25.7" - "@babel/plugin-syntax-import-attributes" "^7.25.7" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.8" - "@babel/plugin-transform-async-to-generator" "^7.25.7" - "@babel/plugin-transform-block-scoped-functions" "^7.25.7" - "@babel/plugin-transform-block-scoping" "^7.25.7" - "@babel/plugin-transform-class-properties" "^7.25.7" - "@babel/plugin-transform-class-static-block" "^7.25.8" - "@babel/plugin-transform-classes" "^7.25.7" - "@babel/plugin-transform-computed-properties" "^7.25.7" - "@babel/plugin-transform-destructuring" "^7.25.7" - "@babel/plugin-transform-dotall-regex" "^7.25.7" - "@babel/plugin-transform-duplicate-keys" "^7.25.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.7" - "@babel/plugin-transform-dynamic-import" "^7.25.8" - "@babel/plugin-transform-exponentiation-operator" "^7.25.7" - "@babel/plugin-transform-export-namespace-from" "^7.25.8" - "@babel/plugin-transform-for-of" "^7.25.7" - "@babel/plugin-transform-function-name" "^7.25.7" - "@babel/plugin-transform-json-strings" "^7.25.8" - "@babel/plugin-transform-literals" "^7.25.7" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.8" - "@babel/plugin-transform-member-expression-literals" "^7.25.7" - "@babel/plugin-transform-modules-amd" "^7.25.7" - "@babel/plugin-transform-modules-commonjs" "^7.25.7" - "@babel/plugin-transform-modules-systemjs" "^7.25.7" - "@babel/plugin-transform-modules-umd" "^7.25.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.7" - "@babel/plugin-transform-new-target" "^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.8" - "@babel/plugin-transform-numeric-separator" "^7.25.8" - "@babel/plugin-transform-object-rest-spread" "^7.25.8" - "@babel/plugin-transform-object-super" "^7.25.7" - "@babel/plugin-transform-optional-catch-binding" "^7.25.8" - "@babel/plugin-transform-optional-chaining" "^7.25.8" - "@babel/plugin-transform-parameters" "^7.25.7" - "@babel/plugin-transform-private-methods" "^7.25.7" - "@babel/plugin-transform-private-property-in-object" "^7.25.8" - "@babel/plugin-transform-property-literals" "^7.25.7" - "@babel/plugin-transform-regenerator" "^7.25.7" - "@babel/plugin-transform-reserved-words" "^7.25.7" - "@babel/plugin-transform-shorthand-properties" "^7.25.7" - "@babel/plugin-transform-spread" "^7.25.7" - "@babel/plugin-transform-sticky-regex" "^7.25.7" - "@babel/plugin-transform-template-literals" "^7.25.7" - "@babel/plugin-transform-typeof-symbol" "^7.25.7" - "@babel/plugin-transform-unicode-escapes" "^7.25.7" - "@babel/plugin-transform-unicode-property-regex" "^7.25.7" - "@babel/plugin-transform-unicode-regex" "^7.25.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.7" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.25.9" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.25.9" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.25.9" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.25.9" + "@babel/plugin-transform-typeof-symbol" "^7.25.9" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.6" @@ -850,28 +902,28 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.25.7.tgz#081cbe1dea363b732764d06a0fdda67ffa17735d" - integrity sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg== +"@babel/preset-react@7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" + integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-option" "^7.25.7" - "@babel/plugin-transform-react-display-name" "^7.25.7" - "@babel/plugin-transform-react-jsx" "^7.25.7" - "@babel/plugin-transform-react-jsx-development" "^7.25.7" - "@babel/plugin-transform-react-pure-annotations" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" -"@babel/preset-typescript@7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz#43c5b68eccb856ae5b52274b77b1c3c413cde1b7" - integrity sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw== +"@babel/preset-typescript@7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" + integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== dependencies: - "@babel/helper-plugin-utils" "^7.25.7" - "@babel/helper-validator-option" "^7.25.7" - "@babel/plugin-syntax-jsx" "^7.25.7" - "@babel/plugin-transform-modules-commonjs" "^7.25.7" - "@babel/plugin-transform-typescript" "^7.25.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-typescript" "^7.25.9" "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.25.7" @@ -880,29 +932,29 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.7.tgz#27f69ce382855d915b14ab0fe5fb4cbf88fa0769" - integrity sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA== +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== dependencies: - "@babel/code-frame" "^7.25.7" - "@babel/parser" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/traverse@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.7.tgz#83e367619be1cab8e4f2892ef30ba04c26a40fa8" - integrity sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg== +"@babel/traverse@^7.25.9": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== dependencies: - "@babel/code-frame" "^7.25.7" - "@babel/generator" "^7.25.7" - "@babel/parser" "^7.25.7" - "@babel/template" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.25.7", "@babel/types@^7.25.8", "@babel/types@^7.4.4": +"@babel/types@^7.25.7", "@babel/types@^7.4.4": version "7.25.8" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1" integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== @@ -911,6 +963,14 @@ "@babel/helper-validator-identifier" "^7.25.7" to-fast-properties "^2.0.0" +"@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@csstools/css-parser-algorithms@^2.1.1": version "2.7.1" resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz#6d93a8f7d8aeb7cd9ed0868f946e46f021b6aa70" @@ -5872,6 +5932,18 @@ regexpu-core@^6.1.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + regjsgen@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" @@ -5884,6 +5956,13 @@ regjsparser@^0.11.0: dependencies: jsesc "~3.0.2" +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== + dependencies: + jsesc "~3.0.2" + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" From 8aa0754843568f092d352d8ea844744a6b855c25 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 15 Dec 2024 08:45:49 -0800 Subject: [PATCH 125/275] Upgrade Font Awesome to 6.7.1 (cherry picked from commit 016b5718386593c030f14fcac307c93ee1ceeca6) --- package.json | 8 ++++---- yarn.lock | 46 +++++++++++++++++++++++----------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 8c07e66e2..15cdbaf46 100644 --- a/package.json +++ b/package.json @@ -25,10 +25,10 @@ "defaults" ], "dependencies": { - "@fortawesome/fontawesome-free": "6.6.0", - "@fortawesome/fontawesome-svg-core": "6.6.0", - "@fortawesome/free-regular-svg-icons": "6.6.0", - "@fortawesome/free-solid-svg-icons": "6.6.0", + "@fortawesome/fontawesome-free": "6.7.1", + "@fortawesome/fontawesome-svg-core": "6.7.1", + "@fortawesome/free-regular-svg-icons": "6.7.1", + "@fortawesome/free-solid-svg-icons": "6.7.1", "@fortawesome/react-fontawesome": "0.2.2", "@juggle/resize-observer": "3.4.0", "@microsoft/signalr": "6.0.25", diff --git a/yarn.lock b/yarn.lock index 1a3ad81e1..52f0191bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1028,36 +1028,36 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@fortawesome/fontawesome-common-types@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz#31ab07ca6a06358c5de4d295d4711b675006163f" - integrity sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw== +"@fortawesome/fontawesome-common-types@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.1.tgz#6201640f39fdcf8e41cd9d1a92b2da3a96817fa4" + integrity sha512-gbDz3TwRrIPT3i0cDfujhshnXO9z03IT1UKRIVi/VEjpNHtSBIP2o5XSm+e816FzzCFEzAxPw09Z13n20PaQJQ== -"@fortawesome/fontawesome-free@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.6.0.tgz#0e984f0f2344ee513c185d87d77defac4c0c8224" - integrity sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow== +"@fortawesome/fontawesome-free@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.1.tgz#160a48730d533ec77578ed0141661a8f0150a71d" + integrity sha512-ALIk/MOh5gYe1TG/ieS5mVUsk7VUIJTJKPMK9rFFqOgfp0Q3d5QiBXbcOMwUvs37fyZVCz46YjOE6IFeOAXCHA== -"@fortawesome/fontawesome-svg-core@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz#2a24c32ef92136e98eae2ff334a27145188295ff" - integrity sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg== +"@fortawesome/fontawesome-svg-core@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.1.tgz#1f8ebb6f35cf02f89c110198514e848de17ac99e" + integrity sha512-8dBIHbfsKlCk2jHQ9PoRBg2Z+4TwyE3vZICSnoDlnsHA6SiMlTwfmW6yX0lHsRmWJugkeb92sA0hZdkXJhuz+g== dependencies: - "@fortawesome/fontawesome-common-types" "6.6.0" + "@fortawesome/fontawesome-common-types" "6.7.1" -"@fortawesome/free-regular-svg-icons@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.6.0.tgz#fc49a947ac8dfd20403c9ea5f37f0919425bdf04" - integrity sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ== +"@fortawesome/free-regular-svg-icons@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.7.1.tgz#d7ec06f896ee91116a388a5a234cd26420ccdfe4" + integrity sha512-e13cp+bAx716RZOTQ59DhqikAgETA9u1qTBHO3e3jMQQ+4H/N1NC1ZVeFYt1V0m+Th68BrEL1/X6XplISutbXg== dependencies: - "@fortawesome/fontawesome-common-types" "6.6.0" + "@fortawesome/fontawesome-common-types" "6.7.1" -"@fortawesome/free-solid-svg-icons@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.6.0.tgz#061751ca43be4c4d814f0adbda8f006164ec9f3b" - integrity sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA== +"@fortawesome/free-solid-svg-icons@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.1.tgz#c1f9a6c25562a12c283e87e284f9d82a5b0dbcc0" + integrity sha512-BTKc0b0mgjWZ2UDKVgmwaE0qt0cZs6ITcDgjrti5f/ki7aF5zs+N91V6hitGo3TItCFtnKg6cUVGdTmBFICFRg== dependencies: - "@fortawesome/fontawesome-common-types" "6.6.0" + "@fortawesome/fontawesome-common-types" "6.7.1" "@fortawesome/react-fontawesome@0.2.2": version "0.2.2" From 44a56549188566f93c539c22eebd26a5c494aac0 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 17 Dec 2024 15:46:12 +0200 Subject: [PATCH 126/275] Log adding missing artist messages as info --- src/NzbDrone.Core/Music/Services/RefreshAlbumService.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Music/Services/RefreshAlbumService.cs b/src/NzbDrone.Core/Music/Services/RefreshAlbumService.cs index ea99b7276..8fece1864 100644 --- a/src/NzbDrone.Core/Music/Services/RefreshAlbumService.cs +++ b/src/NzbDrone.Core/Music/Services/RefreshAlbumService.cs @@ -114,7 +114,7 @@ namespace NzbDrone.Core.Music // so that the album doesn't just disappear. // TODO filter by metadata id before hitting database - _logger.Trace($"Ensuring parent artist exists [{remote.ArtistMetadata.Value.ForeignArtistId}]"); + _logger.Trace("Ensuring parent artist exists [{0}]", remote.ArtistMetadata.Value.ForeignArtistId); var newArtist = _artistService.FindById(remote.ArtistMetadata.Value.ForeignArtistId); @@ -130,7 +130,8 @@ namespace NzbDrone.Core.Music Monitored = oldArtist.Monitored, Tags = oldArtist.Tags }; - _logger.Debug($"Adding missing parent artist {addArtist}"); + + _logger.Info("Adding missing parent artist {0}", addArtist); _addArtistService.AddArtist(addArtist); } } From 198a13755faa915fe2f87825709cb0c89a016235 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 8 Dec 2024 17:24:47 -0800 Subject: [PATCH 127/275] Upgrade TypeScript and core-js (cherry picked from commit 148480909917f69ff3b2ca547ccb4716dd56606e) Closes #5306 --- .../Selectors/createArtistAlbumsSelector.ts | 3 ++- .../createArtistMetadataProfileSelector.ts | 3 ++- .../createArtistQualityProfileSelector.ts | 3 ++- ...{getRelativeDate.js => getRelativeDate.ts} | 24 ++++++++++++++++--- package.json | 4 ++-- yarn.lock | 16 ++++++------- 6 files changed, 37 insertions(+), 16 deletions(-) rename frontend/src/Utilities/Date/{getRelativeDate.js => getRelativeDate.ts} (65%) diff --git a/frontend/src/Store/Selectors/createArtistAlbumsSelector.ts b/frontend/src/Store/Selectors/createArtistAlbumsSelector.ts index baffd87ec..414a451f5 100644 --- a/frontend/src/Store/Selectors/createArtistAlbumsSelector.ts +++ b/frontend/src/Store/Selectors/createArtistAlbumsSelector.ts @@ -1,4 +1,5 @@ import { createSelector } from 'reselect'; +import AlbumAppState from 'App/State/AlbumAppState'; import AppState from 'App/State/AppState'; import Artist from 'Artist/Artist'; import { createArtistSelectorForHook } from './createArtistSelector'; @@ -7,7 +8,7 @@ function createArtistAlbumsSelector(artistId: number) { return createSelector( (state: AppState) => state.albums, createArtistSelectorForHook(artistId), - (albums, artist = {} as Artist) => { + (albums: AlbumAppState, artist = {} as Artist) => { const { isFetching, isPopulated, error, items } = albums; const filteredAlbums = items.filter( diff --git a/frontend/src/Store/Selectors/createArtistMetadataProfileSelector.ts b/frontend/src/Store/Selectors/createArtistMetadataProfileSelector.ts index 0acbd3997..fa60d936d 100644 --- a/frontend/src/Store/Selectors/createArtistMetadataProfileSelector.ts +++ b/frontend/src/Store/Selectors/createArtistMetadataProfileSelector.ts @@ -1,13 +1,14 @@ import { createSelector } from 'reselect'; import AppState from 'App/State/AppState'; import Artist from 'Artist/Artist'; +import MetadataProfile from 'typings/MetadataProfile'; import { createArtistSelectorForHook } from './createArtistSelector'; function createArtistMetadataProfileSelector(artistId: number) { return createSelector( (state: AppState) => state.settings.metadataProfiles.items, createArtistSelectorForHook(artistId), - (metadataProfiles, artist = {} as Artist) => { + (metadataProfiles: MetadataProfile[], artist = {} as Artist) => { return metadataProfiles.find((profile) => { return profile.id === artist.metadataProfileId; }); diff --git a/frontend/src/Store/Selectors/createArtistQualityProfileSelector.ts b/frontend/src/Store/Selectors/createArtistQualityProfileSelector.ts index 99325276f..67639919b 100644 --- a/frontend/src/Store/Selectors/createArtistQualityProfileSelector.ts +++ b/frontend/src/Store/Selectors/createArtistQualityProfileSelector.ts @@ -1,13 +1,14 @@ import { createSelector } from 'reselect'; import AppState from 'App/State/AppState'; import Artist from 'Artist/Artist'; +import QualityProfile from 'typings/QualityProfile'; import { createArtistSelectorForHook } from './createArtistSelector'; function createArtistQualityProfileSelector(artistId: number) { return createSelector( (state: AppState) => state.settings.qualityProfiles.items, createArtistSelectorForHook(artistId), - (qualityProfiles, artist = {} as Artist) => { + (qualityProfiles: QualityProfile[], artist = {} as Artist) => { return qualityProfiles.find( (profile) => profile.id === artist.qualityProfileId ); diff --git a/frontend/src/Utilities/Date/getRelativeDate.js b/frontend/src/Utilities/Date/getRelativeDate.ts similarity index 65% rename from frontend/src/Utilities/Date/getRelativeDate.js rename to frontend/src/Utilities/Date/getRelativeDate.ts index 812064272..178d14fb7 100644 --- a/frontend/src/Utilities/Date/getRelativeDate.js +++ b/frontend/src/Utilities/Date/getRelativeDate.ts @@ -6,15 +6,33 @@ import isTomorrow from 'Utilities/Date/isTomorrow'; import isYesterday from 'Utilities/Date/isYesterday'; import translate from 'Utilities/String/translate'; -function getRelativeDate(date, shortDateFormat, showRelativeDates, { timeFormat, includeSeconds = false, timeForToday = false } = {}) { +interface GetRelativeDateOptions { + timeFormat?: string; + includeSeconds?: boolean; + timeForToday?: boolean; +} + +function getRelativeDate( + date: string | undefined, + shortDateFormat: string, + showRelativeDates: boolean, + { + timeFormat, + includeSeconds = false, + timeForToday = false, + }: GetRelativeDateOptions = {} +) { if (!date) { - return null; + return ''; } const isTodayDate = isToday(date); if (isTodayDate && timeForToday && timeFormat) { - return formatTime(date, timeFormat, { includeMinuteZero: true, includeSeconds }); + return formatTime(date, timeFormat, { + includeMinuteZero: true, + includeSeconds, + }); } if (!showRelativeDates) { diff --git a/package.json b/package.json index 15cdbaf46..541ac96c2 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "redux-thunk": "2.4.2", "reselect": "4.1.8", "stacktrace-js": "2.0.2", - "typescript": "5.1.6" + "typescript": "5.7.2" }, "devDependencies": { "@babel/core": "7.26.0", @@ -109,7 +109,7 @@ "babel-loader": "9.2.1", "babel-plugin-inline-classnames": "2.0.1", "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "core-js": "3.38.1", + "core-js": "3.39.0", "css-loader": "6.7.3", "css-modules-typescript-loader": "4.0.1", "eslint": "8.57.1", diff --git a/yarn.lock b/yarn.lock index 52f0191bc..f795a84db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2541,10 +2541,10 @@ core-js-compat@^3.38.0, core-js-compat@^3.38.1: dependencies: browserslist "^4.23.3" -core-js@3.38.1: - version "3.38.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.38.1.tgz#aa375b79a286a670388a1a363363d53677c0383e" - integrity sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw== +core-js@3.39.0: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.39.0.tgz#57f7647f4d2d030c32a72ea23a0555b2eaa30f83" + integrity sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g== core-js@^2.4.0: version "2.6.12" @@ -6900,10 +6900,10 @@ typescript-plugin-css-modules@5.0.1: stylus "^0.59.0" tsconfig-paths "^4.1.2" -typescript@5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== +typescript@5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== unbox-primitive@^1.0.2: version "1.0.2" From afb3fd5bd5ef8f53d76e268c8770f79be6df07bc Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 16 Dec 2024 16:09:27 -0800 Subject: [PATCH 128/275] Upgrade typescript-eslint packages to 8.181.1 (cherry picked from commit ed10b63fa0c161cac7e0a2084e53785ab1798208) Closes #5325 --- frontend/src/Utilities/String/translate.ts | 2 +- package.json | 4 +- yarn.lock | 170 ++++++++++----------- 3 files changed, 88 insertions(+), 88 deletions(-) diff --git a/frontend/src/Utilities/String/translate.ts b/frontend/src/Utilities/String/translate.ts index 98a0418ad..a4546a218 100644 --- a/frontend/src/Utilities/String/translate.ts +++ b/frontend/src/Utilities/String/translate.ts @@ -17,7 +17,7 @@ export async function fetchTranslations(): Promise { translations = data.strings; resolve(true); - } catch (error) { + } catch { resolve(false); } }); diff --git a/package.json b/package.json index 541ac96c2..bda38efb4 100644 --- a/package.json +++ b/package.json @@ -103,8 +103,8 @@ "@types/react-window": "1.8.8", "@types/redux-actions": "2.6.5", "@types/webpack-livereload-plugin": "2.3.6", - "@typescript-eslint/eslint-plugin": "6.21.0", - "@typescript-eslint/parser": "6.21.0", + "@typescript-eslint/eslint-plugin": "8.18.1", + "@typescript-eslint/parser": "8.18.1", "autoprefixer": "10.4.20", "babel-loader": "9.2.1", "babel-plugin-inline-classnames": "2.0.1", diff --git a/yarn.lock b/yarn.lock index f795a84db..923b7ff39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1003,7 +1003,12 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.10.0": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint-community/regexpp@^4.6.1": version "4.11.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== @@ -1396,7 +1401,7 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== -"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -1542,11 +1547,6 @@ resolved "https://registry.yarnpkg.com/@types/redux-actions/-/redux-actions-2.6.5.tgz#3728477ada6c4bc0fe54ffae11def23a65c0714b" integrity sha512-RgXOigay5cNweP+xH1ru+Vaaj1xXYLpWIfSVO8cSA8Ii2xvR+HRfWYdLe1UVOA8X0kIklalGOa0DTDyld0obkg== -"@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - "@types/source-list-map@*": version "0.1.6" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.6.tgz#164e169dd061795b50b83c19e4d3be09f8d3a454" @@ -1592,91 +1592,86 @@ anymatch "^3.0.0" source-map "^0.6.0" -"@typescript-eslint/eslint-plugin@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== +"@typescript-eslint/eslint-plugin@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.1.tgz#992e5ac1553ce20d0d46aa6eccd79dc36dedc805" + integrity sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ== dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.18.1" + "@typescript-eslint/type-utils" "8.18.1" + "@typescript-eslint/utils" "8.18.1" + "@typescript-eslint/visitor-keys" "8.18.1" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/parser@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== +"@typescript-eslint/parser@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.18.1.tgz#c258bae062778b7696793bc492249027a39dfb95" + integrity sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA== dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/scope-manager" "8.18.1" + "@typescript-eslint/types" "8.18.1" + "@typescript-eslint/typescript-estree" "8.18.1" + "@typescript-eslint/visitor-keys" "8.18.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== +"@typescript-eslint/scope-manager@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz#52cedc3a8178d7464a70beffed3203678648e55b" + integrity sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "8.18.1" + "@typescript-eslint/visitor-keys" "8.18.1" -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== +"@typescript-eslint/type-utils@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz#10f41285475c0bdee452b79ff7223f0e43a7781e" + integrity sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ== dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/typescript-estree" "8.18.1" + "@typescript-eslint/utils" "8.18.1" debug "^4.3.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== +"@typescript-eslint/types@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.18.1.tgz#d7f4f94d0bba9ebd088de840266fcd45408a8fff" + integrity sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw== -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== +"@typescript-eslint/typescript-estree@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz#2a86cd64b211a742f78dfa7e6f4860413475367e" + integrity sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "8.18.1" + "@typescript-eslint/visitor-keys" "8.18.1" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== +"@typescript-eslint/utils@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.18.1.tgz#c4199ea23fc823c736e2c96fd07b1f7235fa92d5" + integrity sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "8.18.1" + "@typescript-eslint/types" "8.18.1" + "@typescript-eslint/typescript-estree" "8.18.1" -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== +"@typescript-eslint/visitor-keys@8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz#344b4f6bc83f104f514676facf3129260df7610a" + integrity sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ== dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "8.18.1" + eslint-visitor-keys "^4.2.0" "@ungap/structured-clone@^1.2.0": version "1.2.0" @@ -3259,6 +3254,11 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + eslint@8.57.1: version "8.57.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" @@ -3366,7 +3366,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -3912,7 +3912,7 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== @@ -4752,13 +4752,6 @@ mini-css-extract-plugin@2.9.1: schema-utils "^4.0.0" tapable "^2.2.1" -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimatch@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" @@ -4780,6 +4773,13 @@ minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimatch@~3.0.4: version "3.0.8" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" @@ -6192,7 +6192,7 @@ semver@^6.0.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.4: +semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.6.0: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -6762,10 +6762,10 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -ts-api-utils@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== ts-loader@9.5.1: version "9.5.1" From ec93c33aa9f4925c6d463f6c1c8d603da6c56a70 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 4 Nov 2024 15:24:45 +0200 Subject: [PATCH 129/275] Console warnings for missing translations on development builds (cherry picked from commit 67a1ecb0fea4e6c7dfdb68fbe3ef30d4c22398d8) Closes #5239 --- frontend/src/Utilities/String/translate.ts | 6 ++++++ frontend/typings/Globals.d.ts | 1 + src/NzbDrone.Core/Localization/Core/en.json | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/frontend/src/Utilities/String/translate.ts b/frontend/src/Utilities/String/translate.ts index a4546a218..5571ef6b0 100644 --- a/frontend/src/Utilities/String/translate.ts +++ b/frontend/src/Utilities/String/translate.ts @@ -27,6 +27,12 @@ export default function translate( key: string, tokens: Record = {} ) { + const { isProduction = true } = window.Lidarr; + + if (!isProduction && !(key in translations)) { + console.warn(`Missing translation for key: ${key}`); + } + const translation = translations[key] || key; tokens.appName = 'Lidarr'; diff --git a/frontend/typings/Globals.d.ts b/frontend/typings/Globals.d.ts index b2b10fb70..3509249fc 100644 --- a/frontend/typings/Globals.d.ts +++ b/frontend/typings/Globals.d.ts @@ -7,5 +7,6 @@ interface Window { theme: string; urlBase: string; version: string; + isProduction: boolean; }; } diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 24a02144c..91ef5f5aa 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -707,6 +707,7 @@ "MassSearchCancelWarning": "This cannot be cancelled once started without restarting {appName} or disabling all of your indexers.", "MatchedToAlbums": "Matched to Albums", "MatchedToArtist": "Matched to Artist", + "Max": "Max", "MaximumLimits": "Maximum Limits", "MaximumSize": "Maximum Size", "MaximumSizeHelpText": "Maximum size for a release to be grabbed in MB. Set to zero to set to unlimited.", @@ -727,6 +728,7 @@ "MetadataProfiles": "Metadata Profiles", "MetadataSettings": "Metadata Settings", "MetadataSettingsArtistSummary": "Create metadata files when tracks are imported or artist are refreshed", + "Min": "Min", "MinFormatScoreHelpText": "Minimum custom format score allowed to download", "MinimumAge": "Minimum Age", "MinimumAgeHelpText": "Usenet only: Minimum age in minutes of NZBs before they are grabbed. Use this to give new releases time to propagate to your usenet provider.", @@ -894,6 +896,7 @@ "PreferProtocol": "Prefer {preferredProtocol}", "PreferTorrent": "Prefer Torrent", "PreferUsenet": "Prefer Usenet", + "Preferred": "Preferred", "PreferredProtocol": "Preferred Protocol", "PreferredSize": "Preferred Size", "Presets": "Presets", @@ -1208,6 +1211,7 @@ "TimeFormat": "Time Format", "TimeLeft": "Time Left", "Title": "Title", + "Today": "Today", "Tomorrow": "Tomorrow", "TorrentDelay": "Torrent Delay", "TorrentDelayHelpText": "Delay in minutes to wait before grabbing a torrent", From 4c603e24f659a8700d30728bdc634a6187791c40 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 24 Nov 2024 20:51:33 -0800 Subject: [PATCH 130/275] Support Postgres with non-standard version string (cherry picked from commit 40f4ef27b22113c1dae0d0cbdee8205132bed68a) Closes #5267 --- .../Datastore/DatabaseVersionParserFixture.cs | 38 +++++++++++++++++++ src/NzbDrone.Core/Datastore/Database.cs | 29 ++++---------- .../Datastore/DatabaseVersionParser.cs | 16 ++++++++ 3 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 src/NzbDrone.Core.Test/Datastore/DatabaseVersionParserFixture.cs create mode 100644 src/NzbDrone.Core/Datastore/DatabaseVersionParser.cs diff --git a/src/NzbDrone.Core.Test/Datastore/DatabaseVersionParserFixture.cs b/src/NzbDrone.Core.Test/Datastore/DatabaseVersionParserFixture.cs new file mode 100644 index 000000000..05bf04fea --- /dev/null +++ b/src/NzbDrone.Core.Test/Datastore/DatabaseVersionParserFixture.cs @@ -0,0 +1,38 @@ +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Datastore; + +namespace NzbDrone.Core.Test.Datastore; + +[TestFixture] +public class DatabaseVersionParserFixture +{ + [TestCase("3.44.2", 3, 44, 2)] + public void should_parse_sqlite_database_version(string serverVersion, int majorVersion, int minorVersion, int buildVersion) + { + var version = DatabaseVersionParser.ParseServerVersion(serverVersion); + + version.Should().NotBeNull(); + version.Major.Should().Be(majorVersion); + version.Minor.Should().Be(minorVersion); + version.Build.Should().Be(buildVersion); + } + + [TestCase("14.8 (Debian 14.8-1.pgdg110+1)", 14, 8, null)] + [TestCase("16.3 (Debian 16.3-1.pgdg110+1)", 16, 3, null)] + [TestCase("16.3 - Percona Distribution", 16, 3, null)] + [TestCase("17.0 - Percona Server", 17, 0, null)] + public void should_parse_postgres_database_version(string serverVersion, int majorVersion, int minorVersion, int? buildVersion) + { + var version = DatabaseVersionParser.ParseServerVersion(serverVersion); + + version.Should().NotBeNull(); + version.Major.Should().Be(majorVersion); + version.Minor.Should().Be(minorVersion); + + if (buildVersion.HasValue) + { + version.Build.Should().Be(buildVersion.Value); + } + } +} diff --git a/src/NzbDrone.Core/Datastore/Database.cs b/src/NzbDrone.Core/Datastore/Database.cs index b743fba13..741a22f0b 100644 --- a/src/NzbDrone.Core/Datastore/Database.cs +++ b/src/NzbDrone.Core/Datastore/Database.cs @@ -1,7 +1,7 @@ using System; using System.Data; +using System.Data.Common; using System.Data.SQLite; -using System.Text.RegularExpressions; using Dapper; using NLog; using NzbDrone.Common.Instrumentation; @@ -39,10 +39,9 @@ namespace NzbDrone.Core.Datastore { get { - using (var db = _datamapperFactory()) - { - return db is SQLiteConnection ? DatabaseType.SQLite : DatabaseType.PostgreSQL; - } + using var db = _datamapperFactory(); + + return db is SQLiteConnection ? DatabaseType.SQLite : DatabaseType.PostgreSQL; } } @@ -50,24 +49,10 @@ namespace NzbDrone.Core.Datastore { get { - using (var db = _datamapperFactory()) - { - string version; + using var db = _datamapperFactory(); + var dbConnection = db as DbConnection; - try - { - version = db.QueryFirstOrDefault("SHOW server_version"); - - // Postgres can return extra info about operating system on version call, ignore this - version = Regex.Replace(version, @"\(.*?\)", ""); - } - catch - { - version = db.QueryFirstOrDefault("SELECT sqlite_version()"); - } - - return new Version(version); - } + return DatabaseVersionParser.ParseServerVersion(dbConnection.ServerVersion); } } diff --git a/src/NzbDrone.Core/Datastore/DatabaseVersionParser.cs b/src/NzbDrone.Core/Datastore/DatabaseVersionParser.cs new file mode 100644 index 000000000..ffc77cf18 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/DatabaseVersionParser.cs @@ -0,0 +1,16 @@ +using System; +using System.Text.RegularExpressions; + +namespace NzbDrone.Core.Datastore; + +public static class DatabaseVersionParser +{ + private static readonly Regex VersionRegex = new (@"^[^ ]+", RegexOptions.Compiled); + + public static Version ParseServerVersion(string serverVersion) + { + var match = VersionRegex.Match(serverVersion); + + return match.Success ? new Version(match.Value) : null; + } +} From eb3c7d69902dec16573007598306ff21143c4840 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 23 Nov 2024 20:20:36 -0800 Subject: [PATCH 131/275] Update React (cherry picked from commit 4491df3ae7530f2167beebc3548dd01fd2cc1a12) Towards #5264 --- frontend/src/bootstrap.tsx | 9 ++++---- frontend/src/index.ts | 25 +++++++++++++++++++++ package.json | 8 +++---- yarn.lock | 45 ++++++++++++++++++-------------------- 4 files changed, 54 insertions(+), 33 deletions(-) diff --git a/frontend/src/bootstrap.tsx b/frontend/src/bootstrap.tsx index 6a6d7fc67..9ecf27e0e 100644 --- a/frontend/src/bootstrap.tsx +++ b/frontend/src/bootstrap.tsx @@ -1,6 +1,6 @@ import { createBrowserHistory } from 'history'; import React from 'react'; -import { render } from 'react-dom'; +import { createRoot } from 'react-dom/client'; import createAppStore from 'Store/createAppStore'; import App from './App/App'; @@ -9,9 +9,8 @@ import 'Diag/ConsoleApi'; export async function bootstrap() { const history = createBrowserHistory(); const store = createAppStore(history); + const container = document.getElementById('root'); - render( - , - document.getElementById('root') - ); + const root = createRoot(container!); // createRoot(container!) if you use TypeScript + root.render(); } diff --git a/frontend/src/index.ts b/frontend/src/index.ts index 36aed4c4b..b57a3fa98 100644 --- a/frontend/src/index.ts +++ b/frontend/src/index.ts @@ -14,6 +14,31 @@ window.Lidarr = await response.json(); __webpack_public_path__ = `${window.Lidarr.urlBase}/`; /* eslint-enable no-undef, @typescript-eslint/ban-ts-comment */ +const error = console.error; + +// Monkey patch console.error to filter out some warnings from React +// TODO: Remove this after the great TypeScript migration + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function logError(...parameters: any[]) { + const filter = parameters.find((parameter) => { + return ( + parameter.includes( + 'Support for defaultProps will be removed from function components in a future major release' + ) || + parameter.includes( + 'findDOMNode is deprecated and will be removed in the next major release' + ) + ); + }); + + if (!filter) { + error(...parameters); + } +} + +console.error = logError; + const { bootstrap } = await import('./bootstrap'); await bootstrap(); diff --git a/package.json b/package.json index bda38efb4..d73552544 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,8 @@ "@sentry/browser": "7.119.1", "@sentry/integrations": "7.119.1", "@types/node": "20.16.11", - "@types/react": "18.2.79", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.12", + "@types/react-dom": "18.3.1", "classnames": "2.5.1", "clipboard": "2.0.11", "connected-react-router": "6.9.3", @@ -53,7 +53,7 @@ "normalize.css": "8.0.1", "prop-types": "15.8.1", "qs": "6.13.0", - "react": "17.0.2", + "react": "18.3.1", "react-addons-shallow-compare": "15.6.3", "react-async-script": "1.2.0", "react-autosuggest": "10.1.0", @@ -63,7 +63,7 @@ "react-dnd-multi-backend": "6.0.2", "react-dnd-touch-backend": "14.1.1", "react-document-title": "2.0.3", - "react-dom": "17.0.2", + "react-dom": "18.3.1", "react-focus-lock": "2.9.4", "react-google-recaptcha": "2.1.0", "react-lazyload": "3.2.0", diff --git a/yarn.lock b/yarn.lock index 923b7ff39..a08388e6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1464,10 +1464,10 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451" integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA== -"@types/react-dom@18.2.25": - version "18.2.25" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.25.tgz#2946a30081f53e7c8d585eb138277245caedc521" - integrity sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA== +"@types/react-dom@18.3.1": + version "18.3.1" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.1.tgz#1e4654c08a9cdcfb6594c780ac59b55aad42fe07" + integrity sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ== dependencies: "@types/react" "*" @@ -1527,10 +1527,10 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/react@18.2.79": - version "18.2.79" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.79.tgz#c40efb4f255711f554d47b449f796d1c7756d865" - integrity sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w== +"@types/react@18.3.12": + version "18.3.12" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60" + integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -5568,14 +5568,13 @@ react-document-title@2.0.3: prop-types "^15.5.6" react-side-effect "^1.0.2" -react-dom@17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.2" react-focus-lock@2.9.4: version "2.9.4" @@ -5747,13 +5746,12 @@ react-window@1.8.10: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-pkg-up@^7.0.1: version "7.0.1" @@ -6140,13 +6138,12 @@ sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" schema-utils@>1.0.0, schema-utils@^4.0.0: version "4.2.0" From 535caf13243529fb7c5b6b1cfe9f8795e7d64e6b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 17 Dec 2024 18:27:00 +0200 Subject: [PATCH 132/275] Add return type for artist/album lookup endpoint Closes #5282 --- src/Lidarr.Api.V1/Albums/AlbumLookupController.cs | 3 ++- src/Lidarr.Api.V1/Artist/ArtistLookupController.cs | 3 ++- src/Lidarr.Api.V1/Search/SearchController.cs | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Lidarr.Api.V1/Albums/AlbumLookupController.cs b/src/Lidarr.Api.V1/Albums/AlbumLookupController.cs index cd4e6b54a..e8853f611 100644 --- a/src/Lidarr.Api.V1/Albums/AlbumLookupController.cs +++ b/src/Lidarr.Api.V1/Albums/AlbumLookupController.cs @@ -20,7 +20,8 @@ namespace Lidarr.Api.V1.Albums } [HttpGet] - public object Search(string term) + [Produces("application/json")] + public IEnumerable Search(string term) { var searchResults = _searchProxy.SearchForNewAlbum(term, null); return MapToResource(searchResults).ToList(); diff --git a/src/Lidarr.Api.V1/Artist/ArtistLookupController.cs b/src/Lidarr.Api.V1/Artist/ArtistLookupController.cs index 27ff021a1..19a18a0ba 100644 --- a/src/Lidarr.Api.V1/Artist/ArtistLookupController.cs +++ b/src/Lidarr.Api.V1/Artist/ArtistLookupController.cs @@ -23,7 +23,8 @@ namespace Lidarr.Api.V1.Artist } [HttpGet] - public object Search([FromQuery] string term) + [Produces("application/json")] + public IEnumerable Search([FromQuery] string term) { var searchResults = _searchProxy.SearchForNewArtist(term); return MapToResource(searchResults).ToList(); diff --git a/src/Lidarr.Api.V1/Search/SearchController.cs b/src/Lidarr.Api.V1/Search/SearchController.cs index 9dc33066c..220afa064 100644 --- a/src/Lidarr.Api.V1/Search/SearchController.cs +++ b/src/Lidarr.Api.V1/Search/SearchController.cs @@ -24,7 +24,8 @@ namespace Lidarr.Api.V1.Search } [HttpGet] - public object Search([FromQuery] string term) + [Produces("application/json")] + public IEnumerable Search([FromQuery] string term) { var searchResults = _searchProxy.SearchForNewEntity(term); return MapToResource(searchResults).ToList(); From 41612708ff191976e36c5214eb3e96869b38683a Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 7 Dec 2024 20:45:39 -0800 Subject: [PATCH 133/275] Sync TimeSpanConverter with upstream Co-authored-by: Bogdan (cherry picked from commit 1374240321f08d1400faf95e84217e4b7a2d116b) Closes #5301 --- .../Converters/TimeSpanConverterFixture.cs | 43 +++++++++++++++++++ .../Datastore/Converters/TimeSpanConverter.cs | 23 +++++----- src/NzbDrone.Core/Datastore/TableMapping.cs | 4 +- 3 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 src/NzbDrone.Core.Test/Datastore/Converters/TimeSpanConverterFixture.cs diff --git a/src/NzbDrone.Core.Test/Datastore/Converters/TimeSpanConverterFixture.cs b/src/NzbDrone.Core.Test/Datastore/Converters/TimeSpanConverterFixture.cs new file mode 100644 index 000000000..79d0adaee --- /dev/null +++ b/src/NzbDrone.Core.Test/Datastore/Converters/TimeSpanConverterFixture.cs @@ -0,0 +1,43 @@ +using System; +using System.Data.SQLite; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Datastore.Converters; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.Datastore.Converters; + +[TestFixture] +public class TimeSpanConverterFixture : CoreTest +{ + private SQLiteParameter _param; + + [SetUp] + public void Setup() + { + _param = new SQLiteParameter(); + } + + [Test] + public void should_return_string_when_saving_timespan_to_db() + { + var span = TimeSpan.FromMilliseconds(10); + + Subject.SetValue(_param, span); + _param.Value.Should().Be(span.ToString()); + } + + [Test] + public void should_return_timespan_when_getting_string_from_db() + { + var span = TimeSpan.FromMilliseconds(10); + + Subject.Parse(span.ToString()).Should().Be(span); + } + + [Test] + public void should_return_zero_timespan_for_db_null_value_when_getting_from_db() + { + Subject.Parse(null).Should().Be(TimeSpan.Zero); + } +} diff --git a/src/NzbDrone.Core/Datastore/Converters/TimeSpanConverter.cs b/src/NzbDrone.Core/Datastore/Converters/TimeSpanConverter.cs index 902a26009..fdcb227c6 100644 --- a/src/NzbDrone.Core/Datastore/Converters/TimeSpanConverter.cs +++ b/src/NzbDrone.Core/Datastore/Converters/TimeSpanConverter.cs @@ -2,18 +2,17 @@ using System; using System.Data; using Dapper; -namespace NzbDrone.Core.Datastore.Converters -{ - public class DapperTimeSpanConverter : SqlMapper.TypeHandler - { - public override void SetValue(IDbDataParameter parameter, TimeSpan value) - { - parameter.Value = value.ToString(); - } +namespace NzbDrone.Core.Datastore.Converters; - public override TimeSpan Parse(object value) - { - return TimeSpan.Parse((string)value); - } +public class TimeSpanConverter : SqlMapper.TypeHandler +{ + public override void SetValue(IDbDataParameter parameter, TimeSpan value) + { + parameter.Value = value.ToString(); + } + + public override TimeSpan Parse(object value) + { + return value is string str ? TimeSpan.Parse(str) : TimeSpan.Zero; } } diff --git a/src/NzbDrone.Core/Datastore/TableMapping.cs b/src/NzbDrone.Core/Datastore/TableMapping.cs index df2296951..8cc4c7702 100644 --- a/src/NzbDrone.Core/Datastore/TableMapping.cs +++ b/src/NzbDrone.Core/Datastore/TableMapping.cs @@ -217,7 +217,6 @@ namespace NzbDrone.Core.Datastore SqlMapper.RemoveTypeMap(typeof(DateTime)); SqlMapper.AddTypeHandler(new DapperUtcConverter()); - SqlMapper.AddTypeHandler(new DapperTimeSpanConverter()); SqlMapper.AddTypeHandler(new DapperQualityIntConverter()); SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter>(new QualityIntConverter())); SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter>(new CustomFormatIntConverter())); @@ -241,6 +240,9 @@ namespace NzbDrone.Core.Datastore SqlMapper.RemoveTypeMap(typeof(Guid)); SqlMapper.RemoveTypeMap(typeof(Guid?)); SqlMapper.AddTypeHandler(new GuidConverter()); + SqlMapper.RemoveTypeMap(typeof(TimeSpan)); + SqlMapper.RemoveTypeMap(typeof(TimeSpan?)); + SqlMapper.AddTypeHandler(new TimeSpanConverter()); SqlMapper.AddTypeHandler(new CommandConverter()); SqlMapper.AddTypeHandler(new SystemVersionConverter()); } From fd1719e58c916f93439ee069ce60831bd2a80637 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 10 Dec 2024 19:22:58 -0800 Subject: [PATCH 134/275] Fixed: Artists without tags bypassing tags on Download Client (cherry picked from commit c0e264cfc520ee387bfc882c95a5822c655e0d9b) Fix typo about download clients comment (cherry picked from commit c39fb4fe6f0ed5e1dc2aa33f4455a4d0c760063b) Closes #5309 Closes #5318 --- .../Download/DownloadClientProvider.cs | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/NzbDrone.Core/Download/DownloadClientProvider.cs b/src/NzbDrone.Core/Download/DownloadClientProvider.cs index c6d58b1b2..314ac783b 100644 --- a/src/NzbDrone.Core/Download/DownloadClientProvider.cs +++ b/src/NzbDrone.Core/Download/DownloadClientProvider.cs @@ -38,6 +38,10 @@ namespace NzbDrone.Core.Download public IDownloadClient GetDownloadClient(DownloadProtocol downloadProtocol, int indexerId = 0, bool filterBlockedClients = false, HashSet tags = null) { + // Tags aren't required, but download clients with tags should not be picked unless there is at least one matching tag. + // Defaulting to an empty HashSet ensures this is always checked. + tags ??= new HashSet(); + var blockedProviders = new HashSet(_downloadClientStatusService.GetBlockedProviders().Select(v => v.ProviderId)); var availableProviders = _downloadClientFactory.GetAvailableProviders().Where(v => v.Protocol == downloadProtocol).ToList(); @@ -46,18 +50,15 @@ namespace NzbDrone.Core.Download return null; } - if (tags is { Count: > 0 }) + var matchingTagsClients = availableProviders.Where(i => i.Definition.Tags.Intersect(tags).Any()).ToList(); + + availableProviders = matchingTagsClients.Count > 0 ? + matchingTagsClients : + availableProviders.Where(i => i.Definition.Tags.Empty()).ToList(); + + if (!availableProviders.Any()) { - var matchingTagsClients = availableProviders.Where(i => i.Definition.Tags.Intersect(tags).Any()).ToList(); - - availableProviders = matchingTagsClients.Count > 0 ? - matchingTagsClients : - availableProviders.Where(i => i.Definition.Tags.Empty()).ToList(); - - if (!availableProviders.Any()) - { - throw new DownloadClientUnavailableException("No download client was found without tags or a matching artist tag. Please check your settings."); - } + throw new DownloadClientUnavailableException("No download client was found without tags or a matching artist tag. Please check your settings."); } if (indexerId > 0) From 119141723a776c2059eb87067c7f2f23ba2934ff Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 17 Dec 2024 16:44:57 +0000 Subject: [PATCH 135/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: GkhnGRBZ Co-authored-by: Weblate Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/el/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ro/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sv/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/th/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/vi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/cs.json | 6 +++++- src/NzbDrone.Core/Localization/Core/el.json | 6 +++++- src/NzbDrone.Core/Localization/Core/pl.json | 6 +++++- src/NzbDrone.Core/Localization/Core/ro.json | 6 +++++- src/NzbDrone.Core/Localization/Core/sv.json | 6 +++++- src/NzbDrone.Core/Localization/Core/th.json | 6 +++++- src/NzbDrone.Core/Localization/Core/tr.json | 16 ++++++++++------ src/NzbDrone.Core/Localization/Core/vi.json | 6 +++++- src/NzbDrone.Core/Localization/Core/zh_CN.json | 6 +++++- 9 files changed, 50 insertions(+), 14 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index b0b11a77f..065a121b3 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -883,5 +883,9 @@ "OnLatestVersion": "Nejnovější verze aplikace {appName} je již nainstalována", "UnmappedFiles": "Nezmapované složky", "DownloadImported": "Stahování ignorováno", - "AddDelayProfileError": "Nelze přidat nový kvalitní profil, zkuste to znovu." + "AddDelayProfileError": "Nelze přidat nový kvalitní profil, zkuste to znovu.", + "Max": "Max", + "Min": "Min", + "Preferred": "Upřednostňováno", + "Today": "Dnes" } diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index 08e161409..d99bab6d8 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -1115,5 +1115,9 @@ "OnLatestVersion": "Η τελευταία έκδοση του {appName} είναι ήδη εγκατεστημένη", "Shutdown": "ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣ", "UpdateAppDirectlyLoadError": "Δεν είναι δυνατή η απευθείας ενημέρωση του {appName},", - "AddDelayProfileError": "Δεν είναι δυνατή η προσθήκη ενός νέου προφίλ ποιότητας. Δοκιμάστε ξανά." + "AddDelayProfileError": "Δεν είναι δυνατή η προσθήκη ενός νέου προφίλ ποιότητας. Δοκιμάστε ξανά.", + "Max": "Μέγιστη", + "Preferred": "Προνομιούχος", + "Min": "Ελάχ", + "Today": "Σήμερα" } diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 80d30e945..5ac318cac 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -847,5 +847,9 @@ "UpdateAppDirectlyLoadError": "Nie można bezpośrednio zaktualizować {appName},", "UnmappedFiles": "Niezmapowane foldery", "Clone": "Zamknij", - "AddDelayProfileError": "Nie można dodać nowego profilu opóźnienia, spróbuj później." + "AddDelayProfileError": "Nie można dodać nowego profilu opóźnienia, spróbuj później.", + "Max": "Maks", + "Min": "Min", + "Preferred": "Preferowane", + "Today": "Dzisiaj" } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 83cc41168..02fade757 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -793,5 +793,9 @@ "AddReleaseProfile": "Editați profilul de întârziere", "DownloadImported": "Descărcarea ignorată", "Season": "Motiv", - "AddDelayProfileError": "Imposibil de adăugat un nou profil de calitate, încercați din nou." + "AddDelayProfileError": "Imposibil de adăugat un nou profil de calitate, încercați din nou.", + "Min": "Min", + "Preferred": "Preferat", + "Max": "Max", + "Today": "Astăzi" } diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index b95ba0d2a..6d73fbd5b 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -920,5 +920,9 @@ "MonitorMissingAlbums": "Existerande Albums", "MissingAlbums": "Existerande Albums", "DownloadImported": "Nerladdning ignorerad", - "AddDelayProfileError": "Det gick inte att lägga till en ny kvalitetsprofil. Försök igen." + "AddDelayProfileError": "Det gick inte att lägga till en ny kvalitetsprofil. Försök igen.", + "Max": "Max", + "Min": "Min", + "Preferred": "Föredraget", + "Today": "Idag" } diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index 159b23e92..5c88cd33e 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -745,5 +745,9 @@ "UnmappedFiles": "โฟลเดอร์ที่ไม่ได้แมป", "EditReleaseProfile": "แก้ไขโปรไฟล์ความล่าช้า", "Season": "เหตุผล", - "AddDelayProfileError": "ไม่สามารถเพิ่มโปรไฟล์คุณภาพใหม่ได้โปรดลองอีกครั้ง" + "AddDelayProfileError": "ไม่สามารถเพิ่มโปรไฟล์คุณภาพใหม่ได้โปรดลองอีกครั้ง", + "Max": "สูงสุด", + "Min": "นาที", + "Preferred": "ที่ต้องการ", + "Today": "วันนี้" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 841e8e6fe..b678875e5 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -453,7 +453,7 @@ "UnmappedFilesOnly": "Yalnızca Eşlenmemiş Dosyalar", "Activity": "Etkinlik", "Add": "Ekle", - "AddDelayProfile": "Gecikme Profili Ekleme", + "AddDelayProfile": "Gecikme Profili Ekle", "Replace": "Değiştir", "RestartRequiredHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir", "ShowAdvanced": "Gelişmiş'i Göster", @@ -520,13 +520,13 @@ "OnlyTorrent": "Sadece Torrent", "OnlyUsenet": "Sadece Usenet", "Organize": "Düzenle", - "OutputPath": "Çıkış yolu", + "OutputPath": "İndirilen Yol", "Peers": "Eşler", "PreferAndUpgrade": "Tercih Et ve Yükselt", "Presets": "Ön ayarlar", "QualityLimitsHelpText": "Sınırlar, film çalışma süresine göre otomatik olarak ayarlanır.", "RejectionCount": "Reddetme Sayısı", - "ReleaseTitle": "Yayin Başlığı", + "ReleaseTitle": "Yayın Başlığı", "Renamed": "Yeniden adlandırıldı", "RestoreBackupAdditionalInfo": "Not: {appName}, geri yükleme işlemi sırasında kullanıcı arayüzünü otomatik olarak yeniden başlatacak ve yeniden yükleyecektir.", "Save": "Kaydet", @@ -814,7 +814,7 @@ "DownloadClientAriaSettingsDirectoryHelpText": "İndirilenlerin yerleştirileceği isteğe bağlı konum, varsayılan Aria2 konumunu kullanmak için boş bırakın", "Database": "Veri tabanı", "DeleteRootFolder": "Kök Klasörü Sil", - "RegularExpressionsCanBeTested": "Düzenli ifadeler [burada]({url}) test edilebilir.", + "RegularExpressionsCanBeTested": "Düzenli ifadeler [burada](http://regexstorm.net/tester) test edilebilir.", "AutoTaggingSpecificationTag": "Etiket", "DoNotBlocklistHint": "Engellenenler listesine eklemeden kaldır", "DownloadClientDelugeSettingsDirectory": "İndirme Dizini", @@ -943,7 +943,7 @@ "RemoveTagsAutomatically": "Otomatik Etiketlemeyi Kaldır", "Started": "Başlatıldı", "RemoveFailedDownloads": "Başarısız İndirmeleri Kaldır", - "RegularExpressionsTutorialLink": "Düzenli ifadeler hakkında daha fazla ayrıntı [burada]({url}) bulunabilir.", + "RegularExpressionsTutorialLink": "Düzenli ifadeler hakkında daha fazla ayrıntıyı [burada](https://www.regular-expressions.info/tutorial.html) bulabilirsiniz.", "SelectReleaseGroup": "Yayımlama Grubunu Seçin", "QueueFilterHasNoItems": "Seçilen kuyruk filtresinde hiç öğe yok", "NotificationsSettingsUpdateMapPathsFrom": "Harita Yolları", @@ -1073,5 +1073,9 @@ "ExpandOtherByDefaultHelpText": "Diğer", "ImportListTagsHelpText": "Etiketler listesi öğeleri eklenecek", "SceneNumberHasntBeenVerifiedYet": "Sahne numarası henüz doğrulanmadı", - "StatusEndedContinuing": "Devam Ediyor" + "StatusEndedContinuing": "Devam Ediyor", + "Max": "Max", + "Preferred": "Tercihli", + "Today": "Bugün", + "Min": "Min" } diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index 5dec882a5..dfda4c95e 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -782,5 +782,9 @@ "Season": "Lý do", "AddReleaseProfile": "Chỉnh sửa hồ sơ độ trễ", "EditConnectionImplementation": "Thêm điều kiện - {implementationName}", - "AddDelayProfileError": "Không thể thêm hồ sơ chất lượng mới, vui lòng thử lại." + "AddDelayProfileError": "Không thể thêm hồ sơ chất lượng mới, vui lòng thử lại.", + "Max": "Max", + "Min": "Min", + "Preferred": "Ưu tiên", + "Today": "Hôm nay" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 7889efca1..a2c19697b 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -1326,5 +1326,9 @@ "InstallMajorVersionUpdateMessageLink": "请查看 [{domain}]({url}) 以获取更多信息。", "ManageFormats": "管理格式", "AddDelayProfileError": "无法添加新的延迟配置,请重试。", - "ImportListTagsHelpText": "从此列表导入时将添加标记" + "ImportListTagsHelpText": "从此列表导入时将添加标记", + "Max": "最大的", + "Min": "最小的", + "Preferred": "首选的", + "Today": "今天" } From 797e4c773e978176e9f979d4c8de7b78f1f6fde4 Mon Sep 17 00:00:00 2001 From: Stevie Robinson Date: Tue, 27 Feb 2024 05:30:58 +0000 Subject: [PATCH 136/275] Replace URLs in translations with tokens (cherry picked from commit 98d60e1a8e9abce6b31b3cdd745eff0fed181458) --- .../Components/FileBrowser/FileBrowserModalContent.js | 4 ++-- .../Specifications/EditSpecificationModalContent.js | 11 ++++++----- .../Specifications/EditSpecificationModalContent.js | 4 ++-- src/NzbDrone.Core/Localization/Core/ca.json | 2 +- src/NzbDrone.Core/Localization/Core/da.json | 2 +- src/NzbDrone.Core/Localization/Core/de.json | 4 ++-- src/NzbDrone.Core/Localization/Core/en.json | 5 +++-- src/NzbDrone.Core/Localization/Core/es.json | 4 ++-- src/NzbDrone.Core/Localization/Core/fi.json | 4 ++-- src/NzbDrone.Core/Localization/Core/fr.json | 4 ++-- src/NzbDrone.Core/Localization/Core/hu.json | 4 ++-- src/NzbDrone.Core/Localization/Core/it.json | 2 +- src/NzbDrone.Core/Localization/Core/nl.json | 2 +- src/NzbDrone.Core/Localization/Core/pt_BR.json | 4 ++-- src/NzbDrone.Core/Localization/Core/tr.json | 4 ++-- src/NzbDrone.Core/Localization/Core/zh_CN.json | 4 ++-- 16 files changed, 33 insertions(+), 31 deletions(-) diff --git a/frontend/src/Components/FileBrowser/FileBrowserModalContent.js b/frontend/src/Components/FileBrowser/FileBrowserModalContent.js index 0e4d6a015..dff1fbf6e 100644 --- a/frontend/src/Components/FileBrowser/FileBrowserModalContent.js +++ b/frontend/src/Components/FileBrowser/FileBrowserModalContent.js @@ -3,8 +3,8 @@ import React, { Component } from 'react'; import Alert from 'Components/Alert'; import PathInput from 'Components/Form/PathInput'; import Button from 'Components/Link/Button'; -import Link from 'Components/Link/Link'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; +import InlineMarkdown from 'Components/Markdown/InlineMarkdown'; import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; @@ -117,7 +117,7 @@ class FileBrowserModalContent extends Component { className={styles.mappedDrivesWarning} kind={kinds.WARNING} > - Mapped network drives are not available when running as a Windows Service, see the FAQ for more information. + } diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.js b/frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.js index 02a31eda7..19aae4694 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.js +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.js @@ -7,8 +7,8 @@ import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import ProviderFieldFormGroup from 'Components/Form/ProviderFieldFormGroup'; import Button from 'Components/Link/Button'; -import Link from 'Components/Link/Link'; import SpinnerErrorButton from 'Components/Link/SpinnerErrorButton'; +import InlineMarkdown from 'Components/Markdown/InlineMarkdown'; import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; @@ -52,12 +52,13 @@ function EditSpecificationModalContent(props) { fields && fields.some((x) => x.label === translate('CustomFormatsSpecificationRegularExpression')) &&
-
\\^$.|?*+()[{ have special meanings and need escaping with a \\' }} /> - {'More details'} {'Here'} +
- {'Regular expressions can be tested '} - Here + +
+
+
} diff --git a/frontend/src/Settings/Tags/AutoTagging/Specifications/EditSpecificationModalContent.js b/frontend/src/Settings/Tags/AutoTagging/Specifications/EditSpecificationModalContent.js index 2ab1e4a1c..04302729b 100644 --- a/frontend/src/Settings/Tags/AutoTagging/Specifications/EditSpecificationModalContent.js +++ b/frontend/src/Settings/Tags/AutoTagging/Specifications/EditSpecificationModalContent.js @@ -86,10 +86,10 @@ function EditSpecificationModalContent(props) {
- +
- +
} diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 141e08d94..42dce3dc6 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -905,7 +905,7 @@ "ChangeCategory": "Canvia categoria", "ChangeCategoryHint": "Canvia la baixada a la \"Categoria post-importació\" des del client de descàrrega", "ChangeCategoryMultipleHint": "Canvia les baixades a la \"Categoria post-importació\" des del client de descàrrega", - "RegularExpressionsCanBeTested": "Les expressions regulars es poden provar [aquí](http://regexstorm.net/tester).", + "RegularExpressionsCanBeTested": "Les expressions regulars es poden provar [aquí]({url}).", "CustomFormatsSpecificationRegularExpression": "Expressió regular", "BlocklistMultipleOnlyHint": "Afegeix a la llista de bloqueig sense cercar substituts", "BlocklistOnly": "Sols afegir a la llista de bloqueig", diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index ff449397c..a557dd20a 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -785,7 +785,7 @@ "Clone": "Luk", "AddReleaseProfile": "Rediger forsinkelsesprofil", "AddDelayProfileError": "Kan ikke tilføje en ny forsinkelsesprofil. Prøv igen.", - "RegularExpressionsCanBeTested": "Regulære udtryk kan testes [her](http://regexstorm.net/tester).", + "RegularExpressionsCanBeTested": "Regulære udtryk kan testes [her]({url}).", "AddToDownloadQueue": "Føj til downloadkø", "AddedToDownloadQueue": "Føjet til downloadkø" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index f4e73212f..d36ac9047 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -1016,7 +1016,7 @@ "DownloadClientPriorityHelpText": "Download-Client-Priorität von 1 (Höchste) bis 50 (Niedrigste). Standard: 1. Round-Robin wird für Clients mit der gleichen Priorität verwendet.", "IgnoreDownload": "Download ignorieren", "IgnoreDownloadHint": "Hält {appName} von der weiteren Verarbeitung dieses Downloads ab", - "RegularExpressionsCanBeTested": "Reguläre Ausdrücke können [hier](http://regexstorm.net/tester) getestet werden.", + "RegularExpressionsCanBeTested": "Reguläre Ausdrücke können [hier]({url}) getestet werden.", "CustomFormatsSettingsTriggerInfo": "Ein Eigenes Format wird auf eine Veröffentlichung oder Datei angewandt, wenn sie mindestens einer der verschiedenen ausgewählten Bedingungen entspricht.", "ConnectionSettingsUrlBaseHelpText": "Fügt ein Präfix zur {connectionName} URL hinzu, z. B. {url}", "DownloadClientDelugeSettingsDirectory": "Download Verzeichnis", @@ -1043,7 +1043,7 @@ "MonitorFutureAlbums": "Zukünftige Alben", "Negated": "Negiert", "OverviewOptions": "Überblick-Optionen", - "RegularExpressionsTutorialLink": "Weitere Details zu regulären Ausdrücken finden Sie [hier](https://www.regular-expressions.info/tutorial.html).", + "RegularExpressionsTutorialLink": "Weitere Details zu regulären Ausdrücken finden Sie [hier]({url}).", "UseSsl": "SSL verwenden", "DownloadClientsSettingsSummary": "Download Clients, Download-Verwaltung und Remote-Pfadzuordnungen", "EditConditionImplementation": "Bedingung bearbeiten - {implementationName}", diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 91ef5f5aa..1c3ec897b 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -701,6 +701,7 @@ "Manual": "Manual", "ManualDownload": "Manual Download", "ManualImport": "Manual Import", + "MappedNetworkDrivesWindowsService": "Mapped network drives are not available when running as a Windows Service, see the [FAQ]({url}) for more information.", "MarkAsFailed": "Mark as Failed", "MarkAsFailedMessageText": "Are you sure you want to mark '{0}' as failed?", "MassAlbumsCutoffUnmetWarning": "Are you sure you want to search for all '{0}' Cutoff Unmet albums?", @@ -954,8 +955,8 @@ "RefreshArtist": "Refresh Artist", "RefreshInformationAndScanDisk": "Refresh information and scan disk", "RefreshScan": "Refresh & Scan", - "RegularExpressionsCanBeTested": "Regular expressions can be tested [here](http://regexstorm.net/tester).", - "RegularExpressionsTutorialLink": "More details on regular expressions can be found [here](https://www.regular-expressions.info/tutorial.html).", + "RegularExpressionsCanBeTested": "Regular expressions can be tested [here]({url}).", + "RegularExpressionsTutorialLink": "More details on regular expressions can be found [here]({url}).", "RejectionCount": "Rejection Count", "Rejections": "Rejections", "Release": " Release", diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 6ed8dc2cd..c9810235b 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -1066,7 +1066,7 @@ "WriteMetadataTags": "Escribir etiquetas de metadatos", "FutureDays": "Días futuros", "IsExpandedHideFileInfo": "Esconder información de archivo", - "RegularExpressionsCanBeTested": "Las expresiones regulares pueden ser probadas [aquí](http://regexstorm.net/tester).", + "RegularExpressionsCanBeTested": "Las expresiones regulares pueden ser probadas [aquí]({url}).", "WatchRootFoldersForFileChanges": "Supervisar las carpetas raíz para cambios de archivos", "DeleteMetadataProfile": "Eliminar el perfil de metadatos", "IndexerIdHelpTextWarning": "Usar un indexador específico con palabras preferidas puede provocar que se capturen lanzamientos duplicados", @@ -1096,7 +1096,7 @@ "PreviewRetag": "Vista previa de reetiquetado", "EntityName": "Nombre de entidad", "ExistingTagsScrubbed": "Etiquetas existentes borradas", - "RegularExpressionsTutorialLink": "Más detalles de las expresiones regulares pueden ser encontrados [aquí](https://www.regular-expressions.info/tutorial.html).", + "RegularExpressionsTutorialLink": "Más detalles de las expresiones regulares pueden ser encontrados [aquí]({url}).", "OnDownloadFailure": "En fallo de descarga", "DiscNumber": "Número de disco", "EditMetadata": "Editar metadatos", diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 5860b4374..c10f01a1c 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -1067,7 +1067,7 @@ "ImportListRootFolderMissingRootHealthCheckMessage": "Tuontilistalta tai -listoilta puuttuu juurikansio: {0}.", "HiddenClickToShow": "Piilotettu, näytä painamalla tästä", "Dash": "Yhdysmerkki", - "RegularExpressionsCanBeTested": "Säännöllisiä lausekkeita voidaan testata [täällä](http://regexstorm.net/tester).", + "RegularExpressionsCanBeTested": "Säännöllisiä lausekkeita voidaan testata [täällä]({url}).", "MonitorArtists": "Valvo esittäjiä", "ChooseImportMethod": "Valitse tuontitapa", "NoCutoffUnmetItems": "Katkaisutasoa saavuttamattomia kohteita ei ole.", @@ -1089,7 +1089,7 @@ "RootFolderPathHelpText": "Juurikansio, johon listan kohteet lisätään.", "Space": "Välilyönti", "Underscore": "Alaviiva", - "RegularExpressionsTutorialLink": "Lisätietoja säännöllisistä lausekkeista löytyy [täältä](https://www.regular-expressions.info/tutorial.html).", + "RegularExpressionsTutorialLink": "Lisätietoja säännöllisistä lausekkeista löytyy [täältä]({url}).", "RootFolderCheckSingleMessage": "Juurikansio puuttuu: {0}.", "UpdateCheckStartupTranslocationMessage": "Päivitystä ei voida asentaa, koska käynnistyskansio \"{0}\" sijaitsee \"App Translocation\" -kansiossa.", "RemovingTag": "Tunniste poistetaan", diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index e373b22e8..41603ccf9 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -1098,7 +1098,7 @@ "AddCondition": "Ajouter une condition", "AddConditionError": "Impossible d'ajouter une nouvelle condition, veuillez réessayer.", "QueueFilterHasNoItems": "Le filtre de file d'attente sélectionné ne contient aucun élément", - "RegularExpressionsTutorialLink": "Vous trouverez plus de détails sur les expressions régulières [ici](https://www.regular-expressions.info/tutorial.html).", + "RegularExpressionsTutorialLink": "Vous trouverez plus de détails sur les expressions régulières [ici]({url}).", "ReleaseProfile": "Profil de version", "RenameFiles": "Renommer les fichiers", "AutoTagging": "Balisage automatique", @@ -1118,7 +1118,7 @@ "EditAutoTag": "Modifier la balise automatique", "Negate": "Nier", "OverviewOptions": "Options de présentation", - "RegularExpressionsCanBeTested": "Les expressions régulières peuvent être testées [ici](http://regexstorm.net/tester).", + "RegularExpressionsCanBeTested": "Les expressions régulières peuvent être testées [ici]({url}).", "DownloadClientQbittorrentSettingsContentLayout": "Disposition du contenu", "NoLimitForAnyDuration": "Aucune limite pour aucune durée d'exécution", "NoMinimumForAnyDuration": "Aucun minimum pour aucune durée d'exécution", diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index ea5499860..a6e8199b1 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -1005,7 +1005,7 @@ "Negate": "Negatív", "NoResultsFound": "Nincs találat", "RecentChanges": "Friss változások", - "RegularExpressionsCanBeTested": "A reguláris kifejezések [here] tesztelhetők (http://regexstorm.net/tester).", + "RegularExpressionsCanBeTested": "A reguláris kifejezések [here] tesztelhetők ({url}).", "EditConnectionImplementation": "Kapcsolat szerkesztése - {implementationName}", "ExtraFileExtensionsHelpTextsExamples": "Példák: \".sub, .nfo\" vagy \"sub,nfo\"", "ConnectionLostReconnect": "A(z) {appName} automatikusan megpróbál csatlakozni, vagy kattintson az újratöltés gombra lent.", @@ -1101,7 +1101,7 @@ "MinimumCustomFormatScoreHelpText": "Minimális egyéni formátum pontszám a preferált protokoll késleltetésének megkerüléséhez", "RemoveFromDownloadClientHint": "Távolítsa el a letöltést és a fájlokat) a letöltési kliensből", "RemoveQueueItemsRemovalMethodHelpTextWarning": "Az „Eltávolítás a letöltési kliensből” eltávolítja a letöltéseket és a fájlokat a letöltési kliensből.", - "RegularExpressionsTutorialLink": "További részletek a reguláris kifejezésekről [itt](https://www.regular-expressions.info/tutorial.html).", + "RegularExpressionsTutorialLink": "További részletek a reguláris kifejezésekről [itt]({url}).", "QueueFilterHasNoItems": "A kiválasztott sorszűrőben nincsenek elemek", "PosterOptions": "Poszter opciók", "Posters": "Poszterek", diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index a5ffc2acc..7855e262e 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -881,7 +881,7 @@ "ArtistIndexFooterDownloading": "Scaricando", "KeyboardShortcuts": "Scorciatoie Tastiera", "Links": "Collegamenti", - "RegularExpressionsCanBeTested": "Le espressioni regolari possono essere testate [qui](http://regexstorm.net/tester).", + "RegularExpressionsCanBeTested": "Le espressioni regolari possono essere testate [qui]({url}).", "AddListExclusion": "Aggiungi elenco esclusioni", "AddToDownloadQueue": "Aggiungi alla coda di download", "AddedToDownloadQueue": "Aggiunto alla coda di download", diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index 98588964a..cba23376a 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -840,7 +840,7 @@ "FormatAgeMinutes": "minuten", "ClearBlocklistMessageText": "Weet je zeker dat je de blokkeerlijst wil legen?", "ChangeCategory": "Verander categorie", - "RegularExpressionsCanBeTested": "Reguliere expressies kunnen [hier] worden getest (http:://regexstorm.net/tester).", + "RegularExpressionsCanBeTested": "Reguliere expressies kunnen [hier] worden getest ({url}).", "AutomaticUpdatesDisabledDocker": "Automatische updates zijn niet ondersteund wanneer je het docker update mechanisme gebruikt. Je dient de container image up te daten buiten {appName} om of een script te gebruiken", "ChownGroup": "chown groep", "AddAlbumWithTitle": "Toevoegen", diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 3dba2f712..ace24dc09 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -1106,8 +1106,8 @@ "UpdateFiltered": "Atualização Filtrada", "ConditionUsingRegularExpressions": "Esta condição corresponde ao uso de Expressões Regulares. Observe que os caracteres `\\^$.|?*+()[{` têm significados especiais e precisam de escape com um `\\`", "ImportList": "Importar lista", - "RegularExpressionsCanBeTested": "Expressões regulares podem ser testadas [aqui](http://regexstorm.net/tester).", - "RegularExpressionsTutorialLink": "Mais detalhes sobre expressões regulares podem ser encontrados [aqui](https://www.regular-expressions.info/tutorial.html).", + "RegularExpressionsCanBeTested": "Expressões regulares podem ser testadas [aqui]({url}).", + "RegularExpressionsTutorialLink": "Mais detalhes sobre expressões regulares podem ser encontrados [aqui]({url}).", "AddAutoTag": "Adicionar etiqueta automática", "AddAutoTagError": "Não foi possível adicionar uma nova etiqueta automática, tente novamente.", "AutoTaggingNegateHelpText": "Se marcada, a regra de etiquetas automáticas não será aplicada se corresponder à condição {implementationName}.", diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index b678875e5..5d9d86d2e 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -814,7 +814,7 @@ "DownloadClientAriaSettingsDirectoryHelpText": "İndirilenlerin yerleştirileceği isteğe bağlı konum, varsayılan Aria2 konumunu kullanmak için boş bırakın", "Database": "Veri tabanı", "DeleteRootFolder": "Kök Klasörü Sil", - "RegularExpressionsCanBeTested": "Düzenli ifadeler [burada](http://regexstorm.net/tester) test edilebilir.", + "RegularExpressionsCanBeTested": "Düzenli ifadeler [burada]({url}) test edilebilir.", "AutoTaggingSpecificationTag": "Etiket", "DoNotBlocklistHint": "Engellenenler listesine eklemeden kaldır", "DownloadClientDelugeSettingsDirectory": "İndirme Dizini", @@ -943,7 +943,7 @@ "RemoveTagsAutomatically": "Otomatik Etiketlemeyi Kaldır", "Started": "Başlatıldı", "RemoveFailedDownloads": "Başarısız İndirmeleri Kaldır", - "RegularExpressionsTutorialLink": "Düzenli ifadeler hakkında daha fazla ayrıntıyı [burada](https://www.regular-expressions.info/tutorial.html) bulabilirsiniz.", + "RegularExpressionsTutorialLink": "Düzenli ifadeler hakkında daha fazla ayrıntıyı [burada]({url}) bulabilirsiniz.", "SelectReleaseGroup": "Yayımlama Grubunu Seçin", "QueueFilterHasNoItems": "Seçilen kuyruk filtresinde hiç öğe yok", "NotificationsSettingsUpdateMapPathsFrom": "Harita Yolları", diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index a2c19697b..5f58a179d 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -1092,7 +1092,7 @@ "Large": "大", "Negate": "反选", "QueueFilterHasNoItems": "所选的队列过滤器中无项目", - "RegularExpressionsCanBeTested": "正则表达式可在 [此处](http://regexstorm.net/tester) 测试。", + "RegularExpressionsCanBeTested": "正则表达式可在 [此处]({url}) 测试。", "ReleaseProfile": "发行配置文件", "RemoveTagsAutomatically": "自动移除标签", "RemoveTagsAutomaticallyHelpText": "如果条件不满足,则自动移除标签", @@ -1108,7 +1108,7 @@ "DeleteAutoTag": "删除自动标签", "ImportList": "导入列表", "MonitorArtists": "监控歌手", - "RegularExpressionsTutorialLink": "有关正则表达式的更多详细信息,请参阅[此处](https://www.regular-expressions.info/tutorial.html)。", + "RegularExpressionsTutorialLink": "有关正则表达式的更多详细信息,请参阅[此处]({url})。", "DeleteArtistFolderHelpText": "删除站点文件夹及其内容", "DeleteArtistFoldersHelpText": "删除剧集文件夹及其所含文件", "DeleteAutoTagHelpText": "您确定要删除 “{name}” 自动标签吗?", From bc6df548fca5b108ef59cee9598e3a91e50b61ec Mon Sep 17 00:00:00 2001 From: Servarr Date: Tue, 17 Dec 2024 17:07:25 +0000 Subject: [PATCH 137/275] Automated API Docs update --- src/Lidarr.Api.V1/openapi.json | 56 ++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index c92dfe454..a940258aa 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -327,7 +327,17 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AlbumResource" + } + } + } + } } } } @@ -620,7 +630,17 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ArtistResource" + } + } + } + } } } } @@ -7292,7 +7312,17 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SearchResource" + } + } + } + } } } } @@ -12397,6 +12427,26 @@ ], "type": "string" }, + "SearchResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "foreignId": { + "type": "string", + "nullable": true + }, + "artist": { + "$ref": "#/components/schemas/ArtistResource" + }, + "album": { + "$ref": "#/components/schemas/AlbumResource" + } + }, + "additionalProperties": false + }, "SecondaryAlbumType": { "type": "object", "properties": { From 78469a96c980fd196d3c0a0496964ecc4187a4a9 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 21 Dec 2024 15:33:49 +0200 Subject: [PATCH 138/275] Bump MailKit to 4.8.0 and Microsoft.Data.SqlClient to 2.1.7 Closes #5332 --- src/NzbDrone.Core/Lidarr.Core.csproj | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Lidarr.Core.csproj b/src/NzbDrone.Core/Lidarr.Core.csproj index b96f564c9..1793052d6 100644 --- a/src/NzbDrone.Core/Lidarr.Core.csproj +++ b/src/NzbDrone.Core/Lidarr.Core.csproj @@ -5,18 +5,20 @@ + + - + + - @@ -26,7 +28,6 @@ - From e420ee06459d1aef7eb1eeefada6b7d41a5a61f0 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 21 Dec 2024 15:39:06 +0200 Subject: [PATCH 139/275] Bump NLog, IPAddressRange, Polly, ImageSharp, Npgsql, System.Memory and Ical.Net Closes #5333 --- src/Lidarr.Api.V1/Lidarr.Api.V1.csproj | 4 ++-- src/Lidarr.Http/Lidarr.Http.csproj | 2 +- src/NzbDrone.Common/Lidarr.Common.csproj | 6 +++--- src/NzbDrone.Core/Lidarr.Core.csproj | 12 ++++++------ src/NzbDrone.Mono/Lidarr.Mono.csproj | 2 +- src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj | 2 +- src/NzbDrone.Update/Lidarr.Update.csproj | 2 +- src/NzbDrone.Windows/Lidarr.Windows.csproj | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj b/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj index 7ad7f394f..b501c694b 100644 --- a/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj +++ b/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/src/Lidarr.Http/Lidarr.Http.csproj b/src/Lidarr.Http/Lidarr.Http.csproj index 180b3d08f..5164642dc 100644 --- a/src/Lidarr.Http/Lidarr.Http.csproj +++ b/src/Lidarr.Http/Lidarr.Http.csproj @@ -5,7 +5,7 @@ - + diff --git a/src/NzbDrone.Common/Lidarr.Common.csproj b/src/NzbDrone.Common/Lidarr.Common.csproj index 10870072d..1fd93ffdb 100644 --- a/src/NzbDrone.Common/Lidarr.Common.csproj +++ b/src/NzbDrone.Common/Lidarr.Common.csproj @@ -6,12 +6,12 @@ - + - + - + diff --git a/src/NzbDrone.Core/Lidarr.Core.csproj b/src/NzbDrone.Core/Lidarr.Core.csproj index 1793052d6..54543b035 100644 --- a/src/NzbDrone.Core/Lidarr.Core.csproj +++ b/src/NzbDrone.Core/Lidarr.Core.csproj @@ -7,9 +7,9 @@ - + - + @@ -20,14 +20,14 @@ - - + + - + - + diff --git a/src/NzbDrone.Mono/Lidarr.Mono.csproj b/src/NzbDrone.Mono/Lidarr.Mono.csproj index 58a854266..73a45be81 100644 --- a/src/NzbDrone.Mono/Lidarr.Mono.csproj +++ b/src/NzbDrone.Mono/Lidarr.Mono.csproj @@ -4,7 +4,7 @@ true - + diff --git a/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj b/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj index be32c0129..704b7b0df 100644 --- a/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj +++ b/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/NzbDrone.Update/Lidarr.Update.csproj b/src/NzbDrone.Update/Lidarr.Update.csproj index 84c50115a..d2d84022e 100644 --- a/src/NzbDrone.Update/Lidarr.Update.csproj +++ b/src/NzbDrone.Update/Lidarr.Update.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/NzbDrone.Windows/Lidarr.Windows.csproj b/src/NzbDrone.Windows/Lidarr.Windows.csproj index f6ed590d0..7f41c9233 100644 --- a/src/NzbDrone.Windows/Lidarr.Windows.csproj +++ b/src/NzbDrone.Windows/Lidarr.Windows.csproj @@ -4,7 +4,7 @@ true - + From 19c2994ff311aa6bb7e2eb8fe214970f98c3d6a5 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 21 Dec 2024 16:08:38 +0200 Subject: [PATCH 140/275] Skip spotify mapping tests --- .../ImportListTests/Spotify/SpotifyMappingFixture.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/ImportListTests/Spotify/SpotifyMappingFixture.cs b/src/NzbDrone.Core.Test/ImportListTests/Spotify/SpotifyMappingFixture.cs index 4a2910445..83c8b720f 100644 --- a/src/NzbDrone.Core.Test/ImportListTests/Spotify/SpotifyMappingFixture.cs +++ b/src/NzbDrone.Core.Test/ImportListTests/Spotify/SpotifyMappingFixture.cs @@ -80,7 +80,7 @@ namespace NzbDrone.Core.Test.ImportListTests } [Test] - [Ignore("Pending mapping fixes", Until = "2024-12-20 00:00:00Z")] + [Ignore("Pending mapping fixes", Until = "2025-04-20 00:00:00Z")] public void map_artist_should_work() { UseRealHttp(); @@ -159,7 +159,7 @@ namespace NzbDrone.Core.Test.ImportListTests } [Test] - [Ignore("Pending mapping fixes", Until = "2024-12-20 00:00:00Z")] + [Ignore("Pending mapping fixes", Until = "2025-04-20 00:00:00Z")] public void map_album_should_work() { UseRealHttp(); From babdf102730557452e966ee96253d564f4c6ac21 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 22 Dec 2024 13:26:41 +0200 Subject: [PATCH 141/275] Bump version to 2.9.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 3e2698acc..225e8bf2f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.9.0' + majorVersion: '2.9.1' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 166f87ae6861d8cadbc9caf61e76d90616aee765 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 10 Oct 2024 21:15:27 +0300 Subject: [PATCH 142/275] Include exception message in LidarrAPI failure message (cherry picked from commit 1e89a1a3cb8fa83e4415b047513cbecacbebc59c) Closes #5176 --- frontend/src/Search/AddNewItem.js | 4 +++- src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/frontend/src/Search/AddNewItem.js b/frontend/src/Search/AddNewItem.js index 5ec065149..e335ef4c2 100644 --- a/frontend/src/Search/AddNewItem.js +++ b/frontend/src/Search/AddNewItem.js @@ -1,5 +1,6 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import TextInput from 'Components/Form/TextInput'; import Icon from 'Components/Icon'; import Button from 'Components/Link/Button'; @@ -130,7 +131,8 @@ class AddNewItem extends Component {
{translate('FailedLoadingSearchResults')}
-
{getErrorMessage(error)}
+ + {getErrorMessage(error)} : null } diff --git a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs index 726c383f6..a197e0e18 100644 --- a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs +++ b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs @@ -228,17 +228,17 @@ namespace NzbDrone.Core.MetadataSource.SkyHook catch (HttpException ex) { _logger.Warn(ex); - throw new SkyHookException("Search for '{0}' failed. Unable to communicate with LidarrAPI.", ex, title); + throw new SkyHookException("Search for '{0}' failed. Unable to communicate with LidarrAPI. {1}", ex, title, ex.Message); } catch (WebException ex) { _logger.Warn(ex); - throw new SkyHookException("Search for '{0}' failed. Unable to communicate with LidarrAPI.", ex, title, ex.Message); + throw new SkyHookException("Search for '{0}' failed. Unable to communicate with LidarrAPI. {1}", ex, title, ex.Message); } catch (Exception ex) { - _logger.Warn(ex, ex.Message); - throw new SkyHookException("Search for '{0}' failed. Invalid response received from LidarrAPI.", ex, title); + _logger.Warn(ex); + throw new SkyHookException("Search for '{0}' failed. Invalid response received from LidarrAPI. {1}", ex, title, ex.Message); } } From 7255126af5559cd00aa25d946af4be93387196f5 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 15 Nov 2024 04:59:25 +0200 Subject: [PATCH 143/275] New: Labels support for Transmission 4.0 (cherry picked from commit 675e3cd38a14ea33c27f2d66a4be2bf802e17d88) --- .../TransmissionTests/TransmissionFixture.cs | 10 +- .../TransmissionFixtureBase.cs | 5 +- .../Clients/Transmission/Transmission.cs | 48 ++++++- .../Clients/Transmission/TransmissionBase.cs | 62 ++++++--- .../Clients/Transmission/TransmissionProxy.cs | 123 +++++++++++++----- .../Transmission/TransmissionSettings.cs | 12 +- .../Transmission/TransmissionTorrent.cs | 4 + .../Download/Clients/Vuze/Vuze.cs | 5 +- 8 files changed, 201 insertions(+), 68 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/TransmissionTests/TransmissionFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/TransmissionTests/TransmissionFixture.cs index 47e916a32..d7028e611 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/TransmissionTests/TransmissionFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/TransmissionTests/TransmissionFixture.cs @@ -13,6 +13,14 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests [TestFixture] public class TransmissionFixture : TransmissionFixtureBase { + [SetUp] + public void Setup_Transmission() + { + Mocker.GetMock() + .Setup(v => v.GetClientVersion(It.IsAny(), It.IsAny())) + .Returns("4.0.6"); + } + [Test] public void queued_item_should_have_required_properties() { @@ -272,7 +280,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests public void should_only_check_version_number(string version) { Mocker.GetMock() - .Setup(s => s.GetClientVersion(It.IsAny())) + .Setup(s => s.GetClientVersion(It.IsAny(), true)) .Returns(version); Subject.Test().IsValid.Should().BeTrue(); diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/TransmissionTests/TransmissionFixtureBase.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/TransmissionTests/TransmissionFixtureBase.cs index 5b1b5aac0..a11375d98 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/TransmissionTests/TransmissionFixtureBase.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/TransmissionTests/TransmissionFixtureBase.cs @@ -29,7 +29,8 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests Host = "127.0.0.1", Port = 2222, Username = "admin", - Password = "pass" + Password = "pass", + MusicCategory = "" }; Subject.Definition = new DownloadClientDefinition(); @@ -152,7 +153,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests } Mocker.GetMock() - .Setup(s => s.GetTorrents(It.IsAny())) + .Setup(s => s.GetTorrents(null, It.IsAny())) .Returns(torrents); } diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/Transmission.cs b/src/NzbDrone.Core/Download/Clients/Transmission/Transmission.cs index bf4dd8c29..88fdb0f41 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/Transmission.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/Transmission.cs @@ -1,8 +1,10 @@ using System; +using System.Linq; using System.Text.RegularExpressions; using FluentValidation.Results; using NLog; using NzbDrone.Common.Disk; +using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Core.Blocklisting; using NzbDrone.Core.Configuration; @@ -13,6 +15,9 @@ namespace NzbDrone.Core.Download.Clients.Transmission { public class Transmission : TransmissionBase { + public override string Name => "Transmission"; + public override bool SupportsLabels => HasClientVersion(4, 0); + public Transmission(ITransmissionProxy proxy, ITorrentFileInfoReader torrentFileInfoReader, IHttpClient httpClient, @@ -25,9 +30,48 @@ namespace NzbDrone.Core.Download.Clients.Transmission { } + public override void MarkItemAsImported(DownloadClientItem downloadClientItem) + { + if (!SupportsLabels) + { + throw new NotSupportedException($"{Name} does not support marking items as imported"); + } + + // set post-import category + if (Settings.MusicImportedCategory.IsNotNullOrWhiteSpace() && + Settings.MusicImportedCategory != Settings.MusicCategory) + { + var hash = downloadClientItem.DownloadId.ToLowerInvariant(); + var torrent = _proxy.GetTorrents(new[] { hash }, Settings).FirstOrDefault(); + + if (torrent == null) + { + _logger.Warn("Could not find torrent with hash \"{0}\" in Transmission.", hash); + return; + } + + try + { + var labels = torrent.Labels.ToHashSet(StringComparer.InvariantCultureIgnoreCase); + labels.Add(Settings.MusicImportedCategory); + + if (Settings.MusicCategory.IsNotNullOrWhiteSpace()) + { + labels.Remove(Settings.MusicCategory); + } + + _proxy.SetTorrentLabels(hash, labels, Settings); + } + catch (DownloadClientException ex) + { + _logger.Warn(ex, "Failed to set post-import torrent label \"{0}\" for {1} in Transmission.", Settings.MusicImportedCategory, downloadClientItem.Title); + } + } + } + protected override ValidationFailure ValidateVersion() { - var versionString = _proxy.GetClientVersion(Settings); + var versionString = _proxy.GetClientVersion(Settings, true); _logger.Debug("Transmission version information: {0}", versionString); @@ -41,7 +85,5 @@ namespace NzbDrone.Core.Download.Clients.Transmission return null; } - - public override string Name => "Transmission"; } } diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionBase.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionBase.cs index 9a9c95e6f..2dc9dd14e 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionBase.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionBase.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using FluentValidation.Results; using NLog; using NzbDrone.Common.Disk; @@ -17,6 +18,8 @@ namespace NzbDrone.Core.Download.Clients.Transmission { public abstract class TransmissionBase : TorrentClientBase { + public abstract bool SupportsLabels { get; } + protected readonly ITransmissionProxy _proxy; public TransmissionBase(ITransmissionProxy proxy, @@ -35,7 +38,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission public override IEnumerable GetItems() { var configFunc = new Lazy(() => _proxy.GetConfig(Settings)); - var torrents = _proxy.GetTorrents(Settings); + var torrents = _proxy.GetTorrents(null, Settings); var items = new List(); @@ -43,36 +46,45 @@ namespace NzbDrone.Core.Download.Clients.Transmission { var outputPath = new OsPath(torrent.DownloadDir); - if (Settings.MusicDirectory.IsNotNullOrWhiteSpace()) + if (Settings.MusicCategory.IsNotNullOrWhiteSpace() && SupportsLabels && torrent.Labels is { Count: > 0 }) { - if (!new OsPath(Settings.MusicDirectory).Contains(outputPath)) + if (!torrent.Labels.Contains(Settings.MusicCategory, StringComparer.InvariantCultureIgnoreCase)) { continue; } } - else if (Settings.MusicCategory.IsNotNullOrWhiteSpace()) + else { - var directories = outputPath.FullPath.Split('\\', '/'); - if (!directories.Contains(Settings.MusicCategory)) + if (Settings.MusicDirectory.IsNotNullOrWhiteSpace()) { - continue; + if (!new OsPath(Settings.MusicDirectory).Contains(outputPath)) + { + continue; + } + } + else if (Settings.MusicCategory.IsNotNullOrWhiteSpace()) + { + var directories = outputPath.FullPath.Split('\\', '/'); + if (!directories.Contains(Settings.MusicCategory)) + { + continue; + } } } outputPath = _remotePathMappingService.RemapRemoteToLocal(Settings.Host, outputPath); - var item = new DownloadClientItem(); - item.DownloadId = torrent.HashString.ToUpper(); - item.Category = Settings.MusicCategory; - item.Title = torrent.Name; - - item.DownloadClientInfo = DownloadClientItemClientInfo.FromDownloadClient(this, false); - - item.OutputPath = GetOutputPath(outputPath, torrent); - item.TotalSize = torrent.TotalSize; - item.RemainingSize = torrent.LeftUntilDone; - item.SeedRatio = torrent.DownloadedEver <= 0 ? 0 : - (double)torrent.UploadedEver / torrent.DownloadedEver; + var item = new DownloadClientItem + { + DownloadId = torrent.HashString.ToUpper(), + Category = Settings.MusicCategory, + Title = torrent.Name, + DownloadClientInfo = DownloadClientItemClientInfo.FromDownloadClient(this, Settings.MusicImportedCategory.IsNotNullOrWhiteSpace() && SupportsLabels), + OutputPath = GetOutputPath(outputPath, torrent), + TotalSize = torrent.TotalSize, + RemainingSize = torrent.LeftUntilDone, + SeedRatio = torrent.DownloadedEver <= 0 ? 0 : (double)torrent.UploadedEver / torrent.DownloadedEver + }; if (torrent.Eta >= 0) { @@ -297,7 +309,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission { try { - _proxy.GetTorrents(Settings); + _proxy.GetTorrents(null, Settings); } catch (Exception ex) { @@ -307,5 +319,15 @@ namespace NzbDrone.Core.Download.Clients.Transmission return null; } + + protected bool HasClientVersion(int major, int minor) + { + var rawVersion = _proxy.GetClientVersion(Settings); + + var versionResult = Regex.Match(rawVersion, @"(?= new Version(major, minor); + } } } diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs index 2c2334f44..f9a5054be 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs @@ -1,5 +1,8 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; +using System.Collections.ObjectModel; +using System.Linq; using System.Net; using Newtonsoft.Json.Linq; using NLog; @@ -12,15 +15,16 @@ namespace NzbDrone.Core.Download.Clients.Transmission { public interface ITransmissionProxy { - List GetTorrents(TransmissionSettings settings); + IReadOnlyCollection GetTorrents(IReadOnlyCollection hashStrings, TransmissionSettings settings); void AddTorrentFromUrl(string torrentUrl, string downloadDirectory, TransmissionSettings settings); void AddTorrentFromData(byte[] torrentData, string downloadDirectory, TransmissionSettings settings); void SetTorrentSeedingConfiguration(string hash, TorrentSeedConfiguration seedConfiguration, TransmissionSettings settings); TransmissionConfig GetConfig(TransmissionSettings settings); string GetProtocolVersion(TransmissionSettings settings); - string GetClientVersion(TransmissionSettings settings); + string GetClientVersion(TransmissionSettings settings, bool force = false); void RemoveTorrent(string hash, bool removeData, TransmissionSettings settings); void MoveTorrentToTopInQueue(string hashString, TransmissionSettings settings); + void SetTorrentLabels(string hash, IEnumerable labels, TransmissionSettings settings); } public class TransmissionProxy : ITransmissionProxy @@ -28,50 +32,66 @@ namespace NzbDrone.Core.Download.Clients.Transmission private readonly IHttpClient _httpClient; private readonly Logger _logger; - private ICached _authSessionIDCache; + private readonly ICached _authSessionIdCache; + private readonly ICached _versionCache; public TransmissionProxy(ICacheManager cacheManager, IHttpClient httpClient, Logger logger) { _httpClient = httpClient; _logger = logger; - _authSessionIDCache = cacheManager.GetCache(GetType(), "authSessionID"); + _authSessionIdCache = cacheManager.GetCache(GetType(), "authSessionID"); + _versionCache = cacheManager.GetCache(GetType(), "versions"); } - public List GetTorrents(TransmissionSettings settings) + public IReadOnlyCollection GetTorrents(IReadOnlyCollection hashStrings, TransmissionSettings settings) { - var result = GetTorrentStatus(settings); + var result = GetTorrentStatus(hashStrings, settings); - var torrents = ((JArray)result.Arguments["torrents"]).ToObject>(); + var torrents = ((JArray)result.Arguments["torrents"]).ToObject>(); return torrents; } public void AddTorrentFromUrl(string torrentUrl, string downloadDirectory, TransmissionSettings settings) { - var arguments = new Dictionary(); - arguments.Add("filename", torrentUrl); - arguments.Add("paused", settings.AddPaused); + var arguments = new Dictionary + { + { "filename", torrentUrl }, + { "paused", settings.AddPaused } + }; if (!downloadDirectory.IsNullOrWhiteSpace()) { arguments.Add("download-dir", downloadDirectory); } + if (settings.MusicCategory.IsNotNullOrWhiteSpace()) + { + arguments.Add("labels", new List { settings.MusicCategory }); + } + ProcessRequest("torrent-add", arguments, settings); } public void AddTorrentFromData(byte[] torrentData, string downloadDirectory, TransmissionSettings settings) { - var arguments = new Dictionary(); - arguments.Add("metainfo", Convert.ToBase64String(torrentData)); - arguments.Add("paused", settings.AddPaused); + var arguments = new Dictionary + { + { "metainfo", Convert.ToBase64String(torrentData) }, + { "paused", settings.AddPaused } + }; if (!downloadDirectory.IsNullOrWhiteSpace()) { arguments.Add("download-dir", downloadDirectory); } + if (settings.MusicCategory.IsNotNullOrWhiteSpace()) + { + arguments.Add("labels", new List { settings.MusicCategory }); + } + ProcessRequest("torrent-add", arguments, settings); } @@ -82,8 +102,10 @@ namespace NzbDrone.Core.Download.Clients.Transmission return; } - var arguments = new Dictionary(); - arguments.Add("ids", new[] { hash }); + var arguments = new Dictionary + { + { "ids", new List { hash } } + }; if (seedConfiguration.Ratio != null) { @@ -97,6 +119,12 @@ namespace NzbDrone.Core.Download.Clients.Transmission arguments.Add("seedIdleMode", 1); } + // Avoid extraneous request if no limits are to be set + if (arguments.All(arg => arg.Key == "ids")) + { + return; + } + ProcessRequest("torrent-set", arguments, settings); } @@ -107,11 +135,16 @@ namespace NzbDrone.Core.Download.Clients.Transmission return config.RpcVersion; } - public string GetClientVersion(TransmissionSettings settings) + public string GetClientVersion(TransmissionSettings settings, bool force = false) { - var config = GetConfig(settings); + var cacheKey = $"version:{$"{GetBaseUrl(settings)}:{settings.Password}".SHA256Hash()}"; - return config.Version; + if (force) + { + _versionCache.Remove(cacheKey); + } + + return _versionCache.Get(cacheKey, () => GetConfig(settings).Version, TimeSpan.FromHours(6)); } public TransmissionConfig GetConfig(TransmissionSettings settings) @@ -124,21 +157,36 @@ namespace NzbDrone.Core.Download.Clients.Transmission public void RemoveTorrent(string hashString, bool removeData, TransmissionSettings settings) { - var arguments = new Dictionary(); - arguments.Add("ids", new string[] { hashString }); - arguments.Add("delete-local-data", removeData); + var arguments = new Dictionary + { + { "ids", new List { hashString } }, + { "delete-local-data", removeData } + }; ProcessRequest("torrent-remove", arguments, settings); } public void MoveTorrentToTopInQueue(string hashString, TransmissionSettings settings) { - var arguments = new Dictionary(); - arguments.Add("ids", new string[] { hashString }); + var arguments = new Dictionary + { + { "ids", new List { hashString } } + }; ProcessRequest("queue-move-top", arguments, settings); } + public void SetTorrentLabels(string hash, IEnumerable labels, TransmissionSettings settings) + { + var arguments = new Dictionary + { + { "ids", new List { hash } }, + { "labels", labels.ToImmutableHashSet() } + }; + + ProcessRequest("torrent-set", arguments, settings); + } + private TransmissionResponse GetSessionVariables(TransmissionSettings settings) { // Retrieve transmission information such as the default download directory, bandwidth throttling and seed ratio. @@ -150,14 +198,9 @@ namespace NzbDrone.Core.Download.Clients.Transmission return ProcessRequest("session-stats", null, settings); } - private TransmissionResponse GetTorrentStatus(TransmissionSettings settings) - { - return GetTorrentStatus(null, settings); - } - private TransmissionResponse GetTorrentStatus(IEnumerable hashStrings, TransmissionSettings settings) { - var fields = new string[] + var fields = new List { "id", "hashString", // Unique torrent ID. Use this instead of the client id? @@ -177,11 +220,14 @@ namespace NzbDrone.Core.Download.Clients.Transmission "seedRatioMode", "seedIdleLimit", "seedIdleMode", - "fileCount" + "fileCount", + "labels" }; - var arguments = new Dictionary(); - arguments.Add("fields", fields); + var arguments = new Dictionary + { + { "fields", fields } + }; if (hashStrings != null) { @@ -193,9 +239,14 @@ namespace NzbDrone.Core.Download.Clients.Transmission return result; } + private string GetBaseUrl(TransmissionSettings settings) + { + return HttpRequestBuilder.BuildBaseUrl(settings.UseSsl, settings.Host, settings.Port, settings.UrlBase); + } + private HttpRequestBuilder BuildRequest(TransmissionSettings settings) { - var requestBuilder = new HttpRequestBuilder(settings.UseSsl, settings.Host, settings.Port, settings.UrlBase) + var requestBuilder = new HttpRequestBuilder(GetBaseUrl(settings)) .Resource("rpc") .Accept(HttpAccept.Json); @@ -210,11 +261,11 @@ namespace NzbDrone.Core.Download.Clients.Transmission { var authKey = string.Format("{0}:{1}", requestBuilder.BaseUrl, settings.Password); - var sessionId = _authSessionIDCache.Find(authKey); + var sessionId = _authSessionIdCache.Find(authKey); if (sessionId == null || reauthenticate) { - _authSessionIDCache.Remove(authKey); + _authSessionIdCache.Remove(authKey); var authLoginRequest = BuildRequest(settings).Build(); authLoginRequest.SuppressHttpError = true; @@ -242,7 +293,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission _logger.Debug("Transmission authentication succeeded."); - _authSessionIDCache.Set(authKey, sessionId); + _authSessionIdCache.Set(authKey, sessionId); } requestBuilder.SetHeader("X-Transmission-Session-Id", sessionId); diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs index 0ff781998..49293822d 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs @@ -33,6 +33,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission Host = "localhost"; Port = 9091; UrlBase = "/transmission/"; + MusicCategory = "lidarr"; } [FieldDefinition(0, Label = "Host", Type = FieldType.Textbox)] @@ -56,16 +57,19 @@ namespace NzbDrone.Core.Download.Clients.Transmission [FieldDefinition(6, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Lidarr avoids conflicts with unrelated downloads, but it's optional. Creates a [category] subdirectory in the output directory.")] public string MusicCategory { get; set; } - [FieldDefinition(7, Label = "Directory", Type = FieldType.Textbox, Advanced = true, HelpText = "Optional location to put downloads in, leave blank to use the default Transmission location")] + [FieldDefinition(7, Label = "PostImportCategory", Type = FieldType.Textbox, Advanced = true, HelpText = "DownloadClientSettingsPostImportCategoryHelpText")] + public string MusicImportedCategory { get; set; } + + [FieldDefinition(8, Label = "Directory", Type = FieldType.Textbox, Advanced = true, HelpText = "Optional location to put downloads in, leave blank to use the default Transmission location")] public string MusicDirectory { get; set; } - [FieldDefinition(8, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] + [FieldDefinition(9, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] public int RecentMusicPriority { get; set; } - [FieldDefinition(9, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] + [FieldDefinition(10, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] public int OlderMusicPriority { get; set; } - [FieldDefinition(10, Label = "Add Paused", Type = FieldType.Checkbox)] + [FieldDefinition(11, Label = "Add Paused", Type = FieldType.Checkbox)] public bool AddPaused { get; set; } public NzbDroneValidationResult Validate() diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionTorrent.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionTorrent.cs index 9e97b94bc..2bd9f14c9 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionTorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionTorrent.cs @@ -1,3 +1,6 @@ +using System; +using System.Collections.Generic; + namespace NzbDrone.Core.Download.Clients.Transmission { public class TransmissionTorrent @@ -9,6 +12,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission public long TotalSize { get; set; } public long LeftUntilDone { get; set; } public bool IsFinished { get; set; } + public IReadOnlyCollection Labels { get; set; } = Array.Empty(); public long Eta { get; set; } public TransmissionTorrentStatus Status { get; set; } public long SecondsDownloading { get; set; } diff --git a/src/NzbDrone.Core/Download/Clients/Vuze/Vuze.cs b/src/NzbDrone.Core/Download/Clients/Vuze/Vuze.cs index 5ee5d6206..9f5897495 100644 --- a/src/NzbDrone.Core/Download/Clients/Vuze/Vuze.cs +++ b/src/NzbDrone.Core/Download/Clients/Vuze/Vuze.cs @@ -14,6 +14,9 @@ namespace NzbDrone.Core.Download.Clients.Vuze { private const int MINIMUM_SUPPORTED_PROTOCOL_VERSION = 14; + public override string Name => "Vuze"; + public override bool SupportsLabels => false; + public Vuze(ITransmissionProxy proxy, ITorrentFileInfoReader torrentFileInfoReader, IHttpClient httpClient, @@ -65,7 +68,5 @@ namespace NzbDrone.Core.Download.Clients.Vuze return null; } - - public override string Name => "Vuze"; } } From 25a80aa29d90758fe7c3498224dc89419b95f0e1 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 27 Nov 2024 23:55:50 +0200 Subject: [PATCH 144/275] Avoid default category on existing Transmission configurations Co-authored-by: Mark McDowall (cherry picked from commit bd656ae7f66fc9224ef2a57857152ee5d54d54f8) --- .../Clients/Transmission/TransmissionSettings.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs index 49293822d..55fffe9cd 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs @@ -1,3 +1,4 @@ +using System.Text.Json.Serialization; using System.Text.RegularExpressions; using FluentValidation; using NzbDrone.Common.Extensions; @@ -28,6 +29,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission { private static readonly TransmissionSettingsValidator Validator = new TransmissionSettingsValidator(); + // This constructor is used when creating a new instance, such as the user adding a new Transmission client. public TransmissionSettings() { Host = "localhost"; @@ -36,6 +38,18 @@ namespace NzbDrone.Core.Download.Clients.Transmission MusicCategory = "lidarr"; } + // TODO: Remove this in v3 + // This constructor is used when deserializing from JSON, it will set the + // category to the deserialized value, defaulting to null. + [JsonConstructor] + public TransmissionSettings(string musicCategory = null) + { + Host = "localhost"; + Port = 9091; + UrlBase = "/transmission/"; + MusicCategory = musicCategory; + } + [FieldDefinition(0, Label = "Host", Type = FieldType.Textbox)] public string Host { get; set; } From 1a40839202a98e9b1356bb5ea1076e149fbc7d44 Mon Sep 17 00:00:00 2001 From: Mika <1054229+mikabytes@users.noreply.github.com> Date: Sun, 5 May 2024 03:53:47 +0200 Subject: [PATCH 145/275] Add file-count for Transmission RPC (cherry picked from commit 23c741fd001582fa363c2723eff9facd3091618b) --- .../Download/Clients/Transmission/TransmissionProxy.cs | 1 + .../Download/Clients/Transmission/TransmissionTorrent.cs | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs index f9a5054be..d728a60a1 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs @@ -221,6 +221,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission "seedIdleLimit", "seedIdleMode", "fileCount", + "file-count", "labels" }; diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionTorrent.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionTorrent.cs index 2bd9f14c9..687bab40b 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionTorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionTorrent.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Newtonsoft.Json; namespace NzbDrone.Core.Download.Clients.Transmission { @@ -24,6 +25,12 @@ namespace NzbDrone.Core.Download.Clients.Transmission public int SeedRatioMode { get; set; } public long SeedIdleLimit { get; set; } public int SeedIdleMode { get; set; } - public int FileCount { get; set; } + public int FileCount => TransmissionFileCount ?? VuzeFileCount ?? 0; + + [JsonProperty(PropertyName = "file-count")] + public int? TransmissionFileCount { get; set; } + + [JsonProperty(PropertyName = "fileCount")] + public int? VuzeFileCount { get; set; } } } From 47e504fbc9a097ecbad9037a0e6c71c2e49b49ee Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 22 Dec 2024 17:06:32 +0200 Subject: [PATCH 146/275] Add translations for some download client settings --- src/NzbDrone.Core/Download/Clients/Deluge/DelugeSettings.cs | 6 +++--- .../Clients/FreeboxDownload/FreeboxDownloadSettings.cs | 4 ++-- .../Download/Clients/NzbVortex/NzbVortexSettings.cs | 4 ++-- src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetSettings.cs | 4 ++-- .../Download/Clients/QBittorrent/QBittorrentSettings.cs | 6 +++--- .../Download/Clients/Sabnzbd/SabnzbdSettings.cs | 4 ++-- .../Download/Clients/Transmission/TransmissionSettings.cs | 4 ++-- .../Download/Clients/rTorrent/RTorrentSettings.cs | 6 +++--- .../Download/Clients/uTorrent/UTorrentSettings.cs | 6 +++--- src/NzbDrone.Core/Localization/Core/en.json | 6 ++++++ 10 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/NzbDrone.Core/Download/Clients/Deluge/DelugeSettings.cs b/src/NzbDrone.Core/Download/Clients/Deluge/DelugeSettings.cs index 058654854..57a752907 100644 --- a/src/NzbDrone.Core/Download/Clients/Deluge/DelugeSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/Deluge/DelugeSettings.cs @@ -47,13 +47,13 @@ namespace NzbDrone.Core.Download.Clients.Deluge [FieldDefinition(5, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Lidarr avoids conflicts with unrelated downloads, but it's optional")] public string MusicCategory { get; set; } - [FieldDefinition(6, Label = "Post-Import Category", Type = FieldType.Textbox, Advanced = true, HelpText = "Category for Lidarr to set after it has imported the download. Lidarr will not remove torrents in that category even if seeding finished. Leave blank to keep same category.")] + [FieldDefinition(6, Label = "PostImportCategory", Type = FieldType.Textbox, Advanced = true, HelpText = "DownloadClientSettingsPostImportCategoryHelpText")] public string MusicImportedCategory { get; set; } - [FieldDefinition(7, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(DelugePriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] + [FieldDefinition(7, Label = "DownloadClientSettingsRecentPriority", Type = FieldType.Select, SelectOptions = typeof(DelugePriority), HelpText = "DownloadClientSettingsRecentPriorityAlbumHelpText")] public int RecentMusicPriority { get; set; } - [FieldDefinition(8, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(DelugePriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] + [FieldDefinition(8, Label = "DownloadClientSettingsOlderPriority", Type = FieldType.Select, SelectOptions = typeof(DelugePriority), HelpText = "DownloadClientSettingsOlderPriorityAlbumHelpText")] public int OlderMusicPriority { get; set; } [FieldDefinition(9, Label = "Add Paused", Type = FieldType.Checkbox)] diff --git a/src/NzbDrone.Core/Download/Clients/FreeboxDownload/FreeboxDownloadSettings.cs b/src/NzbDrone.Core/Download/Clients/FreeboxDownload/FreeboxDownloadSettings.cs index 431183092..1fc40b6dc 100644 --- a/src/NzbDrone.Core/Download/Clients/FreeboxDownload/FreeboxDownloadSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/FreeboxDownload/FreeboxDownloadSettings.cs @@ -70,10 +70,10 @@ namespace NzbDrone.Core.Download.Clients.FreeboxDownload [FieldDefinition(7, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Lidarr avoids conflicts with unrelated non-Lidarr downloads (will create a [category] subdirectory in the output directory)")] public string Category { get; set; } - [FieldDefinition(8, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(FreeboxDownloadPriority), HelpText = "Priority to use when grabbing albums that released within the last 14 days")] + [FieldDefinition(8, Label = "DownloadClientSettingsRecentPriority", Type = FieldType.Select, SelectOptions = typeof(FreeboxDownloadPriority), HelpText = "DownloadClientSettingsRecentPriorityAlbumHelpText")] public int RecentPriority { get; set; } - [FieldDefinition(9, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(FreeboxDownloadPriority), HelpText = "Priority to use when grabbing albums that released over 14 days ago")] + [FieldDefinition(9, Label = "DownloadClientSettingsOlderPriority", Type = FieldType.Select, SelectOptions = typeof(FreeboxDownloadPriority), HelpText = "DownloadClientSettingsOlderPriorityAlbumHelpText")] public int OlderPriority { get; set; } [FieldDefinition(10, Label = "Add Paused", Type = FieldType.Checkbox)] diff --git a/src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortexSettings.cs b/src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortexSettings.cs index d993b829f..b02380e5f 100644 --- a/src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortexSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortexSettings.cs @@ -51,10 +51,10 @@ namespace NzbDrone.Core.Download.Clients.NzbVortex [FieldDefinition(4, Label = "Group", Type = FieldType.Textbox, HelpText = "Adding a category specific to Lidarr avoids conflicts with unrelated downloads, but it's optional")] public string MusicCategory { get; set; } - [FieldDefinition(5, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(NzbVortexPriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] + [FieldDefinition(5, Label = "DownloadClientSettingsRecentPriority", Type = FieldType.Select, SelectOptions = typeof(NzbVortexPriority), HelpText = "DownloadClientSettingsRecentPriorityAlbumHelpText")] public int RecentMusicPriority { get; set; } - [FieldDefinition(6, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(NzbVortexPriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] + [FieldDefinition(6, Label = "DownloadClientSettingsOlderPriority", Type = FieldType.Select, SelectOptions = typeof(NzbVortexPriority), HelpText = "DownloadClientSettingsOlderPriorityAlbumHelpText")] public int OlderMusicPriority { get; set; } public NzbDroneValidationResult Validate() diff --git a/src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetSettings.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetSettings.cs index 2b815d8a5..713379d57 100644 --- a/src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetSettings.cs @@ -57,10 +57,10 @@ namespace NzbDrone.Core.Download.Clients.Nzbget [FieldDefinition(6, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Lidarr avoids conflicts with unrelated downloads, but it's optional")] public string MusicCategory { get; set; } - [FieldDefinition(7, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(NzbgetPriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] + [FieldDefinition(7, Label = "DownloadClientSettingsRecentPriority", Type = FieldType.Select, SelectOptions = typeof(NzbgetPriority), HelpText = "DownloadClientSettingsRecentPriorityAlbumHelpText")] public int RecentMusicPriority { get; set; } - [FieldDefinition(8, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(NzbgetPriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] + [FieldDefinition(8, Label = "DownloadClientSettingsOlderPriority", Type = FieldType.Select, SelectOptions = typeof(NzbgetPriority), HelpText = "DownloadClientSettingsOlderPriorityAlbumHelpText")] public int OlderMusicPriority { get; set; } [FieldDefinition(9, Label = "Add Paused", Type = FieldType.Checkbox, HelpText = "This option requires at least NzbGet version 16.0")] diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentSettings.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentSettings.cs index fa2f37453..c2881508a 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentSettings.cs @@ -51,13 +51,13 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent [FieldDefinition(6, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Lidarr avoids conflicts with unrelated downloads, but it's optional")] public string MusicCategory { get; set; } - [FieldDefinition(7, Label = "Post-Import Category", Type = FieldType.Textbox, Advanced = true, HelpText = "Category for Lidarr to set after it has imported the download. Lidarr will not remove torrents in that category even if seeding finished. Leave blank to keep same category.")] + [FieldDefinition(7, Label = "PostImportCategory", Type = FieldType.Textbox, Advanced = true, HelpText = "DownloadClientSettingsPostImportCategoryHelpText")] public string MusicImportedCategory { get; set; } - [FieldDefinition(8, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(QBittorrentPriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] + [FieldDefinition(8, Label = "DownloadClientSettingsRecentPriority", Type = FieldType.Select, SelectOptions = typeof(QBittorrentPriority), HelpText = "DownloadClientSettingsRecentPriorityAlbumHelpText")] public int RecentMusicPriority { get; set; } - [FieldDefinition(9, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(QBittorrentPriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] + [FieldDefinition(9, Label = "DownloadClientSettingsOlderPriority", Type = FieldType.Select, SelectOptions = typeof(QBittorrentPriority), HelpText = "DownloadClientSettingsOlderPriorityAlbumHelpText")] public int OlderMusicPriority { get; set; } [FieldDefinition(10, Label = "Initial State", Type = FieldType.Select, SelectOptions = typeof(QBittorrentState), HelpText = "Initial state for torrents added to qBittorrent")] diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdSettings.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdSettings.cs index 285ea7389..6f5573557 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdSettings.cs @@ -69,10 +69,10 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd [FieldDefinition(7, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Lidarr avoids conflicts with unrelated downloads, but it's optional")] public string MusicCategory { get; set; } - [FieldDefinition(8, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(SabnzbdPriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] + [FieldDefinition(8, Label = "DownloadClientSettingsRecentPriority", Type = FieldType.Select, SelectOptions = typeof(SabnzbdPriority), HelpText = "DownloadClientSettingsRecentPriorityAlbumHelpText")] public int RecentMusicPriority { get; set; } - [FieldDefinition(9, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(SabnzbdPriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] + [FieldDefinition(9, Label = "DownloadClientSettingsOlderPriority", Type = FieldType.Select, SelectOptions = typeof(SabnzbdPriority), HelpText = "DownloadClientSettingsOlderPriorityAlbumHelpText")] public int OlderMusicPriority { get; set; } public NzbDroneValidationResult Validate() diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs index 55fffe9cd..7532acfa1 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionSettings.cs @@ -77,10 +77,10 @@ namespace NzbDrone.Core.Download.Clients.Transmission [FieldDefinition(8, Label = "Directory", Type = FieldType.Textbox, Advanced = true, HelpText = "Optional location to put downloads in, leave blank to use the default Transmission location")] public string MusicDirectory { get; set; } - [FieldDefinition(9, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] + [FieldDefinition(9, Label = "DownloadClientSettingsRecentPriority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "DownloadClientSettingsRecentPriorityAlbumHelpText")] public int RecentMusicPriority { get; set; } - [FieldDefinition(10, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] + [FieldDefinition(10, Label = "DownloadClientSettingsOlderPriority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "DownloadClientSettingsOlderPriorityAlbumHelpText")] public int OlderMusicPriority { get; set; } [FieldDefinition(11, Label = "Add Paused", Type = FieldType.Checkbox)] diff --git a/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrentSettings.cs b/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrentSettings.cs index 0e1c40212..aeaee3fa9 100644 --- a/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrentSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrentSettings.cs @@ -52,16 +52,16 @@ namespace NzbDrone.Core.Download.Clients.RTorrent [FieldDefinition(6, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Lidarr avoids conflicts with unrelated non-Lidarr downloads. Using a category is optional, but strongly recommended.")] public string MusicCategory { get; set; } - [FieldDefinition(7, Label = "Post-Import Category", Type = FieldType.Textbox, Advanced = true, HelpText = "Category for Lidarr to set after it has imported the download. Lidarr will not remove torrents in that category even if seeding finished. Leave blank to keep same category.")] + [FieldDefinition(7, Label = "PostImportCategory", Type = FieldType.Textbox, Advanced = true, HelpText = "DownloadClientSettingsPostImportCategoryHelpText")] public string MusicImportedCategory { get; set; } [FieldDefinition(8, Label = "Directory", Type = FieldType.Textbox, Advanced = true, HelpText = "Optional location to put downloads in, leave blank to use the default rTorrent location")] public string MusicDirectory { get; set; } - [FieldDefinition(9, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(RTorrentPriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] + [FieldDefinition(9, Label = "DownloadClientSettingsRecentPriority", Type = FieldType.Select, SelectOptions = typeof(RTorrentPriority), HelpText = "DownloadClientSettingsRecentPriorityAlbumHelpText")] public int RecentMusicPriority { get; set; } - [FieldDefinition(10, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(RTorrentPriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] + [FieldDefinition(10, Label = "DownloadClientSettingsOlderPriority", Type = FieldType.Select, SelectOptions = typeof(RTorrentPriority), HelpText = "DownloadClientSettingsOlderPriorityAlbumHelpText")] public int OlderMusicPriority { get; set; } [FieldDefinition(11, Label = "Add Stopped", Type = FieldType.Checkbox, HelpText = "Enabling will add torrents and magnets to rTorrent in a stopped state. This may break magnet files.")] diff --git a/src/NzbDrone.Core/Download/Clients/uTorrent/UTorrentSettings.cs b/src/NzbDrone.Core/Download/Clients/uTorrent/UTorrentSettings.cs index ef1f9d4da..0bc82e6ad 100644 --- a/src/NzbDrone.Core/Download/Clients/uTorrent/UTorrentSettings.cs +++ b/src/NzbDrone.Core/Download/Clients/uTorrent/UTorrentSettings.cs @@ -49,13 +49,13 @@ namespace NzbDrone.Core.Download.Clients.UTorrent [FieldDefinition(6, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Lidarr avoids conflicts with unrelated downloads, but it's optional")] public string MusicCategory { get; set; } - [FieldDefinition(7, Label = "Post-Import Category", Type = FieldType.Textbox, Advanced = true, HelpText = "Category for Lidarr to set after it has imported the download. Lidarr will not remove torrents in that category even if seeding finished. Leave blank to keep same category.")] + [FieldDefinition(7, Label = "PostImportCategory", Type = FieldType.Textbox, Advanced = true, HelpText = "DownloadClientSettingsPostImportCategoryHelpText")] public string MusicImportedCategory { get; set; } - [FieldDefinition(8, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "Priority to use when grabbing albums released within the last 14 days")] + [FieldDefinition(8, Label = "DownloadClientSettingsRecentPriority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "DownloadClientSettingsRecentPriorityAlbumHelpText")] public int RecentMusicPriority { get; set; } - [FieldDefinition(9, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "Priority to use when grabbing albums released over 14 days ago")] + [FieldDefinition(9, Label = "DownloadClientSettingsOlderPriority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "DownloadClientSettingsOlderPriorityAlbumHelpText")] public int OlderMusicPriority { get; set; } [FieldDefinition(10, Label = "Initial State", Type = FieldType.Select, SelectOptions = typeof(UTorrentState), HelpText = "Initial state for torrents added to uTorrent")] diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 1c3ec897b..06cfeefcc 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -388,6 +388,11 @@ "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Whether to use qBittorrent's configured content layout, the original layout from the torrent or always create a subfolder (qBittorrent 4.3.2+)", "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Download client {0} is set to remove completed downloads. This can result in downloads being removed from your client before {1} can import them.", "DownloadClientSettings": "Download Client Settings", + "DownloadClientSettingsOlderPriority": "Older Priority", + "DownloadClientSettingsOlderPriorityAlbumHelpText": "Priority to use when grabbing albums released over 14 days ago", + "DownloadClientSettingsPostImportCategoryHelpText": "Category for {appName} to set after it has imported the download. {appName} will not remove torrents in that category even if seeding finished. Leave blank to keep same category.", + "DownloadClientSettingsRecentPriority": "Recent Priority", + "DownloadClientSettingsRecentPriorityAlbumHelpText": "Priority to use when grabbing albums released within the last 14 days", "DownloadClientSortingCheckMessage": "Download client {0} has {1} sorting enabled for {appName}'s category. You should disable sorting in your download client to avoid import issues.", "DownloadClientStatusCheckAllClientMessage": "All download clients are unavailable due to failures", "DownloadClientStatusCheckSingleClientMessage": "Download clients unavailable due to failures: {0}", @@ -890,6 +895,7 @@ "Playlist": "Playlist", "Port": "Port", "PortNumber": "Port Number", + "PostImportCategory": "Post-Import Category", "PosterOptions": "Poster Options", "PosterSize": "Poster Size", "Posters": "Posters", From e6388cab94d8e69f0a32cf5b36c863fce1f0f877 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 21 Dec 2024 13:40:50 +0000 Subject: [PATCH 147/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: GkhnGRBZ Co-authored-by: Tommy Au Co-authored-by: Weblate Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ar/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/de/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/el/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/he/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hu/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/id/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/is/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/it/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ja/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ro/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sv/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/th/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/uk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/vi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_TW/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ar.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/bg.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/ca.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/cs.json | 3 ++- src/NzbDrone.Core/Localization/Core/da.json | 12 ++++++++++- src/NzbDrone.Core/Localization/Core/de.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/el.json | 3 ++- src/NzbDrone.Core/Localization/Core/es.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/fi.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/fr.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/he.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/hi.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/hr.json | 3 ++- src/NzbDrone.Core/Localization/Core/hu.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/id.json | 3 ++- src/NzbDrone.Core/Localization/Core/is.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/it.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/ja.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/ko.json | 4 +++- src/NzbDrone.Core/Localization/Core/nl.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/pl.json | 3 ++- src/NzbDrone.Core/Localization/Core/pt.json | 7 ++++++- .../Localization/Core/pt_BR.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/ro.json | 3 ++- src/NzbDrone.Core/Localization/Core/ru.json | 8 ++++++- src/NzbDrone.Core/Localization/Core/sv.json | 3 ++- src/NzbDrone.Core/Localization/Core/th.json | 3 ++- src/NzbDrone.Core/Localization/Core/tr.json | 21 ++++++++++--------- src/NzbDrone.Core/Localization/Core/uk.json | 7 ++++++- src/NzbDrone.Core/Localization/Core/vi.json | 3 ++- .../Localization/Core/zh_CN.json | 3 ++- .../Localization/Core/zh_TW.json | 14 +++++++++++-- 32 files changed, 166 insertions(+), 42 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 4efd0bcee..46cca04dd 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -753,5 +753,10 @@ "EditReleaseProfile": "تحرير ملف تعريف التأخير", "AddReleaseProfile": "تحرير ملف تعريف التأخير", "Season": "السبب", - "AddDelayProfileError": "غير قادر على إضافة ملف تعريف جودة جديد ، يرجى المحاولة مرة أخرى." + "AddDelayProfileError": "غير قادر على إضافة ملف تعريف جودة جديد ، يرجى المحاولة مرة أخرى.", + "Max": "ماكس", + "Min": "دقيقة", + "Preferred": "يفضل", + "Today": "اليوم", + "MappedNetworkDrivesWindowsService": "لا تتوفر محركات أقراص الشبكة المعينة عند التشغيل كخدمة Windows. يرجى الاطلاع على التعليمات لمزيد من المعلومات" } diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index f8feea85f..b43fc0d6f 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -753,5 +753,10 @@ "AddReleaseProfile": "Редактиране на профил за забавяне", "UnmappedFiles": "Немапирани папки", "Season": "Причина", - "AddDelayProfileError": "Не може да се добави нов качествен профил, моля, опитайте отново." + "AddDelayProfileError": "Не може да се добави нов качествен профил, моля, опитайте отново.", + "Max": "Макс", + "Min": "Мин", + "Preferred": "Предпочитан", + "Today": "Днес", + "MappedNetworkDrivesWindowsService": "Картографираните мрежови устройства не са налични, когато се изпълняват като услуга на Windows. Моля, вижте често задаваните въпроси за повече информация" } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 42dce3dc6..371445055 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -964,5 +964,10 @@ "AddArtistWithName": "Afegeix {artistName}", "AddNewAlbumSearchForNewAlbum": "Inicia la cerca de nous àlbums", "AddMissing": "Afegeix faltants", - "AddNewAlbum": "Afegeix nou àlbum" + "AddNewAlbum": "Afegeix nou àlbum", + "Max": "Màx", + "Min": "Min", + "Preferred": "Preferit", + "Today": "Avui", + "MappedNetworkDrivesWindowsService": "Les unitats de xarxa assignades no estan disponibles quan s'executen com a servei de Windows. Si us plau, consulteu les PMF per a obtenir més informació" } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 065a121b3..37c9442fc 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -887,5 +887,6 @@ "Max": "Max", "Min": "Min", "Preferred": "Upřednostňováno", - "Today": "Dnes" + "Today": "Dnes", + "MappedNetworkDrivesWindowsService": "Mapované síťové jednotky nejsou k dispozici, když běží jako služba Windows. Další informace najdete v častých dotazech" } diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index a557dd20a..be5a06f3b 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -787,5 +787,15 @@ "AddDelayProfileError": "Kan ikke tilføje en ny forsinkelsesprofil. Prøv igen.", "RegularExpressionsCanBeTested": "Regulære udtryk kan testes [her]({url}).", "AddToDownloadQueue": "Føj til downloadkø", - "AddedToDownloadQueue": "Føjet til downloadkø" + "AddedToDownloadQueue": "Føjet til downloadkø", + "Artist": "kunstner", + "Max": "Maks.", + "Preferred": "Foretrukket", + "AutoTaggingSpecificationTag": "Etiket", + "TBA": "Afventer", + "MappedNetworkDrivesWindowsService": "Tilsluttede netværksdrev er ikke tilgængelige, når programmet kører som en Windows-tjeneste. Se FAQ'en ({url}) for mere information.", + "Today": "I dag", + "Episode": "afsnit", + "MetadataProfile": "metadataprofil", + "Min": "Min" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index d36ac9047..462fd39f1 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -1281,5 +1281,10 @@ "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')", "NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')", "DashOrSpaceDashDependingOnName": "Dash oder Space Dash je nach Name", - "NotificationsEmbySettingsUpdateLibraryHelpText": "Bibliothek bei Import, Umbenennung oder Löschung aktualisieren" + "NotificationsEmbySettingsUpdateLibraryHelpText": "Bibliothek bei Import, Umbenennung oder Löschung aktualisieren", + "Preferred": "Bevorzugt", + "Max": "Max", + "Min": "Min", + "Today": "Heute", + "MappedNetworkDrivesWindowsService": "Zugriff auf gemappte Netzlaufwerke ist nicht verfügbar, wenn als Windows-Dienst ausgeführt. Weitere Informationen findest du in den [FAQ]({url})." } diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index d99bab6d8..6f5e6e3a9 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -1119,5 +1119,6 @@ "Max": "Μέγιστη", "Preferred": "Προνομιούχος", "Min": "Ελάχ", - "Today": "Σήμερα" + "Today": "Σήμερα", + "MappedNetworkDrivesWindowsService": "Οι αντιστοιχισμένες μονάδες δίσκου δικτύου δεν είναι διαθέσιμες κατά την εκτέλεση ως υπηρεσία Windows. Ανατρέξτε στις Συχνές Ερωτήσεις για περισσότερες πληροφορίες" } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index c9810235b..b389a2e69 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -1335,5 +1335,10 @@ "DefaultDelayProfileArtist": "Este es el perfil predeterminado. Se aplica a todos los artistas que no tienen un perfil explícito.", "DelayProfileArtistTagsHelpText": "Se aplica a los artistas con al menos una etiqueta coincidente", "NotificationsTagsArtistHelpText": "Envía notificaciones solo para artistas con al menos una etiqueta coincidente", - "ICalTagsArtistHelpText": "El canal solo contendrá artistas con al menos una etiqueta coincidente" + "ICalTagsArtistHelpText": "El canal solo contendrá artistas con al menos una etiqueta coincidente", + "Preferred": "Preferido", + "Max": "Máximo", + "Today": "Hoy", + "Min": "Min", + "MappedNetworkDrivesWindowsService": "Los discos de red mapeados no están disponibles cuando se ejecutan como un servicio de Windows, consulta el [FAQ]({url}) para más información." } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index c10f01a1c..926d1f0b9 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -1263,5 +1263,10 @@ "Shutdown": "Sammuta", "UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan,", "AddDelayProfileError": "Virhe lisättäessä viiveporofiilia. Yritä uudelleen.", - "ImportListTagsHelpText": "Tunnisteet, joilla tältä tuontilistalta lisätyt kohteet merkitään." + "ImportListTagsHelpText": "Tunnisteet, joilla tältä tuontilistalta lisätyt kohteet merkitään.", + "Min": "Alin", + "Preferred": "Tavoite", + "Max": "Korkein", + "Today": "Tänään", + "MappedNetworkDrivesWindowsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja [UKK:sta]({url})." } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 41603ccf9..f3aa8abf2 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -1329,5 +1329,10 @@ "SkipFreeSpaceCheckHelpText": "Utiliser quand {appName} ne parvient pas à détecter l'espace disponible de votre dossier racine", "LastSearched": "Dernière recherche", "AddDelayProfileError": "Impossible d'ajouter un nouveau profil de délai, veuillez réessayer.", - "ImportListTagsHelpText": "Balises qui seront ajoutées lors de l'importation à partir de cette liste" + "ImportListTagsHelpText": "Balises qui seront ajoutées lors de l'importation à partir de cette liste", + "Max": "Max", + "Min": "Min", + "Preferred": "Préféré", + "Today": "Aujourd'hui", + "MappedNetworkDrivesWindowsService": "Les lecteurs réseau mappés ne sont pas disponibles lors de l'exécution en tant que service Windows, consultez la [FAQ]({url}) pour plus d'informations." } diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index d34fd9395..4de044452 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -791,5 +791,10 @@ "EditReleaseProfile": "ערוך פרופיל עיכוב", "Season": "סיבה", "AddDelayProfileError": "לא ניתן להוסיף פרופיל איכות חדש, נסה שוב.", - "AddCondition": "הוסף תנאי" + "AddCondition": "הוסף תנאי", + "Today": "היום", + "Max": "מקסימום", + "Min": "דקה", + "Preferred": "מועדף", + "MappedNetworkDrivesWindowsService": "כונני רשת ממופים אינם זמינים כאשר הם פועלים כשירות Windows. אנא עיין בשאלות הנפוצות למידע נוסף" } diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index 1dbb46dea..748b2585a 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -747,5 +747,10 @@ "Clone": "बंद करे", "EditReleaseProfile": "देरी प्रोफ़ाइल संपादित करें", "Season": "कारण", - "AddDelayProfileError": "नई गुणवत्ता प्रोफ़ाइल जोड़ने में असमर्थ, कृपया पुनः प्रयास करें।" + "AddDelayProfileError": "नई गुणवत्ता प्रोफ़ाइल जोड़ने में असमर्थ, कृपया पुनः प्रयास करें।", + "Max": "मैक्स", + "Min": "मिनट", + "Preferred": "पसंदीदा", + "Today": "आज", + "MappedNetworkDrivesWindowsService": "विंडोज सर्विस के रूप में चलने पर मैप्ड नेटवर्क ड्राइव उपलब्ध नहीं हैं। अधिक जानकारी के लिए कृपया FAQ देखें" } diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index a57121e08..9a6cab200 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -305,5 +305,6 @@ "Reason": "Sezona", "Clone": "Zatvori", "DeleteSelectedTrackFilesMessageText": "Jeste li sigurni da želite obrisati ovaj profil odgode?", - "AddDelayProfileError": "Neuspješno dodavanje profila odgode, molimo pokušaj ponovno." + "AddDelayProfileError": "Neuspješno dodavanje profila odgode, molimo pokušaj ponovno.", + "Today": "Danas" } diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index a6e8199b1..d0d3dbb87 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -1221,5 +1221,10 @@ "Shutdown": "Leállitás", "UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t", "ImportListTagsHelpText": "Címkék, amelyek a listáról történő importáláskor kerülnek hozzáadásra", - "AddDelayProfileError": "Nem sikerült új késleltetési profilt hozzáadni, próbálkozzon újra." + "AddDelayProfileError": "Nem sikerült új késleltetési profilt hozzáadni, próbálkozzon újra.", + "MappedNetworkDrivesWindowsService": "A leképezett hálózati meghajtók nem érhetők el, ha Windows szolgáltatásként futnak, lásd a [GYIK]({url}) for more information.", + "Max": "Max", + "Min": "Min", + "Preferred": "Előnyben részesített", + "Today": "Ma" } diff --git a/src/NzbDrone.Core/Localization/Core/id.json b/src/NzbDrone.Core/Localization/Core/id.json index edb56c64a..ff7cf1bad 100644 --- a/src/NzbDrone.Core/Localization/Core/id.json +++ b/src/NzbDrone.Core/Localization/Core/id.json @@ -132,5 +132,6 @@ "AptUpdater": "Gunakan apt untuk memasang pembaruan", "Clone": "Tutup", "EnableSSL": "Aktifkan RSS", - "AddDelayProfile": "Tambah Delay Profile" + "AddDelayProfile": "Tambah Delay Profile", + "Today": "Hari Ini" } diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index 2101d7eea..6d99043e0 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -748,5 +748,10 @@ "Clone": "Lokaðu", "AddReleaseProfile": "Breyta seinkunarprófíl", "Season": "Ástæða", - "AddDelayProfileError": "Ekki er hægt að bæta við nýjum gæðaprófíl, reyndu aftur." + "AddDelayProfileError": "Ekki er hægt að bæta við nýjum gæðaprófíl, reyndu aftur.", + "Max": "Hámark", + "Min": "Mín", + "Preferred": "Æskilegt", + "Today": "Í dag", + "MappedNetworkDrivesWindowsService": "Kortlagðar netdrif eru ekki fáanlegar þegar þær eru keyrðar sem Windows þjónusta. Vinsamlegast skoðaðu algengar spurningar fyrir frekari upplýsingar" } diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index 7855e262e..d775c91ef 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -1041,5 +1041,10 @@ "UnmappedFiles": "Cartelle Non Mappate", "MissingAlbums": "Albums esistente", "MonitorMissingAlbums": "Albums esistente", - "AddDelayProfileError": "Impossibile aggiungere un nuovo profilo di ritardo, riprova." + "AddDelayProfileError": "Impossibile aggiungere un nuovo profilo di ritardo, riprova.", + "Preferred": "Preferito", + "Max": "Massimo", + "Min": "Min", + "Today": "Oggi", + "MappedNetworkDrivesWindowsService": "Le unità di rete mappate non sono disponibili eseguendo come servizio di Windows. Vedere le FAQ per maggiori informazioni" } diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index 28c880719..6bcd640ed 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -748,5 +748,10 @@ "Clone": "閉じる", "AddReleaseProfile": "遅延プロファイルの編集", "Season": "理由", - "AddDelayProfileError": "新しい品質プロファイルを追加できません。再試行してください。" + "AddDelayProfileError": "新しい品質プロファイルを追加できません。再試行してください。", + "Max": "マックス", + "Min": "最小", + "Preferred": "優先", + "Today": "今日", + "MappedNetworkDrivesWindowsService": "マップされたネットワークドライブは、Windowsサービスとして実行している場合は使用できません。詳細については、FAQを参照してください" } diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index aed304b50..9e938390c 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -742,5 +742,7 @@ "AddAutoTag": "자동 태그 추가", "AddCondition": "조건 추가", "AddImportList": "가져오기 목록 추가", - "UpdateAvailableHealthCheckMessage": "새 업데이트 사용 가능: {version}" + "UpdateAvailableHealthCheckMessage": "새 업데이트 사용 가능: {version}", + "Today": "오늘", + "MappedNetworkDrivesWindowsService": "Windows 서비스로 실행할 때는 매핑 된 네트워크 드라이브를 사용할 수 없습니다. 자세한 내용은 FAQ를 참조하십시오." } diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index cba23376a..1b4b4d5a2 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -897,5 +897,10 @@ "ExternalUpdater": "{appName} is geconfigureerd om een extern update mechanisme te gebruiken", "UpdateAppDirectlyLoadError": "Kan {appName} niet rechtstreeks updaten,", "UnmappedFiles": "Niet-toegewezen Mappen", - "AddDelayProfileError": "Mislukt om vertragingsprofiel toe te voegen, probeer het later nog eens." + "AddDelayProfileError": "Mislukt om vertragingsprofiel toe te voegen, probeer het later nog eens.", + "Max": "Max", + "Today": "Vandaag", + "Min": "Min", + "Preferred": "Voorkeur gegeven", + "MappedNetworkDrivesWindowsService": "Toegewezen netwerkstation is niet beschikbaar wanneer Prowlarr wordt uitgevoerd als een Windows Service. Bekijk de Veelgestelde Vragen voor meer informatie" } diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 5ac318cac..2e4699389 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -851,5 +851,6 @@ "Max": "Maks", "Min": "Min", "Preferred": "Preferowane", - "Today": "Dzisiaj" + "Today": "Dzisiaj", + "MappedNetworkDrivesWindowsService": "Zmapowane dyski sieciowe nie są dostępne, gdy działają jako usługa systemu Windows. Więcej informacji można znaleźć w FAQ" } diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index 0986c3f19..5db5dd615 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -1018,5 +1018,10 @@ "UpdateAppDirectlyLoadError": "Não foi possível atualizar o {appName} diretamente,", "DockerUpdater": "atualize o contentor do Docker para receber a atualização", "DownloadImported": "Transferência Ignorada", - "AddDelayProfileError": "Não foi possível adicionar um novo perfil de qualidade, tenta novamente." + "AddDelayProfileError": "Não foi possível adicionar um novo perfil de qualidade, tenta novamente.", + "Max": "Máx.", + "Min": "Mín.", + "Preferred": "Preferido", + "Today": "Hoje", + "MappedNetworkDrivesWindowsService": "As unidades de rede mapeadas não estão disponíveis quando executadas como um serviço do Windows. Veja as Perguntas mais frequentes para obter mais informações" } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index ace24dc09..3b023698c 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -1335,5 +1335,10 @@ "ICalTagsArtistHelpText": "O feed conterá apenas artistas com pelo menos uma etiqueta correspondente", "NotificationsTagsArtistHelpText": "Envie notificações apenas para artistas com pelo menos uma etiqueta correspondente", "ReleaseProfileTagArtistHelpText": "Os perfis de lançamento serão aplicados as artistas com pelo menos uma etiqueta correspondente. Deixe em branco para aplicar a todos os artistas", - "DelayProfileArtistTagsHelpText": "Aplica-se a artistas com pelo menos uma etiqueta correspondente" + "DelayProfileArtistTagsHelpText": "Aplica-se a artistas com pelo menos uma etiqueta correspondente", + "Min": "Mín.", + "Today": "Hoje", + "Max": "Máx.", + "Preferred": "Preferido", + "MappedNetworkDrivesWindowsService": "As unidades de rede mapeadas não estão disponíveis quando executadas como um serviço do Windows. Consulte as [FAQ]({url}) para obter mais informações." } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 02fade757..ece8c88b4 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -797,5 +797,6 @@ "Min": "Min", "Preferred": "Preferat", "Max": "Max", - "Today": "Astăzi" + "Today": "Astăzi", + "MappedNetworkDrivesWindowsService": "Unitățile de rețea mapate nu sunt disponibile atunci când rulează ca serviciu Windows. Vă rugăm să consultați [FAQ]({url}) pentru mai multe informații" } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index d3c447627..a98be9385 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -1078,5 +1078,11 @@ "DownloadImported": "Загрузка игнорируется", "AddAlbumWithTitle": "rus", "AddDelayProfileError": "Не удалось добавить новый профиль задержки. Повторите попытку.", - "ImportListTagsHelpText": "Теги, которые будут добавлены при импорте из этого списка" + "ImportListTagsHelpText": "Теги, которые будут добавлены при импорте из этого списка", + "Max": "Максимально", + "Preferred": "Предпочтительный", + "RegularExpressionsTutorialLink": "Более подробную информацию о регулярных выражениях можно найти [здесь]({url}).", + "Today": "Сегодня", + "Min": "Минимум", + "MappedNetworkDrivesWindowsService": "Подключенные сетевые диски недоступны при работе в качестве службы Windows. Дополнительную информацию см. в [FAQ]({url})." } diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 6d73fbd5b..9ec355ea1 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -924,5 +924,6 @@ "Max": "Max", "Min": "Min", "Preferred": "Föredraget", - "Today": "Idag" + "Today": "Idag", + "MappedNetworkDrivesWindowsService": "Mappade nätverksenheter är inte tillgängliga när de körs som en Windows-tjänst. Se FAQ för mer information" } diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index 5c88cd33e..2507257b0 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -749,5 +749,6 @@ "Max": "สูงสุด", "Min": "นาที", "Preferred": "ที่ต้องการ", - "Today": "วันนี้" + "Today": "วันนี้", + "MappedNetworkDrivesWindowsService": "ไดรฟ์เครือข่ายที่แมปไม่พร้อมใช้งานเมื่อเรียกใช้เป็นบริการ Windows โปรดดูคำถามที่พบบ่อยสำหรับข้อมูลเพิ่มเติม" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 5d9d86d2e..6aef6cf70 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -69,7 +69,7 @@ "ArtistAlbumClickToChangeTrack": "Filmi değiştirmek için tıklayın", "Authentication": "Doğrulama", "AuthenticationMethodHelpText": "{appName}'e erişmek için Kullanıcı Adı ve Parola gereklidir", - "AutoRedownloadFailedHelpText": "Otomatik olarak farklı bir Yayın arayın ve indirmeye çalışın", + "AutoRedownloadFailedHelpText": "Farklı bir sürümü otomatik olarak ara ve indirmeyi dene", "BackupFolderHelpText": "Bağıl yollar {appName}'ın AppData dizini altında olacak", "BackupNow": "Şimdi Yedekle", "BackupRetentionHelpText": "Saklama süresinden daha eski otomatik yedeklemeler otomatik olarak temizlenecektir", @@ -172,7 +172,7 @@ "Filename": "Dosya adı", "FileNames": "Dosya Adları", "Files": "Dosyalar", - "FirstDayOfWeek": "Haftanın ilk günü", + "FirstDayOfWeek": "Haftanın İlk Günü", "Fixed": "Düzeltilen", "Folder": "Klasör", "Folders": "Klasörler", @@ -354,8 +354,8 @@ "ShowPath": "Yolu Göster", "ShowQualityProfile": "Kalite Profilini Göster", "ShowQualityProfileHelpText": "Poster altında kalite profilini göster", - "ShowRelativeDates": "Göreli Tarihleri Göster", - "ShowRelativeDatesHelpText": "Göreli (Bugün / Dün / vb.) Veya mutlak tarihleri göster", + "ShowRelativeDates": "İlgili Tarihleri Göster", + "ShowRelativeDatesHelpText": "Göreceli (Bugün/Dün/vb.) veya mutlak tarihleri göster", "ShowSearch": "Aramayı Göster", "ShowSearchActionHelpText": "Fareyle üzerine gelindiğinde arama düğmesini göster", "ShowSizeOnDisk": "Diskte Boyutu Göster", @@ -372,7 +372,7 @@ "StartTypingOrSelectAPathBelow": "Yazmaya başlayın veya aşağıdan bir yol seçin", "StartupDirectory": "Başlangıç Dizini", "Status": "Durum", - "Style": "Tarz", + "Style": "Stil", "SuccessMyWorkIsDoneNoFilesToRename": "Başarılı! İşim bitti, yeniden adlandırılacak dosya yok.", "SuccessMyWorkIsDoneNoFilesToRetag": "Başarılı! İşim bitti, yeniden adlandırılacak dosya yok.", "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS, bu indeksleyici ile desteklenmiyor", @@ -716,7 +716,7 @@ "Unlimited": "Sınırsız", "IncludeHealthWarnings": "Sağlık Uyarılarını Dahil Et", "RemoveQueueItemConfirmation": "'{sourceTitle}' dosyasını kuyruktan kaldırmak istediğinizden emin misiniz?", - "AutoRedownloadFailed": "Yeniden İndirme Başarısız", + "AutoRedownloadFailed": "Başarısız İndirmeleri Yenile", "AddDownloadClientImplementation": "İndirme İstemcisi Ekle - {implementationName}", "AddImportList": "İçe Aktarım Listesi Ekle", "AddReleaseProfile": "Yayın Profili Ekle", @@ -767,8 +767,8 @@ "AuthenticationMethodHelpTextWarning": "Lütfen geçerli bir kimlik doğrulama yöntemi seçin", "AuthenticationRequired": "Kimlik Doğrulama", "AuthenticationRequiredHelpText": "İstekler için Kimlik doğrulamanın gereklilik ayarını değiştirin. Riskleri anlamadığınız sürece değiştirmeyin.", - "AutoRedownloadFailedFromInteractiveSearch": "Etkileşimli Aramadan Yeniden İndirme Başarısız Oldu", - "AutoRedownloadFailedFromInteractiveSearchHelpText": "Başarısız indirmeler, etkileşimli aramada bulunduğunda otomatik olarak farklı bir versiyonu arayın ve indirmeyi deneyin", + "AutoRedownloadFailedFromInteractiveSearch": "Etkileşimli Arama'dan Başarısız İndirmeleri Yenile", + "AutoRedownloadFailedFromInteractiveSearchHelpText": "Etkileşimli aramadan başarısız bir sürüm alındığında otomatik olarak farklı bir sürümü arayın ve indirmeye çalışın", "AutoTaggingRequiredHelpText": "Otomatik etiketleme kuralının uygulanabilmesi için bu {implementationName} koşulunun eşleşmesi gerekir. Aksi takdirde tek bir {implementationName} eşleşmesi yeterlidir.", "AutomaticAdd": "Otomatik Ekle", "BlocklistAndSearch": "Engellenenler Listesi ve Arama", @@ -894,7 +894,7 @@ "ThereWasAnErrorLoadingThisItem": "Bu öğe yüklenirken bir hata oluştu", "NotificationsPlexSettingsAuthenticateWithPlexTv": "Plex.tv ile kimlik doğrulaması yapın", "NotificationsSettingsUpdateLibrary": "Kitaplığı Güncelle", - "NotificationsPlexSettingsAuthToken": "Kimlik Doğrulama Jetonu", + "NotificationsPlexSettingsAuthToken": "Kimlik Doğrulama Token'ı", "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} yolu, {serviceName} kitaplık yolu konumunu {appName}'dan farklı gördüğünde seri yollarını değiştirmek için kullanılır ('Kütüphaneyi Güncelle' gerektirir)", "NotificationsSettingsUpdateMapPathsTo": "Harita Yolları", "NotificationsSettingsUseSslHelpText": "{serviceName} hizmetine HTTP yerine HTTPS üzerinden bağlanın", @@ -1077,5 +1077,6 @@ "Max": "Max", "Preferred": "Tercihli", "Today": "Bugün", - "Min": "Min" + "Min": "Min", + "MappedNetworkDrivesWindowsService": "Windows Hizmeti olarak çalıştırıldığında eşlenen ağ sürücüleri kullanılamaz, daha fazla bilgi için [SSS]({url}) bölümüne bakın." } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 068e9caf0..0f1352941 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -911,5 +911,10 @@ "Season": "Причина", "CountCustomFormatsSelected": "Користувацькі формати обрано {count}", "AutoTaggingRequiredHelpText": "Ця умова {0} має збігатися, щоб користувацький формат застосовувався. В іншому випадку достатньо одного збігу {1}.", - "AddDelayProfileError": "Неможливо додати новий профіль затримки, будь ласка спробуйте ще." + "AddDelayProfileError": "Неможливо додати новий профіль затримки, будь ласка спробуйте ще.", + "Today": "Сьогодні", + "Min": "Мінімум", + "Preferred": "Бажано", + "Max": "Максимальний", + "MappedNetworkDrivesWindowsService": "Підключені мережеві диски недоступні під час роботи як служби Windows. Щоб отримати додаткову інформацію, перегляньте FAQ" } diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index dfda4c95e..d8dc68941 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -786,5 +786,6 @@ "Max": "Max", "Min": "Min", "Preferred": "Ưu tiên", - "Today": "Hôm nay" + "Today": "Hôm nay", + "MappedNetworkDrivesWindowsService": "Các ổ đĩa mạng được ánh xạ không khả dụng khi chạy dưới dạng Dịch vụ Windows. Vui lòng xem Câu hỏi thường gặp để biết thêm thông tin" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 5f58a179d..2a38e129c 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -1330,5 +1330,6 @@ "Max": "最大的", "Min": "最小的", "Preferred": "首选的", - "Today": "今天" + "Today": "今天", + "MappedNetworkDrivesWindowsService": "作为 Windows 服务运行时,映射的网络驱动器不可用,请参阅 [FAQ]({url}) 获取更多信息。" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_TW.json b/src/NzbDrone.Core/Localization/Core/zh_TW.json index bcf2fabcd..73c315634 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_TW.json +++ b/src/NzbDrone.Core/Localization/Core/zh_TW.json @@ -1,6 +1,6 @@ { "About": "關於", - "Actions": "執行", + "Actions": "動作", "AddingTag": "新增標籤", "Analytics": "分析", "All": "全部", @@ -235,5 +235,15 @@ "UiLanguage": "使用者介面語言", "UnableToLoadHistory": "無法載入歷史記錄", "UiLanguageHelpText": "{appName} 介面所使用的語言", - "AddDelayProfileError": "無法加入新的條件,請重新嘗試。" + "AddDelayProfileError": "無法加入新的條件,請重新嘗試。", + "AutoRedownloadFailed": "失敗時重新下載", + "AuthenticationRequiredPasswordHelpTextWarning": "請輸入新密碼", + "AuthenticationRequiredHelpText": "更改需要進行驗證的請求。除非你了解其中的風險,否則請勿修改。", + "AuthenticationMethodHelpTextWarning": "請選擇一個有效的驗證方式", + "AuthenticationMethod": "驗證方式", + "AuthenticationRequiredWarning": "為防止未經認證的遠程訪問,{appName} 現需要啟用身份認證。您可以選擇禁用本地地址的身份認證。", + "AuthenticationRequired": "需要驗證", + "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "確認新密碼", + "AuthenticationRequiredUsernameHelpTextWarning": "請輸入新用戶名", + "AutoRedownloadFailedFromInteractiveSearch": "失敗時重新下載來自手動搜索的資源" } From 0e19c03e9a137cb049d8a9fce25a0d72cc3f3939 Mon Sep 17 00:00:00 2001 From: Bruno Garcia Date: Tue, 27 Feb 2024 00:30:32 -0500 Subject: [PATCH 148/275] Update Sentry SDK add features Co-authored-by: Stefan Jandl (cherry picked from commit 6377c688fc7b35749d608bf62796446bb5bcb11b) --- src/Directory.Build.props | 29 ++++++++++++ .../SentryTargetFixture.cs | 3 +- .../Instrumentation/NzbDroneLogger.cs | 6 +-- .../Instrumentation/Sentry/SentryTarget.cs | 47 +++++++++++++++---- src/NzbDrone.Common/Lidarr.Common.csproj | 2 +- 5 files changed, 74 insertions(+), 13 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index adc1a01b7..f9853bdd5 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -99,6 +99,35 @@ $(MSBuildProjectName.Replace('Lidarr','NzbDrone')) + + + + + + + + + + + + + + + + + + true + + + + true + + true + + diff --git a/src/NzbDrone.Common.Test/InstrumentationTests/SentryTargetFixture.cs b/src/NzbDrone.Common.Test/InstrumentationTests/SentryTargetFixture.cs index a2400c55b..2c730bd93 100644 --- a/src/NzbDrone.Common.Test/InstrumentationTests/SentryTargetFixture.cs +++ b/src/NzbDrone.Common.Test/InstrumentationTests/SentryTargetFixture.cs @@ -4,6 +4,7 @@ using System.Linq; using FluentAssertions; using NLog; using NUnit.Framework; +using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Instrumentation.Sentry; using NzbDrone.Test.Common; @@ -27,7 +28,7 @@ namespace NzbDrone.Common.Test.InstrumentationTests [SetUp] public void Setup() { - _subject = new SentryTarget("https://aaaaaaaaaaaaaaaaaaaaaaaaaa@sentry.io/111111"); + _subject = new SentryTarget("https://aaaaaaaaaaaaaaaaaaaaaaaaaa@sentry.io/111111", Mocker.GetMock().Object); } private LogEventInfo GivenLogEvent(LogLevel level, Exception ex, string message) diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs index 74883c959..bfb404e98 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs +++ b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs @@ -44,7 +44,7 @@ namespace NzbDrone.Common.Instrumentation RegisterDebugger(); } - RegisterSentry(updateApp); + RegisterSentry(updateApp, appFolderInfo); if (updateApp) { @@ -65,7 +65,7 @@ namespace NzbDrone.Common.Instrumentation LogManager.ReconfigExistingLoggers(); } - private static void RegisterSentry(bool updateClient) + private static void RegisterSentry(bool updateClient, IAppFolderInfo appFolderInfo) { string dsn; @@ -80,7 +80,7 @@ namespace NzbDrone.Common.Instrumentation : "https://0522924d625c497f86fc2a1b22aaf21d@sentry.servarr.com/16"; } - var target = new SentryTarget(dsn) + var target = new SentryTarget(dsn, appFolderInfo) { Name = "sentryTarget", Layout = "${message}" diff --git a/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs b/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs index 39b0a920a..49ad4b464 100644 --- a/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs +++ b/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs @@ -9,6 +9,7 @@ using NLog; using NLog.Common; using NLog.Targets; using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Common.Extensions; using Sentry; namespace NzbDrone.Common.Instrumentation.Sentry @@ -99,7 +100,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry public bool FilterEvents { get; set; } public bool SentryEnabled { get; set; } - public SentryTarget(string dsn) + public SentryTarget(string dsn, IAppFolderInfo appFolderInfo) { _sdk = SentrySdk.Init(o => { @@ -107,9 +108,33 @@ namespace NzbDrone.Common.Instrumentation.Sentry o.AttachStacktrace = true; o.MaxBreadcrumbs = 200; o.Release = $"{BuildInfo.AppName}@{BuildInfo.Release}"; - o.BeforeSend = x => SentryCleanser.CleanseEvent(x); - o.BeforeBreadcrumb = x => SentryCleanser.CleanseBreadcrumb(x); + o.SetBeforeSend(x => SentryCleanser.CleanseEvent(x)); + o.SetBeforeBreadcrumb(x => SentryCleanser.CleanseBreadcrumb(x)); o.Environment = BuildInfo.Branch; + + // Crash free run statistics (sends a ping for healthy and for crashes sessions) + o.AutoSessionTracking = true; + + // Caches files in the event device is offline + // Sentry creates a 'sentry' sub directory, no need to concat here + o.CacheDirectoryPath = appFolderInfo.GetAppDataPath(); + + // default environment is production + if (!RuntimeInfo.IsProduction) + { + if (RuntimeInfo.IsDevelopment) + { + o.Environment = "development"; + } + else if (RuntimeInfo.IsTesting) + { + o.Environment = "testing"; + } + else + { + o.Environment = "other"; + } + } }); InitializeScope(); @@ -127,7 +152,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry { SentrySdk.ConfigureScope(scope => { - scope.User = new User + scope.User = new SentryUser { Id = HashUtil.AnonymousToken() }; @@ -169,9 +194,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry private void OnError(Exception ex) { - var webException = ex as WebException; - - if (webException != null) + if (ex is WebException webException) { var response = webException.Response as HttpWebResponse; var statusCode = response?.StatusCode; @@ -290,13 +313,21 @@ namespace NzbDrone.Common.Instrumentation.Sentry } } + var level = LoggingLevelMap[logEvent.Level]; var sentryEvent = new SentryEvent(logEvent.Exception) { - Level = LoggingLevelMap[logEvent.Level], + Level = level, Logger = logEvent.LoggerName, Message = logEvent.FormattedMessage }; + if (level is SentryLevel.Fatal && logEvent.Exception is not null) + { + // Usages of 'fatal' here indicates the process will crash. In Sentry this is represented with + // the 'unhandled' exception flag + logEvent.Exception.SetSentryMechanism("Logger.Fatal", "Logger.Fatal was called", false); + } + sentryEvent.SetExtras(extras); sentryEvent.SetFingerprint(fingerPrint); diff --git a/src/NzbDrone.Common/Lidarr.Common.csproj b/src/NzbDrone.Common/Lidarr.Common.csproj index 1fd93ffdb..383149c37 100644 --- a/src/NzbDrone.Common/Lidarr.Common.csproj +++ b/src/NzbDrone.Common/Lidarr.Common.csproj @@ -12,7 +12,7 @@ - + From 79b29f39f9f3ab457d8b42f68f0424e1071bc973 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 26 Dec 2024 12:37:45 -0800 Subject: [PATCH 149/275] Don't send session information to Sentry (cherry picked from commit fae24e98fb9230c2f3701caef457332952c6723f) --- src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs b/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs index 49ad4b464..3f8d4c227 100644 --- a/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs +++ b/src/NzbDrone.Common/Instrumentation/Sentry/SentryTarget.cs @@ -113,7 +113,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry o.Environment = BuildInfo.Branch; // Crash free run statistics (sends a ping for healthy and for crashes sessions) - o.AutoSessionTracking = true; + o.AutoSessionTracking = false; // Caches files in the event device is offline // Sentry creates a 'sentry' sub directory, no need to concat here From 35a46eca7bb266b4d66e44062d1027e454375fc2 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 30 Dec 2024 01:01:47 +0200 Subject: [PATCH 150/275] Bump version to 2.9.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 225e8bf2f..af33c02ee 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.9.1' + majorVersion: '2.9.2' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 39f0e4d989c235253b01220e873c5e112616cd2f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 28 Dec 2024 15:32:04 +0200 Subject: [PATCH 151/275] Suggest adding IP to RPC whitelist for on failed Transmission auth (cherry picked from commit f05e552e8e6dc02cd26444073ab9a678dcb36492) --- .../Clients/Transmission/TransmissionProxy.cs | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs index d728a60a1..8eccc47e4 100644 --- a/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs +++ b/src/NzbDrone.Core/Download/Clients/Transmission/TransmissionProxy.cs @@ -7,6 +7,7 @@ using System.Net; using Newtonsoft.Json.Linq; using NLog; using NzbDrone.Common.Cache; +using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Common.Serializer; @@ -260,7 +261,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission private void AuthenticateClient(HttpRequestBuilder requestBuilder, TransmissionSettings settings, bool reauthenticate = false) { - var authKey = string.Format("{0}:{1}", requestBuilder.BaseUrl, settings.Password); + var authKey = $"{requestBuilder.BaseUrl}:{settings.Password}"; var sessionId = _authSessionIdCache.Find(authKey); @@ -272,24 +273,26 @@ namespace NzbDrone.Core.Download.Clients.Transmission authLoginRequest.SuppressHttpError = true; var response = _httpClient.Execute(authLoginRequest); - if (response.StatusCode == HttpStatusCode.MovedPermanently) - { - var url = response.Headers.GetSingleValue("Location"); - throw new DownloadClientException("Remote site redirected to " + url); - } - else if (response.StatusCode == HttpStatusCode.Conflict) + switch (response.StatusCode) { - sessionId = response.Headers.GetSingleValue("X-Transmission-Session-Id"); + case HttpStatusCode.MovedPermanently: + var url = response.Headers.GetSingleValue("Location"); - if (sessionId == null) - { - throw new DownloadClientException("Remote host did not return a Session Id."); - } - } - else - { - throw new DownloadClientAuthenticationException("Failed to authenticate with Transmission."); + throw new DownloadClientException("Remote site redirected to " + url); + case HttpStatusCode.Forbidden: + throw new DownloadClientException($"Failed to authenticate with Transmission. It may be necessary to add {BuildInfo.AppName}'s IP address to RPC whitelist."); + case HttpStatusCode.Conflict: + sessionId = response.Headers.GetSingleValue("X-Transmission-Session-Id"); + + if (sessionId == null) + { + throw new DownloadClientException("Remote host did not return a Session Id."); + } + + break; + default: + throw new DownloadClientAuthenticationException("Failed to authenticate with Transmission."); } _logger.Debug("Transmission authentication succeeded."); From 40dab8deb9b7ea5cd3627636ba63f42ef83cc8a2 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 30 Dec 2024 04:09:48 +0200 Subject: [PATCH 152/275] Check if backup folder is writable on backup (cherry picked from commit 8aad79fd3e14eb885724a5e5790803c289be2f25) Closes #5348 --- src/NzbDrone.Common/ArchiveService.cs | 19 ++++++++++--------- src/NzbDrone.Core/Backup/BackupService.cs | 11 +++++++++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/NzbDrone.Common/ArchiveService.cs b/src/NzbDrone.Common/ArchiveService.cs index 800d240ab..d420bbbc0 100644 --- a/src/NzbDrone.Common/ArchiveService.cs +++ b/src/NzbDrone.Common/ArchiveService.cs @@ -42,17 +42,18 @@ namespace NzbDrone.Common public void CreateZip(string path, IEnumerable files) { - using (var zipFile = ZipFile.Create(path)) + _logger.Debug("Creating archive {0}", path); + + using var zipFile = ZipFile.Create(path); + + zipFile.BeginUpdate(); + + foreach (var file in files) { - zipFile.BeginUpdate(); - - foreach (var file in files) - { - zipFile.Add(file, Path.GetFileName(file)); - } - - zipFile.CommitUpdate(); + zipFile.Add(file, Path.GetFileName(file)); } + + zipFile.CommitUpdate(); } private void ExtractZip(string compressedFile, string destination) diff --git a/src/NzbDrone.Core/Backup/BackupService.cs b/src/NzbDrone.Core/Backup/BackupService.cs index 6c1431188..3bfe78c85 100644 --- a/src/NzbDrone.Core/Backup/BackupService.cs +++ b/src/NzbDrone.Core/Backup/BackupService.cs @@ -66,12 +66,19 @@ namespace NzbDrone.Core.Backup { _logger.ProgressInfo("Starting Backup"); + var backupFolder = GetBackupFolder(backupType); + _diskProvider.EnsureFolder(_backupTempFolder); - _diskProvider.EnsureFolder(GetBackupFolder(backupType)); + _diskProvider.EnsureFolder(backupFolder); + + if (!_diskProvider.FolderWritable(backupFolder)) + { + throw new UnauthorizedAccessException($"Backup folder {backupFolder} is not writable"); + } var dateNow = DateTime.Now; var backupFilename = $"lidarr_backup_v{BuildInfo.Version}_{dateNow:yyyy.MM.dd_HH.mm.ss}.zip"; - var backupPath = Path.Combine(GetBackupFolder(backupType), backupFilename); + var backupPath = Path.Combine(backupFolder, backupFilename); Cleanup(); From 17c5c66e549a16ede12c826c7c17a73b31c02a90 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 5 Jan 2025 13:16:11 +0200 Subject: [PATCH 153/275] Bump version to 2.9.3 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index af33c02ee..eaadb74cc 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.9.2' + majorVersion: '2.9.3' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 7cfcf01ae3171eef6ef9df94092cb2a06b770cc1 Mon Sep 17 00:00:00 2001 From: Stevie Robinson Date: Sun, 5 Jan 2025 02:56:49 +0100 Subject: [PATCH 154/275] Fixed: qBittorrent Ratio Limit Check (cherry picked from commit 4dcc015fb19ceb57d2e8f4985c5137e765829d1c) --- .../QBittorrentTests/QBittorrentFixture.cs | 48 +++++++++++++++++++ .../Clients/QBittorrent/QBittorrent.cs | 4 +- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/QBittorrentTests/QBittorrentFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/QBittorrentTests/QBittorrentFixture.cs index fe6abc535..33ec5d964 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/QBittorrentTests/QBittorrentFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/QBittorrentTests/QBittorrentFixture.cs @@ -710,6 +710,30 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests item.CanMoveFiles.Should().BeTrue(); } + [TestCase("pausedUP")] + [TestCase("stoppedUP")] + public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_after_rounding_and_paused(string state) + { + GivenGlobalSeedLimits(1.0f); + GivenCompletedTorrent(state, ratio: 1.1006066990976857f); + + var item = Subject.GetItems().Single(); + item.CanBeRemoved.Should().BeTrue(); + item.CanMoveFiles.Should().BeTrue(); + } + + [TestCase("pausedUP")] + [TestCase("stoppedUP")] + public void should_be_removable_and_should_allow_move_files_if_just_under_max_ratio_reached_after_rounding_and_paused(string state) + { + GivenGlobalSeedLimits(1.0f); + GivenCompletedTorrent(state, ratio: 0.9999f); + + var item = Subject.GetItems().Single(); + item.CanBeRemoved.Should().BeTrue(); + item.CanMoveFiles.Should().BeTrue(); + } + [TestCase("pausedUP")] [TestCase("stoppedUP")] public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_and_paused(string state) @@ -722,6 +746,30 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests item.CanMoveFiles.Should().BeTrue(); } + [TestCase("pausedUP")] + [TestCase("stoppedUP")] + public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_after_rounding_and_paused(string state) + { + GivenGlobalSeedLimits(2.0f); + GivenCompletedTorrent(state, ratio: 1.1006066990976857f, ratioLimit: 1.1f); + + var item = Subject.GetItems().Single(); + item.CanBeRemoved.Should().BeTrue(); + item.CanMoveFiles.Should().BeTrue(); + } + + [TestCase("pausedUP")] + [TestCase("stoppedUP")] + public void should_be_removable_and_should_allow_move_files_if_just_under_overridden_max_ratio_reached_after_rounding_and_paused(string state) + { + GivenGlobalSeedLimits(2.0f); + GivenCompletedTorrent(state, ratio: 0.9999f, ratioLimit: 1.0f); + + var item = Subject.GetItems().Single(); + item.CanBeRemoved.Should().BeTrue(); + item.CanMoveFiles.Should().BeTrue(); + } + [TestCase("pausedUP")] [TestCase("stoppedUP")] public void should_not_be_removable_if_overridden_max_ratio_not_reached_and_paused(string state) diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs index 745f6f72f..75587513a 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs @@ -621,14 +621,14 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent { if (torrent.RatioLimit >= 0) { - if (torrent.Ratio >= torrent.RatioLimit) + if (torrent.RatioLimit - torrent.Ratio <= 0.001f) { return true; } } else if (torrent.RatioLimit == -2 && config.MaxRatioEnabled) { - if (Math.Round(torrent.Ratio, 2) >= config.MaxRatio) + if (config.MaxRatio - torrent.Ratio <= 0.001f) { return true; } From 4ff6c714568e604fb1fe8952a7eaef24d23b9866 Mon Sep 17 00:00:00 2001 From: Stevie Robinson Date: Sun, 5 Jan 2025 02:58:24 +0100 Subject: [PATCH 155/275] Fixed: Listening on all IPv4 Addresses (cherry picked from commit 035c474f10c257331a5f47e863d24af82537e335) --- src/Lidarr.Api.V1/Config/HostConfigController.cs | 1 - src/NzbDrone.Core/Validation/IpValidation.cs | 6 ------ 2 files changed, 7 deletions(-) diff --git a/src/Lidarr.Api.V1/Config/HostConfigController.cs b/src/Lidarr.Api.V1/Config/HostConfigController.cs index 9046943e8..00e705325 100644 --- a/src/Lidarr.Api.V1/Config/HostConfigController.cs +++ b/src/Lidarr.Api.V1/Config/HostConfigController.cs @@ -33,7 +33,6 @@ namespace Lidarr.Api.V1.Config SharedValidator.RuleFor(c => c.BindAddress) .ValidIpAddress() - .NotListenAllIp4Address() .When(c => c.BindAddress != "*" && c.BindAddress != "localhost"); SharedValidator.RuleFor(c => c.Port).ValidPort(); diff --git a/src/NzbDrone.Core/Validation/IpValidation.cs b/src/NzbDrone.Core/Validation/IpValidation.cs index eb5863caa..f4afa1f66 100644 --- a/src/NzbDrone.Core/Validation/IpValidation.cs +++ b/src/NzbDrone.Core/Validation/IpValidation.cs @@ -1,5 +1,4 @@ using FluentValidation; -using FluentValidation.Validators; using NzbDrone.Common.Extensions; namespace NzbDrone.Core.Validation @@ -10,10 +9,5 @@ namespace NzbDrone.Core.Validation { return ruleBuilder.Must(x => x.IsValidIpAddress()).WithMessage("Must contain wildcard (*) or a valid IP Address"); } - - public static IRuleBuilderOptions NotListenAllIp4Address(this IRuleBuilder ruleBuilder) - { - return ruleBuilder.SetValidator(new RegularExpressionValidator(@"^(?!0\.0\.0\.0)")).WithMessage("Use * instead of 0.0.0.0"); - } } } From 554cf8ec559d86d172d762345f82ebabf5bb79ef Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 4 Jan 2025 12:19:17 +0000 Subject: [PATCH 156/275] Multiple Translations updated by Weblate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ignore-downstream Co-authored-by: Alexander Balya Co-authored-by: Ano10 Co-authored-by: Fixer Co-authored-by: GkhnGRBZ Co-authored-by: Havok Dan Co-authored-by: Matti Meikäläinen Co-authored-by: Oskari Lavinto Co-authored-by: Tommy Au Co-authored-by: Weblate Co-authored-by: Weblate Co-authored-by: fordas Co-authored-by: marapavelka Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ar/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/de/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/el/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/he/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hu/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/is/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/it/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ja/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nb_NO/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ro/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sv/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/th/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/uk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/vi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_TW/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ar.json | 3 +- src/NzbDrone.Core/Localization/Core/bg.json | 3 +- src/NzbDrone.Core/Localization/Core/ca.json | 3 +- src/NzbDrone.Core/Localization/Core/cs.json | 67 +- src/NzbDrone.Core/Localization/Core/da.json | 3 +- src/NzbDrone.Core/Localization/Core/de.json | 6 +- src/NzbDrone.Core/Localization/Core/el.json | 3 +- src/NzbDrone.Core/Localization/Core/es.json | 8 +- src/NzbDrone.Core/Localization/Core/fi.json | 588 ++++++++++-------- src/NzbDrone.Core/Localization/Core/fr.json | 12 +- src/NzbDrone.Core/Localization/Core/he.json | 3 +- src/NzbDrone.Core/Localization/Core/hi.json | 3 +- src/NzbDrone.Core/Localization/Core/hr.json | 3 +- src/NzbDrone.Core/Localization/Core/hu.json | 5 +- src/NzbDrone.Core/Localization/Core/is.json | 3 +- src/NzbDrone.Core/Localization/Core/it.json | 3 +- src/NzbDrone.Core/Localization/Core/ja.json | 3 +- src/NzbDrone.Core/Localization/Core/ko.json | 3 +- .../Localization/Core/nb_NO.json | 3 +- src/NzbDrone.Core/Localization/Core/nl.json | 3 +- src/NzbDrone.Core/Localization/Core/pl.json | 3 +- src/NzbDrone.Core/Localization/Core/pt.json | 3 +- .../Localization/Core/pt_BR.json | 8 +- src/NzbDrone.Core/Localization/Core/ro.json | 4 +- src/NzbDrone.Core/Localization/Core/ru.json | 8 +- src/NzbDrone.Core/Localization/Core/sk.json | 3 +- src/NzbDrone.Core/Localization/Core/sv.json | 3 +- src/NzbDrone.Core/Localization/Core/th.json | 3 +- src/NzbDrone.Core/Localization/Core/tr.json | 78 +-- src/NzbDrone.Core/Localization/Core/uk.json | 3 +- src/NzbDrone.Core/Localization/Core/vi.json | 3 +- .../Localization/Core/zh_CN.json | 6 +- .../Localization/Core/zh_TW.json | 7 +- 33 files changed, 500 insertions(+), 360 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 46cca04dd..5ad2cc4ea 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -758,5 +758,6 @@ "Min": "دقيقة", "Preferred": "يفضل", "Today": "اليوم", - "MappedNetworkDrivesWindowsService": "لا تتوفر محركات أقراص الشبكة المعينة عند التشغيل كخدمة Windows. يرجى الاطلاع على التعليمات لمزيد من المعلومات" + "MappedNetworkDrivesWindowsService": "لا تتوفر محركات أقراص الشبكة المعينة عند التشغيل كخدمة Windows. يرجى الاطلاع على التعليمات لمزيد من المعلومات", + "DownloadClientSettingsRecentPriority": "أولوية العميل" } diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index b43fc0d6f..9c26c08a8 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -758,5 +758,6 @@ "Min": "Мин", "Preferred": "Предпочитан", "Today": "Днес", - "MappedNetworkDrivesWindowsService": "Картографираните мрежови устройства не са налични, когато се изпълняват като услуга на Windows. Моля, вижте често задаваните въпроси за повече информация" + "MappedNetworkDrivesWindowsService": "Картографираните мрежови устройства не са налични, когато се изпълняват като услуга на Windows. Моля, вижте често задаваните въпроси за повече информация", + "DownloadClientSettingsRecentPriority": "Приоритет на клиента" } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 371445055..ebad70482 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -969,5 +969,6 @@ "Min": "Min", "Preferred": "Preferit", "Today": "Avui", - "MappedNetworkDrivesWindowsService": "Les unitats de xarxa assignades no estan disponibles quan s'executen com a servei de Windows. Si us plau, consulteu les PMF per a obtenir més informació" + "MappedNetworkDrivesWindowsService": "Les unitats de xarxa assignades no estan disponibles quan s'executen com a servei de Windows. Si us plau, consulteu les PMF per a obtenir més informació", + "DownloadClientSettingsRecentPriority": "Prioritat del client" } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 37c9442fc..55a029045 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -11,15 +11,15 @@ "ArtistAlbumClickToChangeTrack": "Kliknutím změníte film", "Authentication": "Ověřování", "AutoRedownloadFailedHelpText": "Automatické vyhledání a pokus o stažení jiného vydání", - "BackupFolderHelpText": "Relativní cesty budou v adresáři AppData společnosti {appName}", + "BackupFolderHelpText": "Relativní cesty budou v adresáři AppData {appName}u", "BindAddressHelpTextWarning": "Vyžaduje restart, aby se projevilo", "BlocklistRelease": "Blocklist pro vydání", "Branch": "Větev", "Calendar": "Kalendář", "CalendarWeekColumnHeaderHelpText": "Zobrazuje se nad každým sloupcem, když je aktivní zobrazení týden", "Cancel": "Zrušit", - "CancelPendingTask": "Opravdu chcete zrušit tento nevyřízený úkol?", - "CertificateValidation": "Ověření certifikátu", + "CancelPendingTask": "Opravdu chcete zrušit tento úkol čekající na vyřízení?", + "CertificateValidation": "Ověřování certifikátu", "CertificateValidationHelpText": "Změňte přísnost ověřování certifikátů HTTPS. Neměňte, pokud nerozumíte rizikům.", "ChangeFileDate": "Změnit datum souboru", "ChangeHasNotBeenSavedYet": "Změna ještě nebyla uložena", @@ -32,7 +32,7 @@ "ChmodFolder": "Složka chmod", "ChmodFolderHelpTextWarning": "Toto funguje pouze v případě, že uživatel, který spustil {appName}, je vlastníkem souboru. Je lepší zajistit, aby klient pro stahování správně nastavil oprávnění.", "ChownGroupHelpTextWarning": "Toto funguje pouze v případě, že uživatel, který spustil {appName}, je vlastníkem souboru. Je lepší zajistit, aby klient stahování používal stejnou skupinu jako {appName}.", - "AddingTag": "Přidání značky", + "AddingTag": "Přidávání štítku", "AgeWhenGrabbed": "Stáří (kdy bylo získáno)", "AlbumIsDownloadingInterp": "Film se stahuje - {0}% {1}", "ClickToChangeQuality": "Kliknutím změníte kvalitu", @@ -67,11 +67,11 @@ "AlternateTitleslength1Title": "Titul", "AlternateTitleslength1Titles": "Tituly", "Analytics": "Analýzy", - "AnalyticsEnabledHelpText": "Odesílejte anonymní informace o použití a chybách na servery {appName}u. To zahrnuje informace o vašem prohlížeči, které stránky {appName} WebUI používáte, hlášení chyb a také verzi operačního systému a běhového prostředí. Tyto informace použijeme k upřednostnění funkcí a oprav chyb.", + "AnalyticsEnabledHelpText": "Odesílejte anonymní informace o použití a chybách na servery {appName}u. To zahrnuje informace o vašem prohlížeči, které stránky webového rozhraní {appName}u používáte, hlášení chyb a také verzi operačního systému a běhového prostředí. Tyto informace použijeme k určení priorit funkcí a oprav chyb.", "AnalyticsEnabledHelpTextWarning": "Vyžaduje restart, aby se projevilo", "ApiKeyHelpTextWarning": "Vyžaduje restart, aby se projevilo", "AppDataDirectory": "Adresář AppData", - "ApplyTags": "Použít značky", + "ApplyTags": "Použít štítky", "IncludeUnknownArtistItemsHelpText": "Zobrazit položky bez filmu ve frontě. To by mohlo zahrnovat odstraněné filmy nebo cokoli jiného v kategorii {appName}", "IncludeUnmonitored": "Zahrnout Nesledováno", "Indexer": "Indexer", @@ -144,13 +144,13 @@ "Time": "Čas", "TorrentDelayHelpText": "Zpoždění v minutách čekání před popadnutím torrentu", "TotalFileSize": "Celková velikost souboru", - "AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k {appName}", + "AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k {appName}u", "Automatic": "Automatický", - "BackupNow": "Ihned zálohovat", + "BackupNow": "Zálohovat nyní", "BypassProxyForLocalAddresses": "Obcházení proxy serveru pro místní adresy", "ConnectSettings": "Nastavení připojení", "DatabaseMigration": "Migrace databáze", - "Dates": "Termíny", + "Dates": "Data", "DelayingDownloadUntil": "Zpoždění stahování do {0} o {1}", "Delete": "Vymazat", "DeleteBackup": "Odstranit zálohu", @@ -306,10 +306,10 @@ "Backups": "Zálohy", "BindAddress": "Vázat adresu", "Blocklist": "Blocklist", - "BindAddressHelpText": "Platná IP adresa, localhost nebo '*' pro všechna rozhraní", + "BindAddressHelpText": "Platná IP adresa, localhost nebo ‚*‘ pro všechna rozhraní", "ChmodFolderHelpText": "Octal, aplikováno během importu / přejmenování na mediální složky a soubory (bez provádění bitů)", "ChownGroupHelpText": "Název skupiny nebo gid. Použijte gid pro vzdálené systémy souborů.", - "Clear": "Vyčistit", + "Clear": "Vymazat", "ClientPriority": "Priorita klienta", "CloneIndexer": "Klonovat indexátor", "CompletedDownloadHandling": "Zpracování stahování bylo dokončeno", @@ -474,9 +474,9 @@ "BeforeUpdate": "Před aktualizací", "Close": "Zavřít", "Connect": "Připojit", - "Custom": "Zvyk", + "Custom": "Vlastní", "CustomFilters": "Vlastní filtry", - "Date": "datum", + "Date": "Datum", "DoNotPrefer": "Nepřednostňovat", "DoNotUpgradeAutomatically": "Neupgradovat automaticky", "DownloadFailed": "Stažení se nezdařilo", @@ -635,9 +635,9 @@ "RemovingTag": "Odebírání značky", "Required": "Požadované", "SetTags": "Nastavit značky", - "ApplyTagsHelpTextAdd": "Přidat: Přidá značky k již existujícímu seznamu", - "ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané značky", - "ApplyTagsHelpTextReplace": "Nahradit: Nahradit značky zadanými značkami (prázdné pole vymaže všechny značky)", + "ApplyTagsHelpTextAdd": "Přidat: Přidat štítky do existujícího seznamu štítků", + "ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané štítky", + "ApplyTagsHelpTextReplace": "Nahradit: Nahradit štítky zadanými štítky (prázdné pole vymaže všechny štítky)", "DeleteSelectedIndexers": "Odstranit indexer", "NoEventsFound": "Nebyly nalezeny žádné události", "Yes": "Ano", @@ -647,7 +647,7 @@ "DeleteSelectedIndexersMessageText": "Opravdu chcete smazat {count} vybraný(ch) indexer(ů)?", "ApplyTagsHelpTextHowToApplyArtists": "Jak použít značky na vybrané umělce", "ApplyTagsHelpTextHowToApplyImportLists": "Jak použít značky na vybrané seznamy k importu", - "ApplyTagsHelpTextHowToApplyIndexers": "Jak použít značky na vybrané indexery", + "ApplyTagsHelpTextHowToApplyIndexers": "Jak použít štítky na vybrané indexery", "DeleteSelectedImportListsMessageText": "Opravdu chcete smazat {count} vybraných seznamů k importu?", "ApplyTagsHelpTextHowToApplyDownloadClients": "Jak použít značky na vybrané klienty pro stahování", "SuggestTranslationChange": "Navrhnout změnu překladu", @@ -655,9 +655,9 @@ "AllResultsAreHiddenByTheAppliedFilter": "Všechny výsledky jsou schovány použitým filtrem", "NoResultsFound": "Nebyly nalezeny žádné výsledky", "SomeResultsAreHiddenByTheAppliedFilter": "Některé výsledky jsou použitým filtrem skryty", - "ConnectionLost": "Spojení ztraceno", + "ConnectionLost": "Ztráta spojení", "ConnectionLostReconnect": "{appName} se pokusí připojit automaticky, nebo můžete kliknout na tlačítko znovunačtení níže.", - "ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude třebaho znovu načíst.", + "ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude potřeba ho znovu načíst.", "RecentChanges": "Nedávné změny", "WhatsNew": "Co je nového?", "NotificationStatusSingleClientHealthCheckMessage": "Seznamy nejsou k dispozici z důvodu selhání: {0}", @@ -670,7 +670,7 @@ "Clone": "Klonovat", "AddConnection": "Přidat spojení", "AddReleaseProfile": "Přidat profil vydání", - "ApplicationUrlHelpText": "Externí adresa URL této aplikace včetně http(s)://, portu a základní adresy URL", + "ApplicationUrlHelpText": "Externí adresa URL této aplikace včetně http(s)://, portu a základu URL", "ApplyChanges": "Použít změny", "AutoAdd": "Přidat automaticky", "AutomaticAdd": "Přidat automaticky", @@ -678,11 +678,11 @@ "AutomaticUpdatesDisabledDocker": "Automatické aktualizace nejsou při použití aktualizačního mechanismu Docker přímo podporovány. Obraz kontejneru je nutné aktualizovat mimo {appName} nebo použít skript", "ApplicationURL": "URL aplikace", "AddConditionImplementation": "Přidat podmínku - {implementationName}", - "AddConnectionImplementation": "Přidat spojení - {implementationName}", - "AddDownloadClientImplementation": "Přidat klienta pro stahování - {implementationName}", + "AddConnectionImplementation": "Přidat spojení – {implementationName}", + "AddDownloadClientImplementation": "Přidat klienta pro stahování – {implementationName}", "AddImportList": "Přidat importované položky", "AddImportListImplementation": "Přidat seznam k importu - {implementationName}", - "AddIndexerImplementation": "Přidat indexer - {implementationName}", + "AddIndexerImplementation": "Přidat indexer – {implementationName}", "Absolute": "Úplné", "AppUpdatedVersion": "{appName} byl aktualizován na verzi `{version}`, abyste získali nejnovější změny, musíte znovu načíst {appName}", "Label": "Etiketa", @@ -746,10 +746,10 @@ "AlbumStudio": "Studio alba", "DisabledForLocalAddresses": "Zakázáno pro místní adresy", "AuthenticationMethod": "Metoda ověřování", - "AuthenticationMethodHelpTextWarning": "Prosím vyberte platnou metodu ověřování", - "AuthenticationRequiredPasswordHelpTextWarning": "Vložte nové heslo", - "AuthenticationRequiredUsernameHelpTextWarning": "Vložte nové uživatelské jméno", - "AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName} povolení ověření. Ověřování z místních adres můžete volitelně zakázat.", + "AuthenticationMethodHelpTextWarning": "Vyberte platnou metodu ověřování", + "AuthenticationRequiredPasswordHelpTextWarning": "Zadejte nové heslo", + "AuthenticationRequiredUsernameHelpTextWarning": "Zadejte nové uživatelské jméno", + "AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName}, aby bylo povoleno ověřování. Volitelně můžete zakázat ověřování z místních adres.", "Auto": "Auto", "AddAutoTag": "Přidat automatickou značku", "AddCondition": "Přidat podmínku", @@ -789,8 +789,8 @@ "Table": "Stůl", "AuthBasic": "Základní (vyskakovací okno prohlížeče)", "AuthForm": "Formuláře (přihlašovací stránka)", - "AuthenticationRequired": "Vyžadované ověření", - "AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Pokud nerozumíte rizikům, neměňte je.", + "AuthenticationRequired": "Vyžadováno ověření", + "AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Neměňte, pokud nerozumíte rizikům.", "AddNewArtistSearchForMissingAlbums": "Začněte hledat chybějící film", "DownloadClientSortingCheckMessage": "Klient pro stahování {downloadClientName} má nastaveno třídění {sortingMode} pro kategorii {appName}. Ve svém klientovi pro stahování byste měli třídění zakázat, abyste se vyhnuli problémům s importem.", "Negate": "Negovat", @@ -840,10 +840,10 @@ "UiSettingsSummary": "Možnosti kalendáře, data a barev", "CustomFormatsSettingsSummary": "Vlastní formáty a nastavení", "ArtistIndexFooterDownloading": "Stahování", - "AutomaticSearch": "Vyhledat automaticky", + "AutomaticSearch": "Automatické vyhledávání", "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName} nebyl schopen určit, pro který film je toto vydání určeno. {appName} nemusí být schopen toto vydání automaticky importovat. Chcete chytit „{0}“?", "IndexerFlags": "Příznaky indexeru", - "CustomFilter": "Vlastní filtry", + "CustomFilter": "Vlastní filtr", "FormatAgeHour": "hodina", "FormatAgeHours": "hodin", "FormatAgeMinute": "minuta", @@ -874,7 +874,7 @@ "DeleteSelectedCustomFormats": "Odstranění vlastního formátu", "DeleteSelectedCustomFormatsMessageText": "Opravdu chcete smazat {count} vybraných seznamů k importu?", "IncludeCustomFormatWhenRenaming": "Při přejmenování zahrnout vlastní formát", - "AptUpdater": "K instalaci aktualizace použijte apt", + "AptUpdater": "K instalaci aktualizace používat apt", "DockerUpdater": "aktualizujte kontejner dockeru, abyste aktualizaci obdrželi", "InstallLatest": "Nainstalujte nejnovější", "Shutdown": "Vypnout", @@ -888,5 +888,6 @@ "Min": "Min", "Preferred": "Upřednostňováno", "Today": "Dnes", - "MappedNetworkDrivesWindowsService": "Mapované síťové jednotky nejsou k dispozici, když běží jako služba Windows. Další informace najdete v častých dotazech" + "MappedNetworkDrivesWindowsService": "Mapované síťové jednotky nejsou k dispozici, když běží jako služba Windows. Další informace najdete v častých dotazech", + "DownloadClientSettingsRecentPriority": "Priorita klienta" } diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index be5a06f3b..ada9bc159 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -797,5 +797,6 @@ "Today": "I dag", "Episode": "afsnit", "MetadataProfile": "metadataprofil", - "Min": "Min" + "Min": "Min", + "DownloadClientSettingsRecentPriority": "Kundens prioritet" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index 462fd39f1..5a4c66524 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -1286,5 +1286,9 @@ "Max": "Max", "Min": "Min", "Today": "Heute", - "MappedNetworkDrivesWindowsService": "Zugriff auf gemappte Netzlaufwerke ist nicht verfügbar, wenn als Windows-Dienst ausgeführt. Weitere Informationen findest du in den [FAQ]({url})." + "MappedNetworkDrivesWindowsService": "Zugriff auf gemappte Netzlaufwerke ist nicht verfügbar, wenn als Windows-Dienst ausgeführt. Weitere Informationen findest du in den [FAQ]({url}).", + "DownloadClientSettingsOlderPriority": "Ältere Priorität", + "DownloadClientSettingsPostImportCategoryHelpText": "Kategorie für {appName}, die nach dem Importieren des Downloads festgelegt wird. {appName} wird Torrents in dieser Kategorie nicht entfernen, auch wenn das Seeding beendet ist. Leer lassen, um dieselbe Kategorie beizubehalten.", + "DownloadClientSettingsRecentPriority": "Neueste Priorität", + "PostImportCategory": "Post-Import-Kategorie" } diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index 6f5e6e3a9..d1bed1f99 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -1120,5 +1120,6 @@ "Preferred": "Προνομιούχος", "Min": "Ελάχ", "Today": "Σήμερα", - "MappedNetworkDrivesWindowsService": "Οι αντιστοιχισμένες μονάδες δίσκου δικτύου δεν είναι διαθέσιμες κατά την εκτέλεση ως υπηρεσία Windows. Ανατρέξτε στις Συχνές Ερωτήσεις για περισσότερες πληροφορίες" + "MappedNetworkDrivesWindowsService": "Οι αντιστοιχισμένες μονάδες δίσκου δικτύου δεν είναι διαθέσιμες κατά την εκτέλεση ως υπηρεσία Windows. Ανατρέξτε στις Συχνές Ερωτήσεις για περισσότερες πληροφορίες", + "DownloadClientSettingsRecentPriority": "Προτεραιότητα πελάτη" } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index b389a2e69..e7bf4a4a4 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -1340,5 +1340,11 @@ "Max": "Máximo", "Today": "Hoy", "Min": "Min", - "MappedNetworkDrivesWindowsService": "Los discos de red mapeados no están disponibles cuando se ejecutan como un servicio de Windows, consulta el [FAQ]({url}) para más información." + "MappedNetworkDrivesWindowsService": "Los discos de red mapeados no están disponibles cuando se ejecutan como un servicio de Windows, consulta el [FAQ]({url}) para más información.", + "DownloadClientSettingsOlderPriority": "Priorizar más antiguos", + "DownloadClientSettingsPostImportCategoryHelpText": "Categoría para que {appName} establezca una vez se haya importado la descarga. {appName} no eliminará torrents en esa categoría incluso si finalizó el sembrado. Dejar en blanco para mantener la misma categoría.", + "DownloadClientSettingsRecentPriority": "Priorizar recientes", + "PostImportCategory": "Categoría de post-importación", + "DownloadClientSettingsRecentPriorityAlbumHelpText": "Prioridad a usar cuando se capturen álbumes lanzados en los últimos 14 días", + "DownloadClientSettingsOlderPriorityAlbumHelpText": "Prioridad a usar cuando se capturen álbumes lanzados hace más de 14 días" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 926d1f0b9..5044f48de 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -13,16 +13,16 @@ "Host": "Osoite", "IllRestartLater": "Käynnistän uudelleen myöhemmin", "EnableRSS": "RSS-syöte", - "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS-syötettä ei ole käytettävissä tälle tietolähteelle", + "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "Tämän tietolähteen kanssa ei voida käyttää RSS-syötettä.", "Logging": "Lokikirjaus", "ProxyBypassFilterHelpText": "Erota aliverkkotunnukset pilkuilla ja käytä jokerimerkkinä tähteä ja pistettä (*.). Esimerkki: www.esimerkki.fi,*.esimerkki.fi).", "UnableToAddANewIndexerPleaseTryAgain": "Uuden tietolähteen lisäys epäonnistui. Yritä uudelleen.", "ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Lue lisää tietolähteestä painamalla 'Lisätietoja'.", - "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Saat tietoja yksittäisistä lataustyökaluista painamalla niiden ohessa olevia lisätietopainikkeita.", - "RssSyncIntervalHelpText": "Aikaväli minuutteina. Arvo \"0\" (nolla) kytkee toiminnon pois käytöstä pysäyttäen automaattisen julkaisukaappauksen täysin.", + "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Saat lisätietoja yksittäisistä latauspalveluista painamalla niiden ohessa olevia lisätietopainikkeita.", + "RssSyncIntervalHelpText": "Aikaväli minuutteina. Poista toiminto käytöstä asettamalla arvoksi 0, joka pysäyttää automaattisen julkaisukaappauksen täysin.", "DefaultLidarrTags": "Oletusarvoiset {appName}-oletustunnisteet", "DefaultTagsHelpText": "Kansiosta löydetyille esittäjille oletusarvoisesti määritettävät {appName}-tunnisteet.", - "IsTagUsedCannotBeDeletedWhileInUse": "Tunnistetta ei voi poistaa, koska se on käytössä", + "IsTagUsedCannotBeDeletedWhileInUse": "Tunnistetta ei voida poistaa kun se on käytössä.", "LidarrTags": "{appName}-tunnisteet", "RemoveTagRemovingTag": "Tunniste poistetaan", "ChmodFolderHelpText": "Octal, sovelletaan tuonnin/nimeämisen yhteydessä mediakansioihin ja -tiedostoihin (ilman suoritusbittejä).", @@ -37,41 +37,41 @@ "NoLeaveIt": "Ei, anna olla", "Torrents": "Torrentit", "InteractiveSearch": "Etsi manuaalisesti", - "BackupRetentionHelpText": "Säilytysjaksoa vanhemmat varmuuskopiot siivotaan automaattisesti.", - "ConnectSettings": "Kytkösasetukset", + "BackupRetentionHelpText": "Säilytysaikaa vanhemmat varmuuskopiot siivotaan automaattisesti.", + "ConnectSettings": "Ilmoituspavelun asetukset", "DatabaseMigration": "Tietokannan siirto", "DeleteBackupMessageText": "Haluatko varmasti poistaa varmuuskopion \"{name}\"?", "DeleteNotificationMessageText": "Haluatko varmasti poistaa ilmoituspalvelun \"{name}\"?", - "EnableCompletedDownloadHandlingHelpText": "Tuo valmistuneet lataukset lataustyökalusta automaattisesti.", + "EnableCompletedDownloadHandlingHelpText": "Tuo valmistuneet lataukset latauspalvelusta automaattisesti.", "Indexer": "Tietolähde", - "UnableToAddANewDownloadClientPleaseTryAgain": "Uuden lataustyökalun lisäys epäonnistui. Yitä uudelleen.", + "UnableToAddANewDownloadClientPleaseTryAgain": "Latauspalvelun lisääminen epäonnistui. Yritä uudelleen.", "CalendarWeekColumnHeaderHelpText": "Näkyy jokaisen sarakkeen yläpuolella käytettäessä viikkonäkymää.", "ShownAboveEachColumnWhenWeekIsTheActiveView": "Näkyy jokaisen sarakkeen yläpuolella käytettäessä viikkonäkymää.", - "NotificationTriggers": "Laukaisimet", + "NotificationTriggers": "Ilmoituksen laukaisijat", "PackageVersion": "Paketin versio", "Port": "Portti", "Indexers": "Tietolähteet", - "ChownGroupHelpTextWarning": "Toimii vain, jos {appName}in suorittava käyttäjä on tiedoston omistaja. On parempi varmistaa, että lataustyökalu käyttää samaa ryhmää kuin {appName}.", + "ChownGroupHelpTextWarning": "Toimii vain, jos {appName}in suorittava käyttäjä on tiedoston omistaja. On parempi varmistaa, että latauspalvelu käyttää samaa ryhmää kuin {appName}.", "CopyUsingHardlinksHelpText": "Hardlink-kytkösten avulla {appName} voi tuoda jaettavat torrentit ilman niiden täyttä kopiointia ja levytilan kaksinkertaista varausta. Tämä toimii vain lähde- ja kohdesijaintien ollessa samalla tallennusmedialla.", "CopyUsingHardlinksHelpTextWarning": "Tiedostojen käsittelystä johtuvat lukitukset saattavat joskus estää jaettavien tiedostojen uudelleennimeämisen. Voit keskeyttää jakamisen väliaikaisesti ja käyttää {appName}in nimeämistoimintoa.", "DeleteImportListMessageText": "Haluatko varmasti poistaa listan \"{name}\"?", "DeleteIndexerMessageText": "Haluatko varmasti poistaa tietolähteen '{name}'?", "DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen \"{label}\"?", - "TagIsNotUsedAndCanBeDeleted": "Tunnistetta ei ole määritetty millekään kohteelle, joten sen voi poistaa.", + "TagIsNotUsedAndCanBeDeleted": "Tunniste ei ole käytössä ja voidaan poistaa.", "Security": "Suojaus", - "LidarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName} tukee Newznab- ja Torznab-yhteensopivien tietolähteiden ohella myös monia muita alla lueteltuja tietolähteitä.", + "LidarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName} tukee kaikkien Newznab-yhteensopivien tietolähteiden ohella myös monia muita alla listattuja tietolähteitä.", "Actions": "Toiminnot", "AddListExclusion": "Lisää listapoikkeus", - "ApiKeyHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.", + "ApiKeyHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", "APIKey": "Rajapinnan avain", "AppDataDirectory": "AppData-kansio", "Authentication": "Tunnistautuminen", - "AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana", - "AutoRedownloadFailedHelpText": "Etsi ja pyri lataamaan eri julkaisu automaattisesti.", + "AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana.", + "AutoRedownloadFailedHelpText": "Etsi ja pyri lataamaan korvaava julkaisu automaattisesti.", "BackupFolderHelpText": "Suhteelliset tiedostosijainnit ovat {appName}in AppData-kansiossa.", - "BackupIntervalHelpText": "Tietokannan ja asetusten automaattisen varmuuskopioinnin ajoitus.", + "BackupIntervalHelpText": "{appName}in tietokannan ja asetusten automaattisen varmuuskopioinnin ajoitus.", "BindAddressHelpText": "Toimiva IP-osoite, localhost tai * (tähti) kaikille verkkoliitännöille.", - "BindAddressHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.", + "BindAddressHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", "BackupNow": "Varmuuskopioi nyt", "Backups": "Varmuuskopiot", "Blocklist": "Estolista", @@ -81,26 +81,26 @@ "Branch": "Haara", "ClickToChangeQuality": "Vaihda laatua painamalla tästä", "ChownGroupHelpText": "Ryhmän nimi tai GID. Käytä GID:tä etätiedostojärjestelmille.", - "ChmodFolderHelpTextWarning": "Tämä toimii vain, jos käyttäjä suorittaa {appName}in tiedoston omistajana. Parempi vaihtoehto on varmistaa, että lataustyökalu asettaa oikeudet oikein.", + "ChmodFolderHelpTextWarning": "Toimii vain, jos käyttäjä suorittaa {appName}in tiedoston omistajana. Parempi vaihtoehto on varmistaa, että latauspalvelu asettaa oikeudet oikein.", "BlocklistRelease": "Lisää julkaisu estolistalle", "Columns": "Sarakkeet", "Calendar": "Kalenteri", "CompletedDownloadHandling": "Valmistuneiden latausten käsittely", "CloneIndexer": "Monista tietolähde", - "CancelPendingTask": "Haluatko varmasti perua tämän odottavan tehtävän?", + "CancelPendingTask": "Haluatko varmasti perua odottavan tehtävän?", "CertificateValidation": "Varmenteen vahvistus", "CertificateValidationHelpText": "Määritä HTTPS-varmennevahvistuksen tiukkuus. Älä muta, jos et ymmärrä riskejä.", - "ClientPriority": "Lataustyökalun painotus", + "ClientPriority": "Latauspalvelun painotus", "CloneProfile": "Monista profiili", "ChangeFileDate": "Muuta tiedoston päiväys", "ChangeHasNotBeenSavedYet": "Muutosta ei ole vielä tallennettu", "Component": "Komponentti", - "Connections": "Yhteydet", + "Connections": "Ilmoituspalvelut", "CreateGroup": "Luo ryhmä", - "CutoffHelpText": "Kun tämä laatu on saavutettu, {appName} ei enää lataa elokuvia", + "CutoffHelpText": "Kun tämä laatutaso on saavutettu, ei {appName} enää kaappaa albumeita.", "DelayProfile": "Viiveprofiili", "Delete": "Poista", - "CutoffUnmet": "Katkaisutasoa ei savutettu", + "CutoffUnmet": "Katkaisutasoa ei saavutettu", "Dates": "Päiväykset", "DelayProfiles": "Viiveprofiilit", "DeleteBackup": "Poista varmuuskopio", @@ -112,10 +112,10 @@ "DeleteImportListExclusionMessageText": "Haluatko varmasti poistaa tuontilistapoikkeuksen?", "DeleteFilesHelpText": "Poista kappaletiedostot ja esittäjäkansio", "DeleteImportList": "Poista tuontilista", - "DeleteDownloadClient": "Poista lataustyökalu", - "DeleteDownloadClientMessageText": "Haluatko varmasti poistaa lataustyökalun \"{name}\"?", + "DeleteDownloadClient": "Poista latauspalvelu", + "DeleteDownloadClientMessageText": "Haluatko varmasti poistaa latauspalvelun \"{name}\"?", "DeleteIndexer": "Poista tietolähde", - "DeleteNotification": "Poista ilmoitus", + "DeleteNotification": "Poista ilmoituspalvelu", "DeleteQualityProfile": "Poista laatuprofiili", "DeleteQualityProfileMessageText": "Haluatko varmasti poistaa laatuprofiilin \"{name}\"?", "DeleteReleaseProfile": "Poista julkaisuprofiili", @@ -126,13 +126,13 @@ "Docker": "Docker", "DetailedProgressBar": "Yksityiskohtainen tilapalkki", "DetailedProgressBarHelpText": "Näytä teksti edistymispalkissa.", - "DownloadClient": "Lataustyökalu", - "DownloadClients": "Lataustyökalut", + "DownloadClient": "Latauspalvelu", + "DownloadClients": "Latauspalvelut", "DiskSpace": "Levytila", - "DownloadFailedCheckDownloadClientForMoreDetails": "Lataus epäonnistui: Katso tarkemmat tiedot lataustyökalusta", + "DownloadFailedCheckDownloadClientForMoreDetails": "Lataus epäonnistui: katso tarkemmat tiedot latauspalvelusta.", "DownloadFailedInterp": "Lataus epäonnistui: {0}", - "DownloadPropersAndRepacksHelpTexts1": "Määrittää päivitetäänkö tiedostot automaattisesti Proper- ja Repack-julkaisuihin (kunnollinen/uudelleenpaketoitu).", - "DownloadWarningCheckDownloadClientForMoreDetails": "Latausvaroitus: Katso tarkempia tietoja lataustyökalusta", + "DownloadPropersAndRepacksHelpTexts1": "Määrittää päivitetäänkö tiedostot automaattisesti Proper-/Repack-julkaisuihin.", + "DownloadWarningCheckDownloadClientForMoreDetails": "Latausvaroitus: katso tarkemmat tiedot latauspalvelusta.", "DeleteTag": "Poista tunniste", "EnableColorImpairedMode": "Heikentyneen värinäön tila", "EnableAutomaticSearch": "Käytä automaattihakua", @@ -140,7 +140,7 @@ "EnableHelpText": "Luo metatietotiedostot tälle metatietotyypille.", "ExistingTagsScrubbed": "Olemassa olevat tunnisteet on poistettu", "EnableSSL": "SSL-salaus", - "EnableSslHelpText": " Käyttöönotto vaatii uudelleenkäynnistyksen järjestelmänvavojan oikeuksilla.", + "EnableSslHelpText": " Käyttöönotto vaatii uudelleenkäynnistyksen järjestelmänvalvojan oikeuksilla.", "ErrorLoadingContents": "Virhe ladattaessa sisältöjä", "FirstDayOfWeek": "Viikon ensimmäinen päivä", "ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Lue lisää tuontilistoista painamalla 'Lisätietoja'.", @@ -150,10 +150,10 @@ "Group": "Ryhmä", "Hostname": "Osoite", "Importing": "Tuodaan", - "IncludeUnknownArtistItemsHelpText": "Näytä jonossa kohteet, joissa ei ole esittäjää. Tämä voi sisältää poistettuja esittäjiä, kappaleita tai mitä tahansa muuta {appName}ille luokiteltua.", + "IncludeUnknownArtistItemsHelpText": "Näytä jonossa kohteet, joissa ei ole esittäjää. Tämä voi sisältää poistettuja esittäjiä, albumeita tai mitä tahansa muuta {appName}ille luokiteltua.", "Interval": "Ajoitus", "IndexerSettings": "Tietolähdeasetukset", - "LidarrSupportsAnyDownloadClientThatUsesTheNewznabStandardAsWellAsOtherDownloadClientsListedBelow": "Monet torrent- ja Usenet-lataajat ovat tuettuja.", + "LidarrSupportsAnyDownloadClientThatUsesTheNewznabStandardAsWellAsOtherDownloadClientsListedBelow": "{appName} tukee monia torrent- ja Usenet-lataajia.", "MetadataSettings": "Metatietoasetukset", "MediaManagementSettings": "Medianhallinnan asetukset", "MaximumSizeHelpText": "Kaapattavien julkaisujen enimmäiskoko megatavuina. Arvo \"0\" (nolla) poistaa rajoituksen.", @@ -172,10 +172,10 @@ "Queue": "Jono", "QualityDefinitions": "Laatumääritykset", "Reload": "Lataa uudelleen", - "RemotePathHelpText": "Lataustyökalun käyttämän kansion juurisijainti.", + "RemotePathHelpText": "Latauspalvelun käyttämän kansion juurisijainti.", "RemoveTagExistingTag": "Tunniste on jo olemassa", - "ReplaceIllegalCharactersHelpText": "Korvaa laittomat merkit vaihtoehtoisella merkinnällä. Jos ei valittu, ne poistetaan.", - "RequiresRestartToTakeEffect": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.", + "ReplaceIllegalCharactersHelpText": "Korvaa laittomat merkit vaihtoehtoisella merkinnällä. Jos ei valittu, {appName} poistaa ne.", + "RequiresRestartToTakeEffect": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", "Reset": "Uudista", "Restore": "Palauta", "RSSSync": "Synkronoi RSS", @@ -188,31 +188,31 @@ "ShowRelativeDatesHelpText": "Korvaa absoluuttiset päiväykset suhteellisilla päiväyksillä (tänään/eilen/yms.).", "ShowSearch": "Näytä haku", "ShowSizeOnDisk": "Näytä koko levyllä", - "ShowTitleHelpText": "Näytä esittäjän nimi julisteen alla", - "SslCertPasswordHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.", - "SslCertPathHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.", - "SslPortHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.", + "ShowTitleHelpText": "Näytä esittäjän nimi julisteen alla.", + "SslCertPasswordHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", + "SslCertPathHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", + "SslPortHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", "ShowUnknownArtistItems": "Näytä 'Tuntematon esittäjä' -kohde", "StartupDirectory": "Käynnistyskansio", "StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta", "SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Profiilia käytetään manuaalihakuun.", "Tags": "Tunnisteet", "TestAll": "Kaikkien testaus", - "TestAllClients": "Lataustyökalujen testaus", + "TestAllClients": "Koesta latauspalvelut", "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Tämä koskee kaikkia tietolähteitä. Noudata niiden asettamia sääntöjä.", "TagAudioFilesWithMetadata": "Tallenna metatiedot äänitiedostoihin", "TestAllIndexers": "Tietolähteiden testaus", - "UnableToLoadBackups": "Varmuuskopioiden lataus epäonnistui", - "UnableToLoadDownloadClients": "Lataustyökalujen lataus ei onistu", - "UnableToLoadGeneralSettings": "Virhe ladattaessa yleisiä asetuksia", - "UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui.", - "UnableToLoadIndexerOptions": "Tietolähdeasetusten lataus ei onnistu", + "UnableToLoadBackups": "Varmuuskopioinnin lataus epäonnistui", + "UnableToLoadDownloadClients": "Latauspalveluiden lataus epäonnistui", + "UnableToLoadGeneralSettings": "Yleisasetusten lataus epäonnistui", + "UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui", + "UnableToLoadIndexerOptions": "Tietolähdeasetusten lataus epäonnistui", "UnableToLoadImportListExclusions": "Tuontilistapoikkeusten lataus epäonnistui", "UnableToLoadHistory": "Historian lataus epäonnistui", - "UnableToLoadTags": "Tunnisteiden lataus ei onnistu", - "UnableToLoadQualityDefinitions": "Virhe ladattaessa laatumäärityksiä", + "UnableToLoadTags": "Tunnisteiden lataus epäonnistui", + "UnableToLoadQualityDefinitions": "Laatumääritysten lataus epäonnistui", "UpdateScriptPathHelpText": "Polku komentosarjaan, joka käsittelee puretun päivitystiedoston ja hoitaa asennuksen loppuosuuden.", - "UrlBaseHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.", + "UrlBaseHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", "UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Ulkoisen päivitysratkaisun käyttämä kehityshaara.", "Version": "Versio", "Uptime": "Käyttöaika", @@ -227,10 +227,10 @@ "AlternateTitleslength1Title": "Nimike", "Analytics": "Analytiikka", "AlternateTitleslength1Titles": "Nimikkeet", - "AnalyticsEnabledHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.", + "AnalyticsEnabledHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", "Automatic": "Automaattinen", "Clear": "Tyhjennä", - "DelayingDownloadUntil": "Lataus on siirretty alkamaan {0} klo {1}", + "DelayingDownloadUntil": "Lataus on lykätty alkamaan {date} klo {time}", "ScrubAudioTagsHelpText": "Poista olemassa olevat tagit tiedostoista säilyttäen vain {appName}in lisäämät tagit.", "ScrubExistingTags": "Tyhjennä olemassa olevat tunnisteet", "ScriptPath": "Komentosarjan sijainti", @@ -239,14 +239,14 @@ "SkipFreeSpaceCheck": "Ohita vapaan tilan tarkastus", "WeekColumnHeader": "Viikkosarakkeen otsikko", "ChmodFolder": "chmod-kansio", - "UnableToAddANewNotificationPleaseTryAgain": "Kytköksen lisäys epäonnistui. Yritä uudelleen.", + "UnableToAddANewNotificationPleaseTryAgain": "Ilmoituspalvelun lisääminen epäonnistui. Yritä uudelleen.", "ApplyTags": "Tunnistetoimenpide", - "UnableToLoadNotifications": "Virhe ladattaessa kytköksiä", - "DownloadClientSettings": "Lataustyökalujen asetukset", + "UnableToLoadNotifications": "Ilmoituspalveluiden lataus epäonnistui", + "DownloadClientSettings": "Latauspalveluasetukset", "GeneralSettings": "Yleiset asetukset", "QualitySettings": "Laatuasetukset", "Settings": "Asetukset", - "UnableToLoadUISettings": "Virhe ladattaesssa käyttöliittymän asetuksia", + "UnableToLoadUISettings": "Käyttöliittymäasetusten lataus epäonnistui", "UpdateAutomaticallyHelpText": "Lataa ja asenna päivitykset automaattisesti. Voit myös edelleen suorittaa asennuksen järjestelmäasetusten päivitykset-osiosta.", "Filename": "Tiedostonimi", "YesCancel": "Kyllä, peru", @@ -291,18 +291,18 @@ "TorrentDelayHelpText": "Minuuttiviive, joka odotetaan ennen julkaisun Torrent-kaappausta.", "UnableToAddANewQualityProfilePleaseTryAgain": "Laatuprofiilin lisäys epäonnistui. Yritä uudelleen.", "UnableToAddANewRemotePathMappingPleaseTryAgain": "Etäsijainnin kohdistuksen lisäys epäonnistui. Yritä uudelleen.", - "UnableToLoadBlocklist": "Estonlistan lataus epäonnistui.", - "UnableToLoadDelayProfiles": "Virhe ladattaessa viiveprofiileja", - "UnableToLoadDownloadClientOptions": "Lataustyökalun asetusten lataus epäonnistui", - "UnableToLoadLists": "Tuontilistojen lataus epäonnistui.", - "UnableToLoadRootFolders": "Pääkansioiden lataus epäonnistui.", - "UnableToLoadTheCalendar": "Kalenterin lataus epäonnistui.", + "UnableToLoadBlocklist": "Estolistan lataus epäonnistui", + "UnableToLoadDelayProfiles": "Viiveprofiilien lataus epäonnistui", + "UnableToLoadDownloadClientOptions": "Latauspalveluasetusten lataus epäonnistui", + "UnableToLoadLists": "Listojen lataus epäonnistui", + "UnableToLoadRootFolders": "Juurikansioiden lataus epäonnistui", + "UnableToLoadTheCalendar": "Kalenterin lataus epäonnistui", "Unmonitored": "Valvomattomat", - "UnableToLoadMediaManagementSettings": "Virhe ladattaessa mediatiedostojen hallinta-asetuksia", - "UnableToLoadMetadata": "Virhe ladattaessa metatietoja", - "UnableToLoadNamingSettings": "Virhe ladattaessa nimeämisasetuksia", - "UnableToLoadQualities": "Laatujen lataus epäonnistui.", - "UnableToLoadQualityProfiles": "Virhe ladattaessa laatuprofiileja", + "UnableToLoadMediaManagementSettings": "Mediatiedostojen hallinta-asetusten lataus epäonnistui", + "UnableToLoadMetadata": "Metatietojen lataus epäonnistui", + "UnableToLoadNamingSettings": "Nimeämisasetusten lataus epäonnistui", + "UnableToLoadQualities": "Laatujen lataus epäonnistui", + "UnableToLoadQualityProfiles": "Laatuprofiilien lataus epäonnistui", "UnableToLoadRemotePathMappings": "Etäsijaintien kohdistusten lataus epäonnistui", "UnmonitoredHelpText": "Sisällytä ei-valvotut albumit iCal-syötteeseen.", "UpdateAll": "Päivitä kaikki", @@ -311,15 +311,15 @@ "UseHardlinksInsteadOfCopy": "Käytä hardlink-kytköksiä", "MinimumFreeSpaceWhenImportingHelpText": "Estä tuonti, jos sen jälkeinen vapaa levytila olisi tässä määritettyä pienempi.", "Folders": "Kansiot", - "RecycleBinCleanupDaysHelpText": "Arvo \"0\" (nolla) poistaa automaattisen tyhjennyksen käytöstä.", + "RecycleBinCleanupDaysHelpText": "Poista automaattinen tyhjennys käytöstä asettamalla arvoksi 0.", "RecycleBinCleanupDaysHelpTextWarning": "Määritettyä päiväystä vanhemmat tiedostot poistetaan roskakorista automaattisesti.", "RootFolders": "Juurikansiot", "Path": "Tiedostosijainti", "TorrentDelay": "Torrent-viive", "SearchForMissing": "Etsi puuttuvia", - "Source": "Lähdekoodi", + "Source": "Lähde", "ShowCutoffUnmetIconHelpText": "Näytä kuvake tiedostoille, joiden määritettyä katkaisutasoa ei ole vielä saavutettu.", - "ShowMonitoredHelpText": "Näytä valvonnan tila julisteen alla.", + "ShowMonitoredHelpText": "Näytä valvontatila julisteen alla.", "ShowMonitored": "Näytä valvontatila", "ShouldMonitorHelpText": "Valvo tältä tuontilistalta lisättyjä uusia esittäjiä ja albumeita.", "TimeFormat": "Kellonajan esitys", @@ -337,25 +337,25 @@ "AllowArtistChangeClickToChangeArtist": "Paina vaihtaaksesi kirjailijaa", "Season": "Kausi", "ArtistAlbumClickToChangeTrack": "Vaihda kirjaa painamalla", - "ArtistFolderFormat": "Esittäjäkansion kaava", - "ArtistNameHelpText": "Poissuljettavan kirjailijan/kirjan nimi (voi olla mitä tahansa merkityksellistä)", + "ArtistFolderFormat": "Esittäjäkansioiden kaava", + "ArtistNameHelpText": "Ohitettavan esittäjän tai albumin nimi (voi olla mitä tahansa merkityksellistä).", "CreateEmptyArtistFoldersHelpText": "Luo puuttuvat kirjailijakansiot kirjastotarkistusten yhteydessä", "DefaultMetadataProfileIdHelpText": "Kansiosta löydetyille esittäjille oletustusarvoisesti asetettava metatietoprofiili.", "DefaultQualityProfileIdHelpText": "Kansiosta löydetyille esittäjille oletustusarvoisesti asetettava laatuprofiili.", "History": "Historia", - "HostHelpText": "Sama osoite, joka on määritty etälataustyökalulle.", + "HostHelpText": "Sama osoite, joka on määritetty etälatauspalvelulle.", "ICalFeed": "iCal-syöte", "ImportFailedInterp": "Tuonti epäonnistui: {0}", "RestartLidarr": "Käynnistä {appName} uudelleen", "RestartNow": "Käynnistä uudelleen nyt", "RestoreBackup": "Palauta varmuuskopio", - "RetentionHelpText": "Vain Usenet: Aseta nollaan asettamaan rajoittamaton säilytys", - "RetryingDownloadOn": "Yritetään ladata uudelleen {0} osoitteessa {1}", + "RetentionHelpText": "Vain Usenet: määritä rajoittamaton säilytys asettamalla arvoksi 0.", + "RetryingDownloadOn": "Yritetään latausta uudelleen {date} klo {time}", "TestAllLists": "Kaikkien listojen testaus", "Time": "Aika", "TotalFileSize": "Kokonaistiedostokoko", "Track": "Valvo", - "UnableToLoadReleaseProfiles": "Viiveprofiileja ei voi ladata", + "UnableToLoadReleaseProfiles": "Julkaisuprofiilien lataus epäonnistui", "UsenetDelayHelpText": "Minuuttiviive, joka odotetaan ennen julkaisun Usenet-kaappausta.", "UseProxy": "Käytä välityspalvelinta", "UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti rajapinnan kanssa viestinyt sovellus.", @@ -386,7 +386,7 @@ "IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Päivitä, kunnes tämä laatu saavutetaan tai ylitetään", "Level": "Taso", "LocalPath": "Paikallinen sijainti", - "LocalPathHelpText": "Polku, jonka kautta etäsijaintia tulee käyttää paikallisesti.", + "LocalPathHelpText": "Sijainti, jonka kautta {appName}in tulee käyttää etäsijaintia paikallisesti.", "LogFiles": "Lokitiedostot", "LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "Jäljityskirjausta tulee käyttää vain tilapäisesti.", "LongDateFormat": "Pitkän päiväyksen esitys", @@ -396,7 +396,7 @@ "MaximumSize": "Enimmäiskoko", "Mechanism": "Mekanismi", "MediaInfo": "Median tiedot", - "Medium": "Keskikoko", + "Medium": "Keskikokoinen", "Message": "Viesti", "MinimumAge": "Vähimmäisikä", "MinimumAgeHelpText": "Vain Usenet: NZB:n vähimmäisikä minuutteina, ennen niiden kaappausta. Tämän avulla uusille julkaisuille voidaan antaa aikaa levitä Usenet-palveluntarjoajalle.", @@ -426,22 +426,22 @@ "Reason": "Syy", "Redownload": "Lataa uudelleen", "RefreshScan": "Päivitä ja tarkista", - "ReleaseDate": "Julkaisupäivät", + "ReleaseDate": "Julkaisupäivä", "ReleaseGroup": "Julkaisuryhmä", - "ReleaseRejected": "Vapautus hylätty", + "ReleaseRejected": "Julkaisu hylättiin", "ReleaseStatuses": "Julkaisutila", "ReleaseWillBeProcessedInterp": "Julkaisu käsitellään {0}", "RemotePath": "Etäsijainti", "RemotePathMappings": "Etäsijaintien kohdistukset", "Remove": "Poista", - "RemoveCompletedDownloadsHelpText": "Poista tuodut lataukset lataustyökalun historiasta", + "RemoveCompletedDownloadsHelpText": "Poista tuodut lataukset latauspalvelun historiasta", "RemovedFromTaskQueue": "Poistettu tehtäväjonosta", - "RemoveFailedDownloadsHelpText": "Poista epäonnistuneet lataukset lataustyökalun historiasta.", + "RemoveFailedDownloadsHelpText": "Poista epäonnistuneet lataukset latauspalvelun historiasta.", "RemoveFilter": "Poista suodatin", - "RemoveFromDownloadClient": "Poista lataustyökalusta", + "RemoveFromDownloadClient": "Poista latauspalvelusta", "RemoveFromQueue": "Poista jonosta", "RemoveSelected": "Poista valitut", - "RenameTracksHelpText": "Jos uudelleennimeäminen ei ole käytössä, käytetään nykyistä tiedostonimeä.", + "RenameTracksHelpText": "Jos uudelleennimeäminen ei ole käytössä, {appName} käyttää nykyistä tiedostonimeä.", "Reorder": "Järjestä uudelleen", "RescanArtistFolderAfterRefresh": "Tarkista kirjailijakansio päivityksen jälkeen uudelleen", "ResetAPIKeyMessageText": "Haluatko varmasti korvata rajapinnan avaimen uudella?", @@ -450,12 +450,12 @@ "RootFolder": "Juurikansio", "SSLCertPassword": "SSL-varmenteen salasana", "SslCertPasswordHelpText": "Pfx-tiedoston salasana", - "SslCertPathHelpText": "PFX-tiedoston sijainti", + "SslCertPathHelpText": "Pfx-tiedoston sijainti", "SSLPort": "SSL-portti", "StandardTrackFormat": "Tavallisten kappaleiden kaava", "Status": "Tila", - "SuccessMyWorkIsDoneNoFilesToRename": "Menestys! Työni on valmis, ei nimettäviä tiedostoja.", - "SuccessMyWorkIsDoneNoFilesToRetag": "Menestys! Työni on valmis, ei nimettäviä tiedostoja.", + "SuccessMyWorkIsDoneNoFilesToRename": "Valmis! Toiminto on suoritettu, eikä uudelleennimettäviä tiedostoja ole.", + "SuccessMyWorkIsDoneNoFilesToRetag": "Valmis! Toiminto on suoritettu, eikä tagimuutoksia vaativia tiedostoja ole.", "SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Tämä tietolähde ei tue hakua.", "SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByLidarr": "Profiilia käytetään automaattihaun yhteydessä, kun haku suoritetaan käyttöliittymästä tai {appName}in toimesta.", "Tasks": "Tehtävät", @@ -468,10 +468,10 @@ "UsenetDelay": "Usenet-viive", "NETCore": ".NET", "UiLanguageHelpText": "{appName}in käyttöliittymän kieli.", - "UiLanguageHelpTextWarning": "Selaimen sivupäivitys vaaditaan", + "UiLanguageHelpTextWarning": "Vaatii selaimen sivupäivityksen (F5).", "Ungroup": "Pura ryhmä", "WriteMetadataToAudioFiles": "Kirjoita metatiedot äänitiedostoihin", - "AlbumIsDownloadingInterp": "Kirjaa ladataan - {0} % {1}", + "AlbumIsDownloadingInterp": "Albumia ladataan – {0} % {1}", "AnyReleaseOkHelpText": "{appName} vaihtaa automaattisesti versioon, joka vastaa ladattuja tiedostoja parhaiten", "Label": "Nimi", "SourcePath": "Lähdesijainti", @@ -486,7 +486,7 @@ "AllArtistAlbums": "Kaikki artistin albumit", "MetadataProfile": "Metatietoprofiili", "OnApplicationUpdate": "Kun sovellus päivitetään", - "PathHelpTextWarning": "Tämä ei voi olla sama kansio, johon lataustyökalusi tallentaa tiedostot.", + "PathHelpTextWarning": "Tämä ei voi olla sama kansio, johon latauspalvelusi tallentaa tiedostot.", "QualityProfileIdHelpText": "Laatuprofiili, joka listalta lisätyille kohteille tulee asettaa.", "IsInUseCantDeleteAMetadataProfileThatIsAttachedToAnArtistOrImportList": "Esittäjään tai tuontilistaan liitettyä metatietoprofiilia ei voi poistaa.", "IsInUseCantDeleteAQualityProfileThatIsAttachedToAnArtistOrImportList": "Esittäjään tai tuontilistaan liitettyä laatuprofiilia ei voi poistaa.", @@ -501,10 +501,10 @@ "ExpandSingleByDefaultHelpText": "Singlet", "MetadataProfileIdHelpText": "Metatietoprofiili, joka listalta lisätyille kohteille tulee asettaa.", "MetadataProfiles": "Metatietoprofiilit", - "PathHelpText": "Musiikkikokoelmasi pääkansio.", + "PathHelpText": "Musiikkikokoelmasi sisältävä juurikansio.", "RemoveCompleted": "Poisto on suoritettu", "OnUpgrade": "Päivitettäessä", - "RemoveDownloadsAlert": "Poistoasetukset on siirretty yllä olevan taulukon lataustyökalukohtaisiin asetuksiin.", + "RemoveDownloadsAlert": "Poistoasetukset on siirretty yllä olevan taulukon latauspalvelukohtaisiin asetuksiin.", "SearchForAllMissingAlbums": "Etsi kaikkia puuttuvia albumeita", "OnGrab": "Kun julkaisu kaapataan", "OnHealthIssue": "Vakausongelmat", @@ -538,7 +538,7 @@ "Backup": "Varmuuskopiointi", "BeforeUpdate": "Ennen päivitystä", "Close": "Sulje", - "Connect": "Kytkökset", + "Connect": "Ilmoituspalvelut", "Custom": "Mukautettu", "CustomFilters": "Omat suodattimet", "Date": "Päiväys", @@ -568,7 +568,7 @@ "Info": "Informatiivinen", "InstanceName": "Instanssin nimi", "InstanceNameHelpText": "Instanssin nimi välilehdellä ja järjestelmälokissa.", - "InteractiveImport": "Manuaalituonti", + "InteractiveImport": "Manuaalinen tuonti", "LastDuration": "Edellinen kesto", "LastExecution": "Edellinen suoritus", "LastUsed": "Viimeksi käytetty", @@ -597,7 +597,7 @@ "RejectionCount": "Hylkäysmäärä", "ReleaseTitle": "Julkaisun nimike", "Replace": "Korvaa", - "RestartRequiredHelpTextWarning": "Käyttöönotto vaatii in uudelleenkäynnistyksen.", + "RestartRequiredHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", "RestoreBackupAdditionalInfo": "Huomioi: {appName} käynnistyy palautusprosessin aikana automaattisesti uudelleen.", "Save": "Tallenna", "Seeders": "Jakajat", @@ -620,11 +620,11 @@ "UnmonitoredOnly": "Vain valvomattomat", "UpgradesAllowed": "Päivitykset sallitaan", "Wanted": "Halutut", - "Warn": "Varoitus", + "Warn": "Varoita", "WouldYouLikeToRestoreBackup": "Haluatko palauttaa varmuuskopion \"{name}\"?", "AddRemotePathMapping": "Lisää etäsijainnin kohdistus", "FreeSpace": "Vapaa tila", - "IndexerDownloadClientHelpText": "Määritä tämän tietolähteen kanssa käytettävä lataustyökalu.", + "IndexerDownloadClientHelpText": "Määritä tämän tietolähteen kanssa käytettävä latauspalvelu.", "Ok": "Ok", "Organize": "Järjestä", "OutputPath": "Tallennussijainti", @@ -632,17 +632,17 @@ "Activity": "Tapahtumat", "EditDelayProfile": "Muokkaa viiveprofiilia", "Add": "Lisää", - "AddConnection": "Lisää yhteys", + "AddConnection": "Lisää ilmoituspavelu", "EditMetadataProfile": "Muokkaa metatietoprofiilia", "Database": "Tietokanta", "AllowFingerprinting": "Salli piiloleimaus", - "MassAlbumsCutoffUnmetWarning": "Haluatko varmasti etsiä '{0}' albumia, joiden katkaisutasoa ei ole saavutettu?", + "MassAlbumsCutoffUnmetWarning": "Haluatko varmasti etsiä kaikkia {0} albumia, joiden katkaisutasoa ei ole saavutettu?", "PastDaysHelpText": "Päivien määrä, jonka verran menneisyyteen iCal-syötettä seurataan.", "PrimaryTypes": "Ensisijaiset tyypit", "TrackNaming": "Kappaleiden nimeäminen", "DeleteRootFolder": "Poista juurikansio", "DeleteTrackFile": "Poista kappaletiedosto", - "DiscNumber": "Levyn numero", + "DiscNumber": "Levynumero", "DiscCount": "Levyjen määrä", "EnableProfile": "Käytä profiilia", "MissingAlbums": "Puuttuvat albumit", @@ -666,8 +666,8 @@ "TrackFilesCountMessage": "Kappaletiedostoja ei ole", "TrackImported": "Kappale tuotiin", "TrackMissingFromDisk": "Levyltä puuttuu kappale", - "TrackNumber": "Kappaleiden numero", - "UnableToLoadMetadataProviderSettings": "Metatietolähteen asetuksia ei voitu ladata", + "TrackNumber": "Kappalenumero", + "UnableToLoadMetadataProviderSettings": "Metatietolädeasetusten lataus epäonnistui", "UnmappedFiles": "Kohdistamattomat tiedostot", "FutureDays": "Tulevat päivät", "FutureDaysHelpText": "Päivien määrä, jonka verran tulevaisuuteen iCal-syötettä seurataan.", @@ -679,7 +679,7 @@ "EditGroups": "Muokkaa ryhmiä", "FirstAlbum": "Ensimmäinen albumi", "FirstAlbumData": "Seuraa ensimmäisiä albumeita. Muita albumeita ei huomioida.", - "ForeignIdHelpText": "Ohitettavan esittäjän/albumin MusicBrainz-tunniste.", + "ForeignIdHelpText": "Ohitettavan esittäjän tai albumin MusicBrainz-tunniste.", "FutureAlbums": "Tulevat albumit", "GoToArtistListing": "Avaa esittäjälistaus", "IsExpandedHideFileInfo": "Piilota tiedostojen tiedot", @@ -731,7 +731,7 @@ "TotalTrackCountTracksTotalTrackFileCountTracksWithFilesInterp": "Yhteensä {0} kappaletta. {1} kappaleelle on tiedostoja.", "TrackArtist": "Kappaleen esittäjä", "TrackCount": "Kappaleiden määrä", - "TrackDownloaded": "Kappale ladattu", + "TrackDownloaded": "Kappale on ladattu", "TrackProgress": "Kappaleiden edistyminen", "TrackStatus": "Kappaleiden tila", "TrackTitle": "Kappaleiden nimi", @@ -740,8 +740,8 @@ "WriteMetadataTags": "Tallenna metatietotagit", "ContinuingAllTracksDownloaded": "Jatkuva (kaikki kappaleet on ladattu)", "Continuing": "Jatkuu", - "ContinuingMoreAlbumsAreExpected": "Albumeita odotetaan lisää", - "ContinuingNoAdditionalAlbumsAreExpected": "Abumeita ei odoteta lisää", + "ContinuingMoreAlbumsAreExpected": "Albumeita odotetaan tulevan lisää", + "ContinuingNoAdditionalAlbumsAreExpected": "Uusia abumeita ei tiettävästi ole tulossa", "OnDownloadFailure": "Latauksen epäonnistuessa", "Artist": "Esittäjä", "ArtistClickToChangeAlbum": "Vaihda albumia painamalla", @@ -776,7 +776,7 @@ "ImportFailed": "Tuonti epäonnistui", "ImportFailures": "Tuontivirheet", "ImportLists": "Tuontilistat", - "ImportListSettings": "Tuontilistojen yleiset asetukset", + "ImportListSettings": "Tuontilistojen yleisasetukset", "HideAlbums": "Piilota albumit", "HideTracks": "Piilota kappaleet", "LatestAlbum": "Uusin albumi", @@ -789,14 +789,14 @@ "Playlist": "Soittolista", "Proceed": "Jatka", "RootFolderPath": "Juurikansion sijainti", - "SceneNumberHasntBeenVerifiedYet": "Kohtauksen numeroa ei ole vielä vahvistettu", + "SceneNumberHasntBeenVerifiedYet": "Kohtausnumeroa ei ole vielä vahvistettu", "SearchBoxPlaceHolder": "esim. Breaking Benjamin, lidarr:854a1807-025b-42a8-ba8c-2a39717f1d25", "SearchForAllCutoffUnmetAlbums": "Etsi kaikkia albumeita, joiden katkaisutasoa ei ole savutettu", "SearchAlbum": "Etsi albumia", "SelectAlbum": "Valitse albumi", "SelectAlbumRelease": "Valitse albumin julkaisu", "FutureAlbumsData": "Valvo albumeita, joita ei ole vielä julkaistu.", - "SearchForAllMissingAlbumsConfirmationCount": "Haluatko varmasti etsiä '{0}' puuttuvaa albumia?", + "SearchForAllMissingAlbumsConfirmationCount": "Haluatko varmasti etsiä kaikkia {totalRecords} puuttuvaa albumia?", "EditArtist": "Muokkaa esittäjää", "DeleteSelected": "Poista valitut", "ClickToChangeReleaseGroup": "Vaihda julkaisuryhmää painamalla tästä", @@ -807,38 +807,38 @@ "AllMonitoringOptionHelpText": "Valvo jokaista tuontilistalla olevaa esittäjää ja heidän kaikkia albumeitaan.", "ContinuingOnly": "Vain jatkuvat", "EntityName": "Entiteetin nimi", - "EpisodeDoesNotHaveAnAbsoluteEpisodeNumber": "Jaksolla ei ole tarkkaa jaksonumeroa", + "EpisodeDoesNotHaveAnAbsoluteEpisodeNumber": "Jaksolle ei ole absoluuttista numeroa.", "IndexerIdHelpTextWarning": "Yksittäisen tietolähteen käyttö sanapainotuksen kanssa saattaa aiheuttaa julkaisujen kaksoiskappaleiden kaappauksia.", "AllowFingerprintingHelpText": "Tarkenna kappaleiden tunnistustarkkuutta piiloleimauksen avulla.", "BlocklistReleaseHelpText": "Estää {appName}ia lataamasta näitä tiedostoja uudelleen.", - "RemotePathMappingCheckFilesGenericPermissions": "Lataustyökalu \"{0}\" ilmoitti tiedostosijainniksi \"{1}\", mutta {appName} ei näe sitä. Kansion käyttöoikeuksia on ehkä muokattava.", - "RemotePathMappingCheckGenericPermissions": "Lataustyökalu \"{0}\" tallentaa lataukset kohteeseen \"{1}\", mutta {appName} ei näe sitä. Kansion käyttöoikeuksia on ehkä muokattava.", + "RemotePathMappingCheckFilesGenericPermissions": "Latauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta {appName} ei näe sitä. Kansion käyttöoikeuksia on ehkä muokattava.", + "RemotePathMappingCheckGenericPermissions": "Latauspalvelu {0} tallentaa lataukset kohteeseen \"{1}\", mutta {appName} ei näe sitä. Kansion käyttöoikeuksia on ehkä muokattava.", "RemotePathMappingCheckFolderPermissions": "{appName} näkee ladatauskansion \"{0}\", mutta ei voi avata sitä. Tämä johtuu todennäköisesti liian rajallisista käyttöoikeuksista.", - "DownloadedUnableToImportCheckLogsForDetails": "Ladattu - Tuonti ei onnistu: Katso tarkemmat tiedot lokista.", + "DownloadedUnableToImportCheckLogsForDetails": "Ladattu – Tuonti ei onnistu: näet lisätietoja lokista.", "AppDataLocationHealthCheckMessage": "Päivityksiä ei sallita, jotta AppData-kansion poistaminen päivityksen yhteydessä voidaan estää", "IndexerRssHealthCheckNoIndexers": "RSS-synkronointia varten ei ole määritetty tietolähteitä ja tämän vuoksi {appName} ei kaappaa uusia julkaisuja automaattisesti.", "IndexerSearchCheckNoAutomaticMessage": "Automaattihakua varten ei ole määritetty tietolähteitä ja tämän vuoksi {appName}in automaattihaku ei löydä tuloksia.", - "IndexerSearchCheckNoInteractiveMessage": "Manuaalihaulle ei ole määritetty tietolähteitä, eikä se sen vuoksi löydä tuloksia.", - "RecycleBinUnableToWriteHealthCheck": "Määritettyyn roskakorikansioon ei voida tallentaa: {0}. Varmista, että sijainti on olemassa ja että käyttäjällä on kirjoitusoikeus kansioon.", - "RemotePathMappingCheckDownloadPermissions": "{appName} näkee ladatun albumin \"{0}\", mutta ei voi avata sitä. Tämä johtuu todennäköisesti liian rajallisista käyttöoikeuksista.", - "RemotePathMappingCheckImportFailed": "{appName} ei voinut tuoda julkaisua. Katso tarkemmat tiedot lokista.", + "IndexerSearchCheckNoInteractiveMessage": "Manuaalihaulle ei ole määritetty tietolähteitä, eikä {appName} sen vuoksi löydä sillä tuloksia.", + "RecycleBinUnableToWriteHealthCheck": "Roskakoriksi määritettyyn sijaintiin ei voida tallentaa: {0}. Varmista, että se on olemassa ja että {appName}in suorittavalla käyttäjällä on kirjoitusoikeus kansioon.", + "RemotePathMappingCheckDownloadPermissions": "{appName} näkee ladatun musiikin \"{0}\", muttei voi avata sitä. Tämä johtuu todennäköisesti liian rajallisista käyttöoikeuksista.", + "RemotePathMappingCheckImportFailed": "{appName} ei voinut tuoda musiikkia. Näet lisätietoja lokista.", "AddAutoTagError": "Virhe lisättäessä automaattimerkintää. Yritä uudelleen.", "AddCondition": "Lisää ehto", "AddConditionError": "Virhe lisättäessä ehtoa. Yritä uudelleen.", - "AddIndexerImplementation": "Lisätään tietolähdettä - {implementationName}", - "AddDownloadClientImplementation": "Lisäätään lataustyökalua - {implementationName}", + "AddIndexerImplementation": "Lisätään tietolähdettä – {implementationName}", + "AddDownloadClientImplementation": "Lisätään latauspalvelua – {implementationName}", "AddImportList": "Lisää tuontilista", "AddAutoTag": "Lisää automaattinen tunniste", - "CountDownloadClientsSelected": "{selectedCount} lataustyökalu(a) on valittu", - "ApplyTagsHelpTextHowToApplyDownloadClients": "Tunnisteiden käyttö valituissa lataustyökaluissa", - "NotificationStatusAllClientHealthCheckMessage": "Mikään ilmoituspavelu ei ole ongelmien vuoksi käytettävissä.", + "CountDownloadClientsSelected": "{selectedCount} latauspalvelu(a) on valittu", + "ApplyTagsHelpTextHowToApplyDownloadClients": "Tunnisteiden käyttö valituille latauspalveluille", + "NotificationStatusAllClientHealthCheckMessage": "Ilmoituspalvelut eivät ole ongelmien vuoksi käytettävissä.", "AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on käynnistettävä uudelleen.", "DownloadClientQbittorrentSettingsContentLayout": "Sisällön rakenne", - "EditDownloadClientImplementation": "Muokataan lataustyökalua - {implementationName}", - "DownloadPropersAndRepacksHelpTextWarning": "Käytä mukautettuja muotoja automaattisiin Proper- ja Repack-päivityksiin.", + "EditDownloadClientImplementation": "Muokataan latauspalvelua – {implementationName}", + "DownloadPropersAndRepacksHelpTextWarning": "Käytä mukautettuja muotoja automaattisiin Proper-/Repack-päivityksiin.", "PreferredSize": "Toivottu koko", - "RemotePathMappingCheckFilesBadDockerPath": "Käytät Dockeria ja lataustyökalu \"{0}\" ilmoitti tiedostosijainniksi \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etäsijaintien kohdistukset ja lataustyökalun asetukset.", - "RemotePathMappingCheckLocalWrongOSPath": "Paikallinen lataustyökalu \"{0}\" tallentaa lataukset kohteeseen \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista lataustyökalun asetukset.", + "RemotePathMappingCheckFilesBadDockerPath": "Käytät Dockeria ja latauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etäsijaintien kohdistukset ja latauspalvelun asetukset.", + "RemotePathMappingCheckLocalWrongOSPath": "Paikallinen latauspalvelu {0} tallentaa lataukset sijaintiin \"{1}\", mutta tämä ei ole kelvollinen {2}-sijainti. Tarkista latauspalvelun asetukset.", "RemoveSelectedItemQueueMessageText": "Haluatko varmasti poistaa jonosta 1 kohteen?", "RemoveTagsAutomatically": "Poista tunnisteet automaattisesti", "RemoveTagsAutomaticallyHelpText": "Poista tunnisteet automaattisesti, jos ehdot eivät täyty.", @@ -854,32 +854,32 @@ "BypassIfHighestQualityHelpText": "Ohitusviive kun julkaisun laatu vastaa laatuprofiilin korkeinta käytössä olevaa laatua halutulla protokollalla.", "BlocklistReleases": "Lisää julkaisut estolistalle", "CloneCondition": "Monista ehto", - "ConnectionLost": "Ei yhteyttä", + "ConnectionLost": "Yhteys menetettiin", "ConnectionLostReconnect": "{appName} pyrkii ajoittain muodostamaan yhteyden automaattisesti tai voit painaa alta \"Lataa uudelleen\".", "CustomFormat": "Mukautettu muoto", "DeleteConditionMessageText": "Haluatko varmasti poistaa ehdon \"{name}\"?", "DeleteFormatMessageText": "Haluatko varmasti poistaa muototunnisteen \"{name}\"?", "DeleteSelectedImportListsMessageText": "Haluatko varmasti poistaa valitut {count} tuontilistaa?", - "DownloadClientCheckUnableToCommunicateMessage": "Viestintä lataustyökalun \"{0}\" kanssa ei onnistu.", - "DownloadClientSortingCheckMessage": "Lataustyökalun \"{0}\" {1} on kytketty käyttöön {appName}in kategorialle ja tuontiongelmien välttämiseksi se tulisi poistaa käytöstä.", - "EditSelectedDownloadClients": "Muokkaa valittuja lataustyökaluja", + "DownloadClientCheckUnableToCommunicateMessage": "Viestintä latauspalvelun \"{0}\" kanssa epäonnistui.", + "DownloadClientSortingCheckMessage": "Latauspalvelun \"{0}\" {1} on kytketty käyttöön {appName}in kategorialle ja tuontiongelmien välttämiseksi se tulisi poistaa käytöstä.", + "EditSelectedDownloadClients": "Muokkaa valittuja latauspalveluita", "ErrorLoadingContent": "Virhe ladattaessa tätä sisältöä", "IncludeCustomFormatWhenRenamingHelpText": "Mahdollista tämän muodon käyttö \"{Custom Formats}\" -nimeämiskaavan kanssa.", "No": "Ei", - "NoDownloadClientsFound": "Lataustyökaluja ei löytynyt", + "NoDownloadClientsFound": "Latauspalveluita ei löytynyt", "NoHistoryBlocklist": "Estohistoriaa ei ole.", - "NotificationStatusSingleClientHealthCheckMessage": "Ilmoitukset eivät ole ongelmien vuoksi käytettävissä: {0}", + "NotificationStatusSingleClientHealthCheckMessage": "Ilmoituspalvelut eivät ole ongelmien vuoksi käytettävissä: {0}.", "PreferProtocol": "Suosi {preferredProtocol}-protokollaa", "ProxyCheckBadRequestMessage": "Välityspalvelintesti epäonnistui. Tilakoodi: {0}.", "QueueIsEmpty": "Jono on tyhjä", "RecentChanges": "Uusimmat muutokset", - "ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituissa tietolähteissä", - "RemotePathMappingCheckBadDockerPath": "Käytät Dockeria ja lataustyökalu \"{0}\" tallentaa lataukset kohteeseen \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etäsijaintien kohdistukset ja lataustyökalun asetukset.", + "ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituille tietolähteille", + "RemotePathMappingCheckBadDockerPath": "Käytät Dockeria ja latauspalvelu {0} tallentaa lataukset kohteeseen \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etäsijaintien kohdistukset ja latauspalvelun asetukset.", "DeleteSelectedIndexers": "Poista tietoläh(de/teet)", - "RemotePathMappingCheckFilesWrongOSPath": "Etälataustyökalu \"{0}\" ilmoitti tiedostosijainniksi \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etsijaintien kohdistukset lataustyökalun asetukset.", - "RemotePathMappingCheckRemoteDownloadClient": "Etälataustyökalu \"{0}\" ilmoitti tiedostosijainniksi \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kohdistus.", - "RemotePathMappingCheckWrongOSPath": "Etälataustyökalu \"{0}\" tallentaa lataukset kohteeseen \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etäsijaintien kohdistukset ja lataustyökalun asetukset.", - "RemotePathMappingsInfo": "Etäsijaintien kohdistuksia tarvitaan harvoin ja jos {appName} ja lataustyökalu suoritetaan samassa järjestelmässä, on parempi käyttää paikallisia polkuja. Lue lisää [wikistä]({wikiLink}).", + "RemotePathMappingCheckFilesWrongOSPath": "Etälatauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista määritetyt etäsijainnit ja latauspalvelun asetukset.", + "RemotePathMappingCheckRemoteDownloadClient": "Etälatauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kohdistus.", + "RemotePathMappingCheckWrongOSPath": "Etälatauspalvelu {0} tallentaa lataukset kohteeseen \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etäsijaintien kohdistukset ja latauspalvelun asetukset.", + "RemotePathMappingsInfo": "Etäsijaintien kohdistuksia tarvitaan harvoin ja jos {appName} ja latauspalvelu suoritetaan samassa järjestelmässä, on parempi käyttää paikallisia sijainteja. Lue lisää [wikistä]({wikiLink}).", "RemoveSelectedItem": "Poista valittu kohde", "ReplaceWithDash": "Korvaa yhdysmerkillä", "ReplaceWithSpaceDash": "Korvaa yhdistelmällä \"välilyönti yhdysmerkki\"", @@ -890,57 +890,57 @@ "WhatsNew": "Mikä on uutta?", "Yes": "Kyllä", "CustomFormats": "Mukautetut muodot", - "CutoffFormatScoreHelpText": "Kun albumi saavuttaa laaturajoituksen tai tämän mukautetun muodon pisteytyksen, ei siihen enää kaapata uusia julkaisuja tai tuoda päivityksiä.", + "CutoffFormatScoreHelpText": "Kun tämä mukautetun muodon pisteytys on saavutettu, ei {appName} enää kaappaa albumeita.", "DeleteCustomFormat": "Poista mukautettu muoto", "DeleteCustomFormatMessageText": "Haluatko varmasti poistaa mukautetun muodon \"{name}\"?", "Disabled": "Ei käytössä", - "DownloadClientCheckDownloadingToRoot": "Lataustyökalu \"{0}\" tallentaa lataukset juurikansioon \"{1}\", mutta ne tulisi tallentaa muualle.", - "DownloadClientStatusCheckAllClientMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä", + "DownloadClientCheckDownloadingToRoot": "Latauspalvelu {0} tallentaa lataukset juurikansioon \"{1}\", mutta niitä ei tulisi tallentaa sinne.", + "DownloadClientStatusCheckAllClientMessage": "Latauspalveluita ei ole ongelmien vuoksi käytettävissä", "GroupInformation": "Ryhmän tiedot", "MinimumCustomFormatScore": "Mukautetun muodon vähimmäispisteytys", "Monitor": "Valvonta", - "DownloadClientTagHelpText": "Lataustyökalua käytetään vain vähintään yhdellä täsmäävällä tunnisteella merkityille esittäjille. Käytä kaikille jättämällä tyhjäksi.", + "DownloadClientTagHelpText": "Tätä latauspalvelua käytetään vain vähintään yhdellä täsmäävällä tunnisteella merkityille esittäjille. Käytä kaikille jättämällä tyhjäksi.", "MinFormatScoreHelpText": "Mukautetun muodon vähimmäispisteytys, jolla lataus sallitaan.", - "ExtraFileExtensionsHelpTextsExamples": "Esimerkiksi '\"sub, .nfo\" tai \"sub,nfo\".", + "ExtraFileExtensionsHelpTextsExamples": "Esimerkiksi \"sub, .nfo\" tai \"sub,nfo\".", "ExtraFileExtensionsHelpText": "Pilkuin eroteltu listaus tuotavista oheistiedostoista (.nfo-tiedostot tuodaan \".nfo-orig\"-nimellä).", "Conditions": "Ehdot", "CountIndexersSelected": "{selectedCount} tietolähde(ttä) on valittu", - "DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valit(n/tua) lataustyökalu(n/a)?", + "DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valittua latauspalvelua?", "DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) tietoläh(teen/dettä)?", "EditSelectedIndexers": "Muokkaa valittuja sisältölähteitä", "Negated": "Kielletty", "NegateHelpText": "Jos käytössä, ei mukautettua muotoa sovelleta tämän \"{0}\" -ehdon täsmätessä.", "NoChange": "Ei muutosta", - "DownloadClientStatusCheckSingleClientMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä: {0}", + "DownloadClientStatusCheckSingleClientMessage": "Latauspalveluita ei ole ongelmien vuoksi käytettävissä: {0}", "Clone": "Monista", "CloneCustomFormat": "Monista mukautettu muoto", "BypassIfAboveCustomFormatScore": "Ohita, jos ylittää mukautetun muodon pisteytyksen", "RemoveSelectedItemsQueueMessageText": "Haluatko varmasti poistaa jonosta {0} kohdetta?", "RemoveFailedDownloads": "Poista epäonnistuneet lataukset", "RemoveCompletedDownloads": "Poista valmistuneet lataukset", - "AddImportListImplementation": "Lisätään tuontilistaa - {implementationName}", - "AddConditionImplementation": "Lisätään ehtoa - {implementationName}", - "AddConnectionImplementation": "Lisätään kytköstä - {implementationName}", - "IndexerDownloadClientHealthCheckMessage": "Tietolähteet virheellisillä lataustyökaluilla: {0}.", + "AddImportListImplementation": "Lisätään tuontilistaa – {implementationName}", + "AddConditionImplementation": "Lisätään ehtoa – {implementationName}", + "AddConnectionImplementation": "Lisätään ilmoituspavelua – {implementationName}", + "IndexerDownloadClientHealthCheckMessage": "Tietolähteet virheellisillä latauspalveluilla: {0}.", "IndexerStatusCheckAllClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi", "MinimumCustomFormatScoreHelpText": "Mukautetun muodon vähimmäispisteytys, jolla ensisijaisen protokollan viiveen ohitus sallitaan.", "Monitoring": "Valvotaan", "NoIndexersFound": "Tietolähteitä ei löytynyt", - "RemotePathMappingCheckFilesLocalWrongOSPath": "Paikallinen lataustyökalu \"{0}\" ilmoitti tiedostosijainniksi \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista lataustyökalun asetukset.", + "RemotePathMappingCheckFilesLocalWrongOSPath": "Paikallinen latauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista latauspalvelun asetukset.", "Formats": "Muodot", - "AuthBasic": "Perus (ponnahdusikkuna)", + "AuthBasic": "Perus (selaimen ponnahdus)", "AuthForm": "Lomake (kirjautumissivu)", - "DeleteSelectedDownloadClients": "Poista lataustyökalu(t)", + "DeleteSelectedDownloadClients": "Poista valitut latauspalvelu(t)", "AllResultsAreHiddenByTheAppliedFilter": "Aktiivinen suodatin piilottaa kaikki tulokset.", "ColonReplacement": "Kaksoispisteen korvaus", "GrabId": "Kaappauksen tunniste", "InfoUrl": "Tietojen URL", - "EditIndexerImplementation": "Muokataan tietolähdettä - {implementationName}", - "DisabledForLocalAddresses": "Ei käytössä paikallisille osoitteille", + "EditIndexerImplementation": "Muokataan tietolähdettä – {implementationName}", + "DisabledForLocalAddresses": "Ei käytössä paikallisissa osoitteissa", "ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi", "AutoTagging": "Automaattinen tunnistemerkintä", "AutoTaggingNegateHelpText": "Jos käytössä, ei automaattista merkintäsääntöä käytetä tämän \"{implementationName}\" -ehdon täsmätessä.", - "AutoTaggingLoadError": "Virhe ladattaessa automaattimerkintää", + "AutoTaggingLoadError": "Automaattimerkinnän lataus epäonnistui", "ClearBlocklist": "Tyhjennä estolista", "ChownGroup": "chown-ryhmä", "ClearBlocklistMessageText": "Haluatko varmasti tyhjentää kaikki estolistan kohteet?", @@ -954,45 +954,45 @@ "DeleteSelectedImportLists": "Poista tuontilista(t)", "DeleteSpecificationHelpText": "Haluatko varmasti poistaa määrityksen \"{name}\"?", "DeleteSpecification": "Poista määritys", - "DownloadClientCheckNoneAvailableMessage": "Lataustyökaluja ei ole käytettävissä", - "EditConditionImplementation": "Muokataan ehtoa - {implementationName}", - "EditConnectionImplementation": "Muokataan kytköstä - {implementationName}", + "DownloadClientCheckNoneAvailableMessage": "Latauspalveluita ei ole käytettävissä", + "EditConditionImplementation": "Muokataan ehtoa – {implementationName}", + "EditConnectionImplementation": "Muokataan ilmoituspalvelua – {implementationName}", "EditAutoTag": "Muokkaa automaattimerkintää", "ManageIndexers": "Hallitse tietolähteitä", - "RenameFiles": "Nimeä tiedostot", + "RenameFiles": "Nimeä tiedostot uudelleen", "Small": "Pieni", "RemoveSelectedItems": "Poista valitut kohteet", "ResetTitles": "Palauta nimet", "AddNewArtistRootFolderHelpText": "\"{folder}\" -alikansio luodaan automaattisesti.", "AuthenticationRequiredUsernameHelpTextWarning": "Syötä uusi käyttäjätunnus", "AutoAdd": "Automaattilisäys", - "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Lataustyökalu \"{0}\" on määritetty poistamaan valmistuneet lataukset, jonka seuraksena ne saatetaan poistaa ennen kuin {1} ehtii tuoda niitä.", + "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Latauspalvelu {0} on määritetty poistamaan valmistuneet lataukset, jonka seuraksena ne saatetaan poistaa ennen kuin {1} ehtii tuoda niitä.", "Enabled": "Käytössä", - "RemotePathMappingCheckLocalFolderMissing": "Etälataustyökalu \"{0}\" tallentaa lataukset kohteeseen \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kohdistus.", - "UpdateAvailableHealthCheckMessage": "Uusi päivitys on saatavilla", - "UpdateMonitoring": "Päivitä valvontatila", - "ApplyTagsHelpTextHowToApplyImportLists": "Tunnisteiden käyttö valituissa tuontilistoissa", - "AutomaticUpdatesDisabledDocker": "Automaattisia päivityksiä ei tueta suoraan käytettäessä Dockerin päivitysmekanismia. Docker-säiliö on päivitettävä {appName}in ulkopuolella tai päivitys on suoritettava komentosarjalla.", + "RemotePathMappingCheckLocalFolderMissing": "Etälatauspalvelu {0} tallentaa lataukset kohteeseen \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kohdistus.", + "UpdateAvailableHealthCheckMessage": "Uusi päivitys on saatavilla: {version}", + "UpdateMonitoring": "Vaihda valvontatilaa", + "ApplyTagsHelpTextHowToApplyImportLists": "Tunnisteiden käyttö valituille tuontilistoille", + "AutomaticUpdatesDisabledDocker": "Automaattisia päivityksiä ei tueta suoraan käytettäessä Dockerin päivitysmekanismia. Docker-säiliö on päivitettävä {appName}in ulkopuolella, tai päivitys on suoritettava komentosarjalla.", "UpdateCheckUINotWritableMessage": "Päivityksen asennus ei onnistu, koska käyttäjällä \"{1}\" ei ole kirjoitusoikeutta käyttöliittymäkansioon \"{0}\".", "AuthenticationMethodHelpTextWarning": "Valitse sopiva tunnistautumistapa", "AuthenticationMethod": "Tunnistautumistapa", "AuthenticationRequiredHelpText": "Valitse mitkä pyynnöt vaativat tunnistautumisen. Älä muuta, jos et ymmärrä riskejä.", "AuthenticationRequired": "Vaadi tunnistautuminen", "CustomFormatScore": "Mukautetun muodon pisteytys", - "EditImportListImplementation": "Muokataan tuontilistaa - {implementationName}", - "Overview": "Yleiskatsaus", + "EditImportListImplementation": "Muokataan tuontilistaa – {implementationName}", + "Overview": "Tiivistelmä", "Posters": "Julisteet", "PosterOptions": "Julistenäkymän asetukset", - "OverviewOptions": "Yleiskatsauksen asetukset", - "RemotePathMappingCheckDockerFolderMissing": "Käytät Dockeria ja lataustyökalu \"{0}\" tallentaa lataukset kohteeseen \"{1}\", mutta sitä ei löydy Docker-säiliöstä. Tarkista etäsijaintien kohdistukset ja säiliön tallennusmedian asetukset.", + "OverviewOptions": "Tiivistelmänäkymän asetukset", + "RemotePathMappingCheckDockerFolderMissing": "Käytät Dockeria ja latauspalvelu {0} tallentaa lataukset kohteeseen \"{1}\", mutta sitä ei löydy Docker-säiliöstä. Tarkista etäsijaintien kohdistukset ja säiliön tallennusmedian asetukset.", "ResetQualityDefinitionsMessageText": "Haluatko varmasti palauttaa laatumääritykset?", - "SystemTimeCheckMessage": "Järjestelmän ajassa on ainakin vuorokauden heitto eivätkä ajoitetut tehtävät tämän vuoksi toimi oikein ennen kuin se on korjattu.", - "UnableToLoadInteractiveSearch": "Tämän albumihaun tulosten lataus ei onnistu. Yritä uudelleen.", + "SystemTimeCheckMessage": "Järjestelmän aika on ainakin vuorokauden pielessä, eivätkä ajoitetut tehtävät toimi oikein ennen kuin se on korjattu.", + "UnableToLoadInteractiveSearch": "Tämän albumihaun tulosten lataus epäonnistui. Yritä myöhemmin uudelleen.", "AutoTaggingRequiredHelpText": "Tämän \"{implementationName}\" -ehdon on täsmättävä automaattimerkinnän säännön käyttämiseksi. Muutoin yksittäinen \"{implementationName}\" -vastaavuus riittää.", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Vahvista uusi salasana", "Connection": "Yhteys", "Large": "Suuri", - "ManageDownloadClients": "Hallitse lataustyökaluja", + "ManageDownloadClients": "Hallitse latauspalveluita", "AuthenticationRequiredPasswordHelpTextWarning": "Syötä uusi salasana", "Table": "Taulukko", "BypassIfAboveCustomFormatScoreHelpText": "Käytä ohitusta, kun julkaisun pisteytys on määritetyn mukautetun muodon vähimmäispisteytystä korkeampi.", @@ -1009,27 +1009,27 @@ "ManageImportLists": "Tuontilistojen hallinta", "SelectReleaseGroup": "Aseta julkaisuryhmä", "InvalidUILanguage": "Käytöliittymän kielivalinta on virheellinen. Korjaa se ja tallenna asetukset.", - "HealthMessagesInfoBox": "Saat lisätietoja näiden vakausviestien syistä painamalla rivin lopussa olevaa wikilinkkiä (kirjakuvake) tai tarkastelemalla [lokitietoja]({link}). Mikäli kohtaat ongelmia näiden viestien tulkinnassa, tavoitat tukemme alla olevilla linkkeillä.", + "HealthMessagesInfoBox": "Saat lisätietoja näiden vakausviestien syistä painamalla rivin lopussa olevaa wikilinkkiä (kirjakuvake) tai tarkastelemalla [lokitietoja]({link}). Mikäli et osaa tulkita näitä viestejä, tavoitat tukemme alla olevilla linkeillä.", "ManageLists": "Listojen hallunta", "PasswordConfirmation": "Salasanan vahvistus", "QueueFilterHasNoItems": "Mikään kohde ei vastaa valittua jonon suodatinta", "EditSelectedImportLists": "Muokkaa valittuja tuontilistoja", - "AutoRedownloadFailedFromInteractiveSearchHelpText": "Etsi ja pyri lataamaan eri julkaisu automaattisesti vaikka epäonnistunut julkaisu oli kaapattu manuaalihaun tuloksista.", + "AutoRedownloadFailedFromInteractiveSearchHelpText": "Etsi ja lataa uusi vastaava julkaisu, kun epäonnistunut lataus on valittu manuaalihaun tuloksista.", "IgnoreDownload": "Ohita lataus", "IgnoreDownloadHint": "Estää {appName}ia käsittelemästä tätä latausta jatkossa.", "IgnoreDownloads": "Ohita lataukset", "IgnoreDownloadsHint": "Estää {appName}ia käsittelemästä näitä latauksia jatkossa.", "ListRefreshInterval": "Listan päivityksen ajoitus", "IndexerSettingsRejectBlocklistedTorrentHashes": "Hylkää estetyt torrent-hajautusarvot kaapattaessa", - "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein etsittäessä joiltakin tietolähteiltä RSS-syötteen tai haun välityksellä. Tämä mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, mutta ennen välitystä lataustyökalulle.", + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein joidenkin tietolähteiden RSS-syötteestä tai hausta. Tämän käyttöönotto mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, kuitenkin ennen kuin niitä välitetään latauspalvelulle.", "ListWillRefreshEveryInterp": "Lista päivitetään {0} välein", "NoImportListsFound": "Tuotilistoja ei löytynyt", "ManageClients": "Hallitse työkaluja", "CustomFormatsSpecificationRegularExpressionHelpText": "Mukautetun muodon säännöllisen lausekkeen kirjainkokoa ei huomioida.", - "DownloadClientPriorityHelpText": "Lautaustyökalujen painotus, 1– 50 (korkein-alin). Oletusarvo on 1 ja tasaveroiset erotetaan Round-Robin-tekniikalla.", - "SkipRedownloadHelpText": "Estää {appName}ia lataamasta vaihtoehtoisia julkaisuja poistetuille kohteille.", + "DownloadClientPriorityHelpText": "Useiden latauspalveluiden painotus, 1–50 (korkein-alin). Oletusarvo on 1 ja tasaveroiset erotetaan Round-Robin-tekniikalla.", + "SkipRedownloadHelpText": "Estää {appName}ia lataamasta kohteille vaihtoehtoisia julkaisuja.", "BypassIfHighestQuality": "Ohita, jos korkein laatu", - "RemoveQueueItemRemovalMethodHelpTextWarning": "\"Poista lataustyökalusta\" poistaa latauksen ja sen tiedostot.", + "RemoveQueueItemRemovalMethodHelpTextWarning": "\"Poista latauspalvelusta\" poistaa latauksen ja sen tiedostot.", "UpdateFiltered": "Päivitä suodatetut", "BlocklistAndSearch": "Estolista ja haku", "BlocklistAndSearchHint": "Etsi korvaavaa kohdetta kun kohde lisätään estolistalle.", @@ -1042,10 +1042,10 @@ "Deceased": "Kuollut", "DoNotBlocklist": "Älä estä", "DoNotBlocklistHint": "Poista lisäämättä estolistalle.", - "RemoveFromDownloadClientHint": "Poistaa latauksen ja ladatut tiedostot lataustyökalusta.", - "RemoveMultipleFromDownloadClientHint": "Poistaa latauksen ja ladatut tiedostot lataustyökalusta.", + "RemoveFromDownloadClientHint": "Poistaa latauksen ja tiedostot latauspalvelusta.", + "RemoveMultipleFromDownloadClientHint": "Poistaa lataukset ja tiedostot latauspalvelusta.", "RemoveQueueItemRemovalMethod": "Poistotapa", - "RemoveQueueItemsRemovalMethodHelpTextWarning": "\"Poista lataustyökalusta\" poistaa lataukset ja niiden tiedostot.", + "RemoveQueueItemsRemovalMethodHelpTextWarning": "\"Poista latauspalvelusta\" poistaa lataukset ja niiden tiedostot.", "ThereWasAnErrorLoadingThisItem": "Virhe ladattaessa kohdetta", "ThereWasAnErrorLoadingThisPage": "Virhe ladattaessa sivua", "FilterAlbumPlaceholder": "Suodata albumeja", @@ -1059,10 +1059,10 @@ "RemotePathMappingCheckFileRemoved": "Tiedosto \"{0}\" poistettiin kesken käsittelyn.", "AddListExclusionHelpText": "Estä {appName}ia lisäämästä esittäjää listoilta.", "ArtistsEditRootFolderHelpText": "Siirtämällä esittäjät samaan juurikansioon voidaan niiden kansioiden nimet päivittää vastaamaan päivittynyttä nimikettä tai nimeämiskaavaa.", - "DownloadClientAriaSettingsDirectoryHelpText": "Valinnainen latuasten tallennussijainti. Käytä Aria2-oletusta jättämällä tyhjäksi.", + "DownloadClientAriaSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Aria2:n oletusta jättämällä tyhjäksi.", "DeleteArtistFoldersHelpText": "Poista esittäjäkansiot ja niiden kaikki sisältö.", - "ChangeCategoryHint": "Vaihtaa latauksen kategoriaksi lataustyökalun \"Tuonnin jälkeinen kategoria\" -asetuksen kategorian.", - "ChangeCategoryMultipleHint": "Vaihtaa latausten kategoriaksi lataustyökalun \"Tuonnin jälkeinen kategoria\" -asetuksen kategorian.", + "ChangeCategoryHint": "Vaihtaa latauksen kategoriaksi latauspalvelun \"Tuonnin jälkeinen kategoria\" -asetuksen kategorian.", + "ChangeCategoryMultipleHint": "Vaihtaa latausten kategoriaksi latauspalvelun \"Tuonnin jälkeinen kategoria\" -asetuksen kategorian.", "AutoRedownloadFailedFromInteractiveSearch": "Uudelleenlataus manuaalihaun tuloksista epäonnistui", "ImportListRootFolderMissingRootHealthCheckMessage": "Tuontilistalta tai -listoilta puuttuu juurikansio: {0}.", "HiddenClickToShow": "Piilotettu, näytä painamalla tästä", @@ -1074,7 +1074,7 @@ "FailedToLoadQueue": "Jonon lataus epäonnistui", "NoMissingItems": "Puuttuvia kohteita ei ole.", "SpecificMonitoringOptionHelpText": "Valvo esittäjiä, mutta vain erikseen listalle lisättyjä albumeita.", - "UnableToLoadCustomFormats": "Virhe ladattaessa mukautettuja muotoja", + "UnableToLoadCustomFormats": "Mukautettujen muotojen lataus epäonnistui", "Customformat": "Mukautettu muoto", "ExportCustomFormat": "Vie mukautettu muoto", "MountArtistHealthCheckMessage": "Kohteen sijainnin sisältävä media on kytketty vain luku -tilassa: ", @@ -1099,21 +1099,21 @@ "SupportedAutoTaggingProperties": "{appName} tukee automaattimerkinnän säännöissä seuraavia arvoja", "RemoveSelectedItemBlocklistMessageText": "Haluatko varmasti poistaa valitut kohteet estolistalta?", "ResetDefinitions": "Palauta määritykset", - "NotificationsSettingsUseSslHelpText": "Muodosta yhteys sovellukseen {serviceName} SSL-protokollan välityksellä.", - "ClickToChangeIndexerFlags": "Vaihda tietolähteen lippuja painamalla tästä", + "NotificationsSettingsUseSslHelpText": "Muodosta yhteys palveluun {serviceName} SSL-protokollan välityksellä.", + "ClickToChangeIndexerFlags": "Muuta tietolähteen lippuja painamalla tästä", "CustomFormatsSpecificationFlag": "Lippu", "SelectIndexerFlags": "Valitse tietolähteen liput", "SetIndexerFlags": "Aseta tietolähteen liput", - "CustomFilter": "Oma suodatin", + "CustomFilter": "Mukautettu suodatin", "LabelIsRequired": "Nimi on pakollinen", - "ImportList": "Lista", - "CountImportListsSelected": "{selectedCount} esittäjä(ä) on valittu", - "DeleteArtistFolder": "Poista esittäjäkansiot", + "ImportList": "Tuontilista", + "CountImportListsSelected": "{selectedCount} tuontilista(a) on valittu", + "DeleteArtistFolder": "Poista esittäjäkansio", "FormatAgeMinutes": "minuuttia", "IndexerFlags": "Tietolähteen liput", "Logout": "Kirjaudu ulos", - "NotificationsEmbySettingsSendNotifications": "Lähetä ilmoitukset", - "NotificationsEmbySettingsSendNotificationsHelpText": "Ohjeista palvelinta välittämään ilmoitukset sen määritettyihin kohteisiin.", + "NotificationsEmbySettingsSendNotifications": "Lähetä ilmoituksia", + "NotificationsEmbySettingsSendNotificationsHelpText": "Ohjeista Embyä ilmoittamaan myös siihen kytketyille palveluille.", "NotificationsKodiSettingAlwaysUpdateHelpText": "Määrittää päivitetäänkö kirjasto myös videotoiston aikana.", "NotificationsKodiSettingsGuiNotification": "Ilmoita käyttöliittymässä", "NotificationsPlexSettingsAuthToken": "Todennustunniste", @@ -1121,9 +1121,9 @@ "NotificationsSettingsUpdateMapPathsFrom": "Kohdista sijainnit lähteeseen", "NotificationsSettingsUpdateMapPathsTo": "Kohdista sijainnit kohteeseen", "Rejections": "Hylkäykset", - "RemoveQueueItem": "Poistetaan - {sourceTitle}", + "RemoveQueueItem": "Poistetaan – {sourceTitle}", "Uppercase": "Isot kirjaimet", - "PreferUsenet": "Mieluummin Usenet", + "PreferUsenet": "Suosi Usenetiä", "AppUpdated": "{appName} on päivitetty", "InteractiveSearchModalHeader": "Manuaalihaku", "Lowercase": "Pienet kirjaimet", @@ -1131,72 +1131,72 @@ "TagsSettingsSummary": "Täältä näet kaikki tunnisteet käyttökohteineen ja voit poistaa käyttämättömät tunnisteet.", "Tomorrow": "Huomenna", "DefaultCase": "Oletusarvoinen kirjainkoko", - "DeleteArtistFolderHelpText": "Poista elokuvakansio ja sen sisältö", + "DeleteArtistFolderHelpText": "Poista esittäjäkansio ja sen sisältö", "MonitorAllAlbums": "Kaikki albumit", "MonitorNewAlbums": "Uudet albumit", "MonitorExistingAlbums": "Olemassa olevat albumit", - "NoLimitForAnyDuration": "Ei toistoajan rajoitusta", + "NoLimitForAnyDuration": "Ei toistoaikojen rajoituksia", "SuggestTranslationChange": "Ehdota käännösmuutosta", "Loading": "Ladataan", "ApplyTagsHelpTextHowToApplyArtists": "Tunnisteisiin kohdistettavat toimenpiteet:", - "CouldntFindAnyResultsForTerm": "Haku '{0}' ei tuottanut tuloksia.", + "CouldntFindAnyResultsForTerm": "Haku \"{0}\" ei tuottanut tuloksia.", "ImportListStatusCheckAllClientMessage": "Mitkään listat eivät ole virheiden vuoksi käytettävissä", - "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "Uuden elokuvan lisäys on helppoa. Aloita vain haluamasi elokuvan nimen kirjoitus.", - "IndexerLongTermStatusCheckAllClientMessage": "Tietolähteet eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi", - "NoMinimumForAnyDuration": "Ei toistoajan vähimmäiskestoa", + "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "Uuden esittäjän lisääminen on helppoa. Aloita vain haluamasi esittäjän nimen kirjoittaminen.", + "IndexerLongTermStatusCheckAllClientMessage": "Mikään tietolähde ei ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi.", + "NoMinimumForAnyDuration": "Ei toistoaikojen vähimmäiskestoja", "RemoveQueueItemConfirmation": "Haluatko varmasti poistaa kohteen \"{sourceTitle}\" jonosta?", - "IndexerStatusCheckSingleClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi: {0}", + "IndexerStatusCheckSingleClientMessage": "Tietolähteet eivät ole virheiden vuoksi käytettävissä: {0}", "AutoTaggingSpecificationTag": "Tunniste", - "DashOrSpaceDashDependingOnName": "Yhdysmerkki tai välilyönti nimen perusteella", - "DownloadClientsSettingsSummary": "Lataustyökalut, latausten käsittely ja etäsijaintien kohdistukset.", - "IndexerSearchCheckNoAvailableIndexersMessage": "Haussa käytettävät tietolähteet eivät ole käytettävissä hiljattaisten virheiden vuoksi", + "DashOrSpaceDashDependingOnName": "\"Yhdysmerkki\" tai \"Välilyönti Yhdysmerkki\" nimen perusteella.", + "DownloadClientsSettingsSummary": "Latauspalvelut, latausten käsittely ja etäsijaintien kohdistukset.", + "IndexerSearchCheckNoAvailableIndexersMessage": "Hakua tukevat tietolähteet eivät ole hiljattaisten tietolähdevirheiden vuoksi tilapaisesti käytettävissä.", "NotificationsEmbySettingsUpdateLibraryHelpText": "Määrittää päivitetäänkö palvelimen kirjasto tuonnin, uudelleennimeämisen tai poiston yhteydessä.", "NotificationsKodiSettingAlwaysUpdate": "Päivitä aina", - "OrganizeSelectedArtists": "Järjestele valittu sarja", + "OrganizeSelectedArtists": "Järjestele valitut esittäjät", "MonitoredStatus": "Valvottu/tila", - "FileNameTokens": "Tiedostonimen muuttujat", + "FileNameTokens": "Tiedostonimimuuttujat", "FormatDateTime": "{formattedDate} {formattedTime}", "FormatRuntimeHours": "{hours} t", "FormatRuntimeMinutes": "{minutes} m", - "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName} ei tunnista mihin sarjalle ja jaksolle julkaisu kuuluu, eikä sen automaattinen tuonti onnistu. Haluatko kaapata julkaisun \"{title}\"?", - "NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-sijainti, jonka mukaisesti sarjasijainteja muutetaan kun {serviceName} näkee kirjastosijainnin eri tavalla kuin {appName} (vaatii \"Päivitä kirjasto\" -asetuksen).", + "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName} ei tunnistanut julkaisun esittäjää ja albumia, eikä sen vuoksi voi tuoda sitä automaattisesti. Haluatko kaapata julkaisun \"{title}\"?", + "NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-sijainti, jonka perusteella esittäjien sijainteja muutetaan kun {serviceName} näkemä kirjastosijainti poikkeaa {appName}in sijainnista (vaatii \"Päivitä kirjasto\" -asetuksen).", "NotificationsKodiSettingsCleanLibraryHelpText": "Siivoa kirjasto päivityksen jälkeen.", "NotificationsKodiSettingsDisplayTime": "Näytä aika", - "NotificationsKodiSettingsUpdateLibraryHelpText": "Määrittää päivitetäänkö Kodin kirjasto tuonnin tai uudelleennimeämisen yhteydessä.", - "NotificationsPlexSettingsAuthenticateWithPlexTv": "Plex.tv-tunnistautuminen", - "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName}-sijainti, jonka mukaisesti sarjasijainteja muutetaan kun {serviceName} näkee kirjastosijainnin eri tavalla kuin {appName} (vaatii \"Päivitä kirjasto\" -asetuksen).", + "NotificationsKodiSettingsUpdateLibraryHelpText": "Määrittää päivitetäänkö Kodin kirjasto tuonnin ja uudelleennimeämisen yhteydessä.", + "NotificationsPlexSettingsAuthenticateWithPlexTv": "Tunnistaudu Plexillä", + "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName}-sijainti, jonka perusteella esittäjien sijainteja muutetaan kun {serviceName} näkemä kirjastosijainti poikkeaa {appName}in sijainnista (vaatii \"Päivitä kirjasto\" -asetuksen).", "QualitiesHelpText": "Listalla ylempänä olevia laatuja painotetaan enemmän vaikkei niitä ole valittu. Samoissa ryhmissä olevat laadut ovat tasaveroisia. Valitse vain halutut laadut.", "FormatDateTimeRelative": "{relativeDay}, {formattedDate} {formattedTime}", - "UrlBaseHelpText": "Lisää {appName}in URL-osoitteeseen jälkiliitteen, esim. \"http://[osoite]:[portti]/[URL-perusta]\". Oletusarvo on tyhjä.", + "UrlBaseHelpText": "Käänteisen välityspalvelimen tukea varten. Oletusarvo on tyhjä.", "ImportListStatusCheckSingleClientMessage": "Listat eivät ole virheiden vuoksi käytettävissä: {0}", - "IndexerRssHealthCheckNoAvailableIndexers": "RSS-syötteissä käytettävät tietolähteet eivät ole käytettävissä hiljattaisten virheiden vuoksi", + "IndexerRssHealthCheckNoAvailableIndexers": "RSS-syötteitä tukevat tietolähteet eivät ole hiljattaisten tietolähdevirheiden vuoksi tilapaisesti käytettävissä.", "IndexerLongTermStatusCheckSingleClientMessage": "Tietolähteet eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi: {0}", - "MassSearchCancelWarning": "Tätä ei ole mahdollista pysäyttää kuin käynnistämällä {appName}ia uudelleen tai poistamalla kaikki tietolähteet käytöstä.", - "SearchForAllCutoffUnmetAlbumsConfirmationCount": "Haluatko varmasti etsiä kaikkia {totalRecords} katkaisutasoa saavuttamattomia jaksoja?", + "MassSearchCancelWarning": "Tämä on mahdollista keskeyttää vain käynnistämällä {appName} uudelleen tai poistamalla kaikki tietolähteet käytöstä.", + "SearchForAllCutoffUnmetAlbumsConfirmationCount": "Haluatko varmasti etsiä kaikkia {totalRecords} albumia, joiden katkaisutasoa ei ole saavutettu?", "MonitorNoAlbums": "Ei mitään", - "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.", - "IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi.", + "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.", + "IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi.", "NotificationsKodiSettingsCleanLibrary": "Siivoa kirjasto", - "AddNewArtistSearchForMissingAlbums": "Käynnistä puuttuvan elokuvan haku", - "ConnectSettingsSummary": "Ilmoitukset, kuten viestintä mediapalvelimille ja soittimille, sekä omat komentosarjat.", + "AddNewArtistSearchForMissingAlbums": "Käynnistä puuttuvien albumien haku", + "ConnectSettingsSummary": "Yhteydet ilmoituspalveluihin, mediapalvelimiin ja soittimiin, sekä mukautetut komentosarjat.", "CustomFormatsSettings": "Mukautettujen muotojen asetukset", "CustomFormatsSettingsSummary": "Mukautetut muodot ja niiden asetukset.", "Donate": "Lahjoita", "GeneralSettingsSummary": "Portti, SSL-salaus, käyttäjätunnus ja salasana, välityspalvelin, analytiikka ja päivitykset.", "QualitySettingsSummary": "Laatukoot ja nimeäminen", - "PreferTorrent": "Mieluummin Torrent", - "CountArtistsSelected": "{count} tuotilistaa on valittu", - "AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt todennuksen käyttöönoton. Todennus voidaan poistaa käytöstä paikallisille osoitteille.", + "PreferTorrent": "Suosi torrentia", + "CountArtistsSelected": "{count} esittäjä(ä) on valittu", + "AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt tunnistautumisen käyttöönoton. Paikallisilta osoitteilta se voidaan valinnaisesti poistaa käytöstä.", "Auto": "Automaattinen", "CustomFormatRequiredHelpText": "Tämän \"{0}\" -ehdon on täsmättävä mukautetun muodon käyttämiseksi. Muutoin riittää yksi \"{0}\" -vastaavuus.", - "DeleteArtistFolderCountConfirmation": "Haluatko varmasti poistaa {count} valittua sarjaa?", - "DeleteArtistFolderCountWithFilesConfirmation": "Haluatko varmasti poistaa {count} valittua sarjaa ja niiden kaiken sisällön?", - "ReleaseProfile": "Julkaisuprofiilit", + "DeleteArtistFolderCountConfirmation": "Haluatko varmasti poistaa {count} valittua esittäjää?", + "DeleteArtistFolderCountWithFilesConfirmation": "Haluatko varmasti poistaa {count} valittua esittäjää ja niiden kaiken sisällön?", + "ReleaseProfile": "Julkaisuprofiili", "IncludeHealthWarnings": "Sisällytä kuntovaroitukset", - "LidarrSupportsMultipleListsForImportingAlbumsAndArtistsIntoTheDatabase": "{appName} tukee useita listoja, joilta sarjoja voidaan tuoda tietokantaan.", + "LidarrSupportsMultipleListsForImportingAlbumsAndArtistsIntoTheDatabase": "{appName} tukee useita listoja, joiden avulla esittäjiä ja albumeita voidaan tuoda tietokantaan.", "Priority": "Painotus", - "AlbumsLoadError": "Varmuuskopioiden lataus epäonnistui", - "ArtistIsUnmonitored": "Kirjailijaa ei valvota", + "AlbumsLoadError": "Albumien lataus epäonnistui", + "ArtistIsUnmonitored": "Esittäjää ei valvota", "FormatAgeDay": "päivä", "FormatAgeDays": "päivää", "FormatAgeHour": "tunti", @@ -1207,11 +1207,11 @@ "FormatShortTimeSpanSeconds": "{seconds} sekunti(a)", "FormatTimeSpanDays": "{days} pv {time}", "IndexersSettingsSummary": "Tietolähteet ja niiden asetukset.", - "ImportListsSettingsSummary": "Sisällön tuonti muista {appName}-instansseista tai Trakt-listoilta, ja listapoikkeusten hallinta.", - "ImportMechanismHealthCheckMessage": "Käytä valmiiden latausten käsittelyä", + "ImportListsSettingsSummary": "Sisällön tuonti muista {appName}-instansseista tai palveluista, ja poikkeuslistojen hallinta.", + "ImportMechanismHealthCheckMessage": "Käytä valmistuneiden latausten käsittelyä", "KeyboardShortcuts": "Pikanäppäimet", - "MediaManagementSettingsSummary": "Tiedostojen nimeämisen, hallinnan ja juurikansioiden asetukset.", - "MetadataSettingsArtistSummary": "Luo metatietotiedostot kun kirjoja tuodaan tai kirjailijoiden tietoja päivitetään.", + "MediaManagementSettingsSummary": "Tiedostojen nimeämis- ja hallinta-asetukset, sekä kirjaston juurikansiot.", + "MetadataSettingsArtistSummary": "Luo metatietotiedostot kun kappaleita tuodaan tai esittäjien tietoja päivitetään.", "MonitorFirstAlbum": "Ensimmäinen albumi", "MonitorFutureAlbums": "Tulevat albumit", "MonitorLastestAlbum": "Uusin albumi", @@ -1220,39 +1220,39 @@ "UiSettingsSummary": "Kalenterin, päiväyksen ja kellonajan, sekä kielen ja heikentyneelle värinäölle sopivan tilan asetukset.", "Yesterday": "Eilen", "AddToDownloadQueue": "Lisää latausjonoon", - "AddedToDownloadQueue": "Lisätty latausjonoon", - "ShowNextAlbum": "Näytä viimeinen albumi", + "AddedToDownloadQueue": "Lisättiin latausjonoon", + "ShowNextAlbum": "Näytä seuraava albumi", "Unlimited": "Rajoittamaton", "ArtistIndexFooterDownloading": "Ladataan", "UseSsl": "Käytä SSL-salausta", - "DeleteSelectedArtists": "Poista valittu esittäjä", + "DeleteSelectedArtists": "Poista valitut esittäjät", "Links": "Linkit", - "IndexerJackettAll": "Jackettin ei-tuettua 'all'-päätettä käyttävät tietolähteet: {0}", + "IndexerJackettAll": "Jackettin ei-tuettua \"all\"-päätettä käyttävät tietolähteet: {0}", "AutomaticSearch": "Automaattihaku", - "ProxyCheckResolveIpMessage": "Määritetyn välityspalvelimen \"{0}\" IP-osoitteen selvitys epäonnistui.", - "IndexerPriorityHelpText": "Tietolähteen painotus, 1– 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. Kaikkia käytössä olevia tietolähteitä käytetään edelleen RSS-synkronointiin ja hakuun.", - "ConnectionSettingsUrlBaseHelpText": "Lisää etuliite lataustuökalun {clientName} URL-osoitteeseen, kuten {url}.", - "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Valinnainen latuasten tallennussijainti. Käytä Aria2-oletusta jättämällä tyhjäksi.", - "DownloadClientDelugeSettingsDirectoryHelpText": "Valinnainen latuasten tallennussijainti. Käytä Aria2-oletusta jättämällä tyhjäksi.", + "ProxyCheckResolveIpMessage": "Määritetyn välityspalvelimen ({0}) IP-osoitteen selvitys epäonnistui.", + "IndexerPriorityHelpText": "Tietolähteen painotus, 1– 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. {appName} käyttää edelleen kaikkia käytössä olevia tietolähteitä RSS-synkronointiin ja hakuun.", + "ConnectionSettingsUrlBaseHelpText": "Lisää palvelimen {connectionName} URL-osoitteeseen etuliitteen, esim. \"{url}\".", + "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Vaihtoehtoinen sijainti, johon valmistuneet lataukset siirretään. Käytä Delugen oletusta jättämällä tyhjäksi.", + "DownloadClientDelugeSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Delugen oletusta jättämällä tyhjäksi.", "IndexerSettingsSeedRatio": "Jakosuhde", "IndexerSettingsSeedTime": "Jakoaika", - "ArtistIsMonitored": "Kirjailijaa ei valvota", + "ArtistIsMonitored": "Esittäjää valvotaan", "False": "Epätosi", "Parse": "Jäsennä", "ParseModalErrorParsing": "Virhe jäsennettäessä. Yritä uudelleen.", - "ParseModalHelpText": "Syötä julkaisunimike yllä olevaan kenttään.", - "ParseModalHelpTextDetails": "{appName} pyrkii jäsentämään nimikkeen ja näyttämään sen tiedot.", + "ParseModalHelpText": "Syötä julkaisun nimi yllä olevaan kenttään.", + "ParseModalHelpTextDetails": "{appName} pyrkii jäsentämään nimen ja näyttämään sen tiedot.", "ParseModalUnableToParse": "Annetun nimikkeen jäsennys ei onnistunut. Yritä uudelleen.", "Repack": "Uudelleenpaketoitu", "TestParsing": "Testaa jäsennystä", "True": "Tosi", - "Any": "Mikä vain", + "Any": "Mikä tahansa", "BuiltIn": "Sisäänrakennettu", - "Script": "Skripti", - "DeleteSelectedCustomFormats": "Poista mukautettu muoto", - "DeleteSelectedCustomFormatsMessageText": "Haluatko varmasti poistaa valitut {count} tuontilistaa?", - "IncludeCustomFormatWhenRenaming": "Sisällytä mukautetut muodot uudelleennimetessä", - "IndexerSettingsApiUrl": "Rajapinnan URL-osoite", + "Script": "Komentosarja", + "DeleteSelectedCustomFormats": "Poista mukautetut muodot", + "DeleteSelectedCustomFormatsMessageText": "Haluatko varmasti poistaa valitut {count} mukautettua muotoa?", + "IncludeCustomFormatWhenRenaming": "Sisällytä mukautetut muodot uudelleennimettäessä", + "IndexerSettingsApiUrl": "Rajapinnan URL", "IndexerSettingsApiUrlHelpText": "Älä muuta tätä, jos et tiedä mitä teet, koska rajapinta-avaimesi lähetetään kyseiselle palvelimelle.", "AptUpdater": "Asenna päivitys APT-työkalun avulla", "DockerUpdater": "Hanki päivitys päivittämällä Docker-säiliö", @@ -1264,9 +1264,87 @@ "UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan,", "AddDelayProfileError": "Virhe lisättäessä viiveporofiilia. Yritä uudelleen.", "ImportListTagsHelpText": "Tunnisteet, joilla tältä tuontilistalta lisätyt kohteet merkitään.", - "Min": "Alin", - "Preferred": "Tavoite", - "Max": "Korkein", + "Min": "Pienin", + "Preferred": "Suosittu", + "Max": "Suurin", "Today": "Tänään", - "MappedNetworkDrivesWindowsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja [UKK:sta]({url})." + "MappedNetworkDrivesWindowsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja UKK:sta ({url}).", + "DownloadClientSettingsOlderPriority": "Vanhojen painotus", + "DownloadClientSettingsPostImportCategoryHelpText": "Kategoria, jonka {appName} asettaa tuonnin jälkeen. {appName} ei poista tämän kategorian torrenteja vaikka jakaminen olisi päättynyt. Säilytä alkuperäinen kategoria jättämällä tyhjäksi.", + "DownloadClientSettingsRecentPriority": "Uusien painotus", + "PostImportCategory": "Tuonnin jälkeinen kategoria", + "ShowNextAlbumHelpText": "Näytä seuraava albumi julisteen alla.", + "DownloadClientDelugeSettingsDirectory": "Latauskansio", + "InteractiveSearchModalHeaderTitle": "Manuaalihaku – {title}", + "CustomFormatsSettingsTriggerInfo": "Mukautettua muotoa sovelletaan julkaisuun tai tiedostoon, kun ainakin yksi valituista ehtotyypeistä täsmää.", + "NotificationsTelegramSettingsIncludeAppName": "Sisällytä {appName} otsikkoon", + "DownloadClientDelugeSettingsDirectoryCompleted": "Kansio, johon valmistuneet siirretään", + "EditSelectedCustomFormats": "Muokkaa valittuja mukautettuja muotoja", + "Install": "Asenna", + "SmartReplace": "Älykäs korvaus", + "DownloadClientSettingsOlderPriorityAlbumHelpText": "Yli 14 päivää sitten julkaistujen albumien kaappauksille käytettävä painotus.", + "DownloadClientSettingsRecentPriorityAlbumHelpText": "14 päivän sisällä julkaistujen albumien kaappauksille käytettävä painotus.", + "InstallMajorVersionUpdate": "Asenna päivitys", + "InstallMajorVersionUpdateMessage": "Tämä päivitys asentaa uuden pääversion, joka ei välttämättä ole yhteensopiva laitteistosi kanssa. Haluatko varmasti asentaa päivityksen?", + "InstallMajorVersionUpdateMessageLink": "Saat lisätietoja osoitteesta [{domain}]({url}).", + "LogSizeLimit": "Lokin kokorajoitus", + "LogSizeLimitHelpText": "Lokitiedoston enimmäiskoko ennen pakkausta. Oletusarvo on 1 Mt.", + "ManageCustomFormats": "Hallitse mukautettuja muotoja", + "ManageFormats": "Hallitse muotoja", + "NoCustomFormatsFound": "Mukautettuja muotoja ei löytynyt", + "NotificationsTelegramSettingsIncludeAppNameHelpText": "Ilmoitukset voidaan tarvittaessa erottaa muista sovelluksista lisäämällä niiden eteen \"{appName}\".", + "SkipFreeSpaceCheckHelpText": "Käytä, kun {appName} ei kykene tunnistamaan juurikansiosi käytettävissä olevaa vapaata tallennustilaa.", + "CountCustomFormatsSelected": "{count} mukautettu(a) muoto(a) on valittu", + "LastSearched": "Edellinen haku", + "Total": "Kaikkiaan", + "WithFiles": "Tiedostoineen", + "BannerOptions": "Bannerinäkymän asetukset", + "AllowFingerprintingHelpTextWarning": "Tätä varten {appName}in on luettava osia tiedostoista, joka saattaa kasvattaa levyn tai verkon kuormitusta tarkistusten aikana.", + "EmbedCoverArtHelpText": "Sisällytä Lidarrin albumikuvitukset äänitiedostoihin kun niiden tagit tallennetaan.", + "ForeignId": "Vieras ID", + "MonitorAlbum": "Valvo albumia", + "AddNewArtist": "Lisää uusi esittäjä", + "DownloadedWaitingToImport": "Ladattu – Odottaa tuontia", + "ArtistProgressBarText": "{trackFileCount}/{trackCount} (kaikkiaan: {totalTrackCount}, latauksessa: {downloadingCount})", + "DownloadedImporting": "Ladattu – Tuodaan", + "IfYouDontAddAnImportListExclusionAndTheArtistHasAMetadataProfileOtherThanNoneThenThisAlbumMayBeReaddedDuringTheNextArtistRefresh": "Jos et lisää tuontillistapoikkeusta ja esittäjän metatietoprofiili on muu kuin \"Ei mitään\", saatetaan albumi lisätä uudelleen kun esittäjä seuraavan kerran päivitetään.", + "MatchedToArtist": "Kohdistettu esittäjään", + "TrackFileRenamedTooltip": "Kappaletiedosto nimettiin uudelleen", + "TrackFileTagsUpdatedTooltip": "Kappaletiedoston tagit päivitettiin", + "OneAlbum": "1 albumi", + "MonitorNoNewAlbums": "Uusia albumeita ei ole", + "NoAlbums": "Albumeita ei ole", + "OnTrackRetag": "Kun kappaleen tagit muuttuvat", + "DeleteFormat": "Poista muoto", + "EmbedCoverArtInAudioFiles": "Sisällytä kuvat äänitiedostoihin", + "OnArtistAdd": "Kun esittäjä lisätään", + "OnArtistDelete": "Kun esittäjä poistetaan", + "PreviewRetag": "Esikatsele tagimuutoksia", + "AddAlbumWithTitle": "Lisää {albumTitle}", + "AddArtistWithName": "Lisää {artistName}", + "RetagSelectedArtists": "Päivitä valittujen esittäjien tagit", + "TrackFileDeletedTooltip": "Kappaletiedosto poistettiin", + "TrackFiles": "Kappaletiedostot", + "OnAlbumDelete": "Kun albumi poistetaan", + "DownloadPropersAndRepacksHelpTexts2": "\"Älä suosi\" käyttää Proper-/Repack-julkaisujen sijaan haluttua sanapisteytystä.", + "EditSelectedArtists": "Muokkaa valittuja esittäjiä", + "ICalTagsArtistHelpText": "Syöte sisältää vain vähintään yhdellä täsmäävällä tunnisteella merkityt esittäjät.", + "MatchedToAlbums": "Täsmätty albumeihin", + "NoTracksInThisMedium": "Kappaleita ei ole tässä muodossa", + "ReleaseProfileTagArtistHelpText": "Julkaisuprofiileja sovelletaan esittäjiin, jotka on merkitty ainakin yhdellä täsmäävällä tunnisteella. Käytä kaikille esittäjille jättämällä tyhjäksi.", + "TrackFileMissingTooltip": "Kappaletiedosto puuttuu", + "TrackFilesLoadError": "Kappaletiedostojen lataus epäonnistui", + "AddNewAlbum": "Lisää uusi albumi", + "AddNewAlbumSearchForNewAlbum": "Käynnistä uusien albumien haku", + "AlbumCount": "Abumien määrä", + "AlbumDetails": "Albumin tiedot", + "AlbumInfo": "Albumin tiedot", + "AnchorTooltip": "Tämä tiedosto on jo kirjastossasi julkaisussa, jota olet juuri tuomassa.", + "ArtistMonitoring": "Esittäjän valvonta", + "Banners": "Bannerit", + "CountAlbums": "{albumCount} albumia", + "DefaultDelayProfileArtist": "Tämä on oletusprofiili, joka pätee kaikkii esittäjiin, joille ei ole erikseen määritetty profiilia.", + "DelayProfileArtistTagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille esittäjille.", + "Disambiguation": "Yksinkertaistaminen", + "NotificationsTagsArtistHelpText": "Ilmoita vain vähintään yhdellä täsmäävällä tunnisteella merkityistä esittäjistä." } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index f3aa8abf2..a6fb5b43c 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -301,7 +301,7 @@ "ShownAboveEachColumnWhenWeekIsTheActiveView": "Affiché au dessus de chaque colonne quand \"Semaine\" est l'affichage actif", "ShowPath": "Afficher le chemin", "ShowQualityProfile": "Afficher le profil de qualité", - "ShowQualityProfileHelpText": "Afficher le profil de qualité sous l'affiche", + "ShowQualityProfileHelpText": "Affiche le profil de qualité sous l'affiche", "ShowRelativeDates": "Afficher les dates relatives", "ShowRelativeDatesHelpText": "Afficher les dates relatives (Aujourd'hui/Hier/etc) ou absolues", "ShowSearch": "Afficher la recherche", @@ -441,8 +441,8 @@ "ShortDateFormat": "Format de date courte", "ShowCutoffUnmetIconHelpText": "Afficher l'icône des fichiers lorsque la limite n'a pas été atteinte", "ShowDateAdded": "Afficher la date d'ajout", - "ShowMonitored": "Afficher le chemin", - "ShowMonitoredHelpText": "Afficher l'état de surveillance sous le poster", + "ShowMonitored": "Afficher l'état de surveillance", + "ShowMonitoredHelpText": "Affiche l'état de surveillance sous le poster", "Size": " Taille", "SkipFreeSpaceCheck": "Ignorer la vérification de l'espace libre", "SorryThatAlbumCannotBeFound": "Désolé, ce film est introuvable.", @@ -1334,5 +1334,9 @@ "Min": "Min", "Preferred": "Préféré", "Today": "Aujourd'hui", - "MappedNetworkDrivesWindowsService": "Les lecteurs réseau mappés ne sont pas disponibles lors de l'exécution en tant que service Windows, consultez la [FAQ]({url}) pour plus d'informations." + "MappedNetworkDrivesWindowsService": "Les lecteurs réseau mappés ne sont pas disponibles lors de l'exécution en tant que service Windows, consultez la [FAQ]({url}) pour plus d'informations.", + "DownloadClientSettingsOlderPriority": "Priorité plus ancienne", + "DownloadClientSettingsPostImportCategoryHelpText": "Catégorie que {appName} doit définir après avoir importé le téléchargement. {appName} ne supprimera pas les torrents de cette catégorie même si l'ensemencement est terminé. Laisser vide pour conserver la même catégorie.", + "DownloadClientSettingsRecentPriority": "Priorité récente", + "PostImportCategory": "Catégorie après l'importation" } diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index 4de044452..5a5885200 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -796,5 +796,6 @@ "Max": "מקסימום", "Min": "דקה", "Preferred": "מועדף", - "MappedNetworkDrivesWindowsService": "כונני רשת ממופים אינם זמינים כאשר הם פועלים כשירות Windows. אנא עיין בשאלות הנפוצות למידע נוסף" + "MappedNetworkDrivesWindowsService": "כונני רשת ממופים אינם זמינים כאשר הם פועלים כשירות Windows. אנא עיין בשאלות הנפוצות למידע נוסף", + "DownloadClientSettingsRecentPriority": "עדיפות לקוח" } diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index 748b2585a..bf15aee60 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -752,5 +752,6 @@ "Min": "मिनट", "Preferred": "पसंदीदा", "Today": "आज", - "MappedNetworkDrivesWindowsService": "विंडोज सर्विस के रूप में चलने पर मैप्ड नेटवर्क ड्राइव उपलब्ध नहीं हैं। अधिक जानकारी के लिए कृपया FAQ देखें" + "MappedNetworkDrivesWindowsService": "विंडोज सर्विस के रूप में चलने पर मैप्ड नेटवर्क ड्राइव उपलब्ध नहीं हैं। अधिक जानकारी के लिए कृपया FAQ देखें", + "DownloadClientSettingsRecentPriority": "ग्राहक प्राथमिकता" } diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index 9a6cab200..d2dd93826 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -306,5 +306,6 @@ "Clone": "Zatvori", "DeleteSelectedTrackFilesMessageText": "Jeste li sigurni da želite obrisati ovaj profil odgode?", "AddDelayProfileError": "Neuspješno dodavanje profila odgode, molimo pokušaj ponovno.", - "Today": "Danas" + "Today": "Danas", + "DownloadClientSettingsRecentPriority": "Prioritet Klijenata" } diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index d0d3dbb87..58c4efa7f 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -1226,5 +1226,8 @@ "Max": "Max", "Min": "Min", "Preferred": "Előnyben részesített", - "Today": "Ma" + "Today": "Ma", + "DownloadClientSettingsOlderPriority": "Régebbi prioritás", + "DownloadClientSettingsRecentPriority": "Legutóbbi prioritás", + "PostImportCategory": "Import utáni kategória" } diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index 6d99043e0..c6e686ea2 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -753,5 +753,6 @@ "Min": "Mín", "Preferred": "Æskilegt", "Today": "Í dag", - "MappedNetworkDrivesWindowsService": "Kortlagðar netdrif eru ekki fáanlegar þegar þær eru keyrðar sem Windows þjónusta. Vinsamlegast skoðaðu algengar spurningar fyrir frekari upplýsingar" + "MappedNetworkDrivesWindowsService": "Kortlagðar netdrif eru ekki fáanlegar þegar þær eru keyrðar sem Windows þjónusta. Vinsamlegast skoðaðu algengar spurningar fyrir frekari upplýsingar", + "DownloadClientSettingsRecentPriority": "Forgangur viðskiptavinar" } diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index d775c91ef..e7758d439 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -1046,5 +1046,6 @@ "Max": "Massimo", "Min": "Min", "Today": "Oggi", - "MappedNetworkDrivesWindowsService": "Le unità di rete mappate non sono disponibili eseguendo come servizio di Windows. Vedere le FAQ per maggiori informazioni" + "MappedNetworkDrivesWindowsService": "Le unità di rete mappate non sono disponibili eseguendo come servizio di Windows. Vedere le FAQ per maggiori informazioni", + "DownloadClientSettingsRecentPriority": "Priorità Client" } diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index 6bcd640ed..345ca116e 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -753,5 +753,6 @@ "Min": "最小", "Preferred": "優先", "Today": "今日", - "MappedNetworkDrivesWindowsService": "マップされたネットワークドライブは、Windowsサービスとして実行している場合は使用できません。詳細については、FAQを参照してください" + "MappedNetworkDrivesWindowsService": "マップされたネットワークドライブは、Windowsサービスとして実行している場合は使用できません。詳細については、FAQを参照してください", + "DownloadClientSettingsRecentPriority": "クライアントの優先順位" } diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 9e938390c..6681d82ae 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -744,5 +744,6 @@ "AddImportList": "가져오기 목록 추가", "UpdateAvailableHealthCheckMessage": "새 업데이트 사용 가능: {version}", "Today": "오늘", - "MappedNetworkDrivesWindowsService": "Windows 서비스로 실행할 때는 매핑 된 네트워크 드라이브를 사용할 수 없습니다. 자세한 내용은 FAQ를 참조하십시오." + "MappedNetworkDrivesWindowsService": "Windows 서비스로 실행할 때는 매핑 된 네트워크 드라이브를 사용할 수 없습니다. 자세한 내용은 FAQ를 참조하십시오.", + "DownloadClientSettingsRecentPriority": "클라이언트 우선 순위" } diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index 8169786a0..a6fff2291 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -276,5 +276,6 @@ "AptUpdater": "Bruk apt til å installere oppdateringen", "Clone": "Lukk", "Reason": "Sesong", - "AddDelayProfileError": "Ikke mulig å legge til ny betingelse, vennligst prøv igjen" + "AddDelayProfileError": "Ikke mulig å legge til ny betingelse, vennligst prøv igjen", + "DownloadClientSettingsRecentPriority": "Klientprioritet" } diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index 1b4b4d5a2..884b68fe7 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -902,5 +902,6 @@ "Today": "Vandaag", "Min": "Min", "Preferred": "Voorkeur gegeven", - "MappedNetworkDrivesWindowsService": "Toegewezen netwerkstation is niet beschikbaar wanneer Prowlarr wordt uitgevoerd als een Windows Service. Bekijk de Veelgestelde Vragen voor meer informatie" + "MappedNetworkDrivesWindowsService": "Toegewezen netwerkstation is niet beschikbaar wanneer Prowlarr wordt uitgevoerd als een Windows Service. Bekijk de Veelgestelde Vragen voor meer informatie", + "DownloadClientSettingsRecentPriority": "Client Prioriteit" } diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 2e4699389..67fcc1a37 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -852,5 +852,6 @@ "Min": "Min", "Preferred": "Preferowane", "Today": "Dzisiaj", - "MappedNetworkDrivesWindowsService": "Zmapowane dyski sieciowe nie są dostępne, gdy działają jako usługa systemu Windows. Więcej informacji można znaleźć w FAQ" + "MappedNetworkDrivesWindowsService": "Zmapowane dyski sieciowe nie są dostępne, gdy działają jako usługa systemu Windows. Więcej informacji można znaleźć w FAQ", + "DownloadClientSettingsRecentPriority": "Priorytet klienta" } diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index 5db5dd615..becbfd941 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -1023,5 +1023,6 @@ "Min": "Mín.", "Preferred": "Preferido", "Today": "Hoje", - "MappedNetworkDrivesWindowsService": "As unidades de rede mapeadas não estão disponíveis quando executadas como um serviço do Windows. Veja as Perguntas mais frequentes para obter mais informações" + "MappedNetworkDrivesWindowsService": "As unidades de rede mapeadas não estão disponíveis quando executadas como um serviço do Windows. Veja as Perguntas mais frequentes para obter mais informações", + "DownloadClientSettingsRecentPriority": "Prioridade do cliente" } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 3b023698c..7405d800e 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -1340,5 +1340,11 @@ "Today": "Hoje", "Max": "Máx.", "Preferred": "Preferido", - "MappedNetworkDrivesWindowsService": "As unidades de rede mapeadas não estão disponíveis quando executadas como um serviço do Windows. Consulte as [FAQ]({url}) para obter mais informações." + "MappedNetworkDrivesWindowsService": "As unidades de rede mapeadas não estão disponíveis quando executadas como um serviço do Windows. Consulte as [FAQ]({url}) para obter mais informações.", + "DownloadClientSettingsPostImportCategoryHelpText": "Categoria para o {appName} definir após importar o download. O {appName} não removerá torrents nessa categoria mesmo que a semeadura esteja concluída. Deixe em branco para manter a mesma categoria.", + "DownloadClientSettingsOlderPriority": "Priorizar mais antigos", + "DownloadClientSettingsRecentPriority": "Priorizar recentes", + "PostImportCategory": "Categoria Pós-Importação", + "DownloadClientSettingsOlderPriorityAlbumHelpText": "Prioridade para usar ao pegar álbuns lançados há mais de 14 dias", + "DownloadClientSettingsRecentPriorityAlbumHelpText": "Prioridade de uso ao adquirir álbuns lançados nos últimos 14 dias" } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index ece8c88b4..c090a3fdf 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -798,5 +798,7 @@ "Preferred": "Preferat", "Max": "Max", "Today": "Astăzi", - "MappedNetworkDrivesWindowsService": "Unitățile de rețea mapate nu sunt disponibile atunci când rulează ca serviciu Windows. Vă rugăm să consultați [FAQ]({url}) pentru mai multe informații" + "MappedNetworkDrivesWindowsService": "Unitățile de rețea mapate nu sunt disponibile atunci când rulează ca serviciu Windows. Vă rugăm să consultați [FAQ]({url}) pentru mai multe informații", + "DownloadClientSettingsRecentPriority": "Prioritate recente", + "DownloadClientSettingsOlderPriority": "Prioritate mai vechi" } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index a98be9385..a687c92ca 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -558,7 +558,7 @@ "Test": "Тест", "Title": "Название", "TotalSpace": "Общее сводное место", - "Ui": "Пользовательский интерфейс", + "Ui": "Интерфейс", "UnmappedFilesOnly": "Только несопоставленные файлы", "UnmonitoredOnly": "Только не отслеживаемые", "UpgradesAllowed": "Обновления разрешены", @@ -1084,5 +1084,9 @@ "RegularExpressionsTutorialLink": "Более подробную информацию о регулярных выражениях можно найти [здесь]({url}).", "Today": "Сегодня", "Min": "Минимум", - "MappedNetworkDrivesWindowsService": "Подключенные сетевые диски недоступны при работе в качестве службы Windows. Дополнительную информацию см. в [FAQ]({url})." + "MappedNetworkDrivesWindowsService": "Подключенные сетевые диски недоступны при работе в качестве службы Windows. Дополнительную информацию см. в [FAQ]({url}).", + "DownloadClientSettingsOlderPriority": "Более старый приоритет", + "DownloadClientSettingsPostImportCategoryHelpText": "Категория для приложения {appName}, которую необходимо установить после импорта загрузки. {appName} не удалит торренты в этой категории, даже если раздача завершена. Оставьте пустым, чтобы сохранить ту же категорию.", + "DownloadClientSettingsRecentPriority": "Недавний приоритет", + "PostImportCategory": "Категория после импорта" } diff --git a/src/NzbDrone.Core/Localization/Core/sk.json b/src/NzbDrone.Core/Localization/Core/sk.json index 388e4316a..56f223b2a 100644 --- a/src/NzbDrone.Core/Localization/Core/sk.json +++ b/src/NzbDrone.Core/Localization/Core/sk.json @@ -294,5 +294,6 @@ "AptUpdater": "Použiť apt pre inštaláciu aktualizácie", "Clone": "Zatvoriť", "Reason": "Séria", - "AddDelayProfileError": "Nie je možné pridať novú podmienku, skúste to znova." + "AddDelayProfileError": "Nie je možné pridať novú podmienku, skúste to znova.", + "DownloadClientSettingsRecentPriority": "Priorita klienta" } diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 9ec355ea1..eab45967f 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -925,5 +925,6 @@ "Min": "Min", "Preferred": "Föredraget", "Today": "Idag", - "MappedNetworkDrivesWindowsService": "Mappade nätverksenheter är inte tillgängliga när de körs som en Windows-tjänst. Se FAQ för mer information" + "MappedNetworkDrivesWindowsService": "Mappade nätverksenheter är inte tillgängliga när de körs som en Windows-tjänst. Se FAQ för mer information", + "DownloadClientSettingsRecentPriority": "Klient prioritet" } diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index 2507257b0..ce352f458 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -750,5 +750,6 @@ "Min": "นาที", "Preferred": "ที่ต้องการ", "Today": "วันนี้", - "MappedNetworkDrivesWindowsService": "ไดรฟ์เครือข่ายที่แมปไม่พร้อมใช้งานเมื่อเรียกใช้เป็นบริการ Windows โปรดดูคำถามที่พบบ่อยสำหรับข้อมูลเพิ่มเติม" + "MappedNetworkDrivesWindowsService": "ไดรฟ์เครือข่ายที่แมปไม่พร้อมใช้งานเมื่อเรียกใช้เป็นบริการ Windows โปรดดูคำถามที่พบบ่อยสำหรับข้อมูลเพิ่มเติม", + "DownloadClientSettingsRecentPriority": "ลำดับความสำคัญของลูกค้า" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 6aef6cf70..4f9063901 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -125,8 +125,8 @@ "DeleteImportListExclusion": "İçe Aktarma Listesi Hariç Tutmasını Sil", "DeleteImportListExclusionMessageText": "Bu içe aktarma listesi hariç tutma işlemini silmek istediğinizden emin misiniz?", "DeleteImportListMessageText": "'{name}' listesini silmek istediğinizden emin misiniz?", - "DeleteIndexer": "Dizinleyiciyi Sil", - "DeleteIndexerMessageText": "'{name}' dizinleyicisini silmek istediğinizden emin misiniz?", + "DeleteIndexer": "İndeksleyiciyi Sil", + "DeleteIndexerMessageText": "'{name}' indeksleyicisini silmek istediğinizden emin misiniz?", "DeleteMetadataProfileMessageText": "Kalite profilini silmek istediğinizden emin misiniz {0}", "DeleteNotification": "Bildirimi Sil", "DeleteNotificationMessageText": "'{name}' bildirimini silmek istediğinizden emin misiniz?", @@ -207,10 +207,10 @@ "Importing": "İçe Aktarma", "IncludeUnknownArtistItemsHelpText": "Kuyrukta film olmayan öğeleri gösterin. Bu, kaldırılan filmleri veya {appName}'ın kategorisindeki herhangi bir şeyi içerebilir", "IncludeUnmonitored": "Takip Edilmeyenleri Dahil Et", - "Indexer": "Dizinleyici", - "IndexerPriority": "Dizinleyici Önceliği", - "Indexers": "Dizinleyiciler", - "IndexerSettings": "Dizinleyici Ayarları", + "Indexer": "İndeksleyici", + "IndexerPriority": "İndeksleyici Önceliği", + "Indexers": "İndeksleyiciler", + "IndexerSettings": "İndeksleyici Ayarları", "InteractiveSearch": "Etkileşimli Arama", "Interval": "Periyot", "IsCutoffCutoff": "Ayırmak", @@ -259,10 +259,10 @@ "NoBackupsAreAvailable": "Kullanılabilir yedek yok", "NoHistory": "Tarih yok", "NoLeaveIt": "Hayır, Bırak", - "NoLogFiles": "Log kayıt dosyası henüz yok", + "NoLogFiles": "Log kayıt dosyası henüz oluşturulmadı", "None": "Yok", "NotificationTriggers": "Bildirim Tetikleyicileri", - "NoUpdatesAreAvailable": "Güncelleme yok", + "NoUpdatesAreAvailable": "Güncelleme bulunamadı", "OpenBrowserOnStart": "Başlangıçta tarayıcıyı aç", "Options": "Seçenekler", "Original": "Orijinal", @@ -384,7 +384,7 @@ "Tasks": "Görevler", "TestAll": "Tümünü Test Et", "TestAllClients": "Tüm İstemcileri Test Et", - "TestAllIndexers": "Dizinleyicileri Test Et", + "TestAllIndexers": "İndeksleyicileri Test Et", "TestAllLists": "Tüm Listeleri Test Et", "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Bu, tüm dizin oluşturucular için geçerli olacaktır, lütfen onlar tarafından belirlenen kurallara uyun", "Time": "Zaman", @@ -405,7 +405,7 @@ "UiLanguageHelpText": "{appName}'ın arayüz için kullanacağı dil", "UiLanguageHelpTextWarning": "Tarayıcının Yeniden Yüklenmesi Gerekiyor", "UnableToAddANewImportListExclusionPleaseTryAgain": "Yeni bir liste dışlaması eklenemiyor, lütfen tekrar deneyin.", - "UnableToAddANewIndexerPleaseTryAgain": "Yeni bir dizinleyici eklenemiyor, lütfen tekrar deneyin.", + "UnableToAddANewIndexerPleaseTryAgain": "Yeni bir indeksleyici eklenemiyor, lütfen tekrar deneyin.", "UnableToAddANewListPleaseTryAgain": "Yeni bir liste eklenemiyor, lütfen tekrar deneyin.", "UnableToAddANewMetadataProfilePleaseTryAgain": "Yeni bir kaliteli profil eklenemiyor, lütfen tekrar deneyin.", "UnableToAddANewNotificationPleaseTryAgain": "Yeni bir bildirim eklenemiyor, lütfen tekrar deneyin.", @@ -421,7 +421,7 @@ "UnableToLoadHistory": "Geçmiş yüklenemiyor", "UnableToLoadImportListExclusions": "Hariç Tutulanlar Listesi yüklenemiyor", "UnableToLoadIndexerOptions": "Dizin oluşturucu seçenekleri yüklenemiyor", - "UnableToLoadIndexers": "Dizinleyiciler yüklenemiyor", + "UnableToLoadIndexers": "İndeksleyiciler yüklenemiyor", "UnableToLoadLists": "Listeler yüklenemiyor", "UnableToLoadMediaManagementSettings": "Medya Yönetimi ayarları yüklenemiyor", "UnableToLoadMetadata": "Meta Veriler yüklenemiyor", @@ -469,7 +469,7 @@ "Warn": "Uyar", "Connect": "Bildirimler", "Added": "Eklenme", - "AddIndexer": "Dizinleyici Ekle", + "AddIndexer": "İndeksleyici Ekle", "AddNew": "Yeni Ekle", "AddQualityProfile": "Kalite Profili Ekle", "AddRemotePathMapping": "Uzak Yol Eşleme Ekleme", @@ -596,17 +596,17 @@ "HiddenClickToShow": "Gizli, göstermek için tıklayın", "AppDataLocationHealthCheckMessage": "Güncelleme sırasında AppData'nın silinmesini önlemek için güncelleme yapılmayacaktır", "ColonReplacement": "Kolon Değiştirme", - "ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor", + "ImportListStatusCheckAllClientMessage": "Hatalar nedeniyle tüm indeksleyiciler kullanılamıyor", "ImportListStatusCheckSingleClientMessage": "Hatalar nedeniyle kullanılamayan listeler: {0}", "ImportMechanismHealthCheckMessage": "Tamamlanan İndirme İşlemini Etkinleştir", "IndexerLongTermStatusCheckSingleClientMessage": "6 saatten uzun süredir yaşanan arızalar nedeniyle dizinleyiciler kullanılamıyor: {0}", - "IndexerLongTermStatusCheckAllClientMessage": "6 saatten uzun süren arızalar nedeniyle tüm dizinleyiciler kullanılamıyor", - "IndexerRssHealthCheckNoAvailableIndexers": "Son zamanlardaki dizinleyici hataları nedeniyle tüm rss uyumlu dizinleyiciler geçici olarak kullanılamıyor", - "IndexerRssHealthCheckNoIndexers": "RSS senkronizasyonunun etkin olduğu dizinleyici yok, {appName} yeni yayınlar otomatik olarak almayacak", - "IndexerSearchCheckNoAutomaticMessage": "Otomatik Arama etkinleştirildiğinde hiçbir dizinleyici kullanılamaz, {appName} herhangi bir otomatik arama sonucu sağlamayacaktır", - "IndexerSearchCheckNoAvailableIndexersMessage": "Son zamanlardaki dizinleyici hataları nedeniyle tüm arama yeteneğine sahip dizinleyiciler geçici olarak kullanılamıyor", - "IndexerSearchCheckNoInteractiveMessage": "Etkileşimli Arama etkinleştirildiğinde hiçbir dizinleyici kullanılamaz, {appName} herhangi bir etkileşimli arama sonucu sağlamayacaktır", - "IndexerStatusCheckAllClientMessage": "Hatalar nedeniyle tüm dizinleyiciler kullanılamıyor", + "IndexerLongTermStatusCheckAllClientMessage": "6 saatten uzun süren arızalar nedeniyle tüm indeksleyiciler kullanılamıyor", + "IndexerRssHealthCheckNoAvailableIndexers": "Son zamanlardaki indeksleyici hataları nedeniyle tüm rss uyumlu indeksleyiciler geçici olarak kullanılamıyor", + "IndexerRssHealthCheckNoIndexers": "RSS senkronizasyonunun etkin olduğu indeksleyici bulunamadı, {appName} yeni yayınlar otomatik olarak almayacak", + "IndexerSearchCheckNoAutomaticMessage": "Otomatik Arama etkinleştirildiğinde hiçbir indeksleyici kullanılamaz, {appName} herhangi bir otomatik arama sonucu sağlamayacaktır", + "IndexerSearchCheckNoAvailableIndexersMessage": "Son zamanlardaki indeksleyici hataları nedeniyle tüm arama yeteneğine sahip indeksleyiciler geçici olarak kullanılamıyor", + "IndexerSearchCheckNoInteractiveMessage": "Etkileşimli Arama etkinleştirildiğinde hiçbir indeksleyici kullanılamaz, {appName} herhangi bir etkileşimli arama sonucu sağlamayacaktır", + "IndexerStatusCheckAllClientMessage": "Hatalar nedeniyle tüm indeksleyiciler kullanılamıyor", "IndexerStatusCheckSingleClientMessage": "Hatalar nedeniyle dizinleyiciler kullanılamıyor: {0}", "MountArtistHealthCheckMessage": "Bir film yolu içeren bağlama, salt okunur olarak bağlanır: ", "ProxyCheckBadRequestMessage": "Proxy ile test edilemedi. DurumKodu: {0}", @@ -632,7 +632,7 @@ "SetTags": "Etiketleri Ayarla", "Yes": "Evet", "DeleteSelectedDownloadClients": "İndirme İstemcisini Sil", - "DeleteSelectedIndexers": "Dizinleyicileri Sil", + "DeleteSelectedIndexers": "İndeksleyicileri Sil", "BlocklistReleases": "Kara Liste Sürümü", "DeleteConditionMessageText": "'{0}' etiketini silmek istediğinizden emin misiniz?", "NoEventsFound": "Etkinlik bulunamadı", @@ -677,7 +677,7 @@ "EditConditionImplementation": "Koşulu Düzenle - {implementationName}", "Overview": "Genel Bakış", "GrabId": "ID'den Al", - "AddIndexerImplementation": "Yeni Dizinleyici Ekle - {implementationName}", + "AddIndexerImplementation": "Yeni İndeksleyici Ekle - {implementationName}", "DeleteArtistFolderHelpText": "Film klasörünü ve içeriğini silin", "DeleteAutoTagHelpText": "'{name}' etiketini otomatik silmek istediğinizden emin misiniz?", "DeleteSpecification": "Spesifikasyonu Sil", @@ -785,8 +785,8 @@ "Clone": "Klon", "CloneAutoTag": "Otomatik Etiketi Klonla", "CloneCondition": "Klon Durumu", - "ClickToChangeIndexerFlags": "Dizinleyici bayraklarını değiştirmek için tıklayın", - "IndexerFlags": "Dizinleyici Bayrakları", + "ClickToChangeIndexerFlags": "İndeksleyici bayraklarını değiştirmek için tıklayın", + "IndexerFlags": "İndeksleyici Bayrakları", "ApiKeyValidationHealthCheckMessage": "Lütfen API anahtarınızı en az {length} karakter uzunluğunda olacak şekilde güncelleyin. Bunu ayarlar veya yapılandırma dosyası aracılığıyla yapabilirsiniz", "PreferredProtocol": "Tercih Edilen Protokol", "ChooseImportMethod": "İçe Aktarma Modunu Seçin", @@ -827,8 +827,8 @@ "DeleteAutoTag": "Etiketi Otomatik Sil", "CustomFormatsSettingsTriggerInfo": "Bir yayına veya dosyaya, seçilen farklı koşul türlerinden en az biriyle eşleştiğinde Özel Format uygulanacaktır.", "DeleteSelectedImportListsMessageText": "Seçilen {count} içe aktarma listesini silmek istediğinizden emin misiniz?", - "DeleteSelectedIndexersMessageText": "Seçilen {count} dizinleyiciyi silmek istediğinizden emin misiniz?", - "IndexerPriorityHelpText": "Dizinleyici Önceliği (En Yüksek) 1'den (En Düşük) 50'ye kadar. Varsayılan: 25'dir. Eşit olmayan yayınlar için eşitlik bozucu olarak yayınlar alınırken kullanılan {appName}, RSS Senkronizasyonu ve Arama için etkinleştirilmiş tüm dizin oluşturucuları kullanmaya devam edecek", + "DeleteSelectedIndexersMessageText": "Seçilen {count} indeksleyiciyi silmek istediğinizden emin misiniz?", + "IndexerPriorityHelpText": "İndeksleyici Önceliği (En Yüksek) 1'den (En Düşük) 50'ye kadar. Varsayılan: 25'dir. Eşit olmayan yayınlar için eşitlik bozucu olarak yayınlar alınırken kullanılan {appName}, RSS Senkronizasyonu ve Arama için etkinleştirilmiş tüm indeksleyicileri kullanmaya devam edecek", "ConnectionSettingsUrlBaseHelpText": "{connectionName} URL'sine {url} gibi bir önek ekler", "Album": "Albüm", "DownloadClientQbittorrentSettingsContentLayout": "İçerik Düzeni", @@ -843,7 +843,7 @@ "NotificationsKodiSettingsDisplayTimeHelpText": "Bildirimin ne kadar süreyle görüntüleneceği (Saniye cinsinden)", "NotificationsKodiSettingsGuiNotification": "GUI Bildirimi", "NotificationsKodiSettingsUpdateLibraryHelpText": "İçe Aktarma ve Yeniden Adlandırmada kitaplık güncellensin mi?", - "IndexerDownloadClientHelpText": "Bu dizinleyiciden almak için hangi indirme istemcisinin kullanılacağını belirtin", + "IndexerDownloadClientHelpText": "Bu indeksleyiciden almak için hangi indirme istemcisinin kullanılacağını belirtin", "Never": "Asla", "HealthMessagesInfoBox": "Satırın sonundaki wiki bağlantısını (kitap simgesi) tıklayarak veya [log kayıtlarınızı]({link}) kontrol ederek bu durum kontrolü mesajlarının nedeni hakkında daha fazla bilgi bulabilirsiniz. Bu mesajları yorumlamakta zorluk yaşıyorsanız aşağıdaki bağlantılardan destek ekibimize ulaşabilirsiniz.", "Menu": "Menü", @@ -852,8 +852,8 @@ "Implementation": "Uygula", "InstanceName": "Örnek isim", "ListRefreshInterval": "Liste Yenileme Aralığı", - "EditSelectedIndexers": "Seçili Dizinleyicileri Düzenle", - "ManageIndexers": "Dizinleyicileri Yönet", + "EditSelectedIndexers": "Seçili İndeksleyicileri Düzenle", + "ManageIndexers": "İndeksleyicileri Yönet", "NoHistoryBlocklist": "Geçmiş engellenenler listesi yok", "Label": "Etiket", "IndexerDownloadClientHealthCheckMessage": "Geçersiz indirme istemcilerine sahip dizinleyiciler: {0}.", @@ -878,9 +878,9 @@ "ManageClients": "İstemcileri Yönet", "ManageDownloadClients": "İndirme İstemcilerini Yönet", "InfoUrl": "Bilgi URL'si", - "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Bir torrent hash tarafından engellenirse, bazı dizinleyiciler için RSS / Arama sırasında düzgün bir şekilde reddedilmeyebilir, bunun etkinleştirilmesi, torrent alındıktan sonra, ancak istemciye gönderilmeden önce reddedilmesine izin verecektir.", + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Bir torrent hash tarafından engellenirse, bazı indeksleyiciler için RSS / Arama sırasında düzgün bir şekilde reddedilmeyebilir, bunun etkinleştirilmesi, torrent alındıktan sonra, ancak istemciye gönderilmeden önce reddedilmesine izin verecektir.", "EditSelectedImportLists": "Seçilen İçe Aktarma Listelerini Düzenle", - "NoIndexersFound": "Dizinleyici bulunamadı", + "NoIndexersFound": "İndeksleyici bulunamadı", "NotificationsEmbySettingsSendNotificationsHelpText": "MediaBrowser'ın yapılandırılmış sağlayıcılara bildirim göndermesini sağlayın", "NotificationsEmbySettingsUpdateLibraryHelpText": "İçe Aktarma, Yeniden Adlandırma veya Silme sırasında Kitaplık Güncellensin mi?", "IgnoreDownload": "İndirmeyi Yoksay", @@ -902,7 +902,7 @@ "PasswordConfirmation": "Şifre Tekrarı", "Rejections": "Reddedilenler", "ReleaseProfiles": "Yayımlama Profilleri", - "SelectIndexerFlags": "Dizinleyici Bayraklarını Seçin", + "SelectIndexerFlags": "İndeksleyici Bayraklarını Seçin", "UpdateFiltered": "Filtrelenenleri Güncelle", "UseSsl": "SSL kullan", "RemoveCompletedDownloads": "Tamamlanan İndirmeleri Kaldır", @@ -930,7 +930,7 @@ "RemotePathMappingCheckImportFailed": "{appName} filmi içe aktaramadı. Ayrıntılar için günlüklerinizi kontrol edin.", "RemoveSelectedItem": "Seçilen Öğeyi Kaldır", "ResetDefinitionTitlesHelpText": "Değerlerin yanı sıra tanım başlıklarını da sıfırlayın", - "SetIndexerFlags": "Dizinleyici Bayraklarını Ayarla", + "SetIndexerFlags": "İndeksleyici Bayraklarını Ayarla", "SkipRedownload": "Yeniden İndirmeyi Atla", "SupportedAutoTaggingProperties": "{appName}, otomatik etiketleme kuralları için takip özelliklerini destekler", "ThemeHelpText": "Uygulama Kullanıcı Arayüzü Temasını Değiştirin, 'Otomatik' Teması, Açık veya Koyu modu ayarlamak için İşletim Sistemi Temanızı kullanacaktır. Theme.Park'tan ilham alındı", @@ -945,7 +945,7 @@ "RemoveFailedDownloads": "Başarısız İndirmeleri Kaldır", "RegularExpressionsTutorialLink": "Düzenli ifadeler hakkında daha fazla ayrıntıyı [burada]({url}) bulabilirsiniz.", "SelectReleaseGroup": "Yayımlama Grubunu Seçin", - "QueueFilterHasNoItems": "Seçilen kuyruk filtresinde hiç öğe yok", + "QueueFilterHasNoItems": "Seçilen kuyruk filtresinde hiç öğe bulunamadı", "NotificationsSettingsUpdateMapPathsFrom": "Harita Yolları", "PreferProtocol": "{preferredProtocol}'u tercih edin", "IndexerSettingsSeedTime": "Seed Süresi", @@ -954,7 +954,7 @@ "IndexerSettingsSeedRatioHelpText": "Bir torrentin durdurulmadan önce ulaşması gereken oran. Boş bırakılırsa indirme istemcisinin varsayılan değerini kullanır. Oran en az 1,0 olmalı ve indeksleyici kurallarına uygun olmalıdır", "External": "Harici", "InteractiveSearchModalHeaderTitle": "İnteraktif Arama - {title}", - "MassSearchCancelWarning": "Bu işlem, {appName} yeniden başlatılmadan veya tüm dizin oluşturucularınız devre dışı bırakılmadan başlatılır ise iptal edilemez.", + "MassSearchCancelWarning": "Bu, {appName} uygulamasını yeniden başlatmadan veya tüm İndeksleyiciler devre dışı bırakılmadan başlatılır ise iptal edilemez.", "Albums": "Albüm", "InteractiveSearchModalHeader": "Etkileşimli Arama", "NoMissingItems": "Eksik öğe yok", @@ -1057,7 +1057,7 @@ "Other": "Diğer", "MediaManagementSettingsSummary": "Adlandırma ve dosya yönetimi ayarları", "EndedOnly": "Sadece Biten", - "IndexersSettingsSummary": "Dizinleyiciler ve yayımlama kısıtlamaları", + "IndexersSettingsSummary": "İndeksleyiciler ve indeksleyici seçenekleri", "ContinuingOnly": "Sadece Devam Eden", "IndexerSettingsApiUrlHelpText": "Ne yaptığınızı bilmiyorsanız bunu değiştirmeyin. API anahtarınız ana sunucuya gönderilecektir.", "ShowBanners": "Bannerları Göster", @@ -1078,5 +1078,9 @@ "Preferred": "Tercihli", "Today": "Bugün", "Min": "Min", - "MappedNetworkDrivesWindowsService": "Windows Hizmeti olarak çalıştırıldığında eşlenen ağ sürücüleri kullanılamaz, daha fazla bilgi için [SSS]({url}) bölümüne bakın." + "MappedNetworkDrivesWindowsService": "Windows Hizmeti olarak çalıştırıldığında eşlenen ağ sürücüleri kullanılamaz, daha fazla bilgi için [SSS]({url}) bölümüne bakın.", + "DownloadClientSettingsPostImportCategoryHelpText": "{appName}'in indirmeyi içe aktardıktan sonra ayarlayacağı kategori. {appName}, seed tamamlanmış olsa bile bu kategorideki torrentleri kaldırmayacaktır. Aynı kategoriyi korumak için boş bırakın.", + "DownloadClientSettingsRecentPriority": "Yeni Önceliği", + "PostImportCategory": "İçe Aktarma Sonrası Kategorisi", + "DownloadClientSettingsOlderPriority": "Eski Önceliği" } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 0f1352941..55677cd4b 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -916,5 +916,6 @@ "Min": "Мінімум", "Preferred": "Бажано", "Max": "Максимальний", - "MappedNetworkDrivesWindowsService": "Підключені мережеві диски недоступні під час роботи як служби Windows. Щоб отримати додаткову інформацію, перегляньте FAQ" + "MappedNetworkDrivesWindowsService": "Підключені мережеві диски недоступні під час роботи як служби Windows. Щоб отримати додаткову інформацію, перегляньте FAQ", + "DownloadClientSettingsRecentPriority": "Пріоритет клієнта" } diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index d8dc68941..25450ad91 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -787,5 +787,6 @@ "Min": "Min", "Preferred": "Ưu tiên", "Today": "Hôm nay", - "MappedNetworkDrivesWindowsService": "Các ổ đĩa mạng được ánh xạ không khả dụng khi chạy dưới dạng Dịch vụ Windows. Vui lòng xem Câu hỏi thường gặp để biết thêm thông tin" + "MappedNetworkDrivesWindowsService": "Các ổ đĩa mạng được ánh xạ không khả dụng khi chạy dưới dạng Dịch vụ Windows. Vui lòng xem Câu hỏi thường gặp để biết thêm thông tin", + "DownloadClientSettingsRecentPriority": "Ưu tiên khách hàng" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 2a38e129c..af927630d 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -1331,5 +1331,9 @@ "Min": "最小的", "Preferred": "首选的", "Today": "今天", - "MappedNetworkDrivesWindowsService": "作为 Windows 服务运行时,映射的网络驱动器不可用,请参阅 [FAQ]({url}) 获取更多信息。" + "MappedNetworkDrivesWindowsService": "作为 Windows 服务运行时,映射的网络驱动器不可用,请参阅 [FAQ]({url}) 获取更多信息。", + "DownloadClientSettingsOlderPriority": "最早优先", + "DownloadClientSettingsPostImportCategoryHelpText": "导入下载后要设置的 {appName} 的分类。 即使做种完成,{appName} 也不会删除该分类中的种子。 留空以保留同一分类。", + "DownloadClientSettingsRecentPriority": "最近优先", + "PostImportCategory": "导入后分类" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_TW.json b/src/NzbDrone.Core/Localization/Core/zh_TW.json index 73c315634..588f596ab 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_TW.json +++ b/src/NzbDrone.Core/Localization/Core/zh_TW.json @@ -235,7 +235,7 @@ "UiLanguage": "使用者介面語言", "UnableToLoadHistory": "無法載入歷史記錄", "UiLanguageHelpText": "{appName} 介面所使用的語言", - "AddDelayProfileError": "無法加入新的條件,請重新嘗試。", + "AddDelayProfileError": "無法加入新的延遲配置,請重新嘗試。", "AutoRedownloadFailed": "失敗時重新下載", "AuthenticationRequiredPasswordHelpTextWarning": "請輸入新密碼", "AuthenticationRequiredHelpText": "更改需要進行驗證的請求。除非你了解其中的風險,否則請勿修改。", @@ -245,5 +245,8 @@ "AuthenticationRequired": "需要驗證", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "確認新密碼", "AuthenticationRequiredUsernameHelpTextWarning": "請輸入新用戶名", - "AutoRedownloadFailedFromInteractiveSearch": "失敗時重新下載來自手動搜索的資源" + "AutoRedownloadFailedFromInteractiveSearch": "失敗時重新下載來自手動搜索的資源", + "IgnoredPlaceHolder": "加入新的限制", + "RequiredPlaceHolder": "加入新的限制", + "UnableToAddANewRemotePathMappingPleaseTryAgain": "無法加入新的遠程路徑對應,請重試。" } From 5cbb2848c79738eb2b270abf47358b43c932de4d Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 12 Jan 2025 15:17:02 +0200 Subject: [PATCH 157/275] Bump version to 2.9.4 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index eaadb74cc..19f3f83f2 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.9.3' + majorVersion: '2.9.4' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 014f8a58b19356b6beaa816e8b8adde651c82841 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 12 Jan 2025 09:33:21 +0000 Subject: [PATCH 158/275] Multiple Translations updated by Weblate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ignore-downstream Co-authored-by: Mickaël O Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/cs.json | 4 +++- src/NzbDrone.Core/Localization/Core/fi.json | 16 ++++++++-------- src/NzbDrone.Core/Localization/Core/fr.json | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 55a029045..91b18b3dd 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -889,5 +889,7 @@ "Preferred": "Upřednostňováno", "Today": "Dnes", "MappedNetworkDrivesWindowsService": "Mapované síťové jednotky nejsou k dispozici, když běží jako služba Windows. Další informace najdete v častých dotazech", - "DownloadClientSettingsRecentPriority": "Priorita klienta" + "DownloadClientSettingsRecentPriority": "Priorita klienta", + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Pokud je torrent blokován pomocí hash, nemusí být u některých indexerů správně odmítnut během RSS/vyhledávání. Povolení této funkce umožní jeho odmítnutí po zachycení torrentu, ale před jeho odesláním klientovi.", + "IndexerSettingsApiUrl": "URL API" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 5044f48de..5fc047848 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -59,7 +59,7 @@ "DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen \"{label}\"?", "TagIsNotUsedAndCanBeDeleted": "Tunniste ei ole käytössä ja voidaan poistaa.", "Security": "Suojaus", - "LidarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName} tukee kaikkien Newznab-yhteensopivien tietolähteiden ohella myös monia muita alla listattuja tietolähteitä.", + "LidarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName} tukee kaikkien Newznab-yhteensopivien hakupalveluiden ohella myös monia muita alla listattuja palveluita.", "Actions": "Toiminnot", "AddListExclusion": "Lisää listapoikkeus", "ApiKeyHelpTextWarning": "Käyttöönotto vaatii sovelluksen uudelleenkäynnistyksen.", @@ -564,7 +564,7 @@ "HideAdvanced": "Piilota lisäasetukset", "Ignored": "Ohitettu", "Import": "Tuo", - "IndexerTagHelpText": "Tietolähdettä käytetään vain vähintään yhdellä täsmäävällä tunnisteella merkityille esittäjille. Käytä kaikille jättämällä tyhjäksi.", + "IndexerTagHelpText": "Hakupalvelua käytetään vain vähintään yhdellä täsmäävällä tunnisteella merkityille esittäjille. Käytä kaikille jättämällä tyhjäksi.", "Info": "Informatiivinen", "InstanceName": "Instanssin nimi", "InstanceNameHelpText": "Instanssin nimi välilehdellä ja järjestelmälokissa.", @@ -652,8 +652,8 @@ "MissingTracksArtistNotMonitored": "Puuttuvat kappaleet (esittäjää ei valvota)", "MonitorArtist": "Valvo esittäjää", "MonitoringOptions": "Valvonta-asetukset", - "MusicBrainzAlbumID": "MusicBrainz-albumitunniste", - "MusicBrainzArtistID": "MusicBrainz-esittäjätunniste", + "MusicBrainzAlbumID": "Albumin MusicBrainz ID", + "MusicBrainzArtistID": "Esittäjän MusicBrainz ID", "MusicbrainzId": "MusicBrainz-tunniste", "MusicBrainzRecordingID": "MusicBrainz-tallennetunniste", "MusicBrainzReleaseID": "MusicBrainz-julkaisutunniste", @@ -745,7 +745,7 @@ "OnDownloadFailure": "Latauksen epäonnistuessa", "Artist": "Esittäjä", "ArtistClickToChangeAlbum": "Vaihda albumia painamalla", - "ArtistEditor": "Esittäjäeditori", + "ArtistEditor": "Esittäjien monivalinta", "Artists": "Esittäjät", "Country": "Maa", "AddReleaseProfile": "Lisää jukaisuprofiili", @@ -904,7 +904,7 @@ "ExtraFileExtensionsHelpTextsExamples": "Esimerkiksi \"sub, .nfo\" tai \"sub,nfo\".", "ExtraFileExtensionsHelpText": "Pilkuin eroteltu listaus tuotavista oheistiedostoista (.nfo-tiedostot tuodaan \".nfo-orig\"-nimellä).", "Conditions": "Ehdot", - "CountIndexersSelected": "{selectedCount} tietolähde(ttä) on valittu", + "CountIndexersSelected": "{selectedCount} hakupalvelu(a) on valittu", "DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valittua latauspalvelua?", "DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) tietoläh(teen/dettä)?", "EditSelectedIndexers": "Muokkaa valittuja sisältölähteitä", @@ -1170,8 +1170,8 @@ "UrlBaseHelpText": "Käänteisen välityspalvelimen tukea varten. Oletusarvo on tyhjä.", "ImportListStatusCheckSingleClientMessage": "Listat eivät ole virheiden vuoksi käytettävissä: {0}", "IndexerRssHealthCheckNoAvailableIndexers": "RSS-syötteitä tukevat tietolähteet eivät ole hiljattaisten tietolähdevirheiden vuoksi tilapaisesti käytettävissä.", - "IndexerLongTermStatusCheckSingleClientMessage": "Tietolähteet eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi: {0}", - "MassSearchCancelWarning": "Tämä on mahdollista keskeyttää vain käynnistämällä {appName} uudelleen tai poistamalla kaikki tietolähteet käytöstä.", + "IndexerLongTermStatusCheckSingleClientMessage": "Hakupalvelut eivät ole käytettävissä yli kuusi tuntia kestäneiden virheiden vuoksi: {0}.", + "MassSearchCancelWarning": "Tämä on mahdollista keskeyttää vain käynnistämällä {appName} uudelleen tai poistamalla kaikki hakupalvelut käytöstä.", "SearchForAllCutoffUnmetAlbumsConfirmationCount": "Haluatko varmasti etsiä kaikkia {totalRecords} albumia, joiden katkaisutasoa ei ole saavutettu?", "MonitorNoAlbums": "Ei mitään", "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.", diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index a6fb5b43c..d01b39743 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -64,7 +64,7 @@ "Component": "Composant", "Connections": "Connexions", "ConnectSettings": "Paramètres de connexion", - "CopyUsingHardlinksHelpText": "Les liens fixes permettent à {appName} d'importer des torrents seedés dans le dossier de l'artiste sans prendre d'espace disque supplémentaire ou copier tout le contenu du fichier. Les liens fixes ne fonctionnent que si la source et la destination se trouvent sur le même volume.", + "CopyUsingHardlinksHelpText": "Les liens fixes permettent à {appName} d'importer des torrents seedés dans le dossier de l'artiste sans prendre d'espace disque supplémentaire ou copier tout le contenu du fichier. Les liens fixes ne fonctionnent que si la source et la destination se trouvent sur le même volume", "CopyUsingHardlinksHelpTextWarning": "De temps en temps, des verrouillages de fichiers peuvent empêcher de renommer des fichiers qui sont en cours de partage. Vous pouvez temporairement arrêter le partage et utiliser la fonction de renommage de {appName} comme solution de contournement.", "CreateEmptyArtistFolders": "Créer des dossiers d'artistes vides", "CreateEmptyArtistFoldersHelpText": "Créer les dossiers films manquants pendant le scan du disque", From 82e0b628cc808591573409f1e3a9d117ed887f37 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 11 Feb 2021 17:00:11 -0800 Subject: [PATCH 159/275] Fixed: Parsing of release names with colon in the title (cherry picked from commit ec698c2cf7df1e1182ffa2f4505fe0872e2d08bc) --- src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs | 5 ++++- src/NzbDrone.Core/Parser/Parser.cs | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs index b4c1052c2..0ff82804b 100644 --- a/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs @@ -143,7 +143,7 @@ namespace NzbDrone.Core.Test.ParserTests // [TestCase("ADELE 25 CD FLAC 2015 PERFECT", "Adele", "25")] [TestCase("A.I. - Sex & Robots [2007/MP3/V0(VBR)]", "A I", "Sex & Robots")] - [TestCase("Jay-Z - 4:44 (Deluxe Edition) (2017) 320", "Jay-Z", "444")] + [TestCase("Jay-Z - 4:44 (Deluxe Edition) (2017) 320", "Jay-Z", "4:44")] // [TestCase("Roberta Flack 2006 - The Very Best of", "Roberta Flack", "The Very Best of")] [TestCase("VA - NOW Thats What I Call Music 96 (2017) [Mp3~Kbps]", "VA", "NOW Thats What I Call Music 96")] @@ -175,6 +175,9 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("(Heavy Metal) Aria - Discography(46 CD) [1985 - 2015], FLAC(image + .cue), lossless", "Aria", "Discography", true)] [TestCase("(Heavy Metal) [CD] Forces United - Discography(6 CDs), 2014-2016, FLAC(image + .cue), lossless", "Forces United", "Discography", true)] [TestCase("Gorillaz - The now now - 2018 [FLAC]", "Gorillaz", "The now now")] + [TestCase("Bone Thugs-n-Harmony - UNI5: The World's Enemy (2010) [Album] [FLAC Lossless / CD / Log (100%) / Cue]", "Bone Thugs-n-Harmony", "UNI5: The World's Enemy")] + [TestCase("Guru - Jazzmatazz, Volume 3: Streetsoul (2000) [Album] [FLAC Lossless / CD / Log (100%) / Cue]", "Guru", "Jazzmatazz, Volume 3: Streetsoul")] + [TestCase("Bad Movie Cast - Bad: The Soundtrack (2024) [FLAC (M4A) Lossless] [WEB]", "Bad Movie Cast", "Bad: The Soundtrack")] // Regex Works on below, but ParseAlbumMatchCollection cleans the "..." and converts it to spaces // [TestCase("Metallica - ...And Justice for All (1988) [FLAC Lossless]", "Metallica", "...And Justice for All")] diff --git a/src/NzbDrone.Core/Parser/Parser.cs b/src/NzbDrone.Core/Parser/Parser.cs index 382b33d7f..2ca2f5ac8 100644 --- a/src/NzbDrone.Core/Parser/Parser.cs +++ b/src/NzbDrone.Core/Parser/Parser.cs @@ -164,7 +164,7 @@ namespace NzbDrone.Core.Parser RegexOptions.IgnoreCase | RegexOptions.Compiled); // TODO Rework this Regex for Music - private static readonly RegexReplace SimpleTitleRegex = new RegexReplace(@"(?:(480|720|1080|2160|320)[ip]|[xh][\W_]?26[45]|DD\W?5\W1|[<>*:|]|848x480|1280x720|1920x1080|3840x2160|4096x2160|(8|10)b(it)?)\s*", + private static readonly RegexReplace SimpleTitleRegex = new RegexReplace(@"(?:(480|720|1080|2160|320)[ip]|[xh][\W_]?26[45]|DD\W?5\W1|[<>*|]|848x480|1280x720|1920x1080|3840x2160|4096x2160|(8|10)b(it)?)\s*", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Compiled); From 02166167386cefb37a836bee4a86ba6adaf2195d Mon Sep 17 00:00:00 2001 From: Qstick Date: Mon, 30 Dec 2024 22:22:19 -0600 Subject: [PATCH 160/275] Bump SonarCloud azure extension to 3.X (cherry picked from commit 5fac3486130df3b316dd882d676ca13ecb697b59) --- azure-pipelines.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 19f3f83f2..598dee6f7 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1208,12 +1208,12 @@ stages: submodules: true - powershell: Set-Service SCardSvr -StartupType Manual displayName: Enable Windows Test Service - - task: SonarCloudPrepare@2 + - task: SonarCloudPrepare@3 condition: eq(variables['System.PullRequest.IsFork'], 'False') inputs: SonarCloud: 'SonarCloud' organization: 'lidarr' - scannerMode: 'MSBuild' + scannerMode: 'dotnet' projectKey: 'lidarr_Lidarr' projectName: 'Lidarr' projectVersion: '$(lidarrVersion)' @@ -1226,7 +1226,7 @@ stages: ./build.sh --backend -f net6.0 -r win-x64 TEST_DIR=_tests/net6.0/win-x64/publish/ ./test.sh Windows Unit Coverage displayName: Coverage Unit Tests - - task: SonarCloudAnalyze@2 + - task: SonarCloudAnalyze@3 condition: eq(variables['System.PullRequest.IsFork'], 'False') displayName: Publish SonarCloud Results - task: reportgenerator@5.3.11 From 396b2ae7c10c7df749ea23ea93608b56482175a1 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 14 Jan 2025 10:47:59 +0200 Subject: [PATCH 161/275] Bump SonarCloud azure extension for UI analysis to 3.X --- azure-pipelines.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 598dee6f7..13b3b8743 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1120,19 +1120,19 @@ stages: vmImage: ${{ variables.windowsImage }} steps: - checkout: self # Need history for Sonar analysis - - task: SonarCloudPrepare@2 + - task: SonarCloudPrepare@3 env: SONAR_SCANNER_OPTS: '' inputs: SonarCloud: 'SonarCloud' organization: 'lidarr' - scannerMode: 'CLI' + scannerMode: 'cli' configMode: 'manual' cliProjectKey: 'lidarr_Lidarr.UI' cliProjectName: 'LidarrUI' cliProjectVersion: '$(lidarrVersion)' cliSources: './frontend' - - task: SonarCloudAnalyze@2 + - task: SonarCloudAnalyze@3 - job: Api_Docs displayName: API Docs From 739019498ff23e65d13b9df9ab8c706897de585a Mon Sep 17 00:00:00 2001 From: Gauthier Date: Fri, 15 Nov 2024 04:01:05 +0100 Subject: [PATCH 162/275] New: Add headers setting in webhook connection (cherry picked from commit 78fb20282de73c0ea47375895a807235385d90e3) Closes #5242 --- .../src/Components/Form/FormInputGroup.js | 6 +- .../src/Components/Form/KeyValueListInput.js | 156 ------------------ .../src/Components/Form/KeyValueListInput.tsx | 104 ++++++++++++ .../Components/Form/KeyValueListInputItem.css | 14 +- .../Form/KeyValueListInputItem.css.d.ts | 3 +- .../Components/Form/KeyValueListInputItem.js | 124 -------------- .../Components/Form/KeyValueListInputItem.tsx | 89 ++++++++++ .../Components/Form/ProviderFieldFormGroup.js | 2 + frontend/src/Helpers/Props/inputTypes.js | 4 +- frontend/src/typings/inputs.ts | 7 + .../Reflection/ReflectionExtensions.cs | 3 +- .../Annotations/FieldDefinitionAttribute.cs | 3 +- src/NzbDrone.Core/Localization/Core/en.json | 1 + .../Notifications/Webhook/WebhookProxy.cs | 5 + .../Notifications/Webhook/WebhookSettings.cs | 7 +- 15 files changed, 237 insertions(+), 291 deletions(-) delete mode 100644 frontend/src/Components/Form/KeyValueListInput.js create mode 100644 frontend/src/Components/Form/KeyValueListInput.tsx delete mode 100644 frontend/src/Components/Form/KeyValueListInputItem.js create mode 100644 frontend/src/Components/Form/KeyValueListInputItem.tsx diff --git a/frontend/src/Components/Form/FormInputGroup.js b/frontend/src/Components/Form/FormInputGroup.js index 79f5aaf0e..3173b493d 100644 --- a/frontend/src/Components/Form/FormInputGroup.js +++ b/frontend/src/Components/Form/FormInputGroup.js @@ -49,12 +49,12 @@ function getComponent(type) { case inputTypes.DEVICE: return DeviceInputConnector; - case inputTypes.PLAYLIST: - return PlaylistInputConnector; - case inputTypes.KEY_VALUE_LIST: return KeyValueListInput; + case inputTypes.PLAYLIST: + return PlaylistInputConnector; + case inputTypes.MONITOR_ALBUMS_SELECT: return MonitorAlbumsSelectInput; diff --git a/frontend/src/Components/Form/KeyValueListInput.js b/frontend/src/Components/Form/KeyValueListInput.js deleted file mode 100644 index 3e73d74f3..000000000 --- a/frontend/src/Components/Form/KeyValueListInput.js +++ /dev/null @@ -1,156 +0,0 @@ -import classNames from 'classnames'; -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; -import KeyValueListInputItem from './KeyValueListInputItem'; -import styles from './KeyValueListInput.css'; - -class KeyValueListInput extends Component { - - // - // Lifecycle - - constructor(props, context) { - super(props, context); - - this.state = { - isFocused: false - }; - } - - // - // Listeners - - onItemChange = (index, itemValue) => { - const { - name, - value, - onChange - } = this.props; - - const newValue = [...value]; - - if (index == null) { - newValue.push(itemValue); - } else { - newValue.splice(index, 1, itemValue); - } - - onChange({ - name, - value: newValue - }); - }; - - onRemoveItem = (index) => { - const { - name, - value, - onChange - } = this.props; - - const newValue = [...value]; - newValue.splice(index, 1); - - onChange({ - name, - value: newValue - }); - }; - - onFocus = () => { - this.setState({ - isFocused: true - }); - }; - - onBlur = () => { - this.setState({ - isFocused: false - }); - - const { - name, - value, - onChange - } = this.props; - - const newValue = value.reduce((acc, v) => { - if (v.key || v.value) { - acc.push(v); - } - - return acc; - }, []); - - if (newValue.length !== value.length) { - onChange({ - name, - value: newValue - }); - } - }; - - // - // Render - - render() { - const { - className, - value, - keyPlaceholder, - valuePlaceholder, - hasError, - hasWarning - } = this.props; - - const { isFocused } = this.state; - - return ( -
- { - [...value, { key: '', value: '' }].map((v, index) => { - return ( - - ); - }) - } -
- ); - } -} - -KeyValueListInput.propTypes = { - className: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, - value: PropTypes.arrayOf(PropTypes.object).isRequired, - hasError: PropTypes.bool, - hasWarning: PropTypes.bool, - keyPlaceholder: PropTypes.string, - valuePlaceholder: PropTypes.string, - onChange: PropTypes.func.isRequired -}; - -KeyValueListInput.defaultProps = { - className: styles.inputContainer, - value: [] -}; - -export default KeyValueListInput; diff --git a/frontend/src/Components/Form/KeyValueListInput.tsx b/frontend/src/Components/Form/KeyValueListInput.tsx new file mode 100644 index 000000000..f5c6ac19b --- /dev/null +++ b/frontend/src/Components/Form/KeyValueListInput.tsx @@ -0,0 +1,104 @@ +import classNames from 'classnames'; +import React, { useCallback, useState } from 'react'; +import { InputOnChange } from 'typings/inputs'; +import KeyValueListInputItem from './KeyValueListInputItem'; +import styles from './KeyValueListInput.css'; + +interface KeyValue { + key: string; + value: string; +} + +export interface KeyValueListInputProps { + className?: string; + name: string; + value: KeyValue[]; + hasError?: boolean; + hasWarning?: boolean; + keyPlaceholder?: string; + valuePlaceholder?: string; + onChange: InputOnChange; +} + +function KeyValueListInput({ + className = styles.inputContainer, + name, + value = [], + hasError = false, + hasWarning = false, + keyPlaceholder, + valuePlaceholder, + onChange, +}: KeyValueListInputProps): JSX.Element { + const [isFocused, setIsFocused] = useState(false); + + const handleItemChange = useCallback( + (index: number | null, itemValue: KeyValue) => { + const newValue = [...value]; + + if (index === null) { + newValue.push(itemValue); + } else { + newValue.splice(index, 1, itemValue); + } + + onChange({ name, value: newValue }); + }, + [value, name, onChange] + ); + + const handleRemoveItem = useCallback( + (index: number) => { + const newValue = [...value]; + newValue.splice(index, 1); + onChange({ name, value: newValue }); + }, + [value, name, onChange] + ); + + const onFocus = useCallback(() => setIsFocused(true), []); + + const onBlur = useCallback(() => { + setIsFocused(false); + + const newValue = value.reduce((acc: KeyValue[], v) => { + if (v.key || v.value) { + acc.push(v); + } + return acc; + }, []); + + if (newValue.length !== value.length) { + onChange({ name, value: newValue }); + } + }, [value, name, onChange]); + + return ( +
+ {[...value, { key: '', value: '' }].map((v, index) => ( + + ))} +
+ ); +} + +export default KeyValueListInput; diff --git a/frontend/src/Components/Form/KeyValueListInputItem.css b/frontend/src/Components/Form/KeyValueListInputItem.css index dca2882a8..ed82db459 100644 --- a/frontend/src/Components/Form/KeyValueListInputItem.css +++ b/frontend/src/Components/Form/KeyValueListInputItem.css @@ -5,13 +5,19 @@ &:last-child { margin-bottom: 0; + border-bottom: 0; } } -.inputWrapper { +.keyInputWrapper { flex: 1 0 0; } +.valueInputWrapper { + flex: 1 0 0; + min-width: 40px; +} + .buttonWrapper { flex: 0 0 22px; } @@ -20,6 +26,10 @@ .valueInput { width: 100%; border: none; - background-color: var(--inputBackgroundColor); + background-color: transparent; color: var(--textColor); + + &::placeholder { + color: var(--helpTextColor); + } } diff --git a/frontend/src/Components/Form/KeyValueListInputItem.css.d.ts b/frontend/src/Components/Form/KeyValueListInputItem.css.d.ts index 35baf55cd..aa0c1be13 100644 --- a/frontend/src/Components/Form/KeyValueListInputItem.css.d.ts +++ b/frontend/src/Components/Form/KeyValueListInputItem.css.d.ts @@ -2,10 +2,11 @@ // Please do not change this file! interface CssExports { 'buttonWrapper': string; - 'inputWrapper': string; 'itemContainer': string; 'keyInput': string; + 'keyInputWrapper': string; 'valueInput': string; + 'valueInputWrapper': string; } export const cssExports: CssExports; export default cssExports; diff --git a/frontend/src/Components/Form/KeyValueListInputItem.js b/frontend/src/Components/Form/KeyValueListInputItem.js deleted file mode 100644 index 5379c2129..000000000 --- a/frontend/src/Components/Form/KeyValueListInputItem.js +++ /dev/null @@ -1,124 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; -import IconButton from 'Components/Link/IconButton'; -import { icons } from 'Helpers/Props'; -import TextInput from './TextInput'; -import styles from './KeyValueListInputItem.css'; - -class KeyValueListInputItem extends Component { - - // - // Listeners - - onKeyChange = ({ value: keyValue }) => { - const { - index, - value, - onChange - } = this.props; - - onChange(index, { key: keyValue, value }); - }; - - onValueChange = ({ value }) => { - // TODO: Validate here or validate at a lower level component - - const { - index, - keyValue, - onChange - } = this.props; - - onChange(index, { key: keyValue, value }); - }; - - onRemovePress = () => { - const { - index, - onRemove - } = this.props; - - onRemove(index); - }; - - onFocus = () => { - this.props.onFocus(); - }; - - onBlur = () => { - this.props.onBlur(); - }; - - // - // Render - - render() { - const { - keyValue, - value, - keyPlaceholder, - valuePlaceholder, - isNew - } = this.props; - - return ( -
-
- -
- -
- -
- -
- { - isNew ? - null : - - } -
-
- ); - } -} - -KeyValueListInputItem.propTypes = { - index: PropTypes.number, - keyValue: PropTypes.string.isRequired, - value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, - keyPlaceholder: PropTypes.string.isRequired, - valuePlaceholder: PropTypes.string.isRequired, - isNew: PropTypes.bool.isRequired, - onChange: PropTypes.func.isRequired, - onRemove: PropTypes.func.isRequired, - onFocus: PropTypes.func.isRequired, - onBlur: PropTypes.func.isRequired -}; - -KeyValueListInputItem.defaultProps = { - keyPlaceholder: 'Key', - valuePlaceholder: 'Value' -}; - -export default KeyValueListInputItem; diff --git a/frontend/src/Components/Form/KeyValueListInputItem.tsx b/frontend/src/Components/Form/KeyValueListInputItem.tsx new file mode 100644 index 000000000..c63ad50a9 --- /dev/null +++ b/frontend/src/Components/Form/KeyValueListInputItem.tsx @@ -0,0 +1,89 @@ +import React, { useCallback } from 'react'; +import IconButton from 'Components/Link/IconButton'; +import { icons } from 'Helpers/Props'; +import TextInput from './TextInput'; +import styles from './KeyValueListInputItem.css'; + +interface KeyValueListInputItemProps { + index: number; + keyValue: string; + value: string; + keyPlaceholder?: string; + valuePlaceholder?: string; + isNew: boolean; + onChange: (index: number, itemValue: { key: string; value: string }) => void; + onRemove: (index: number) => void; + onFocus: () => void; + onBlur: () => void; +} + +function KeyValueListInputItem({ + index, + keyValue, + value, + keyPlaceholder = 'Key', + valuePlaceholder = 'Value', + isNew, + onChange, + onRemove, + onFocus, + onBlur, +}: KeyValueListInputItemProps): JSX.Element { + const handleKeyChange = useCallback( + ({ value: keyValue }: { value: string }) => { + onChange(index, { key: keyValue, value }); + }, + [index, value, onChange] + ); + + const handleValueChange = useCallback( + ({ value }: { value: string }) => { + onChange(index, { key: keyValue, value }); + }, + [index, keyValue, onChange] + ); + + const handleRemovePress = useCallback(() => { + onRemove(index); + }, [index, onRemove]); + + return ( +
+
+ +
+ +
+ +
+ +
+ {isNew ? null : ( + + )} +
+
+ ); +} + +export default KeyValueListInputItem; diff --git a/frontend/src/Components/Form/ProviderFieldFormGroup.js b/frontend/src/Components/Form/ProviderFieldFormGroup.js index fcdd4f2bc..311f1bbbd 100644 --- a/frontend/src/Components/Form/ProviderFieldFormGroup.js +++ b/frontend/src/Components/Form/ProviderFieldFormGroup.js @@ -14,6 +14,8 @@ function getType({ type, selectOptionsProviderAction }) { return inputTypes.CHECK; case 'device': return inputTypes.DEVICE; + case 'keyValueList': + return inputTypes.KEY_VALUE_LIST; case 'playlist': return inputTypes.PLAYLIST; case 'password': diff --git a/frontend/src/Helpers/Props/inputTypes.js b/frontend/src/Helpers/Props/inputTypes.js index 1d08c762f..44115c787 100644 --- a/frontend/src/Helpers/Props/inputTypes.js +++ b/frontend/src/Helpers/Props/inputTypes.js @@ -2,8 +2,8 @@ export const AUTO_COMPLETE = 'autoComplete'; export const CAPTCHA = 'captcha'; export const CHECK = 'check'; export const DEVICE = 'device'; -export const PLAYLIST = 'playlist'; export const KEY_VALUE_LIST = 'keyValueList'; +export const PLAYLIST = 'playlist'; export const MONITOR_ALBUMS_SELECT = 'monitorAlbumsSelect'; export const MONITOR_NEW_ITEMS_SELECT = 'monitorNewItemsSelect'; export const FLOAT = 'float'; @@ -34,8 +34,8 @@ export const all = [ CAPTCHA, CHECK, DEVICE, - PLAYLIST, KEY_VALUE_LIST, + PLAYLIST, MONITOR_ALBUMS_SELECT, MONITOR_NEW_ITEMS_SELECT, FLOAT, diff --git a/frontend/src/typings/inputs.ts b/frontend/src/typings/inputs.ts index c0fda305c..7d202cd44 100644 --- a/frontend/src/typings/inputs.ts +++ b/frontend/src/typings/inputs.ts @@ -1,3 +1,10 @@ +export type InputChanged = { + name: string; + value: T; +}; + +export type InputOnChange = (change: InputChanged) => void; + export type CheckInputChanged = { name: string; value: boolean; diff --git a/src/NzbDrone.Common/Reflection/ReflectionExtensions.cs b/src/NzbDrone.Common/Reflection/ReflectionExtensions.cs index 8f016450d..a47137bfd 100644 --- a/src/NzbDrone.Common/Reflection/ReflectionExtensions.cs +++ b/src/NzbDrone.Common/Reflection/ReflectionExtensions.cs @@ -34,7 +34,8 @@ namespace NzbDrone.Common.Reflection || type == typeof(string) || type == typeof(DateTime) || type == typeof(Version) - || type == typeof(decimal); + || type == typeof(decimal) + || (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(KeyValuePair<,>)); } public static bool IsReadable(this PropertyInfo propertyInfo) diff --git a/src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs b/src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs index ed5879e5e..c87449003 100644 --- a/src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs +++ b/src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs @@ -87,7 +87,8 @@ namespace NzbDrone.Core.Annotations RootFolder, QualityProfile, MetadataProfile, - ArtistTag + ArtistTag, + KeyValueList, } public enum HiddenType diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 06cfeefcc..1738d25fb 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -844,6 +844,7 @@ "NotificationsSettingsUpdateMapPathsTo": "Map Paths To", "NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName} path, used to modify series paths when {serviceName} sees library path location differently from {appName} (Requires 'Update Library')", "NotificationsSettingsUseSslHelpText": "Connect to {serviceName} over HTTPS instead of HTTP", + "NotificationsSettingsWebhookHeaders": "Headers", "NotificationsTagsArtistHelpText": "Only send notifications for artists with at least one matching tag", "NotificationsTelegramSettingsIncludeAppName": "Include {appName} in Title", "NotificationsTelegramSettingsIncludeAppNameHelpText": "Optionally prefix message title with {appName} to differentiate notifications from different applications", diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookProxy.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookProxy.cs index 23a7fbdc8..a7a7025e7 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookProxy.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookProxy.cs @@ -43,6 +43,11 @@ namespace NzbDrone.Core.Notifications.Webhook request.Credentials = new BasicNetworkCredential(settings.Username, settings.Password); } + foreach (var header in settings.Headers) + { + request.Headers.Add(header.Key, header.Value); + } + _httpClient.Execute(request); } catch (HttpException ex) diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookSettings.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookSettings.cs index dd850e5d5..0d7560142 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookSettings.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookSettings.cs @@ -1,4 +1,5 @@ -using System; +using System; +using System.Collections.Generic; using FluentValidation; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -21,6 +22,7 @@ namespace NzbDrone.Core.Notifications.Webhook public WebhookSettings() { Method = Convert.ToInt32(WebhookMethod.POST); + Headers = new List>(); } [FieldDefinition(0, Label = "URL", Type = FieldType.Url)] @@ -35,6 +37,9 @@ namespace NzbDrone.Core.Notifications.Webhook [FieldDefinition(3, Label = "Password", Type = FieldType.Password, Privacy = PrivacyLevel.Password)] public string Password { get; set; } + [FieldDefinition(4, Label = "NotificationsSettingsWebhookHeaders", Type = FieldType.KeyValueList, Advanced = true)] + public IEnumerable> Headers { get; set; } + public NzbDroneValidationResult Validate() { return new NzbDroneValidationResult(Validator.Validate(this)); From e2f8753a6a3cf8075811f78bf7424f005103125f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 17 Jan 2025 00:42:08 +0200 Subject: [PATCH 163/275] Improve messaging for no mediums on album details --- frontend/src/Album/Details/AlbumDetails.js | 23 +++++++++++++++++++-- src/NzbDrone.Core/Localization/Core/en.json | 2 ++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/frontend/src/Album/Details/AlbumDetails.js b/frontend/src/Album/Details/AlbumDetails.js index b581c1d77..fe007e168 100644 --- a/frontend/src/Album/Details/AlbumDetails.js +++ b/frontend/src/Album/Details/AlbumDetails.js @@ -205,6 +205,7 @@ class AlbumDetails extends Component { isFetching, isPopulated, albumsError, + tracksError, trackFilesError, hasTrackFiles, shortDateFormat, @@ -552,8 +553,9 @@ class AlbumDetails extends Component {
{ - !isPopulated && !albumsError && !trackFilesError && - + !isPopulated && !albumsError && !tracksError && !trackFilesError ? + : + null } { @@ -564,6 +566,14 @@ class AlbumDetails extends Component { null } + { + !isFetching && tracksError ? + + {translate('TracksLoadError')} + : + null + } + { !isFetching && trackFilesError ? @@ -592,6 +602,14 @@ class AlbumDetails extends Component {
} + { + isPopulated && !media.length ? + + {translate('NoMediumInformation')} + : + null + } + Date: Sun, 19 Jan 2025 17:16:09 +0200 Subject: [PATCH 164/275] Bump version to 2.9.5 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 13b3b8743..870038455 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.9.4' + majorVersion: '2.9.5' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From ef2c6366c47d8f37639324e1daefa4e038a7db52 Mon Sep 17 00:00:00 2001 From: jcassette Date: Sat, 18 Jan 2025 04:55:37 +0100 Subject: [PATCH 165/275] New: reflink support for ZFS (cherry picked from commit a840bb542362d58006b6cc27affd58ee6b965b80) Closes #5369 --- src/NzbDrone.Common/Disk/DiskTransferService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Common/Disk/DiskTransferService.cs b/src/NzbDrone.Common/Disk/DiskTransferService.cs index 9bfb5a7c1..c0c506c09 100644 --- a/src/NzbDrone.Common/Disk/DiskTransferService.cs +++ b/src/NzbDrone.Common/Disk/DiskTransferService.cs @@ -21,7 +21,7 @@ namespace NzbDrone.Common.Disk private readonly IDiskProvider _diskProvider; private readonly Logger _logger; - private static readonly string[] _reflinkFilesystems = { "btrfs", "xfs" }; + private static readonly string[] ReflinkFilesystems = { "btrfs", "xfs", "zfs" }; public DiskTransferService(IDiskProvider diskProvider, Logger logger) { @@ -343,7 +343,7 @@ namespace NzbDrone.Common.Disk var targetDriveFormat = targetMount?.DriveFormat ?? string.Empty; var isCifs = targetDriveFormat == "cifs"; - var tryReflink = sourceDriveFormat == targetDriveFormat && _reflinkFilesystems.Contains(sourceDriveFormat); + var tryReflink = sourceDriveFormat == targetDriveFormat && ReflinkFilesystems.Contains(sourceDriveFormat); if (mode.HasFlag(TransferMode.Copy)) { From 5a1092b5112960846f1081f5070b1ea2cc5e9f23 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 21 Jan 2025 16:13:18 +0200 Subject: [PATCH 166/275] Prevent page crash on console.error being used with non-string values (cherry picked from commit 963395b9695a28af6bc7dd398e9eea18c834c3c9) --- frontend/src/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/frontend/src/index.ts b/frontend/src/index.ts index b57a3fa98..37e780919 100644 --- a/frontend/src/index.ts +++ b/frontend/src/index.ts @@ -23,12 +23,13 @@ const error = console.error; function logError(...parameters: any[]) { const filter = parameters.find((parameter) => { return ( - parameter.includes( + typeof parameter === 'string' && + (parameter.includes( 'Support for defaultProps will be removed from function components in a future major release' ) || - parameter.includes( - 'findDOMNode is deprecated and will be removed in the next major release' - ) + parameter.includes( + 'findDOMNode is deprecated and will be removed in the next major release' + )) ); }); From 917f7056952055631a35b41445d29f2ae26ac3ed Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 27 Jan 2025 11:33:23 +0000 Subject: [PATCH 167/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Dani Talens Co-authored-by: Lizandra Candido da Silva Co-authored-by: Oskari Lavinto Co-authored-by: Pieterjan Van Saet Co-authored-by: Weblate Co-authored-by: Weblate Co-authored-by: ahgharaghani Co-authored-by: fordas Co-authored-by: warkurre86 Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/de/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fa/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nb_NO/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_Hans/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/bg.json | 61 ++++++- src/NzbDrone.Core/Localization/Core/ca.json | 3 +- src/NzbDrone.Core/Localization/Core/cs.json | 28 +++- src/NzbDrone.Core/Localization/Core/de.json | 3 +- src/NzbDrone.Core/Localization/Core/es.json | 5 +- src/NzbDrone.Core/Localization/Core/fa.json | 30 +++- src/NzbDrone.Core/Localization/Core/fi.json | 105 ++++++------ src/NzbDrone.Core/Localization/Core/fr.json | 4 +- src/NzbDrone.Core/Localization/Core/ko.json | 156 +++++++++++++++++- .../Localization/Core/nb_NO.json | 10 +- src/NzbDrone.Core/Localization/Core/nl.json | 6 +- .../Localization/Core/pt_BR.json | 41 ++--- src/NzbDrone.Core/Localization/Core/tr.json | 3 +- .../Localization/Core/zh_CN.json | 3 +- .../Localization/Core/zh_Hans.json | 3 +- 15 files changed, 376 insertions(+), 85 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index 9c26c08a8..36db88c56 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -759,5 +759,64 @@ "Preferred": "Предпочитан", "Today": "Днес", "MappedNetworkDrivesWindowsService": "Картографираните мрежови устройства не са налични, когато се изпълняват като услуга на Windows. Моля, вижте често задаваните въпроси за повече информация", - "DownloadClientSettingsRecentPriority": "Приоритет на клиента" + "DownloadClientSettingsRecentPriority": "Приоритет на клиента", + "AddedToDownloadQueue": "Добавен към опашката за изтегляне", + "AppUpdated": "{appName} Актуализиранa", + "AutoTaggingRequiredHelpText": "Това условие {implementationName} трябва да съответства, за да се приложи правилото за автоматично маркиране. В противен случай е достатъчно едно съвпадение на {implementationName}.", + "CustomFormatsSettingsTriggerInfo": "Персонализиран формат ще бъде приложен към издание или файл, когато съвпада с поне един от всеки от избраните различни типове условия.", + "AuthenticationRequiredHelpText": "Променете за кои заявки се изисква удостоверяване. Не променяйте, освен ако не разбирате рисковете.", + "AuthenticationRequiredWarning": "За да предотврати отдалечен достъп без удостоверяване, {appName} вече изисква удостоверяването да бъде активирано. По желание можете да деактивирате удостоверяването от локални адреси.", + "CustomFormatsSpecificationRegularExpressionHelpText": "Персонализираният формат RegEx не е чувствителен към главни и малки букви", + "Auto": "Авто", + "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Потвърдете новата парола", + "AddDownloadClientImplementation": "Добави клиент за изтегляне - {implementationName}", + "AddAutoTag": "Добави автоматичен таг", + "AddCondition": "Добави условие", + "BlocklistOnlyHint": "Списък за блокиране без търсене на заместител", + "DownloadClientDelugeSettingsDirectoryCompleted": "Директория за вече завършените изтегляния", + "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Незадължителна локация за преместване на вече завършените изтегляния, оставете празно, за да използвате мястото по подразбиране на Deluge", + "ApplicationUrlHelpText": "Външният URL адрес на това приложение, включително http(s)://, порт и основно URL", + "CustomFormatsSpecificationFlag": "Флаг", + "DownloadClientDelugeSettingsDirectory": "Директория за изтегляне", + "DoNotBlocklist": "Не блокирайте", + "AddImportList": "Добави списък за импортиране", + "AddImportListImplementation": "Добави списък за импортиране - {implementationName}", + "AddIndexerImplementation": "Добави индексатор - {implementationName}", + "AddToDownloadQueue": "Добави към опашката за изтегляне", + "AppUpdatedVersion": "{appName} е актуализиранa до версия `{version}`, за да получите най-новите промени, ще трябва да презаредите {appName}", + "ApplicationURL": "URL адрес на приложението", + "AutoRedownloadFailedFromInteractiveSearchHelpText": "Автоматично търсене и опит за изтегляне на различно издание, когато неуспешното издание е било взето от интерактивно търсене", + "AutoTagging": "Автоматично етикетиране", + "AutoTaggingLoadError": "Не може да се зареди автоматичното маркиране", + "AutomaticUpdatesDisabledDocker": "Автоматичните актуализации не се поддържат директно при използване на механизма за актуализация на Docker. Ще трябва да актуализирате Image-a на контейнера извън {appName} или да използвате скрипт", + "BlocklistAndSearchMultipleHint": "Започнете търсене на заместители след блокиране", + "BlocklistOnly": "Само списък за блокиране", + "DoNotBlocklistHint": "Премахване без блокиране", + "Dash": "Тире", + "DownloadClientAriaSettingsDirectoryHelpText": "Незадължително локация за изтеглянията, оставете празно, за да използвате локацията по подразбиране на Aria2", + "Donate": "Дарете", + "Database": "База данни", + "ApplyChanges": "Прилагане на промените", + "AuthenticationRequiredPasswordHelpTextWarning": "Въведете нова парола", + "NoCutoffUnmetItems": "Няма неизпълнени елементи за прекъсване", + "AutomaticAdd": "Автоматично добавяне", + "MinimumCustomFormatScoreHelpText": "Минимална резултат на персонализирания формат, необходима за пропускане на забавянето за предпочитания протокол", + "AuthenticationRequiredUsernameHelpTextWarning": "Въведете ново потребителско име", + "AuthenticationRequired": "Изисква се удостоверяване", + "BlocklistAndSearchHint": "Започнете търсене на заместител след блокиране", + "BlocklistMultipleOnlyHint": "Списък за блокиране без търсене на заместители", + "AddConditionImplementation": "Добави условие - {implementationName}", + "AddConnectionImplementation": "Добави връзка - {implementationName}", + "AddConnection": "Добави връзка", + "Any": "Всякакви", + "AuthenticationMethod": "Метод за удостоверяване", + "AuthenticationMethodHelpTextWarning": "Моля, изберете валиден метод за удостоверяване", + "AutoRedownloadFailedFromInteractiveSearch": "Неуспешно повторно изтегляне от интерактивното търсене", + "BypassIfAboveCustomFormatScore": "Пропусни, ако е над рейтинга на персонализирания формат", + "BypassIfAboveCustomFormatScoreHelpText": "Активиране на пропускане, когато изданието има резултат, по-висок от конфигурирания минимален резултат за потребителски формат", + "AutoTaggingSpecificationTag": "Етикет", + "BlocklistAndSearch": "Списък за блокиране и търсене", + "CustomFormatsSpecificationRegularExpression": "Регулярни изрази", + "DownloadClientDelugeSettingsDirectoryHelpText": "Незадължителна локация за изтеглянията, оставете празно, за да използвате мястото по подразбиране на Deluge", + "Absolute": "Абсолютен" } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index ebad70482..b1487962c 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -970,5 +970,6 @@ "Preferred": "Preferit", "Today": "Avui", "MappedNetworkDrivesWindowsService": "Les unitats de xarxa assignades no estan disponibles quan s'executen com a servei de Windows. Si us plau, consulteu les PMF per a obtenir més informació", - "DownloadClientSettingsRecentPriority": "Prioritat del client" + "DownloadClientSettingsRecentPriority": "Prioritat del client", + "AddNewArtist": "Afegeix Nou Artista" } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index 91b18b3dd..ff6c2c16f 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -891,5 +891,31 @@ "MappedNetworkDrivesWindowsService": "Mapované síťové jednotky nejsou k dispozici, když běží jako služba Windows. Další informace najdete v častých dotazech", "DownloadClientSettingsRecentPriority": "Priorita klienta", "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Pokud je torrent blokován pomocí hash, nemusí být u některých indexerů správně odmítnut během RSS/vyhledávání. Povolení této funkce umožní jeho odmítnutí po zachycení torrentu, ale před jeho odesláním klientovi.", - "IndexerSettingsApiUrl": "URL API" + "IndexerSettingsApiUrl": "URL API", + "AddArtistWithName": "Přidat{artistName}", + "AddAlbumWithTitle": "Přidat {albumTitle}", + "DownloadClientDelugeSettingsDirectory": "Adresář stahování", + "ClickToChangeIndexerFlags": "Kliknutím změníte značky indexeru", + "CustomFormatsSpecificationRegularExpression": "Běžný výraz", + "Donate": "Daruj", + "Implementation": "Implementace", + "NoCutoffUnmetItems": "Žádné neodpovídající nesplněné položky", + "HealthMessagesInfoBox": "Další informace o příčině těchto zpráv o kontrole zdraví najdete kliknutím na odkaz wiki (ikona knihy) na konci řádku nebo kontrolou [logů]({link}). Pokud máte potíže s interpretací těchto zpráv, můžete se obrátit na naši podporu, a to na níže uvedených odkazech.", + "External": "Externí", + "RegularExpressionsCanBeTested": "Regulární výrazy lze testovat [zde]({url}).", + "AllExpandedCollapseAll": "Sbalit Všechny", + "AllExpandedExpandAll": "Rozbal Všechny", + "AllowFingerprinting": "Povol Digitální Otisk (Fingerprinting)", + "BlocklistAndSearchHint": "Začne hledat náhradu po blokaci", + "BlocklistAndSearchMultipleHint": "Začne vyhledávat náhrady po blokaci", + "BlocklistOnly": "Pouze seznam blokování", + "ChangeCategoryHint": "Změní stahování do kategorie „Post-Import“ z aplikace Download Client", + "ChangeCategoryMultipleHint": "Změní stahování do kategorie „Post-Import“ z aplikace Download Client", + "CountCustomFormatsSelected": "{count} vybraný vlastní formát(y)", + "DeleteSelected": "Smazat vybrané", + "DoNotBlocklist": "Nepřidávat do Seznamu blokování", + "DoNotBlocklistHint": "Odstraň bez přidání do seznamu blokování", + "DownloadClientAriaSettingsDirectoryHelpText": "Volitelné umístění pro stahování, pokud chcete použít výchozí umístění Aria2, ponechte prázdné", + "DownloadClientQbittorrentSettingsContentLayout": "Rozvržení obsahu", + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Zda použít rozvržení obsahu nakonfigurované v qBittorrentu, původní rozvržení z torrentu nebo vždy vytvořit podsložku (qBittorrent 4.3.2+)" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index 5a4c66524..72f1170a9 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -1290,5 +1290,6 @@ "DownloadClientSettingsOlderPriority": "Ältere Priorität", "DownloadClientSettingsPostImportCategoryHelpText": "Kategorie für {appName}, die nach dem Importieren des Downloads festgelegt wird. {appName} wird Torrents in dieser Kategorie nicht entfernen, auch wenn das Seeding beendet ist. Leer lassen, um dieselbe Kategorie beizubehalten.", "DownloadClientSettingsRecentPriority": "Neueste Priorität", - "PostImportCategory": "Post-Import-Kategorie" + "PostImportCategory": "Post-Import-Kategorie", + "NotificationsSettingsWebhookHeaders": "Header" } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index e7bf4a4a4..f062a3f92 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -1346,5 +1346,8 @@ "DownloadClientSettingsRecentPriority": "Priorizar recientes", "PostImportCategory": "Categoría de post-importación", "DownloadClientSettingsRecentPriorityAlbumHelpText": "Prioridad a usar cuando se capturen álbumes lanzados en los últimos 14 días", - "DownloadClientSettingsOlderPriorityAlbumHelpText": "Prioridad a usar cuando se capturen álbumes lanzados hace más de 14 días" + "DownloadClientSettingsOlderPriorityAlbumHelpText": "Prioridad a usar cuando se capturen álbumes lanzados hace más de 14 días", + "NotificationsSettingsWebhookHeaders": "Cabeceras", + "NoMediumInformation": "Ninguna información del medio disponible.", + "TracksLoadError": "No se pudo cargar las pistas" } diff --git a/src/NzbDrone.Core/Localization/Core/fa.json b/src/NzbDrone.Core/Localization/Core/fa.json index 0967ef424..7c7449870 100644 --- a/src/NzbDrone.Core/Localization/Core/fa.json +++ b/src/NzbDrone.Core/Localization/Core/fa.json @@ -1 +1,29 @@ -{} +{ + "AddAutoTag": "افزودن برچسب خودکار", + "AddCondition": "افزودن شرط", + "AddConditionError": "افزودن شرط جدید ناموفق بود، لطفا مجددا تلاش کنید.", + "AddAutoTagError": "افزودن برچسب خودکار جدید ناموفق بود، لطفا مجددا تلاش کنید.", + "AddDelayProfile": "افزودن نمایه تاخیر", + "AddDownloadClientImplementation": "افزودن کلاینت دانلود - {implementationName}", + "AddImportList": "افزودن لیست واردات", + "AddArtistWithName": "افزودن {artistName}", + "AddAlbumWithTitle": "افزودن {albumTitle}", + "AddDelayProfileError": "افزودن نمایه تاخیر جدید ناموفق بود، لطفا مجددا تلاش کنید.", + "AddImportListExclusion": "افزودن لیست واردات مستثنی", + "Docker": "Docker", + "NETCore": ".NET", + "Torrents": "تورنت ها", + "45MinutesFourtyFive": "۴۵ دقیقه: {0}", + "20MinutesTwenty": "۲۰ دقیقه: {0}", + "60MinutesSixty": "۶۰ دقیقه: {0}", + "Absolute": "مطلق", + "AddConditionImplementation": "افزودن شرط - {implementationName}", + "AddConnection": "افزودن پیوند", + "AddConnectionImplementation": "افزودن پیوند - {implementationName}", + "APIKey": "کلید API", + "Actions": "اقدامات", + "Activity": "فعالیت", + "Add": "افزودن", + "Usenet": "Usenet", + "About": "درباره" +} diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 5fc047848..e8936b8c1 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -4,7 +4,7 @@ "ShowSearchActionHelpText": "Näytä hakupainike osoitettaessa.", "DeleteImportListExclusion": "Poista tuontilistapoikkeus", "EnableColorImpairedModeHelpText": "Vaihtoehtoinen tyyli, joka auttaa erottamaan värikoodatut tiedot paremmin.", - "IndexerPriority": "Tietolähteiden painotus", + "IndexerPriority": "Hakupalveluiden painotus", "ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.", "UpdateMechanismHelpText": "Käytä {appName}in sisäänrakennettua päivitystoimintoa tai komentosarjaa.", "ProxyUsernameHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.", @@ -13,11 +13,11 @@ "Host": "Osoite", "IllRestartLater": "Käynnistän uudelleen myöhemmin", "EnableRSS": "RSS-syöte", - "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "Tämän tietolähteen kanssa ei voida käyttää RSS-syötettä.", + "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "Tämän hakupalvelun kanssa ei voida käyttää RSS-syötettä.", "Logging": "Lokikirjaus", "ProxyBypassFilterHelpText": "Erota aliverkkotunnukset pilkuilla ja käytä jokerimerkkinä tähteä ja pistettä (*.). Esimerkki: www.esimerkki.fi,*.esimerkki.fi).", "UnableToAddANewIndexerPleaseTryAgain": "Uuden tietolähteen lisäys epäonnistui. Yritä uudelleen.", - "ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Lue lisää tietolähteestä painamalla 'Lisätietoja'.", + "ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Saat lisätietoja yksittäisistä palveluista niiden ohessa olevilla painikkeilla.", "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Saat lisätietoja yksittäisistä latauspalveluista painamalla niiden ohessa olevia lisätietopainikkeita.", "RssSyncIntervalHelpText": "Aikaväli minuutteina. Poista toiminto käytöstä asettamalla arvoksi 0, joka pysäyttää automaattisen julkaisukaappauksen täysin.", "DefaultLidarrTags": "Oletusarvoiset {appName}-oletustunnisteet", @@ -43,19 +43,19 @@ "DeleteBackupMessageText": "Haluatko varmasti poistaa varmuuskopion \"{name}\"?", "DeleteNotificationMessageText": "Haluatko varmasti poistaa ilmoituspalvelun \"{name}\"?", "EnableCompletedDownloadHandlingHelpText": "Tuo valmistuneet lataukset latauspalvelusta automaattisesti.", - "Indexer": "Tietolähde", + "Indexer": "Hakupalvelu", "UnableToAddANewDownloadClientPleaseTryAgain": "Latauspalvelun lisääminen epäonnistui. Yritä uudelleen.", "CalendarWeekColumnHeaderHelpText": "Näkyy jokaisen sarakkeen yläpuolella käytettäessä viikkonäkymää.", "ShownAboveEachColumnWhenWeekIsTheActiveView": "Näkyy jokaisen sarakkeen yläpuolella käytettäessä viikkonäkymää.", "NotificationTriggers": "Ilmoituksen laukaisijat", "PackageVersion": "Paketin versio", "Port": "Portti", - "Indexers": "Tietolähteet", + "Indexers": "Hakupalvelut", "ChownGroupHelpTextWarning": "Toimii vain, jos {appName}in suorittava käyttäjä on tiedoston omistaja. On parempi varmistaa, että latauspalvelu käyttää samaa ryhmää kuin {appName}.", "CopyUsingHardlinksHelpText": "Hardlink-kytkösten avulla {appName} voi tuoda jaettavat torrentit ilman niiden täyttä kopiointia ja levytilan kaksinkertaista varausta. Tämä toimii vain lähde- ja kohdesijaintien ollessa samalla tallennusmedialla.", "CopyUsingHardlinksHelpTextWarning": "Tiedostojen käsittelystä johtuvat lukitukset saattavat joskus estää jaettavien tiedostojen uudelleennimeämisen. Voit keskeyttää jakamisen väliaikaisesti ja käyttää {appName}in nimeämistoimintoa.", "DeleteImportListMessageText": "Haluatko varmasti poistaa listan \"{name}\"?", - "DeleteIndexerMessageText": "Haluatko varmasti poistaa tietolähteen '{name}'?", + "DeleteIndexerMessageText": "Haluatko varmasti poistaa hakupalvelun \"{name}\"?", "DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen \"{label}\"?", "TagIsNotUsedAndCanBeDeleted": "Tunniste ei ole käytössä ja voidaan poistaa.", "Security": "Suojaus", @@ -114,7 +114,7 @@ "DeleteImportList": "Poista tuontilista", "DeleteDownloadClient": "Poista latauspalvelu", "DeleteDownloadClientMessageText": "Haluatko varmasti poistaa latauspalvelun \"{name}\"?", - "DeleteIndexer": "Poista tietolähde", + "DeleteIndexer": "Poista hakupalvelu", "DeleteNotification": "Poista ilmoituspalvelu", "DeleteQualityProfile": "Poista laatuprofiili", "DeleteQualityProfileMessageText": "Haluatko varmasti poistaa laatuprofiilin \"{name}\"?", @@ -152,7 +152,7 @@ "Importing": "Tuodaan", "IncludeUnknownArtistItemsHelpText": "Näytä jonossa kohteet, joissa ei ole esittäjää. Tämä voi sisältää poistettuja esittäjiä, albumeita tai mitä tahansa muuta {appName}ille luokiteltua.", "Interval": "Ajoitus", - "IndexerSettings": "Tietolähdeasetukset", + "IndexerSettings": "Hakupalveluasetukset", "LidarrSupportsAnyDownloadClientThatUsesTheNewznabStandardAsWellAsOtherDownloadClientsListedBelow": "{appName} tukee monia torrent- ja Usenet-lataajia.", "MetadataSettings": "Metatietoasetukset", "MediaManagementSettings": "Medianhallinnan asetukset", @@ -199,7 +199,7 @@ "Tags": "Tunnisteet", "TestAll": "Kaikkien testaus", "TestAllClients": "Koesta latauspalvelut", - "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Tämä koskee kaikkia tietolähteitä. Noudata niiden asettamia sääntöjä.", + "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Tämä koskee kaikkia hakupalveluita. Noudata niiden asettamia sääntöjä.", "TagAudioFilesWithMetadata": "Tallenna metatiedot äänitiedostoihin", "TestAllIndexers": "Tietolähteiden testaus", "UnableToLoadBackups": "Varmuuskopioinnin lataus epäonnistui", @@ -291,8 +291,8 @@ "TorrentDelayHelpText": "Minuuttiviive, joka odotetaan ennen julkaisun Torrent-kaappausta.", "UnableToAddANewQualityProfilePleaseTryAgain": "Laatuprofiilin lisäys epäonnistui. Yritä uudelleen.", "UnableToAddANewRemotePathMappingPleaseTryAgain": "Etäsijainnin kohdistuksen lisäys epäonnistui. Yritä uudelleen.", - "UnableToLoadBlocklist": "Estolistan lataus epäonnistui", - "UnableToLoadDelayProfiles": "Viiveprofiilien lataus epäonnistui", + "UnableToLoadBlocklist": "Virhe ladattaessa estolistaa.", + "UnableToLoadDelayProfiles": "Virhe ladattaessa viiveprofiileja.", "UnableToLoadDownloadClientOptions": "Latauspalveluasetusten lataus epäonnistui", "UnableToLoadLists": "Listojen lataus epäonnistui", "UnableToLoadRootFolders": "Juurikansioiden lataus epäonnistui", @@ -456,12 +456,12 @@ "Status": "Tila", "SuccessMyWorkIsDoneNoFilesToRename": "Valmis! Toiminto on suoritettu, eikä uudelleennimettäviä tiedostoja ole.", "SuccessMyWorkIsDoneNoFilesToRetag": "Valmis! Toiminto on suoritettu, eikä tagimuutoksia vaativia tiedostoja ole.", - "SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Tämä tietolähde ei tue hakua.", + "SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Tämä hakupalvelu ei tue hakutoimintoa.", "SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByLidarr": "Profiilia käytetään automaattihaun yhteydessä, kun haku suoritetaan käyttöliittymästä tai {appName}in toimesta.", "Tasks": "Tehtävät", "Type": "Tyyppi", "UnableToAddANewImportListExclusionPleaseTryAgain": "Uuden luettelon poissulkemisen lisääminen epäonnistui, yritä uudelleen.", - "UnableToAddANewMetadataProfilePleaseTryAgain": "Uutta laatuprofiilia ei voi lisätä, yritä uudelleen.", + "UnableToAddANewMetadataProfilePleaseTryAgain": "Virhe lisättäessä metatietoprofiilia. Yritä uudelleen.", "UnableToAddANewRootFolderPleaseTryAgain": "Uutta mukautettua muotoa ei voi lisätä, yritä uudelleen.", "UnableToLoadMetadataProfiles": "Metatietoprofiilien lataus epäonnistui", "Updates": "Päivitykset", @@ -479,10 +479,10 @@ "Album": "Albumi", "AlbumHasNotAired": "Albumia ei ole julkaistu", "AlbumIsDownloading": "Albumia ladataan", - "AlbumIsNotMonitored": "Albumia ei seurata", + "AlbumIsNotMonitored": "Albumia ei valvota", "AlbumStudio": "Albumin studio", "AllAlbums": "Kaikki albumit", - "AllAlbumsData": "Seuraa kaikkia albumeita, erikoisalbumeita lukuunottamatta", + "AllAlbumsData": "Valvo ensimmäisiä albumeita erikoisalbumit pois lukien.", "AllArtistAlbums": "Kaikki artistin albumit", "MetadataProfile": "Metatietoprofiili", "OnApplicationUpdate": "Kun sovellus päivitetään", @@ -624,7 +624,7 @@ "WouldYouLikeToRestoreBackup": "Haluatko palauttaa varmuuskopion \"{name}\"?", "AddRemotePathMapping": "Lisää etäsijainnin kohdistus", "FreeSpace": "Vapaa tila", - "IndexerDownloadClientHelpText": "Määritä tämän tietolähteen kanssa käytettävä latauspalvelu.", + "IndexerDownloadClientHelpText": "Määritä tästä hakupalvelusta kaapattaessa käytettävä latauspalvelu.", "Ok": "Ok", "Organize": "Järjestä", "OutputPath": "Tallennussijainti", @@ -648,9 +648,9 @@ "MissingAlbums": "Puuttuvat albumit", "MissingAlbumsData": "Valvo albumeita, joille ei ole tiedostoja tai joita ei ole vielä julkaistu.", "MissingTracks": "Puuttuvat kappaleet", - "MissingTracksArtistMonitored": "Puuttuvat kappaleet (esittäjää valvotaan)", - "MissingTracksArtistNotMonitored": "Puuttuvat kappaleet (esittäjää ei valvota)", - "MonitorArtist": "Valvo esittäjää", + "MissingTracksArtistMonitored": "Kappaleita puuttuu (esittäjää valvotaan)", + "MissingTracksArtistNotMonitored": "Kappaleita puuttuu (esittäjää ei valvota)", + "MonitorArtist": "Esittäjän valvonta", "MonitoringOptions": "Valvonta-asetukset", "MusicBrainzAlbumID": "Albumin MusicBrainz ID", "MusicBrainzArtistID": "Esittäjän MusicBrainz ID", @@ -673,12 +673,12 @@ "FutureDaysHelpText": "Päivien määrä, jonka verran tulevaisuuteen iCal-syötettä seurataan.", "AlbumStatus": "Albumin tila", "CatalogNumber": "Luettelonumero", - "MonitorNewItems": "Valvo uusia albumeita", + "MonitorNewItems": "Uusien albumien valvonta", "ImportListSpecificSettings": "Tuotilistakohtaiset asetukset", "DoneEditingGroups": "Lopeta ryhmien muokkaus", "EditGroups": "Muokkaa ryhmiä", "FirstAlbum": "Ensimmäinen albumi", - "FirstAlbumData": "Seuraa ensimmäisiä albumeita. Muita albumeita ei huomioida.", + "FirstAlbumData": "Valvo ensimmäisiä albumeita. Muita albumeita ei huomioida.", "ForeignIdHelpText": "Ohitettavan esittäjän tai albumin MusicBrainz-tunniste.", "FutureAlbums": "Tulevat albumit", "GoToArtistListing": "Avaa esittäjälistaus", @@ -715,7 +715,7 @@ "SelectedCountArtistsSelectedInterp": "{selectedCount} esittäjä(ä) on valittu", "SelectTracks": "Valitse kappaleet", "ShouldSearch": "Etsi uusia kohteita", - "ShouldSearchHelpText": "Etsi tietolähteistä hiljattain lisättyjä kohteita. Käytä suurien listojen kanssa varoen.", + "ShouldSearchHelpText": "Etsi hakupalveluista hiljattain lisättyjä kohteita. Käytä suurten listojen kanssa varoen.", "ShowAlbumCount": "Näytä albumimäärä", "ShowBanners": "Näytä bannerit", "ShowBannersHelpText": "Korvaa nimet bannerikuvilla.", @@ -781,7 +781,7 @@ "HideTracks": "Piilota kappaleet", "LatestAlbum": "Uusin albumi", "LatestAlbumData": "Valvo uusimpia ja tulevia albumeita", - "ManageTracks": "Hallitse kappaleita", + "ManageTracks": "Kappaleiden hallinta", "ManualDownload": "Manuaalinen lataus", "NewAlbums": "Uudet albumit", "NoneMonitoringOptionHelpText": "Älä valvo esittäjiä äläkä albumeita.", @@ -801,14 +801,14 @@ "DeleteSelected": "Poista valitut", "ClickToChangeReleaseGroup": "Vaihda julkaisuryhmää painamalla tästä", "EnableAutomaticAddHelpText": "Lisää esittäjät/albumit {appName}iin kun synkronointi suoritetaan käyttöliittymästä tai {appName}in toimesta.", - "IndexerIdHelpText": "Määritä mitä tietolähdettä profiili koskee.", + "IndexerIdHelpText": "Määritä mitä hakupalvelua profiili koskee.", "Inactive": "Ei aktiivinen", "EnableRssHelpText": "Käytetään {appName}in etsiessä julkaisuja ajoitetusti RSS-synkronoinnilla.", "AllMonitoringOptionHelpText": "Valvo jokaista tuontilistalla olevaa esittäjää ja heidän kaikkia albumeitaan.", "ContinuingOnly": "Vain jatkuvat", "EntityName": "Entiteetin nimi", "EpisodeDoesNotHaveAnAbsoluteEpisodeNumber": "Jaksolle ei ole absoluuttista numeroa.", - "IndexerIdHelpTextWarning": "Yksittäisen tietolähteen käyttö sanapainotuksen kanssa saattaa aiheuttaa julkaisujen kaksoiskappaleiden kaappauksia.", + "IndexerIdHelpTextWarning": "Yksittäisen hakupalvelun käyttö sanapainotuksen kanssa saattaa aiheuttaa julkaisujen kaksoiskappaleiden kaappauksia.", "AllowFingerprintingHelpText": "Tarkenna kappaleiden tunnistustarkkuutta piiloleimauksen avulla.", "BlocklistReleaseHelpText": "Estää {appName}ia lataamasta näitä tiedostoja uudelleen.", "RemotePathMappingCheckFilesGenericPermissions": "Latauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta {appName} ei näe sitä. Kansion käyttöoikeuksia on ehkä muokattava.", @@ -816,9 +816,9 @@ "RemotePathMappingCheckFolderPermissions": "{appName} näkee ladatauskansion \"{0}\", mutta ei voi avata sitä. Tämä johtuu todennäköisesti liian rajallisista käyttöoikeuksista.", "DownloadedUnableToImportCheckLogsForDetails": "Ladattu – Tuonti ei onnistu: näet lisätietoja lokista.", "AppDataLocationHealthCheckMessage": "Päivityksiä ei sallita, jotta AppData-kansion poistaminen päivityksen yhteydessä voidaan estää", - "IndexerRssHealthCheckNoIndexers": "RSS-synkronointia varten ei ole määritetty tietolähteitä ja tämän vuoksi {appName} ei kaappaa uusia julkaisuja automaattisesti.", - "IndexerSearchCheckNoAutomaticMessage": "Automaattihakua varten ei ole määritetty tietolähteitä ja tämän vuoksi {appName}in automaattihaku ei löydä tuloksia.", - "IndexerSearchCheckNoInteractiveMessage": "Manuaalihaulle ei ole määritetty tietolähteitä, eikä {appName} sen vuoksi löydä sillä tuloksia.", + "IndexerRssHealthCheckNoIndexers": "RSS-synkronoinnille ei ole määritetty hakupalveluita, eikä {appName} tämän vuoksi kaappaa uusia julkaisuja automaattisesti.", + "IndexerSearchCheckNoAutomaticMessage": "Automaattihaulle ei ole määritetty hakupalveluita, eikä {appName}in automaattihaku tämän vuoksi löydä tuloksia.", + "IndexerSearchCheckNoInteractiveMessage": "Manuaalihaulle ei ole määritetty hakupalveluita, eikä {appName} sen vuoksi löydä sillä tuloksia.", "RecycleBinUnableToWriteHealthCheck": "Roskakoriksi määritettyyn sijaintiin ei voida tallentaa: {0}. Varmista, että se on olemassa ja että {appName}in suorittavalla käyttäjällä on kirjoitusoikeus kansioon.", "RemotePathMappingCheckDownloadPermissions": "{appName} näkee ladatun musiikin \"{0}\", muttei voi avata sitä. Tämä johtuu todennäköisesti liian rajallisista käyttöoikeuksista.", "RemotePathMappingCheckImportFailed": "{appName} ei voinut tuoda musiikkia. Näet lisätietoja lokista.", @@ -875,7 +875,7 @@ "RecentChanges": "Uusimmat muutokset", "ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituille tietolähteille", "RemotePathMappingCheckBadDockerPath": "Käytät Dockeria ja latauspalvelu {0} tallentaa lataukset kohteeseen \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etäsijaintien kohdistukset ja latauspalvelun asetukset.", - "DeleteSelectedIndexers": "Poista tietoläh(de/teet)", + "DeleteSelectedIndexers": "Poista hakupalvelu(t)", "RemotePathMappingCheckFilesWrongOSPath": "Etälatauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista määritetyt etäsijainnit ja latauspalvelun asetukset.", "RemotePathMappingCheckRemoteDownloadClient": "Etälatauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta sitä ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kohdistus.", "RemotePathMappingCheckWrongOSPath": "Etälatauspalvelu {0} tallentaa lataukset kohteeseen \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etäsijaintien kohdistukset ja latauspalvelun asetukset.", @@ -921,11 +921,11 @@ "AddImportListImplementation": "Lisätään tuontilistaa – {implementationName}", "AddConditionImplementation": "Lisätään ehtoa – {implementationName}", "AddConnectionImplementation": "Lisätään ilmoituspavelua – {implementationName}", - "IndexerDownloadClientHealthCheckMessage": "Tietolähteet virheellisillä latauspalveluilla: {0}.", - "IndexerStatusCheckAllClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi", + "IndexerDownloadClientHealthCheckMessage": "Hakupalvelut virheellisillä latauspalveluilla: {0}.", + "IndexerStatusCheckAllClientMessage": "Hakupalvelut eivät ole virheiden vuoksi käytettävissä.", "MinimumCustomFormatScoreHelpText": "Mukautetun muodon vähimmäispisteytys, jolla ensisijaisen protokollan viiveen ohitus sallitaan.", "Monitoring": "Valvotaan", - "NoIndexersFound": "Tietolähteitä ei löytynyt", + "NoIndexersFound": "Hakupalveluita ei löytynyt", "RemotePathMappingCheckFilesLocalWrongOSPath": "Paikallinen latauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista latauspalvelun asetukset.", "Formats": "Muodot", "AuthBasic": "Perus (selaimen ponnahdus)", @@ -935,7 +935,7 @@ "ColonReplacement": "Kaksoispisteen korvaus", "GrabId": "Kaappauksen tunniste", "InfoUrl": "Tietojen URL", - "EditIndexerImplementation": "Muokataan tietolähdettä – {implementationName}", + "EditIndexerImplementation": "Muokataan hakupalvelua – {implementationName}", "DisabledForLocalAddresses": "Ei käytössä paikallisissa osoitteissa", "ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi", "AutoTagging": "Automaattinen tunnistemerkintä", @@ -987,7 +987,7 @@ "RemotePathMappingCheckDockerFolderMissing": "Käytät Dockeria ja latauspalvelu {0} tallentaa lataukset kohteeseen \"{1}\", mutta sitä ei löydy Docker-säiliöstä. Tarkista etäsijaintien kohdistukset ja säiliön tallennusmedian asetukset.", "ResetQualityDefinitionsMessageText": "Haluatko varmasti palauttaa laatumääritykset?", "SystemTimeCheckMessage": "Järjestelmän aika on ainakin vuorokauden pielessä, eivätkä ajoitetut tehtävät toimi oikein ennen kuin se on korjattu.", - "UnableToLoadInteractiveSearch": "Tämän albumihaun tulosten lataus epäonnistui. Yritä myöhemmin uudelleen.", + "UnableToLoadInteractiveSearch": "Virhe ladattaessa tämän albumihaun tuloksia. Yritä myöhemmin uudelleen.", "AutoTaggingRequiredHelpText": "Tämän \"{implementationName}\" -ehdon on täsmättävä automaattimerkinnän säännön käyttämiseksi. Muutoin yksittäinen \"{implementationName}\" -vastaavuus riittää.", "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Vahvista uusi salasana", "Connection": "Yhteys", @@ -1021,7 +1021,7 @@ "IgnoreDownloadsHint": "Estää {appName}ia käsittelemästä näitä latauksia jatkossa.", "ListRefreshInterval": "Listan päivityksen ajoitus", "IndexerSettingsRejectBlocklistedTorrentHashes": "Hylkää estetyt torrent-hajautusarvot kaapattaessa", - "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein joidenkin tietolähteiden RSS-syötteestä tai hausta. Tämän käyttöönotto mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, kuitenkin ennen kuin niitä välitetään latauspalvelulle.", + "IndexerSettingsRejectBlocklistedTorrentHashesHelpText": "Jos torrent on estetty hajautusarvon perusteella sitä ei välttämättä hylätä oikein joidenkin hakupalveluiden RSS-syötteestä tai hausta. Tämän käyttöönotto mahdollistaa tällaisten torrentien hylkäämisen kaappauksen jälkeen, kuitenkin ennen kuin niitä välitetään latauspalvelulle.", "ListWillRefreshEveryInterp": "Lista päivitetään {0} välein", "NoImportListsFound": "Tuotilistoja ei löytynyt", "ManageClients": "Hallitse työkaluja", @@ -1068,13 +1068,13 @@ "HiddenClickToShow": "Piilotettu, näytä painamalla tästä", "Dash": "Yhdysmerkki", "RegularExpressionsCanBeTested": "Säännöllisiä lausekkeita voidaan testata [täällä]({url}).", - "MonitorArtists": "Valvo esittäjiä", + "MonitorArtists": "Esittäjien valvonta", "ChooseImportMethod": "Valitse tuontitapa", "NoCutoffUnmetItems": "Katkaisutasoa saavuttamattomia kohteita ei ole.", "FailedToLoadQueue": "Jonon lataus epäonnistui", "NoMissingItems": "Puuttuvia kohteita ei ole.", "SpecificMonitoringOptionHelpText": "Valvo esittäjiä, mutta vain erikseen listalle lisättyjä albumeita.", - "UnableToLoadCustomFormats": "Mukautettujen muotojen lataus epäonnistui", + "UnableToLoadCustomFormats": "Virhe ladattaessa mukautettuja muotoja.", "Customformat": "Mukautettu muoto", "ExportCustomFormat": "Vie mukautettu muoto", "MountArtistHealthCheckMessage": "Kohteen sijainnin sisältävä media on kytketty vain luku -tilassa: ", @@ -1110,7 +1110,7 @@ "CountImportListsSelected": "{selectedCount} tuontilista(a) on valittu", "DeleteArtistFolder": "Poista esittäjäkansio", "FormatAgeMinutes": "minuuttia", - "IndexerFlags": "Tietolähteen liput", + "IndexerFlags": "Hakupalvelun liput", "Logout": "Kirjaudu ulos", "NotificationsEmbySettingsSendNotifications": "Lähetä ilmoituksia", "NotificationsEmbySettingsSendNotificationsHelpText": "Ohjeista Embyä ilmoittamaan myös siihen kytketyille palveluille.", @@ -1142,14 +1142,14 @@ "CouldntFindAnyResultsForTerm": "Haku \"{0}\" ei tuottanut tuloksia.", "ImportListStatusCheckAllClientMessage": "Mitkään listat eivät ole virheiden vuoksi käytettävissä", "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "Uuden esittäjän lisääminen on helppoa. Aloita vain haluamasi esittäjän nimen kirjoittaminen.", - "IndexerLongTermStatusCheckAllClientMessage": "Mikään tietolähde ei ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi.", + "IndexerLongTermStatusCheckAllClientMessage": "Mikään hakupalvelu ei ole käytettävissä yli kuusi tuntia kestäneiden virheiden vuoksi.", "NoMinimumForAnyDuration": "Ei toistoaikojen vähimmäiskestoja", "RemoveQueueItemConfirmation": "Haluatko varmasti poistaa kohteen \"{sourceTitle}\" jonosta?", - "IndexerStatusCheckSingleClientMessage": "Tietolähteet eivät ole virheiden vuoksi käytettävissä: {0}", + "IndexerStatusCheckSingleClientMessage": "Hakupalvelut eivät ole virheiden vuoksi käytettävissä: {0}.", "AutoTaggingSpecificationTag": "Tunniste", "DashOrSpaceDashDependingOnName": "\"Yhdysmerkki\" tai \"Välilyönti Yhdysmerkki\" nimen perusteella.", "DownloadClientsSettingsSummary": "Latauspalvelut, latausten käsittely ja etäsijaintien kohdistukset.", - "IndexerSearchCheckNoAvailableIndexersMessage": "Hakua tukevat tietolähteet eivät ole hiljattaisten tietolähdevirheiden vuoksi tilapaisesti käytettävissä.", + "IndexerSearchCheckNoAvailableIndexersMessage": "Mitkään hakua tukevat hakupalvelut eivät ole tilapäisesti käytettävissä hiljattaisten palveluvirheiden vuoksi.", "NotificationsEmbySettingsUpdateLibraryHelpText": "Määrittää päivitetäänkö palvelimen kirjasto tuonnin, uudelleennimeämisen tai poiston yhteydessä.", "NotificationsKodiSettingAlwaysUpdate": "Päivitä aina", "OrganizeSelectedArtists": "Järjestele valitut esittäjät", @@ -1169,12 +1169,12 @@ "FormatDateTimeRelative": "{relativeDay}, {formattedDate} {formattedTime}", "UrlBaseHelpText": "Käänteisen välityspalvelimen tukea varten. Oletusarvo on tyhjä.", "ImportListStatusCheckSingleClientMessage": "Listat eivät ole virheiden vuoksi käytettävissä: {0}", - "IndexerRssHealthCheckNoAvailableIndexers": "RSS-syötteitä tukevat tietolähteet eivät ole hiljattaisten tietolähdevirheiden vuoksi tilapaisesti käytettävissä.", + "IndexerRssHealthCheckNoAvailableIndexers": "RSS-syötteitä tukevat hakupalvelut eivät ole tilapaisesti käytettävissä hiljattaisten palveluvirheiden vuoksi.", "IndexerLongTermStatusCheckSingleClientMessage": "Hakupalvelut eivät ole käytettävissä yli kuusi tuntia kestäneiden virheiden vuoksi: {0}.", "MassSearchCancelWarning": "Tämä on mahdollista keskeyttää vain käynnistämällä {appName} uudelleen tai poistamalla kaikki hakupalvelut käytöstä.", "SearchForAllCutoffUnmetAlbumsConfirmationCount": "Haluatko varmasti etsiä kaikkia {totalRecords} albumia, joiden katkaisutasoa ei ole saavutettu?", "MonitorNoAlbums": "Ei mitään", - "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.", + "IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa hakupalvelun sääntöjä.", "IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi.", "NotificationsKodiSettingsCleanLibrary": "Siivoa kirjasto", "AddNewArtistSearchForMissingAlbums": "Käynnistä puuttuvien albumien haku", @@ -1195,7 +1195,7 @@ "IncludeHealthWarnings": "Sisällytä kuntovaroitukset", "LidarrSupportsMultipleListsForImportingAlbumsAndArtistsIntoTheDatabase": "{appName} tukee useita listoja, joiden avulla esittäjiä ja albumeita voidaan tuoda tietokantaan.", "Priority": "Painotus", - "AlbumsLoadError": "Albumien lataus epäonnistui", + "AlbumsLoadError": "Virhe ladattaessa albumeita.", "ArtistIsUnmonitored": "Esittäjää ei valvota", "FormatAgeDay": "päivä", "FormatAgeDays": "päivää", @@ -1206,7 +1206,7 @@ "FormatShortTimeSpanMinutes": "{minutes} minuutti(a)", "FormatShortTimeSpanSeconds": "{seconds} sekunti(a)", "FormatTimeSpanDays": "{days} pv {time}", - "IndexersSettingsSummary": "Tietolähteet ja niiden asetukset.", + "IndexersSettingsSummary": "Hakupalvelut ja julkaisurajoitukset.", "ImportListsSettingsSummary": "Sisällön tuonti muista {appName}-instansseista tai palveluista, ja poikkeuslistojen hallinta.", "ImportMechanismHealthCheckMessage": "Käytä valmistuneiden latausten käsittelyä", "KeyboardShortcuts": "Pikanäppäimet", @@ -1227,10 +1227,10 @@ "UseSsl": "Käytä SSL-salausta", "DeleteSelectedArtists": "Poista valitut esittäjät", "Links": "Linkit", - "IndexerJackettAll": "Jackettin ei-tuettua \"all\"-päätettä käyttävät tietolähteet: {0}", + "IndexerJackettAll": "Jackettin ei-tuettua \"all\"-päätettä käyttävät hakupalvelut: {0}.", "AutomaticSearch": "Automaattihaku", "ProxyCheckResolveIpMessage": "Määritetyn välityspalvelimen ({0}) IP-osoitteen selvitys epäonnistui.", - "IndexerPriorityHelpText": "Tietolähteen painotus, 1– 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. {appName} käyttää edelleen kaikkia käytössä olevia tietolähteitä RSS-synkronointiin ja hakuun.", + "IndexerPriorityHelpText": "Hakupalvelun painotus, 1– 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. {appName} käyttää edelleen kaikkia käytössä olevia hakupalveluita RSS-synkronointiin ja hakuun.", "ConnectionSettingsUrlBaseHelpText": "Lisää palvelimen {connectionName} URL-osoitteeseen etuliitteen, esim. \"{url}\".", "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Vaihtoehtoinen sijainti, johon valmistuneet lataukset siirretään. Käytä Delugen oletusta jättämällä tyhjäksi.", "DownloadClientDelugeSettingsDirectoryHelpText": "Vaihtoehtoinen latausten tallennussijainti. Käytä Delugen oletusta jättämällä tyhjäksi.", @@ -1242,9 +1242,9 @@ "ParseModalErrorParsing": "Virhe jäsennettäessä. Yritä uudelleen.", "ParseModalHelpText": "Syötä julkaisun nimi yllä olevaan kenttään.", "ParseModalHelpTextDetails": "{appName} pyrkii jäsentämään nimen ja näyttämään sen tiedot.", - "ParseModalUnableToParse": "Annetun nimikkeen jäsennys ei onnistunut. Yritä uudelleen.", + "ParseModalUnableToParse": "Virhe jäsennettäessä nimikettä. Yritä uudelleen.", "Repack": "Uudelleenpaketoitu", - "TestParsing": "Testaa jäsennystä", + "TestParsing": "Koesta jäsennys", "True": "Tosi", "Any": "Mikä tahansa", "BuiltIn": "Sisäänrakennettu", @@ -1302,7 +1302,7 @@ "AllowFingerprintingHelpTextWarning": "Tätä varten {appName}in on luettava osia tiedostoista, joka saattaa kasvattaa levyn tai verkon kuormitusta tarkistusten aikana.", "EmbedCoverArtHelpText": "Sisällytä Lidarrin albumikuvitukset äänitiedostoihin kun niiden tagit tallennetaan.", "ForeignId": "Vieras ID", - "MonitorAlbum": "Valvo albumia", + "MonitorAlbum": "Albumien valvonta", "AddNewArtist": "Lisää uusi esittäjä", "DownloadedWaitingToImport": "Ladattu – Odottaa tuontia", "ArtistProgressBarText": "{trackFileCount}/{trackCount} (kaikkiaan: {totalTrackCount}, latauksessa: {downloadingCount})", @@ -1333,7 +1333,7 @@ "NoTracksInThisMedium": "Kappaleita ei ole tässä muodossa", "ReleaseProfileTagArtistHelpText": "Julkaisuprofiileja sovelletaan esittäjiin, jotka on merkitty ainakin yhdellä täsmäävällä tunnisteella. Käytä kaikille esittäjille jättämällä tyhjäksi.", "TrackFileMissingTooltip": "Kappaletiedosto puuttuu", - "TrackFilesLoadError": "Kappaletiedostojen lataus epäonnistui", + "TrackFilesLoadError": "Virhe ladattaessa kappaletiedostoja.", "AddNewAlbum": "Lisää uusi albumi", "AddNewAlbumSearchForNewAlbum": "Käynnistä uusien albumien haku", "AlbumCount": "Abumien määrä", @@ -1346,5 +1346,6 @@ "DefaultDelayProfileArtist": "Tämä on oletusprofiili, joka pätee kaikkii esittäjiin, joille ei ole erikseen määritetty profiilia.", "DelayProfileArtistTagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille esittäjille.", "Disambiguation": "Yksinkertaistaminen", - "NotificationsTagsArtistHelpText": "Ilmoita vain vähintään yhdellä täsmäävällä tunnisteella merkityistä esittäjistä." + "NotificationsTagsArtistHelpText": "Ilmoita vain vähintään yhdellä täsmäävällä tunnisteella merkityistä esittäjistä.", + "NotificationsSettingsWebhookHeaders": "Otsakkeet" } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index d01b39743..c1445b2b8 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -1338,5 +1338,7 @@ "DownloadClientSettingsOlderPriority": "Priorité plus ancienne", "DownloadClientSettingsPostImportCategoryHelpText": "Catégorie que {appName} doit définir après avoir importé le téléchargement. {appName} ne supprimera pas les torrents de cette catégorie même si l'ensemencement est terminé. Laisser vide pour conserver la même catégorie.", "DownloadClientSettingsRecentPriority": "Priorité récente", - "PostImportCategory": "Catégorie après l'importation" + "PostImportCategory": "Catégorie après l'importation", + "ManageFormats": "Gérer les formats", + "NotificationsSettingsWebhookHeaders": "En-têtes" } diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 6681d82ae..bed47dad8 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -745,5 +745,159 @@ "UpdateAvailableHealthCheckMessage": "새 업데이트 사용 가능: {version}", "Today": "오늘", "MappedNetworkDrivesWindowsService": "Windows 서비스로 실행할 때는 매핑 된 네트워크 드라이브를 사용할 수 없습니다. 자세한 내용은 FAQ를 참조하십시오.", - "DownloadClientSettingsRecentPriority": "클라이언트 우선 순위" + "DownloadClientSettingsRecentPriority": "클라이언트 우선 순위", + "RemoveSelectedItem": "선택한 항목 제거", + "FormatAgeDays": "일", + "FormatAgeHour": "시간", + "AuthenticationMethod": "인증 방식", + "BlocklistAndSearch": "차단 목록 및 검색", + "CloneCondition": "조건 복제", + "ConditionUsingRegularExpressions": "이 조건은 정규 표현식을 사용하여 일치합니다. 문자 `\\^$.|?*+()[{`은(는) 특별한 의미가 있으며 `\\`으로 끝나야 합니다.", + "Release": " 출시", + "RegularExpressionsCanBeTested": "[여기]({url})에서정규식을 테스트 할 수 있습니다.", + "RemotePathMappingsInfo": "원격 경로 매핑은 거의 필요하지 않습니다. {appName}와(과) 다운로드 클라이언트가 동일한 시스템에 있는 경우 경로를 일치시키는 것이 좋습니다. 상세 내용은 [위키]({wikiLink})를 참조하세요.", + "ResetQualityDefinitionsMessageText": "품질 정의를 초기화하시겠습니까?", + "ShownClickToHide": "표시됨, 숨기려면 클릭", + "Small": "작게", + "SmartReplace": "지능형 바꾸기", + "Theme": "테마", + "ThemeHelpText": "애플리케이션 UI 테마 변경, '자동' 테마는 OS 테마를 사용하여 라이트 또는 다크 모드를 설정합니다. Theme.Park에서 영감을 받음", + "ThereWasAnErrorLoadingThisPage": "이 페이지를 로드하는 중ㅇ 오류가 발생했습니다", + "Unlimited": "무제한", + "UpdateFiltered": "업데이트에 필터 적용됨", + "RemoveTagsAutomatically": "태그 자동 제거", + "AutoRedownloadFailedFromInteractiveSearch": "상호작용 검색에서 재다운로드를 실패함", + "ClearBlocklistMessageText": "정말로 모든 항목을 차단 목록에서 지우시겠습니까?", + "Menu": "메뉴", + "PasswordConfirmation": "비밀번호 확인", + "RemoveMultipleFromDownloadClientHint": "다운로드 클라이언트에서 다운로드 및 파일을 제거합니다", + "RemoveQueueItem": "제거 - {sourceTitle}", + "RemoveQueueItemRemovalMethodHelpTextWarning": "'다운로드 클라이언트에서 제거'를 선택하면 다운로드 및 파일이 다운로드 클라이언트에서 제거됩니다.", + "RemoveSelectedItems": "선택한 항목 제거", + "Repack": "repack", + "ReplaceWithDash": "대시로 바꾸기", + "Required": "필수", + "Script": "스크립트", + "Space": "간격", + "SupportedAutoTaggingProperties": "{appName}은(는) 자동 태그 지정 규칙에 대한 다음 속성을 지원합니다", + "Table": "테이블", + "ThereWasAnErrorLoadingThisItem": "이 항목을 로드하는 중에 오류가 발생했습니다", + "ApplicationURL": "애플리케이션 URL", + "AutoTaggingRequiredHelpText": "이 {implementationName} 조건은 자동 태그 지정 규칙이 적용되도록 일치해야 합니다. 그렇지 않으면 단일 {implementationName} 일치로 충분합니다.", + "BlocklistMultipleOnlyHint": "대체 항목을 검색하지 않고 차단 목록에 추가", + "ChownGroup": "chown 그룹", + "CustomFormatsSpecificationFlag": "국기", + "CustomFormatsSpecificationRegularExpression": "일반 표현", + "Database": "데이터베이스", + "DeleteSelected": "선택된 것을 삭제", + "DownloadClientAriaSettingsDirectoryHelpText": "다운로드를 이동할 선택적 위치입니다. 기본 Aria2 위치를 사용하려면 비워두세요", + "DownloadClientQbittorrentSettingsContentLayout": "콘텐츠 레이아웃", + "Duration": "기간", + "False": "거짓", + "Dash": "대시", + "FormatAgeHours": "시간", + "FormatAgeMinute": "분", + "FormatAgeMinutes": "분", + "Install": "설치", + "Label": "라벨", + "Max": "최대", + "Min": "최소", + "Negate": "Negate", + "NoResultsFound": "결과를 찾을 수 없습니다", + "Period": "기간", + "Rejections": "거부", + "RemoveTagsAutomaticallyHelpText": "조건이 충족되지 않으면 태그를 자동으로 제거", + "ResetQualityDefinitions": "품질 정의 초기화", + "SelectIndexerFlags": "인덱서 플래그 선택", + "SelectReleaseGroup": "출시 그룹 선택", + "SetIndexerFlags": "인덱서 플래그 설정", + "SkipRedownload": "재다운로드 건너뛰기", + "TestParsing": "테스트 파싱", + "ApplyChanges": "변경 사항 적용", + "ClickToChangeIndexerFlags": "인덱서 플래그를 변경하려면 클릭", + "CloneAutoTag": "자동 태그 복제", + "ColonReplacement": "콜론 바꾸기", + "CountCustomFormatsSelected": "{count}개의 사용자 정의 형식을 선택함", + "CustomFormatsSettingsTriggerInfo": "사용자 정의 형식은 선택한 다양한 조건 유형 중 하나 이상과 일치할 경우 출시 또는 파일에 적용됩니다.", + "CustomFormatsSpecificationRegularExpressionHelpText": "사용자 정의 형식 정규표현식은 대소문자를 구분하지 않습니다", + "DeleteAutoTag": "자동 태그 삭제", + "DeleteImportList": "가져오기 목록 삭제", + "DeleteRootFolder": "루트 폴더 삭제", + "DeleteSelectedCustomFormatsMessageText": "정말로 {count}개의 선택한 사용자 정의 형식을 삭제하시겠습니까?", + "DoNotBlocklist": "차단 목록에 추가하지 않음", + "DownloadClientDelugeSettingsDirectory": "다운로드 디렉토리", + "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "완료된 다운로드를 이동할 선택적 위치. 기본 Deluge 위치를 사용하려면 비워두세요", + "DownloadClientDelugeSettingsDirectoryHelpText": "다운로드를 이동할 선택적 위치. 기본 Deluge 위치를 사용하려면 비워두세요", + "ReleaseProfiles": "출시 프로필", + "RemoveCompleted": "제거 완료", + "RemoveCompletedDownloads": "완료된 다운로드 제거", + "RemoveFailed": "제거 실패", + "RemoveFailedDownloads": "실패한 다운로드 제거", + "RemoveQueueItemsRemovalMethodHelpTextWarning": "'다운로드 클라이언트에서 제거'를 선택하면 다운로드 및 파일이 다운로드 클라이언트에서 제거됩니다.", + "DoNotBlocklistHint": "차단 목록에 추가하지 않고 제거", + "Never": "절대", + "Loading": "로딩중", + "Auto": "자동", + "AutoRedownloadFailedFromInteractiveSearchHelpText": "대화형 검색에서 실패한 출시가 잡혔을 때 다른 출시를 자동으로 검색하여 다운로드 시도", + "AutomaticAdd": "자동 추가", + "BlocklistAndSearchHint": "차단 목록에 추가한 후 대체 항목 검색 시작", + "ChangeCategoryHint": "다운로드 클라이언트에서 다운로드를 '가져오기 이후 카테고리'로 변경", + "DeleteCondition": "조건 삭제", + "DeleteRemotePathMappingMessageText": "정말로 이 원격 경로 매핑을 삭제하시겠습니까?", + "NotificationsSettingsWebhookHeaders": "헤더", + "RemoveDownloadsAlert": "제거 설정은 위 표의 개별 다운로드 클라이언트 설정으로 이동되었습니다.", + "RemoveFromDownloadClientHint": "다운로드 클라이언트에서 다운로드 및 파일을 제거합니다", + "ReplaceWithSpaceDash": "공백 대시로 바꾸기", + "ResetDefinitionTitlesHelpText": "정의 제목과 값을 초기화하세요", + "ResetDefinitions": "정의 초기화", + "ResetTitles": "제목 초기화", + "ResetTitlesHelpText": "정의 제목과 값을 초기화하세요", + "RootFolderPath": "루트 폴더 경로", + "SizeLimit": "크기 제한", + "SkipFreeSpaceCheckHelpText": "{appName}이(가) 루트 폴더의 여유 공간을 감지할 수 없는 경우 사용하세요", + "Started": "시작됨", + "True": "참", + "Underscore": "밑줄", + "UserAgentProvidedByTheAppThatCalledTheAPI": "API를 호출한 앱에서 제공하는 사용자 에이전트", + "WhatsNew": "새로운 소식?", + "AuthenticationMethodHelpTextWarning": "인증 방식을 선택해주세요", + "AuthenticationRequiredHelpText": "필수 인증을 요청하는 변경 사항. 위험을 이해하지 못한다면 변경하지 마세요.", + "AuthenticationRequiredWarning": "인증 없이 원격 액세스를 방지하기 위해 {appName}은(는) 이제 인증을 활성화해야 합니다. 선택적으로 로컬 주소에서 인증을 비활성화할 수 있습니다.", + "AutoTagging": "자동 태그 지정", + "AutoTaggingLoadError": "자동 태그 지정을 로드할 수 없음", + "AutoTaggingSpecificationTag": "태그", + "AutomaticUpdatesDisabledDocker": "Docker 업데이트 메커니즘을 사용할 때는 자동 업데이트가 직접 지원되지 않습니다. {appName} 외부에서 컨테이너 이미지를 업데이트하거나 스크립트를 사용해야 합니다", + "ChangeCategoryMultipleHint": "다운로드 클라이언트에서 다운로드를 '가져오기 이후 카테고리'로 변경", + "ClickToChangeReleaseGroup": "출시 그룹을 변경하려면 클릭", + "ConnectionSettingsUrlBaseHelpText": "{connectionName} url에 {url}와(과) 같은 접두사를 추가합니다", + "DeleteSelectedImportLists": "가져오기 목록 삭제", + "RemoveQueueItemRemovalMethod": "제거 방식", + "ReplaceWithSpaceDashSpace": "공백 대시 공백으로 바꾸기", + "DownloadClientDelugeSettingsDirectoryCompleted": "완료 후 이동할 디렉토리", + "IndexerIdHelpText": "프로필이 적용되는 인덱서를 지정하세요", + "IndexerSettingsApiUrl": "API 주소", + "IsShowingMonitoredUnmonitorSelected": "선택 항목 모니터링 해제", + "MinimumCustomFormatScoreHelpText": "선호하는 프로토콜의 지연을 우회하는 데 필요한 최소 사용자 정의 형식 점수", + "NoCutoffUnmetItems": "조건 미충족 항목 없음", + "NotificationsKodiSettingsDisplayTime": "시간 표시", + "NotificationsPlexSettingsAuthToken": "인증 토큰", + "External": "외부", + "Large": "크게", + "Logout": "로그아웃", + "ApplicationUrlHelpText": "이 애플리케이션의 외부 URL - http(s)://, port 및 URL 기반 포함", + "AuthenticationRequired": "인증 필수", + "AuthenticationRequiredPasswordConfirmationHelpTextWarning": "새 비밀번호 확인", + "AuthenticationRequiredPasswordHelpTextWarning": "새 비밀번호를 입력하세요", + "AuthenticationRequiredUsernameHelpTextWarning": "새 사용자이름을 입력하세요", + "BypassIfAboveCustomFormatScore": "사용자 정의 형식 점수보다 높으면 무시", + "BypassIfAboveCustomFormatScoreHelpText": "구성된 최소 사용자 정의 형식 점수보다 출시 점수가 높을 경우 무시를 활성화합니다", + "BypassIfHighestQuality": "최고 품질일 경우 무시", + "BypassIfHighestQualityHelpText": "선호 프로토콜이 있는 품질 프로필에서 출시가 가장 높은 활성화 품질을 가질 때 지연을 무시합니다", + "BlocklistAndSearchMultipleHint": "차단 목록에 추가한 후 대체 항목 검색 시작", + "BlocklistOnly": "차단 목록만", + "BlocklistOnlyHint": "대체 항목을 검색하지 않고 차단 목록에 추가", + "ChangeCategory": "카테고리 변경", + "ClearBlocklist": "차단 목록 지우기", + "DashOrSpaceDashDependingOnName": "이름에 따라 대시 또는 띄어쓰고 대시", + "Donate": "기부하기" } diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index a6fff2291..eb62c4211 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -277,5 +277,13 @@ "Clone": "Lukk", "Reason": "Sesong", "AddDelayProfileError": "Ikke mulig å legge til ny betingelse, vennligst prøv igjen", - "DownloadClientSettingsRecentPriority": "Klientprioritet" + "DownloadClientSettingsRecentPriority": "Klientprioritet", + "AddDownloadClientImplementation": "Ny Nedlastingsklient - {implementationName}", + "UnableToAddANewRemotePathMappingPleaseTryAgain": "Kunne ikke legge til ny ekstern stimapping, vennligst prøv igjen.", + "RequiredPlaceHolder": "Legg til ny begrensning", + "FailedLoadingSearchResults": "Kunne ikke laste søkeresultat, vennligst prøv igjen.", + "AddImportListImplementation": "Legg til importliste - {implementationName}", + "IgnoredPlaceHolder": "Legg til ny begrensning", + "AddImportList": "Ny Importliste", + "AddNewArtistRootFolderHelpText": "Undermappa \"{folder}\" vil bli automatisk laget" } diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index 884b68fe7..24f137e4d 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -903,5 +903,9 @@ "Min": "Min", "Preferred": "Voorkeur gegeven", "MappedNetworkDrivesWindowsService": "Toegewezen netwerkstation is niet beschikbaar wanneer Prowlarr wordt uitgevoerd als een Windows Service. Bekijk de Veelgestelde Vragen voor meer informatie", - "DownloadClientSettingsRecentPriority": "Client Prioriteit" + "DownloadClientSettingsRecentPriority": "Client Prioriteit", + "AddArtistWithName": "{artistName} toevoegen", + "AddNewArtist": "Voeg nieuwe artiest toe", + "AddNewAlbum": "Voeg nieuw album toe", + "AddNewAlbumSearchForNewAlbum": "Start zoektoch voor een nieuw album" } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 7405d800e..36ecd41ae 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -367,7 +367,7 @@ "PortNumber": "Número da Porta", "PosterSize": "Tamanho do pôster", "PreviewRename": "Visualizar renomeação", - "PreviewRetag": "Visualizar adição de nova tag", + "PreviewRetag": "Visualizar remarcação", "NETCore": ".NET", "PropersAndRepacks": "Propers e repacks", "Protocol": "Protocolo", @@ -410,7 +410,7 @@ "Remove": "Remover", "RemoveCompletedDownloadsHelpText": "Remover downloads importados do histórico do cliente de download", "RemoveFailedDownloadsHelpText": "Remova downloads com falha do histórico do cliente de download", - "RequiredHelpText": "O lançamento deve conter pelo menos um desses termos (sem distinção entre maiúsculas e minúsculas)", + "RequiredHelpText": "O lançamento deve conter pelo menos um destes termos (não diferencia maiúsculas e minúsculas)", "RequiredPlaceHolder": "Adicionar nova restrição", "RequiresRestartToTakeEffect": "Requer reiniciar para ter efeito", "RescanAfterRefreshHelpText": "Verificar novamente a pasta de autor após atualizar o autor", @@ -454,7 +454,7 @@ "StatusEndedContinuing": "Continuação", "Style": "Estilo", "SuccessMyWorkIsDoneNoFilesToRename": "Êba, já terminei! Não há arquivos a renomear.", - "SuccessMyWorkIsDoneNoFilesToRetag": "Êba, já terminei! Não há novas tags a adicionar a arquivos.", + "SuccessMyWorkIsDoneNoFilesToRetag": "Êba, já terminei! Não há arquivos a remarcar.", "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "O RSS não é compatível com este indexador", "SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "A pesquisa não é compatível com este indexador", "SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByLidarr": "Será usado ao realizar pesquisas automáticas pela interface ou pelo {appName}", @@ -634,7 +634,7 @@ "ExpandSingleByDefaultHelpText": "Singles", "OnApplicationUpdate": "Na Atualização do Aplicativo", "OnRename": "Ao Renomear", - "OnTrackRetag": "Ao Retag Faixa", + "OnTrackRetag": "Ao remarcar faixa", "OnUpgrade": "Ao Atualizar", "OnDownloadFailure": "Na Falha do Download", "OnGrab": "Ao obter", @@ -781,7 +781,7 @@ "ArtistName": "Nome do artista", "ArtistType": "Tipo de artista", "CombineWithExistingFiles": "Combinar com arquivos existentes", - "MonitorNewItems": "Monitorar Novos Álbuns", + "MonitorNewItems": "Monitorar novos álbuns", "DateAdded": "Data da adição", "DeleteArtist": "Excluir artista selecionado", "Discography": "Discografia", @@ -798,8 +798,8 @@ "Playlist": "Lista de Reprodução", "Proceed": "Proceder", "ReplaceExistingFiles": "Substituir Arquivos Existentes", - "Retag": "Retag", - "Retagged": "Retagged", + "Retag": "Remarcar", + "Retagged": "Remarcado", "RootFolderPath": "Caminho da Pasta Raiz", "SelectAlbum": "Selecionar Álbum", "SelectAlbumRelease": "Selecionar Lançamento do Álbum", @@ -947,7 +947,7 @@ "DeleteRemotePathMapping": "Excluir mapeamento de caminho remoto", "BlocklistReleases": "Lançamentos na lista de bloqueio", "DeleteCondition": "Excluir condição", - "DeleteConditionMessageText": "Tem certeza de que deseja excluir a condição '{name}'?", + "DeleteConditionMessageText": "Tem certeza de que deseja excluir a condição \"{name}\"?", "Negated": "Negado", "NoHistoryBlocklist": "Não há lista de bloqueio no histórico", "RemoveSelectedItemBlocklistMessageText": "Tem certeza de que deseja remover os itens selecionados da lista de bloqueio?", @@ -957,7 +957,7 @@ "ResetQualityDefinitions": "Redefinir definições de qualidade", "ResetQualityDefinitionsMessageText": "Tem certeza de que deseja redefinir as definições de qualidade?", "ResetTitlesHelpText": "Redefinir títulos de definição e valores", - "BlocklistReleaseHelpText": "Impede que o {appName} obtenha automaticamente esses arquivos novamente", + "BlocklistReleaseHelpText": "Impede que o {appName} obtenha esses arquivos novamente de forma automática", "FailedToLoadQueue": "Falha ao carregar a fila", "QueueIsEmpty": "A fila está vazia", "NoCutoffUnmetItems": "Nenhum item com limite não atingido", @@ -976,7 +976,7 @@ "AutomaticAdd": "Adição automática", "CountDownloadClientsSelected": "{selectedCount} cliente(s) de download selecionado(s)", "CountImportListsSelected": "{selectedCount} lista(s) de importação selecionada(s)", - "DeleteSelectedDownloadClients": "Excluir Cliente(s) de Download Selecionado(s)", + "DeleteSelectedDownloadClients": "Excluir cliente(s) de download selecionado(s)", "DeleteSelectedDownloadClientsMessageText": "Tem certeza de que deseja excluir o(s) {count} cliente(s) de download selecionado(s)?", "DeleteSelectedImportLists": "Excluir lista(s) de importação", "DeleteSelectedImportListsMessageText": "Tem certeza de que deseja excluir a(s) {count} lista(s) de importação selecionada(s)?", @@ -1048,9 +1048,9 @@ "ErrorLoadingContent": "Ocorreu um erro ao carregar este conteúdo", "AddNewArtist": "Adicionar Novo Artista", "AddNewAlbum": "Adicionar Novo Álbum", - "AddNewArtistRootFolderHelpText": "A subpasta '{folder}' será criada automaticamente", + "AddNewArtistRootFolderHelpText": "A subpasta \"{folder}\" será criada automaticamente", "ImportListRootFolderMissingRootHealthCheckMessage": "Pasta raiz ausente para lista(s) de importação: {0}", - "ImportListRootFolderMultipleMissingRootsHealthCheckMessage": "Múltiplas pastas raiz estão faltando nas listas de importação: {0}", + "ImportListRootFolderMultipleMissingRootsHealthCheckMessage": "Várias pastas raiz estão ausentes para listas de importação: {0}", "PreferProtocol": "Preferir {preferredProtocol}", "HealthMessagesInfoBox": "Para saber mais sobre a causa dessas mensagens de verificação de integridade, clique no link da wiki (ícone de livro) no final da linha ou verifique os [logs]({link}). Se tiver dificuldade em interpretar essas mensagens, entre em contato com nosso suporte nos links abaixo.", "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "O cliente de download {0} está configurado para remover downloads concluídos. Isso pode resultar na remoção dos downloads do seu cliente antes que {1} possa importá-los.", @@ -1094,7 +1094,7 @@ "Large": "Grande", "MonitorArtists": "Monitorar Artistas", "RenameFiles": "Renomear Arquivos", - "RetagSelectedArtists": "Retag Artistas Selecionados", + "RetagSelectedArtists": "Remarcar artistas selecionados", "SetAppTags": "Definir {appName} Tags", "Small": "Pequeno", "UpdateMonitoring": "Atualizar Monitoramento", @@ -1233,7 +1233,7 @@ "MonitorFirstAlbum": "Primeiro Álbum", "MonitorFutureAlbums": "Álbuns Futuros", "MonitorLastestAlbum": "Último Álbum", - "MonitorNoAlbums": "Nada", + "MonitorNoAlbums": "Nenhum", "MonitorNoNewAlbums": "Sem Novos Álbuns", "Yesterday": "Ontem", "FormatShortTimeSpanMinutes": "{minutes} minuto(s)", @@ -1246,7 +1246,7 @@ "DownloadClientDelugeSettingsDirectoryCompleted": "Mover para o Diretório Quando Concluído", "DownloadClientDelugeSettingsDirectoryHelpText": "Local opcional para colocar downloads, deixe em branco para usar o local padrão do Deluge", "NotificationsEmbySettingsSendNotifications": "Enviar Notificações", - "NotificationsEmbySettingsSendNotificationsHelpText": "Faça com que o MediaBrowser envie notificações para provedores configurados", + "NotificationsEmbySettingsSendNotificationsHelpText": "Faça com que o MediaBrowser envie notificações para os provedores configurados", "NotificationsKodiSettingAlwaysUpdate": "Sempre Atualizar", "NotificationsKodiSettingAlwaysUpdateHelpText": "Atualizar a biblioteca mesmo quando um vídeo está sendo reproduzido?", "NotificationsKodiSettingsCleanLibrary": "Limpar Biblioteca", @@ -1259,14 +1259,14 @@ "NotificationsSettingsUpdateLibrary": "Atualizar Biblioteca", "NotificationsSettingsUpdateMapPathsFrom": "Mapear Caminhos De", "NotificationsSettingsUpdateMapPathsTo": "Mapear Caminhos Para", - "NotificationsSettingsUpdateMapPathsToHelpText": "Caminho {serviceName}, usado para modificar caminhos de série quando {serviceName} vê a localização do caminho da biblioteca de forma diferente de {appName} (requer 'Atualizar Biblioteca')", + "NotificationsSettingsUpdateMapPathsToHelpText": "Caminho do {serviceName}, usado para alterar caminhos de séries quando o {serviceName} vê a localização do caminho da biblioteca de forma diferente do {appName} (requer \"Atualizar biblioteca\")", "NotificationsSettingsUseSslHelpText": "Conecte-se a {serviceName} por HTTPS em vez de HTTP", "UseSsl": "Usar SSL", "ConnectionSettingsUrlBaseHelpText": "Adiciona um prefixo ao URL {connectionName}, como {url}", "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Local opcional para mover os downloads concluídos, deixe em branco para usar o local padrão do Deluge", - "NotificationsEmbySettingsUpdateLibraryHelpText": "Atualizar Biblioteca ao Importar, Renomear ou Excluir?", + "NotificationsEmbySettingsUpdateLibraryHelpText": "Atualizar biblioteca ao importar, renomear ou excluir?", "NotificationsKodiSettingsDisplayTimeHelpText": "Por quanto tempo a notificação será exibida (em segundos)", - "NotificationsSettingsUpdateMapPathsFromHelpText": "Caminho {appName}, usado para modificar caminhos de série quando {serviceName} vê a localização do caminho da biblioteca de forma diferente de {appName} (requer 'Atualizar Biblioteca')", + "NotificationsSettingsUpdateMapPathsFromHelpText": "Caminho do {appName}, usado para alterar caminhos de séries quando o {serviceName} vê a localização do caminho da biblioteca de forma diferente do {appName} (requer \"Atualizar biblioteca\")", "AddToDownloadQueue": "Adicionar à fila de download", "AddedToDownloadQueue": "Adicionado à fila de download", "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName} não conseguiu determinar a qual artista e álbum se destinava este lançamento. {appName} pode não conseguir importar esta versão automaticamente. Você quer pegar '{title}'?", @@ -1330,7 +1330,7 @@ "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?", "ManageFormats": "Gerenciar Formatos", "AddDelayProfileError": "Não foi possível adicionar um novo perfil de atraso. Tente novamente.", - "ImportListTagsHelpText": "Tags que serão adicionadas ao importar esta lista", + "ImportListTagsHelpText": "Etiquetas que serão adicionadas ao importar esta lista", "DefaultDelayProfileArtist": "Este é o perfil padrão. Aplica-se a todos os artistas que não possuem um perfil explícito.", "ICalTagsArtistHelpText": "O feed conterá apenas artistas com pelo menos uma etiqueta correspondente", "NotificationsTagsArtistHelpText": "Envie notificações apenas para artistas com pelo menos uma etiqueta correspondente", @@ -1346,5 +1346,6 @@ "DownloadClientSettingsRecentPriority": "Priorizar recentes", "PostImportCategory": "Categoria Pós-Importação", "DownloadClientSettingsOlderPriorityAlbumHelpText": "Prioridade para usar ao pegar álbuns lançados há mais de 14 dias", - "DownloadClientSettingsRecentPriorityAlbumHelpText": "Prioridade de uso ao adquirir álbuns lançados nos últimos 14 dias" + "DownloadClientSettingsRecentPriorityAlbumHelpText": "Prioridade de uso ao adquirir álbuns lançados nos últimos 14 dias", + "NotificationsSettingsWebhookHeaders": "Cabeçalhos" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 4f9063901..c9c1b31f0 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -1082,5 +1082,6 @@ "DownloadClientSettingsPostImportCategoryHelpText": "{appName}'in indirmeyi içe aktardıktan sonra ayarlayacağı kategori. {appName}, seed tamamlanmış olsa bile bu kategorideki torrentleri kaldırmayacaktır. Aynı kategoriyi korumak için boş bırakın.", "DownloadClientSettingsRecentPriority": "Yeni Önceliği", "PostImportCategory": "İçe Aktarma Sonrası Kategorisi", - "DownloadClientSettingsOlderPriority": "Eski Önceliği" + "DownloadClientSettingsOlderPriority": "Eski Önceliği", + "NotificationsSettingsWebhookHeaders": "Başlıklar" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index af927630d..b02ae0ad6 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -1335,5 +1335,6 @@ "DownloadClientSettingsOlderPriority": "最早优先", "DownloadClientSettingsPostImportCategoryHelpText": "导入下载后要设置的 {appName} 的分类。 即使做种完成,{appName} 也不会删除该分类中的种子。 留空以保留同一分类。", "DownloadClientSettingsRecentPriority": "最近优先", - "PostImportCategory": "导入后分类" + "PostImportCategory": "导入后分类", + "NotificationsSettingsWebhookHeaders": "标头" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_Hans.json b/src/NzbDrone.Core/Localization/Core/zh_Hans.json index b49f406e7..28374badf 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_Hans.json +++ b/src/NzbDrone.Core/Localization/Core/zh_Hans.json @@ -3,5 +3,6 @@ "About": "关于", "Always": "总是", "Analytics": "分析", - "Username": "用户名" + "Username": "用户名", + "Activity": "111" } From 51a38bc648ed1b2d703de8fc37758e3eb4b3ac6b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 28 Jan 2025 21:57:30 +0200 Subject: [PATCH 168/275] Fix logging message for directory watcher error --- src/NzbDrone.Core/MediaFiles/RootFolderWatchingService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/MediaFiles/RootFolderWatchingService.cs b/src/NzbDrone.Core/MediaFiles/RootFolderWatchingService.cs index 76c204e1f..447d82baf 100644 --- a/src/NzbDrone.Core/MediaFiles/RootFolderWatchingService.cs +++ b/src/NzbDrone.Core/MediaFiles/RootFolderWatchingService.cs @@ -183,7 +183,7 @@ namespace NzbDrone.Core.MediaFiles } else { - _logger.Error(ex, "Error in Directory watcher for: {0}" + dw.Path); + _logger.Error(ex, "Error in Directory watcher for: {0}", dw.Path); DisposeWatcher(dw, true); } From 477a799b8a15c56600a33ecd4940d140ab08195e Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 1 Feb 2025 18:33:23 +0000 Subject: [PATCH 169/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Dani Talens Co-authored-by: Mailme Dashite Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/de/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ca.json | 4 +- src/NzbDrone.Core/Localization/Core/de.json | 86 +++++++++++++++++---- 2 files changed, 75 insertions(+), 15 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index b1487962c..504f4d43c 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -971,5 +971,7 @@ "Today": "Avui", "MappedNetworkDrivesWindowsService": "Les unitats de xarxa assignades no estan disponibles quan s'executen com a servei de Windows. Si us plau, consulteu les PMF per a obtenir més informació", "DownloadClientSettingsRecentPriority": "Prioritat del client", - "AddNewArtist": "Afegeix Nou Artista" + "AddNewArtist": "Afegeix Nou Artista", + "AddNewItem": "Afegeix un nou element", + "AlbumCount": "Recompte d'àlbums" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index 72f1170a9..e2fceb7b2 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -452,7 +452,7 @@ "SslCertPathHelpText": "Pfad zur PFX Datei", "SslCertPathHelpTextWarning": "Erfordert einen Neustart", "ArtistFolderFormat": "Autor Orderformat", - "UiLanguageHelpText": "Sprache für die gesamte Oberfläche", + "UiLanguageHelpText": "Sprache, die {appName} für die Benutzeroberfläche verwenden wird.", "UiLanguageHelpTextWarning": "Seite muss neugeladen werden", "UnableToLoadNamingSettings": "Umbenennungeinstellungen konnten nicht geladen werden", "Updates": "Updates", @@ -785,7 +785,7 @@ "ImportFailed": "Import fehlgeschlagen", "EndedOnly": "Nur beendete", "MassAlbumsCutoffUnmetWarning": "Bist du dir sicher, dass du nach allen '{0}' Alben suchen willst deren Schwelle nicht erreicht worden ist?", - "SearchForAllMissingAlbumsConfirmationCount": "Bist du dir sicher, dass du nach allen '{0}' fehlenden Alben suchen willst?", + "SearchForAllMissingAlbumsConfirmationCount": "Bist du sicher, dass du nach allen {totalRecords} fehlenden Alben suchen möchtest?", "MissingTracks": "Fehlende Tracks", "MonitorNewItems": "Neues Album überwachen", "MonitoringOptionsHelpText": "Welche Alben sollen überwacht werden nachdem der Künstler hinzugefügt wurde (einmalige Anpassung)", @@ -817,7 +817,7 @@ "CopyToClipboard": "In die Zwischenablage kopieren", "CouldntFindAnyResultsForTerm": "Keine Ergebnisse für '{0}' gefunden", "CustomFormat": "Eigenes Format", - "CustomFormatRequiredHelpText": "Diese {0} Bedingungen müsen zutreffen damit das eigene Format zutrifft. Ansonsten reicht ein einzelner {1} Treffer.", + "CustomFormatRequiredHelpText": "Diese {0}-Bedingung muss übereinstimmen, damit das benutzerdefinierte Format angewendet wird. Andernfalls reicht eine einzelne {0}-Übereinstimmung aus.", "CustomFormatSettings": "Einstellungen für eigene Formate", "DeleteCustomFormat": "Eigenes Format löschen", "DeleteCustomFormatMessageText": "Bist du sicher, dass du das benutzerdefinierte Format '{name}' wirklich löschen willst?", @@ -844,7 +844,7 @@ "SpecificMonitoringOptionHelpText": "Autoren überwachen aber nur Bücher überwachen, welche explizit in der Liste miteinbezogen wurden", "CustomFormats": "Eigene Formate", "Customformat": "Eigenes Format", - "CutoffFormatScoreHelpText": "Sobald dieser Wert für das benutzerdefinierte Format erreicht wird, werden keine neuen Releases mehr abgerufen", + "CutoffFormatScoreHelpText": "Sobald dieser benutzerdefinierte Formatwert erreicht ist, wird {appName} keine Albumveröffentlichungen mehr abrufen.", "IncludeCustomFormatWhenRenamingHelpText": "In {Custom Formats} umbennenungs Format", "HiddenClickToShow": "Versteckt, zum Anzeigen anklicken", "RemotePathMappingCheckBadDockerPath": "Docker erkannt; Downloader {0} speichert Downloads in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Remote-Pfadzuordnungen und die Downloader Einstellungen.", @@ -870,13 +870,13 @@ "ProxyCheckFailedToTestMessage": "Proxy konnte nicht getestet werden: {0}", "ProxyCheckResolveIpMessage": "Fehler beim Auflösen der IP-Adresse für den konfigurierten Proxy-Host {0}", "RecycleBinUnableToWriteHealthCheck": "Es kann nicht in den konfigurierten Papierkorb-Ordner geschrieben werden: {0}. Stellen Sie sicher, dass dieser Pfad existiert und von dem Benutzer, der {appName} ausführt, beschreibbar ist.", - "RemotePathMappingCheckDownloadPermissions": "{appName} kann den Download sehen, aber nicht verarbeiten {0}. Möglicherweise ein Rechteproblem.", + "RemotePathMappingCheckDownloadPermissions": "{appName} kann die heruntergeladene Musik {0} sehen, aber nicht darauf zugreifen. Wahrscheinlich ein Berechtigungsfehler.", "RemotePathMappingCheckFileRemoved": "Datei {0} wurde während des Verarbeitens entfernt.", "RemotePathMappingCheckFilesBadDockerPath": "Docker erkannt; Downloader {0} meldet Dateien in {1}, aber dies ist kein valider {2} Pfad. Überprüfe deine Remote-Pfadzuordnungen und die Downloader Einstellungen.", "RemotePathMappingCheckFilesWrongOSPath": "Downloader {0} meldet Dateien in {1}, aber dies ist kein valider {2} Pfad. Überprüfe deine Remote-Pfadzuordnungen und die Downloader Einstellungen.", "RemotePathMappingCheckFolderPermissions": "{appName} kann das Downloadverzeichnis sehen, aber nicht verarbeiten {0}. Möglicherwiese ein Rechteproblem.", "RemotePathMappingCheckGenericPermissions": "Downloader {0} speichert Downloads in {1}, aber {appName} kann dieses Verzeichnis nicht sehen. Möglicherweise müssen die Verzeichnisrechte angepasst werden.", - "RemotePathMappingCheckImportFailed": "{appName} konnte den Film nicht importieren. Prüfe die Logs für mehr Informtationen.", + "RemotePathMappingCheckImportFailed": "{appName} konnte die Musik nicht importieren. Überprüfe die Logs für weitere Details.", "RemotePathMappingCheckFilesGenericPermissions": "Downloader {0} meldet Dateien in {1}, aber {appName} kann dieses Verzeichnis nicht sehen.Möglicherweise müssen die Verzeichnisreche angepasst werden.", "RemotePathMappingCheckFilesLocalWrongOSPath": "Downloader {0} meldet Dateien in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Downloader Einstellungen.", "RemotePathMappingCheckLocalWrongOSPath": "Downloader {0} speichert Downloads in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Downloader Einstellungen.", @@ -910,7 +910,7 @@ "DeleteRemotePathMapping": "Entfernte Pfadzuordnung löschen", "DeleteRemotePathMappingMessageText": "Bist du sicher, dass du das diese entfernte Pfadzuordnung löschen willst?", "ListRefreshInterval": "Listen Aktualisierungsintervall", - "ListWillRefreshEveryInterp": "Liste wird alle [0] aktualisiert", + "ListWillRefreshEveryInterp": "Die Liste wird aktualisiert alle {0}", "ApplyChanges": "Änderungen anwenden", "AutomaticAdd": "Automatisch hinzufügen", "DeleteSelectedDownloadClients": "Lösche ausgewählte(n) Download Client(s)", @@ -1024,7 +1024,7 @@ "IndexerDownloadClientHealthCheckMessage": "Indexer mit ungültigen Downloader: {0}.", "Dash": "Bindestrich", "Lowercase": "Kleinbuchstaben", - "GrabReleaseUnknownArtistOrAlbumMessageText": "Das Release konnte keinem Film zugeordnet werden. Ein automatischer Import wird nicht möglich sein. Trotzdem '{0}' erfassen?", + "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName} konnte nicht bestimmen, zu welchem Künstler und Album diese Veröffentlichung gehört. Möglicherweise kann {appName} diese Veröffentlichung nicht automatisch importieren. Möchtest du „{title}“ herunterladen?", "NotificationStatusSingleClientHealthCheckMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {0}", "ConnectionLostReconnect": "{appName} wird versuchen, automatisch eine Verbindung herzustellen, oder Sie können unten auf „Neu laden“ klicken.", "ConnectionLostToBackend": "{appName} hat die Verbindung zum Backend verloren und muss neu geladen werden, um die Funktionalität wiederherzustellen.", @@ -1060,7 +1060,7 @@ "RemoveSelectedItems": "Markierte Einträge löschen", "Total": "Gesamt", "AutoAdd": "Automatisch hinzufügen", - "BlocklistReleaseHelpText": "Dieses Release nicht automatisch erneut erfassen", + "BlocklistReleaseHelpText": "Verhindert, dass {appName} diese Dateien erneut automatisch herunterlädt.", "CloneCondition": "Bedingung klonen", "CountIndexersSelected": "{selectedCount} Künstler ausgewählt", "MonitorNewAlbums": "Neues Album", @@ -1084,9 +1084,9 @@ "Table": "Tabelle", "RemoveCompletedDownloads": "Entferne abgeschlossene Downloads", "SomeResultsAreHiddenByTheAppliedFilter": "Einige Ergebnisse werden durch den angewendeten Filter ausgeblendet", - "SearchForAllCutoffUnmetAlbumsConfirmationCount": "Bist du dir sicher, dass du nach allen '{0}' fehlenden Alben suchen willst?", + "SearchForAllCutoffUnmetAlbumsConfirmationCount": "Sind Sie sicher, dass Sie nach allen {totalRecords} Cutoff Unmet Alben suchen wollen?", "MonitoredStatus": "Überwacht/Status", - "DownloadClientSortingCheckMessage": "Im Download-Client {downloadClientName} ist die Sortierung {sortingMode} für die Kategorie von {appName} aktiviert. Sie sollten die Sortierung in Ihrem Download-Client deaktivieren, um Importprobleme zu vermeiden.", + "DownloadClientSortingCheckMessage": "Der Download-Client {0} hat die {1}-Sortierung für die Kategorie von {appName} aktiviert. Du solltest die Sortierung in deinem Download-Client deaktivieren, um Importprobleme zu vermeiden.", "ImportListsSettingsSummary": "Importiere von einer anderen {appName}-Instanz oder Trakt-Listen und verwalte Listen-Ausschlüsse", "MetadataSettingsArtistSummary": "Metadaten-Dateien erstellen, wenn Bücher importiert oder Autoren aktualisiert werden", "QualitySettingsSummary": "Qualitätsgrößen und Namensgebung", @@ -1114,7 +1114,7 @@ "Large": "Groß", "RenameFiles": "Dateien umbenennen", "Small": "Klein", - "CountDownloadClientsSelected": "{count} Download-Client(s) ausgewählt", + "CountDownloadClientsSelected": "{selectedCount} Download-Client(s) ausgewählt", "Loading": "Lade", "RemoveSelectedItemsQueueMessageText": "Bist du sicher, dass du {0} Einträge aus der Warteschlange entfernen willst?", "ErrorLoadingContent": "Es ist ein Fehler beim Laden dieses Inhalts aufgetreten", @@ -1143,7 +1143,7 @@ "DeleteArtistFolderHelpText": "Löschen Sie den Serienordner und seinen Inhalt", "DeleteAutoTagHelpText": "Sind Sie sicher, dass Sie das automatische Tag „{name}“ löschen möchten?", "DeleteSelectedDownloadClientsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Download-Clients löschen möchten?", - "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Der Download-Client {downloadClientName} ist so eingestellt, dass abgeschlossene Downloads entfernt werden. Dies kann dazu führen, dass Downloads von Ihrem Client entfernt werden, bevor {appName} sie importieren kann.", + "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Der Download-Client {0} ist so eingestellt, dass abgeschlossene Downloads entfernt werden. Dies kann dazu führen, dass Downloads aus deinem Client entfernt werden, bevor {1} sie importieren kann.", "IncludeHealthWarnings": "Gesundheitswarnungen einbeziehen", "Required": "Erforderlich", "ResetTitlesHelpText": "Definitionstitel und -werte zurücksetzen", @@ -1291,5 +1291,63 @@ "DownloadClientSettingsPostImportCategoryHelpText": "Kategorie für {appName}, die nach dem Importieren des Downloads festgelegt wird. {appName} wird Torrents in dieser Kategorie nicht entfernen, auch wenn das Seeding beendet ist. Leer lassen, um dieselbe Kategorie beizubehalten.", "DownloadClientSettingsRecentPriority": "Neueste Priorität", "PostImportCategory": "Post-Import-Kategorie", - "NotificationsSettingsWebhookHeaders": "Header" + "NotificationsSettingsWebhookHeaders": "Header", + "CountAlbums": "{albumCount} Alben", + "DefaultDelayProfileArtist": "Dies ist das Standardprofil. Es gilt für alle Künstler, die kein explizites Profil haben.", + "DelayProfileArtistTagsHelpText": "Gilt für Künstler mit mindestens einem übereinstimmenden Tag", + "DownloadClientSettingsRecentPriorityAlbumHelpText": "Priorität bei der Beschaffung von Alben, die in den letzten 14 Tagen veröffentlicht wurden", + "EmbedCoverArtHelpText": "Lidarr-Albumcover in Audiodateien einbetten, wenn Tags geschrieben werden", + "FilterAlbumPlaceholder": "Album filtern", + "ICalTagsArtistHelpText": "Der Feed enthält nur Künstler mit mindestens einem übereinstimmenden Tag", + "SkipRedownloadHelpText": "Verhindert, dass {appName} versucht, alternative Veröffentlichungen für die entfernten Elemente herunterzuladen", + "BannerOptions": "Banner Einstellungen", + "Proceed": "Fortfahren", + "DeleteArtistFolder": "Künstlerordner löschen", + "ReplaceExistingFiles": "Vorhandene Dateien ersetzen", + "ReleaseProfileTagArtistHelpText": "Veröffentlichungsprofile gelten für Künstler mit mindestens einem übereinstimmenden Tag. Leer lassen, um sie auf alle Künstler anzuwenden", + "SelectTracks": "Titel auswählen", + "SetAppTags": "{appName}-Tags festlegen", + "ShouldMonitorExisting": "Vorhandene Alben überwachen", + "TrackCount": "Anzahl der Titel", + "TrackFileDeletedTooltip": "Titeldatei gelöscht", + "TrackImported": "Titel importiert", + "SelectAlbum": "Album auswählen", + "Retag": "Erneut taggen", + "TrackFileTagsUpdatedTooltip": "Titeldatei-Tags aktualisiert", + "MonitorAlbum": "Album überwachen", + "GroupInformation": "Gruppeninformationen", + "Retagged": "Erneut getaggt", + "NoMediumInformation": "Keine Medieninformationen verfügbar.", + "NotificationsEmbySettingsSendNotificationsHelpText": "Lasse MediaBrowser Benachrichtigungen an konfigurierte Anbieter senden", + "OnAlbumDelete": "Beim Löschen eines Albums", + "OnArtistDelete": "Beim Löschen eines Künstlers", + "SelectAlbumRelease": "Albumveröffentlichung auswählen", + "SelectArtist": "Künstler auswählen", + "TrackFiles": "Titeldateien", + "TrackProgress": "Titel-Fortschritt", + "TracksLoadError": "Titel konnten nicht geladen werden", + "MonitorNoNewAlbums": "Keine neuen Alben", + "MatchedToAlbums": "Mit Alben abgeglichen", + "MatchedToArtist": "Mit Künstler abgeglichen", + "NoAlbums": "Keine Alben", + "NoTracksInThisMedium": "Keine Titel in diesem Medium", + "NotificationsTagsArtistHelpText": "Nur Benachrichtigungen für Künstler mit mindestens einem übereinstimmenden Tag senden", + "OnArtistAdd": "Beim Hinzufügen eines Künstlers", + "RetagSelectedArtists": "Ausgewählte Künstler erneut taggen", + "ShowNextAlbumHelpText": "Nächstes Album unter dem Poster anzeigen", + "TrackFileMissingTooltip": "Titeldatei fehlt", + "TrackFilesLoadError": "Titeldateien konnten nicht geladen werden", + "OneAlbum": "1 Album", + "TrackFileRenamedTooltip": "Titeldatei umbenannt", + "InteractiveSearchModalHeaderTitle": "Interaktive Suche – {title}", + "DownloadClientSettingsOlderPriorityAlbumHelpText": "Priorität bei der Beschaffung von Alben, die vor mehr als 14 Tagen veröffentlicht wurden", + "DownloadedImporting": "Heruntergeladen – Import wird durchgeführt", + "DownloadedWaitingToImport": "Heruntergeladen – Warte auf Import", + "EditSelectedArtists": "Ausgewählte Künstler bearbeiten", + "EmbedCoverArtInAudioFiles": "Cover-Art in Audiodateien einbetten", + "FilterArtistPlaceholder": "Künstler filtern", + "Inactive": "Inaktiv", + "AlbumInfo": "Album Informationen", + "Banners": "Banner", + "DeleteArtistFolders": "Künstlerordner löschen" } From 8fd79d729147ff99ff7b9699059c0c6636218936 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 1 Feb 2025 22:28:31 +0200 Subject: [PATCH 170/275] New: Prefer newer Usenet releases (cherry picked from commit 6a439f03273b376feda713ef04a6912fc3af9d0a) --- src/NzbDrone.Core/DecisionEngine/DownloadDecisionComparer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/DecisionEngine/DownloadDecisionComparer.cs b/src/NzbDrone.Core/DecisionEngine/DownloadDecisionComparer.cs index 7fe5ec1fc..5fc656c37 100644 --- a/src/NzbDrone.Core/DecisionEngine/DownloadDecisionComparer.cs +++ b/src/NzbDrone.Core/DecisionEngine/DownloadDecisionComparer.cs @@ -163,7 +163,7 @@ namespace NzbDrone.Core.DecisionEngine return 10; } - return 1; + return Math.Round(Math.Log10(age)) * -1; }); } From 3c4b438d2797417471be19b9d652717c88370c22 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 31 Jan 2025 17:04:55 +0200 Subject: [PATCH 171/275] Fixed: Health warning for downloading inside root folders (cherry picked from commit 1e9fd02e9d2bf57247adcac5728e2a0d2b084b86) Fixes #5384 --- .../DownloadClientRootFolderCheckFixture.cs | 15 ++++++++++++++- .../Checks/DownloadClientRootFolderCheck.cs | 12 ++++++++++-- src/NzbDrone.Core/Localization/Core/ar.json | 2 +- src/NzbDrone.Core/Localization/Core/bg.json | 2 +- src/NzbDrone.Core/Localization/Core/ca.json | 2 +- src/NzbDrone.Core/Localization/Core/cs.json | 2 +- src/NzbDrone.Core/Localization/Core/da.json | 2 +- src/NzbDrone.Core/Localization/Core/de.json | 2 +- src/NzbDrone.Core/Localization/Core/el.json | 2 +- src/NzbDrone.Core/Localization/Core/en.json | 2 +- src/NzbDrone.Core/Localization/Core/es.json | 2 +- src/NzbDrone.Core/Localization/Core/fi.json | 2 +- src/NzbDrone.Core/Localization/Core/fr.json | 2 +- src/NzbDrone.Core/Localization/Core/he.json | 2 +- src/NzbDrone.Core/Localization/Core/hi.json | 2 +- src/NzbDrone.Core/Localization/Core/hu.json | 2 +- src/NzbDrone.Core/Localization/Core/is.json | 2 +- src/NzbDrone.Core/Localization/Core/it.json | 2 +- src/NzbDrone.Core/Localization/Core/ja.json | 2 +- src/NzbDrone.Core/Localization/Core/ko.json | 2 +- src/NzbDrone.Core/Localization/Core/nl.json | 2 +- src/NzbDrone.Core/Localization/Core/pl.json | 2 +- src/NzbDrone.Core/Localization/Core/pt.json | 2 +- src/NzbDrone.Core/Localization/Core/pt_BR.json | 2 +- src/NzbDrone.Core/Localization/Core/ro.json | 2 +- src/NzbDrone.Core/Localization/Core/ru.json | 2 +- src/NzbDrone.Core/Localization/Core/sv.json | 2 +- src/NzbDrone.Core/Localization/Core/th.json | 2 +- src/NzbDrone.Core/Localization/Core/tr.json | 2 +- src/NzbDrone.Core/Localization/Core/uk.json | 2 +- src/NzbDrone.Core/Localization/Core/vi.json | 2 +- src/NzbDrone.Core/Localization/Core/zh_CN.json | 2 +- 32 files changed, 54 insertions(+), 33 deletions(-) diff --git a/src/NzbDrone.Core.Test/HealthCheck/Checks/DownloadClientRootFolderCheckFixture.cs b/src/NzbDrone.Core.Test/HealthCheck/Checks/DownloadClientRootFolderCheckFixture.cs index f3e826fd6..7da5fac02 100644 --- a/src/NzbDrone.Core.Test/HealthCheck/Checks/DownloadClientRootFolderCheckFixture.cs +++ b/src/NzbDrone.Core.Test/HealthCheck/Checks/DownloadClientRootFolderCheckFixture.cs @@ -76,6 +76,19 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks Subject.Check().ShouldBeWarning(wikiFragment: "downloads-in-root-folder"); } + [Test] + public void should_return_warning_if_downloading_inside_root_folder() + { + var rootFolderPath = "c:\\Test".AsOsAgnostic(); + var downloadRootPath = "c:\\Test\\Downloads".AsOsAgnostic(); + + GivenRootFolder(rootFolderPath); + + _clientStatus.OutputRootFolders = new List { new (downloadRootPath) }; + + Subject.Check().ShouldBeWarning(); + } + [Test] public void should_return_ok_if_not_downloading_to_root_folder() { @@ -87,7 +100,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks } [Test] - [TestCaseSource("DownloadClientExceptions")] + [TestCaseSource(nameof(DownloadClientExceptions))] public void should_return_ok_if_client_throws_downloadclientexception(Exception ex) { _downloadClient.Setup(s => s.GetStatus()) diff --git a/src/NzbDrone.Core/HealthCheck/Checks/DownloadClientRootFolderCheck.cs b/src/NzbDrone.Core/HealthCheck/Checks/DownloadClientRootFolderCheck.cs index d001c03bf..d4d44eb7f 100644 --- a/src/NzbDrone.Core/HealthCheck/Checks/DownloadClientRootFolderCheck.cs +++ b/src/NzbDrone.Core/HealthCheck/Checks/DownloadClientRootFolderCheck.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Net.Http; using NLog; @@ -48,11 +49,18 @@ namespace NzbDrone.Core.HealthCheck.Checks try { var status = client.GetStatus(); - var folders = status.OutputRootFolders.Where(folder => rootFolders.Any(r => r.Path.PathEquals(folder.FullPath))); + var folders = rootFolders.Where(r => status.OutputRootFolders.Any(folder => r.Path.PathEquals(folder.FullPath) || r.Path.IsParentPath(folder.FullPath))); foreach (var folder in folders) { - return new HealthCheck(GetType(), HealthCheckResult.Warning, string.Format(_localizationService.GetLocalizedString("DownloadClientCheckDownloadingToRoot"), client.Definition.Name, folder.FullPath), "#downloads-in-root-folder"); + return new HealthCheck(GetType(), + HealthCheckResult.Warning, + _localizationService.GetLocalizedString("DownloadClientRootFolderHealthCheckMessage", new Dictionary + { + { "downloadClientName", client.Definition.Name }, + { "rootFolderPath", folder.Path } + }), + "#downloads-in-root-folder"); } } catch (DownloadClientException ex) diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 5ad2cc4ea..276ff036c 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -595,7 +595,7 @@ "ReplaceWithDash": "استبدل بـ داش", "AppDataLocationHealthCheckMessage": "لن يكون التحديث ممكنًا لمنع حذف AppData عند التحديث", "ColonReplacement": "استبدال القولون", - "DownloadClientCheckDownloadingToRoot": "يقوم برنامج التنزيل {0} بوضع التنزيلات في المجلد الجذر {1}. يجب ألا تقوم بالتنزيل إلى مجلد جذر.", + "DownloadClientRootFolderHealthCheckMessage": "يقوم برنامج التنزيل {downloadClientName} بوضع التنزيلات في المجلد الجذر {rootFolderPath}. يجب ألا تقوم بالتنزيل إلى مجلد جذر.", "Disabled": "معاق", "DownloadClientCheckNoneAvailableMessage": "لا يوجد عميل تنزيل متاح", "DownloadClientCheckUnableToCommunicateMessage": "تعذر الاتصال بـ {0}.", diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index 36db88c56..b2316ac09 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -590,7 +590,7 @@ "AppDataLocationHealthCheckMessage": "Актуализирането няма да е възможно, за да се предотврати изтриването на AppData при актуализация", "ColonReplacement": "Подмяна на дебелото черво", "Disabled": "хора с увреждания", - "DownloadClientCheckDownloadingToRoot": "Клиентът за изтегляне {0} поставя изтеглянията в основната папка {1}. Не трябва да изтегляте в основна папка.", + "DownloadClientRootFolderHealthCheckMessage": "Клиентът за изтегляне {downloadClientName} поставя изтеглянията в основната папка {rootFolderPath}. Не трябва да изтегляте в основна папка.", "DownloadClientCheckNoneAvailableMessage": "Няма наличен клиент за изтегляне", "DownloadClientStatusCheckAllClientMessage": "Всички клиенти за изтегляне са недостъпни поради неуспехи", "ImportListStatusCheckAllClientMessage": "Всички списъци са недостъпни поради неуспехи", diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 504f4d43c..9c7098bb2 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -637,7 +637,7 @@ "AppDataLocationHealthCheckMessage": "No es podrà actualitzar per a evitar que s'eliminin AppData a l'actualització", "ColonReplacement": "Substitució de dos punts", "Disabled": "Desactivat", - "DownloadClientCheckDownloadingToRoot": "El client de baixada {0} col·loca les baixades a la carpeta arrel {1}. No s'hauria de baixar a una carpeta arrel.", + "DownloadClientRootFolderHealthCheckMessage": "El client de baixada {downloadClientName} col·loca les baixades a la carpeta arrel {rootFolderPath}. No s'hauria de baixar a una carpeta arrel.", "DownloadClientCheckNoneAvailableMessage": "No hi ha cap client de baixada disponible", "DownloadClientCheckUnableToCommunicateMessage": "No es pot comunicar amb {0}.", "ProxyCheckBadRequestMessage": "No s'ha pogut provar el servidor intermediari. Codi d'estat: {0}", diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index ff6c2c16f..c184cd978 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -590,7 +590,7 @@ "AppDataLocationHealthCheckMessage": "Aktualizace nebude možná, aby se zabránilo odstranění AppData při aktualizaci", "ColonReplacement": "Nahrazení dvojtečky", "Disabled": "Zakázáno", - "DownloadClientCheckDownloadingToRoot": "Stahovací klient {0} umístí stažené soubory do kořenové složky {1}. Neměli byste stahovat do kořenové složky.", + "DownloadClientRootFolderHealthCheckMessage": "Stahovací klient {downloadClientName} umístí stažené soubory do kořenové složky {rootFolderPath}. Neměli byste stahovat do kořenové složky.", "DownloadClientCheckNoneAvailableMessage": "Není k dispozici žádný klient pro stahování", "DownloadClientCheckUnableToCommunicateMessage": "S uživatelem {0} nelze komunikovat.", "DownloadClientStatusCheckSingleClientMessage": "Stahování klientů není k dispozici z důvodu selhání: {0}", diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index ada9bc159..ebe0fb7be 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -597,7 +597,7 @@ "AppDataLocationHealthCheckMessage": "Opdatering vil ikke være muligt for at undgå at slette AppData under opdatering", "ColonReplacement": "Udskiftning af kolon", "Disabled": "deaktiveret", - "DownloadClientCheckDownloadingToRoot": "Download klient {0} placerer downloads i rodmappen {1}. Du skal ikke downloade til en rodmappe.", + "DownloadClientRootFolderHealthCheckMessage": "Download klient {downloadClientName} placerer downloads i rodmappen {rootFolderPath}. Du skal ikke downloade til en rodmappe.", "DownloadClientCheckNoneAvailableMessage": "Ingen download klient tilgængelig", "DownloadClientCheckUnableToCommunicateMessage": "Ude af stand til at kommunikere med {0}.", "DownloadClientStatusCheckAllClientMessage": "Alle download klienter er utilgængelige på grund af fejl", diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index e2fceb7b2..17b53fad5 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -852,7 +852,7 @@ "AppDataLocationHealthCheckMessage": "Ein Update ist nicht möglich, um das Löschen von AppData beim Update zu verhindern", "ColonReplacement": "Doppelpunkt-Ersatz", "Disabled": "Deaktiviert", - "DownloadClientCheckDownloadingToRoot": "Download-Client {0} legt Downloads im Stammordner {1} ab. Sie sollten nicht in einen Stammordner herunterladen.", + "DownloadClientRootFolderHealthCheckMessage": "Download-Client {downloadClientName} legt Downloads im Stammordner {rootFolderPath} ab. Sie sollten nicht in einen Stammordner herunterladen.", "DownloadClientCheckNoneAvailableMessage": "Kein Download Client verfügbar", "DownloadClientCheckUnableToCommunicateMessage": "Kommunikation mit {0} nicht möglich.", "DownloadClientStatusCheckAllClientMessage": "Alle Download Clients sind aufgrund von Fehlern nicht verfügbar", diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index d1bed1f99..47363001b 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -873,7 +873,7 @@ "AppDataLocationHealthCheckMessage": "Η ενημέρωση δεν θα είναι δυνατή για να αποτραπεί η διαγραφή των δεδομένων εφαρμογής κατά την ενημέρωση", "ColonReplacement": "Αντικατάσταση παχέος εντέρου", "Disabled": "άτομα με ειδικές ανάγκες", - "DownloadClientCheckDownloadingToRoot": "Λήψη προγράμματος-πελάτη {0} τοποθετεί λήψεις στον ριζικό φάκελο {1}. Δεν πρέπει να κάνετε λήψη σε έναν ριζικό φάκελο.", + "DownloadClientRootFolderHealthCheckMessage": "Λήψη προγράμματος-πελάτη {downloadClientName} τοποθετεί λήψεις στον ριζικό φάκελο {rootFolderPath}. Δεν πρέπει να κάνετε λήψη σε έναν ριζικό φάκελο.", "DownloadClientCheckUnableToCommunicateMessage": "Αδύνατο να επικοινωνήσει με {0}.", "DownloadClientStatusCheckAllClientMessage": "Όλα τα προγράμματα λήψης είναι μη διαθέσιμα λόγων αποτυχιών", "ImportListStatusCheckAllClientMessage": "Όλες οι λίστες δεν είναι διαθέσιμες λόγω αστοχιών", diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 35b35839e..2c67fc1ed 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -376,7 +376,6 @@ "DoneEditingGroups": "Done Editing Groups", "DownloadClient": "Download Client", "DownloadClientAriaSettingsDirectoryHelpText": "Optional location to put downloads in, leave blank to use the default Aria2 location", - "DownloadClientCheckDownloadingToRoot": "Download client {0} places downloads in the root folder {1}. You should not download to a root folder.", "DownloadClientCheckNoneAvailableMessage": "No download client is available", "DownloadClientCheckUnableToCommunicateMessage": "Unable to communicate with {0}.", "DownloadClientDelugeSettingsDirectory": "Download Directory", @@ -387,6 +386,7 @@ "DownloadClientQbittorrentSettingsContentLayout": "Content Layout", "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Whether to use qBittorrent's configured content layout, the original layout from the torrent or always create a subfolder (qBittorrent 4.3.2+)", "DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Download client {0} is set to remove completed downloads. This can result in downloads being removed from your client before {1} can import them.", + "DownloadClientRootFolderHealthCheckMessage": "Download client {downloadClientName} places downloads in the root folder {rootFolderPath}. You should not download to a root folder.", "DownloadClientSettings": "Download Client Settings", "DownloadClientSettingsOlderPriority": "Older Priority", "DownloadClientSettingsOlderPriorityAlbumHelpText": "Priority to use when grabbing albums released over 14 days ago", diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index f062a3f92..9db5c4a91 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -622,7 +622,7 @@ "EnableRssHelpText": "Se utilizará cuando {appName} busque periódicamente publicaciones a través de la sincronización por RSS", "HiddenClickToShow": "Oculto, pulsa para mostrar", "Disabled": "Deshabilitado", - "DownloadClientCheckDownloadingToRoot": "El cliente de descargas {0} coloca las descargas en la carpeta raíz {1}. No debe descargar a una carpeta raíz.", + "DownloadClientRootFolderHealthCheckMessage": "El cliente de descargas {downloadClientName} coloca las descargas en la carpeta raíz {rootFolderPath}. No debe descargar a una carpeta raíz.", "DownloadClientStatusCheckAllClientMessage": "Los clientes de descargas no están disponibles debido a errores", "DownloadClientStatusCheckSingleClientMessage": "Clientes de descargas no disponibles debido a errores: {0}", "ImportListStatusCheckAllClientMessage": "Las listas no están disponibles debido a errores", diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index e8936b8c1..88537f93e 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -894,7 +894,7 @@ "DeleteCustomFormat": "Poista mukautettu muoto", "DeleteCustomFormatMessageText": "Haluatko varmasti poistaa mukautetun muodon \"{name}\"?", "Disabled": "Ei käytössä", - "DownloadClientCheckDownloadingToRoot": "Latauspalvelu {0} tallentaa lataukset juurikansioon \"{1}\", mutta niitä ei tulisi tallentaa sinne.", + "DownloadClientRootFolderHealthCheckMessage": "Latauspalvelu {downloadClientName} tallentaa lataukset juurikansioon \"{rootFolderPath}\", mutta niitä ei tulisi tallentaa sinne.", "DownloadClientStatusCheckAllClientMessage": "Latauspalveluita ei ole ongelmien vuoksi käytettävissä", "GroupInformation": "Ryhmän tiedot", "MinimumCustomFormatScore": "Mukautetun muodon vähimmäispisteytys", diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index c1445b2b8..a3b29285c 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -697,7 +697,7 @@ "AppDataLocationHealthCheckMessage": "La mise à jour ne sera pas possible afin empêcher la suppression de AppData lors de la mise à jour", "ColonReplacement": "Remplacement pour le « deux-points »", "Disabled": "Désactivé", - "DownloadClientCheckDownloadingToRoot": "Le client de téléchargement {0} place les téléchargements dans le dossier racine {1}. Vous ne devez pas télécharger dans un dossier racine.", + "DownloadClientRootFolderHealthCheckMessage": "Le client de téléchargement {downloadClientName} place les téléchargements dans le dossier racine {rootFolderPath}. Vous ne devez pas télécharger dans un dossier racine.", "DownloadClientCheckNoneAvailableMessage": "Aucun client de téléchargement n'est disponible", "DownloadClientCheckUnableToCommunicateMessage": "Impossible de communiquer avec {0}.", "DownloadClientStatusCheckAllClientMessage": "Aucun client de téléchargement n'est disponible en raison d'échecs", diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index 5a5885200..04a74c103 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -614,7 +614,7 @@ "IndexerSearchCheckNoInteractiveMessage": "אין אינדקסים זמינים כאשר חיפוש אינטראקטיבי מופעל, {appName} לא תספק תוצאות חיפוש אינטראקטיביות", "RemotePathMappingCheckFolderPermissions": "ראדארר יכול לראות אבל לא לגשת לסרטים שירדו {0}. ככל הנראה בעיית הרשאות.", "AppDataLocationHealthCheckMessage": "לא ניתן יהיה לעדכן את מחיקת AppData בעדכון", - "DownloadClientCheckDownloadingToRoot": "הורד לקוח {0} ממקם הורדות בתיקיית הבסיס {1}. אתה לא צריך להוריד לתיקיית שורש.", + "DownloadClientRootFolderHealthCheckMessage": "הורד לקוח {downloadClientName} ממקם הורדות בתיקיית הבסיס {rootFolderPath}. אתה לא צריך להוריד לתיקיית שורש.", "DownloadClientCheckNoneAvailableMessage": "אין לקוח להורדה זמין", "DownloadClientCheckUnableToCommunicateMessage": "לא ניתן לתקשר עם {0}.", "DownloadClientStatusCheckAllClientMessage": "כל לקוחות ההורדה אינם זמינים עקב כשלים", diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index bf15aee60..67f74f90f 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -596,7 +596,7 @@ "AppDataLocationHealthCheckMessage": "अद्यतन पर अद्यतन AppData को रोकने के लिए अद्यतन करना संभव नहीं होगा", "ColonReplacement": "कोलन रिप्लेसमेंट", "Disabled": "विकलांग", - "DownloadClientCheckDownloadingToRoot": "डाउनलोड क्लाइंट {0} रूट फ़ोल्डर में डाउनलोड करता है {1}। आपको रूट फ़ोल्डर में डाउनलोड नहीं करना चाहिए।", + "DownloadClientRootFolderHealthCheckMessage": "डाउनलोड क्लाइंट {downloadClientName} रूट फ़ोल्डर में डाउनलोड करता है {rootFolderPath}। आपको रूट फ़ोल्डर में डाउनलोड नहीं करना चाहिए।", "DownloadClientCheckNoneAvailableMessage": "कोई डाउनलोड क्लाइंट उपलब्ध नहीं है", "DownloadClientCheckUnableToCommunicateMessage": "{0} के साथ संवाद करने में असमर्थ।", "DownloadClientStatusCheckSingleClientMessage": "विफलताओं के कारण अनुपलब्ध ग्राहक डाउनलोड करें: {0}", diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index 58c4efa7f..b7c150824 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -880,7 +880,7 @@ "AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges az alkalmazás adatok törlése nélkül", "ColonReplacement": "Kettőspont Helyettesítés", "Disabled": "Tiltva", - "DownloadClientCheckDownloadingToRoot": "A Letöltőkliens {0} a letöltéseket a gyökérmappába helyezi {1}. Nem szabad letölteni egy gyökérmappába.", + "DownloadClientRootFolderHealthCheckMessage": "A Letöltőkliens {downloadClientName} a letöltéseket a gyökérmappába helyezi {rootFolderPath}. Nem szabad letölteni egy gyökérmappába.", "DownloadClientCheckNoneAvailableMessage": "Nem található letöltési kliens", "DownloadClientCheckUnableToCommunicateMessage": "Nem lehet kommunikálni a következővel: {0}.", "DownloadClientStatusCheckAllClientMessage": "Az összes letöltőkliens elérhetetlen, hiba miatt", diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index c6e686ea2..09291ef88 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -604,7 +604,7 @@ "UpdateCheckUINotWritableMessage": "Ekki er hægt að setja uppfærslu vegna þess að notendamöppan '{0}' er ekki skrifuð af notandanum '{1}'.", "AppDataLocationHealthCheckMessage": "Uppfærsla verður ekki möguleg til að koma í veg fyrir að AppData sé eytt við uppfærslu", "ColonReplacement": "Skipt um ristil", - "DownloadClientCheckDownloadingToRoot": "Sæktu viðskiptavinur {0} setur niðurhal í rótarmöppuna {1}. Þú ættir ekki að hlaða niður í rótarmöppu.", + "DownloadClientRootFolderHealthCheckMessage": "Sæktu viðskiptavinur {downloadClientName} setur niðurhal í rótarmöppuna {rootFolderPath}. Þú ættir ekki að hlaða niður í rótarmöppu.", "DownloadClientCheckNoneAvailableMessage": "Enginn niðurhalsþjónn er í boði", "DownloadClientCheckUnableToCommunicateMessage": "Ekki er hægt að eiga samskipti við {0}.", "DownloadClientStatusCheckAllClientMessage": "Allir viðskiptavinir sem hlaða niður eru ekki tiltækir vegna bilana", diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index e7758d439..97eae932a 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -701,7 +701,7 @@ "AppDataLocationHealthCheckMessage": "L'aggiornamento non sarà possibile per evitare la cancellazione di AppData durante l'aggiornamento", "ColonReplacement": "Sostituzione Due Punti", "Disabled": "Disabilitato", - "DownloadClientCheckDownloadingToRoot": "Il client di download {0} colloca i download nella cartella radice {1}. Non dovresti scaricare in una cartella radice.", + "DownloadClientRootFolderHealthCheckMessage": "Il client di download {downloadClientName} colloca i download nella cartella radice {rootFolderPath}. Non dovresti scaricare in una cartella radice.", "DownloadClientCheckNoneAvailableMessage": "Non è disponibile nessun client di download", "DownloadClientCheckUnableToCommunicateMessage": "Impossibile comunicare con {0}.", "DownloadClientStatusCheckAllClientMessage": "Nessun client di download è disponibile a causa di errori", diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index 345ca116e..fe2555e2f 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -586,7 +586,7 @@ "MaintenanceRelease": "メンテナンスリリース:バグ修正およびその他の改善。詳細については、Githubのコミット履歴を参照してください", "TheArtistFolderStrongpathstrongAndAllOfItsContentWillBeDeleted": "ムービーフォルダ「{0}」とそのすべてのコンテンツが削除されます。", "AppDataLocationHealthCheckMessage": "更新時にAppDataが削除されないように更新することはできません", - "DownloadClientCheckDownloadingToRoot": "ダウンロードクライアント{0}は、ダウンロードをルートフォルダ{1}に配置します。ルートフォルダにダウンロードしないでください。", + "DownloadClientRootFolderHealthCheckMessage": "ダウンロードクライアント{downloadClientName}は、ダウンロードをルートフォルダ{rootFolderPath}に配置します。ルートフォルダにダウンロードしないでください。", "DownloadClientCheckNoneAvailableMessage": "ダウンロードクライアントは利用できません", "HiddenClickToShow": "非表示、クリックして表示", "ImportListStatusCheckAllClientMessage": "障害のため、すべてのリストを利用できません", diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index bed47dad8..1ce9c02f0 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -586,7 +586,7 @@ "MaintenanceRelease": "유지 관리 출시 : 버그 수정 및 기타 개선. 자세한 내용은 Github 커밋 내역을 참조하십시오.", "TheArtistFolderStrongpathstrongAndAllOfItsContentWillBeDeleted": "동영상 폴더 '{0}' 및 모든 콘텐츠가 삭제됩니다.", "Disabled": "비활성화됨", - "DownloadClientCheckDownloadingToRoot": "다운로드 클라이언트 {0} 은(는) 루트 폴더 {1}에 다운로드를 저장합니다. 루트 폴더에 다운로드해서는 안됩니다.", + "DownloadClientRootFolderHealthCheckMessage": "다운로드 클라이언트 {downloadClientName} 은(는) 루트 폴더 {rootFolderPath}에 다운로드를 저장합니다. 루트 폴더에 다운로드해서는 안됩니다.", "DownloadClientCheckNoneAvailableMessage": "사용 가능한 다운로드 클라이언트가 없습니다.", "DownloadClientStatusCheckSingleClientMessage": "실패로 인해 다운 불러올 수 없는 클라이언트 : {0}", "HiddenClickToShow": "숨김, 클릭하여 표시", diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index 24f137e4d..77559467d 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -629,7 +629,7 @@ "ProxyCheckResolveIpMessage": "Achterhalen van het IP-adres voor de geconfigureerde proxy host {0} is mislukt", "RemotePathMappingCheckBadDockerPath": "U gebruikt docker; downloadclient {0} plaatst downloads in {1} maar dit is geen geldig {2}-pad. Controleer uw externe padtoewijzingen en download clientinstellingen.", "ShownClickToHide": "Getoond, klik om te verbergen", - "DownloadClientCheckDownloadingToRoot": "Downloadclient {0} plaatst downloads in de hoofdmap {1}. U mag niet naar een hoofdmap downloaden.", + "DownloadClientRootFolderHealthCheckMessage": "Downloadclient {downloadClientName} plaatst downloads in de hoofdmap {rootFolderPath}. U mag niet naar een hoofdmap downloaden.", "DownloadClientCheckUnableToCommunicateMessage": "Niet in staat om te communiceren met {0}.", "DownloadClientStatusCheckSingleClientMessage": "Downloaders onbeschikbaar wegens fouten: {0}", "IndexerRssHealthCheckNoIndexers": "Geen indexeerders beschikbaar met \"RSS Synchronisatie\" ingeschakeld, {appName} zal niet automatisch nieuwe uitgaves ophalen", diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index 67fcc1a37..fe56245e9 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -627,7 +627,7 @@ "UpdateCheckUINotWritableMessage": "Nie można zainstalować aktualizacji, ponieważ użytkownik „{1}” nie ma prawa zapisu w folderze interfejsu użytkownika „{0}”.", "AppDataLocationHealthCheckMessage": "Aktualizacja nie będzie możliwa w celu uniknięcia usunięcia danych aplikacji", "Disabled": "Wyłączone", - "DownloadClientCheckDownloadingToRoot": "Klient pobierania {0} umieszcza pliki do pobrania w folderze głównym {1}. Nie należy pobierać do folderu głównego.", + "DownloadClientRootFolderHealthCheckMessage": "Klient pobierania {downloadClientName} umieszcza pliki do pobrania w folderze głównym {rootFolderPath}. Nie należy pobierać do folderu głównego.", "DownloadClientCheckNoneAvailableMessage": "Żaden klient pobierania nie jest dostępny", "DownloadClientCheckUnableToCommunicateMessage": "Nie można skomunikować się z {0}.", "DownloadClientStatusCheckAllClientMessage": "Wszyscy klienci pobierania są niedostępni z powodu błędów", diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index becbfd941..1e8cc00ec 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -699,7 +699,7 @@ "AppDataLocationHealthCheckMessage": "Não foi possível actualizar para prevenir apagar a AppData durante a actualização", "ColonReplacement": "Substituição de dois-pontos", "Disabled": "Desativado", - "DownloadClientCheckDownloadingToRoot": "O cliente {0} coloca as transferências na pasta raiz {1}. Não transfira para a pasta raiz.", + "DownloadClientRootFolderHealthCheckMessage": "O cliente {downloadClientName} coloca as transferências na pasta raiz {rootFolderPath}. Não transfira para a pasta raiz.", "DownloadClientCheckNoneAvailableMessage": "Nenhum cliente de transferências disponível", "DownloadClientCheckUnableToCommunicateMessage": "Não é possível ligar-se a {0}.", "DownloadClientStatusCheckSingleClientMessage": "Clientes de transferências indisponíveis devido a falhas: {0}", diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index 36ecd41ae..f621f6eb4 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -880,7 +880,7 @@ "DashOrSpaceDashDependingOnName": "Traço ou Espaço e Traço, dependendo do nome", "DeleteFormat": "Excluir Formato", "Disabled": "Desabilitado", - "DownloadClientCheckDownloadingToRoot": "O cliente de download {0} coloca os downloads na pasta raiz {1}. Você não deve baixar para uma pasta raiz.", + "DownloadClientRootFolderHealthCheckMessage": "O cliente de download {downloadClientName} coloca os downloads na pasta raiz {rootFolderPath}. Você não deve baixar para uma pasta raiz.", "DownloadClientCheckNoneAvailableMessage": "Nenhum cliente de download está disponível", "DownloadClientCheckUnableToCommunicateMessage": "Não é possível se comunicar com {0}.", "DownloadClientStatusCheckAllClientMessage": "Todos os clientes de download estão indisponíveis devido a falhas", diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index c090a3fdf..5b67e821c 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -567,7 +567,7 @@ "CustomFormats": "Formate personalizate", "DeleteFormatMessageText": "Sigur doriți să ștergeți eticheta format {0}?", "Disabled": "Dezactivat", - "DownloadClientCheckDownloadingToRoot": "Clientul de descărcare {0} plasează descărcările în folderul rădăcină {1}. Nu trebuie să descărcați într-un folder rădăcină.", + "DownloadClientRootFolderHealthCheckMessage": "Clientul de descărcare {downloadClientName} plasează descărcările în folderul rădăcină {rootFolderPath}. Nu trebuie să descărcați într-un folder rădăcină.", "DownloadClientCheckNoneAvailableMessage": "Niciun client de descărcare disponibil", "DownloadPropersAndRepacksHelpTextWarning": "Utilizați formate personalizate pentru upgrade-uri automate la Propers / Repacks", "HiddenClickToShow": "Ascuns, faceți clic pentru afișare", diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index a687c92ca..6e79d1957 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -641,7 +641,7 @@ "CopyToClipboard": "Копировать в буфер обмена", "CouldntFindAnyResultsForTerm": "Не найдено результатов для '{0}'", "Disabled": "Выключено", - "DownloadClientCheckDownloadingToRoot": "Клиент загрузки {0} помещает загрузки в корневую папку {1}. Вы не должны загружать в корневую папку.", + "DownloadClientRootFolderHealthCheckMessage": "Клиент загрузки {downloadClientName} помещает загрузки в корневую папку {rootFolderPath}. Вы не должны загружать в корневую папку.", "DownloadClientCheckNoneAvailableMessage": "Ни один загрузчик не доступен", "DownloadClientCheckUnableToCommunicateMessage": "Невозможно связаться с {0}.", "DownloadClientStatusCheckAllClientMessage": "Все клиенты для скачивания недоступны из-за ошибок", diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index eab45967f..5d0e56896 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -751,7 +751,7 @@ "TheArtistFolderStrongpathstrongAndAllOfItsContentWillBeDeleted": "Författar-mappen {0} och allt dess innehåll kommer bli raderat.", "DeleteFormatMessageText": "Är du säker på att du vill ta bort formattaggen {0}?", "Disabled": "Inaktiverad", - "DownloadClientCheckDownloadingToRoot": "Ladda ner klient {0} placerar nedladdningar i rotmappen {1}. Du bör inte ladda ner till en rotmapp.", + "DownloadClientRootFolderHealthCheckMessage": "Ladda ner klient {downloadClientName} placerar nedladdningar i rotmappen {rootFolderPath}. Du bör inte ladda ner till en rotmapp.", "DownloadClientCheckNoneAvailableMessage": "Ingen nedladdningsklient tillgänglig", "DownloadClientCheckUnableToCommunicateMessage": "Kommunikation med {0} ej möjlig.", "DownloadClientStatusCheckAllClientMessage": "Samtliga nedladdningsklienter är otillgängliga på grund av misslyckade anslutningsförsök", diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index ce352f458..cf37ebcb5 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -589,7 +589,7 @@ "DeleteCustomFormat": "ลบรูปแบบที่กำหนดเอง", "DeleteCustomFormatMessageText": "แน่ใจไหมว่าต้องการลบตัวสร้างดัชนี \"{0}\"", "Disabled": "ปิดการใช้งาน", - "DownloadClientCheckDownloadingToRoot": "ดาวน์โหลดไคลเอนต์ {0} จะทำการดาวน์โหลดในโฟลเดอร์รูท {1} คุณไม่ควรดาวน์โหลดไปยังโฟลเดอร์รูท", + "DownloadClientRootFolderHealthCheckMessage": "ดาวน์โหลดไคลเอนต์ {downloadClientName} จะทำการดาวน์โหลดในโฟลเดอร์รูท {rootFolderPath} คุณไม่ควรดาวน์โหลดไปยังโฟลเดอร์รูท", "DownloadClientCheckNoneAvailableMessage": "ไม่มีไคลเอนต์ดาวน์โหลด", "DownloadClientCheckUnableToCommunicateMessage": "ไม่สามารถสื่อสารกับ {0}", "ExportCustomFormat": "ส่งออกรูปแบบที่กำหนดเอง", diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index c9c1b31f0..70ba2caab 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -586,7 +586,7 @@ "MaintenanceRelease": "Bakım Sürümü: hata düzeltmeleri ve diğer iyileştirmeler. Daha fazla ayrıntı için Github İşlem Geçmişine bakın", "Conditions": "Koşullar", "Disabled": "Devre dışı", - "DownloadClientCheckDownloadingToRoot": "İndirme istemcisi {0}, indirmeleri kök klasöre yerleştirir {1}. Bir kök klasöre indirmemelisiniz.", + "DownloadClientRootFolderHealthCheckMessage": "İndirme istemcisi {downloadClientName}, indirmeleri kök klasöre yerleştirir {rootFolderPath}. Bir kök klasöre indirmemelisiniz.", "DownloadClientCheckNoneAvailableMessage": "İndirme istemcisi yok", "DownloadClientCheckUnableToCommunicateMessage": "{0} ile iletişim kurulamıyor.", "ReplaceWithSpaceDashSpace": "Space Dash Space ile değiştirin", diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 55677cd4b..6cd0ed1f2 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -823,7 +823,7 @@ "UiSettingsSummary": "Параметри календаря, дати та кольору", "AllExpandedCollapseAll": "Закрити все", "CustomFormat": "Користувацький формат", - "DownloadClientCheckDownloadingToRoot": "Клієнт завантаження {0} розміщує завантаження в кореневій папці {1}. Ви не повинні завантажувати в кореневу папку.", + "DownloadClientRootFolderHealthCheckMessage": "Клієнт завантаження {downloadClientName} розміщує завантаження в кореневій папці {rootFolderPath}. Ви не повинні завантажувати в кореневу папку.", "FailedLoadingSearchResults": "Не вдалося завантажити результати пошуку, спробуйте ще.", "ExportCustomFormat": "Додати свій формат", "FailedToLoadQueue": "Не вдалося завантажити чергу", diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index 25450ad91..ebce4b4bb 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -565,7 +565,7 @@ "DeleteCustomFormatMessageText": "Bạn có chắc chắn muốn xóa trình lập chỉ mục '{0}' không?", "DeleteFormatMessageText": "Bạn có chắc chắn muốn xóa thẻ định dạng {0} không?", "Disabled": "Tàn tật", - "DownloadClientCheckDownloadingToRoot": "Tải xuống ứng dụng khách {0} đặt các bản tải xuống trong thư mục gốc {1}. Bạn không nên tải xuống thư mục gốc.", + "DownloadClientRootFolderHealthCheckMessage": "Tải xuống ứng dụng khách {downloadClientName} đặt các bản tải xuống trong thư mục gốc {rootFolderPath}. Bạn không nên tải xuống thư mục gốc.", "DownloadClientCheckUnableToCommunicateMessage": "Không thể giao tiếp với {0}.", "DownloadClientStatusCheckAllClientMessage": "Tất cả các ứng dụng khách tải xuống không khả dụng do lỗi", "DownloadClientStatusCheckSingleClientMessage": "Ứng dụng khách tải xuống không khả dụng do lỗi: {0}", diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index b02ae0ad6..a423a7c51 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -828,7 +828,7 @@ "CloneCustomFormat": "复制自定义格式", "Conditions": "条件", "CouldntFindAnyResultsForTerm": "未找到 '{0}' 的任何结果", - "DownloadClientCheckDownloadingToRoot": "下载客户端{0}将下载内容放在根文件夹{1}中。您不应该下载到根文件夹。", + "DownloadClientRootFolderHealthCheckMessage": "下载客户端{downloadClientName}将下载内容放在根文件夹{rootFolderPath}中。您不应该下载到根文件夹。", "DownloadClientCheckNoneAvailableMessage": "无可用的下载客户端", "DownloadClientCheckUnableToCommunicateMessage": "无法与 {0} 进行通讯。", "DownloadClientStatusCheckAllClientMessage": "下载客户端因故障均不可用", From 45e8ecffa07844f4d064dd59eb32f04d16cbf87f Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 30 Jan 2025 18:50:48 -0800 Subject: [PATCH 172/275] Fixed: Ignore special folders inside Blackhole watch folders (cherry picked from commit e79dd6f8e689617b1fd9f96c639ac300669112c5) --- .../Disk/FileSystemLookupService.cs | 33 +------------ src/NzbDrone.Common/Disk/SpecialFolders.cs | 47 +++++++++++++++++++ .../Blackhole/ScanWatchFolderFixture.cs | 17 +++++++ .../Clients/Blackhole/ScanWatchFolder.cs | 8 +++- 4 files changed, 72 insertions(+), 33 deletions(-) create mode 100644 src/NzbDrone.Common/Disk/SpecialFolders.cs diff --git a/src/NzbDrone.Common/Disk/FileSystemLookupService.cs b/src/NzbDrone.Common/Disk/FileSystemLookupService.cs index 427c4237e..be32f7638 100644 --- a/src/NzbDrone.Common/Disk/FileSystemLookupService.cs +++ b/src/NzbDrone.Common/Disk/FileSystemLookupService.cs @@ -17,37 +17,6 @@ namespace NzbDrone.Common.Disk private readonly IDiskProvider _diskProvider; private readonly IRuntimeInfo _runtimeInfo; - private readonly HashSet _setToRemove = new HashSet - { - // Windows - "boot", - "bootmgr", - "cache", - "msocache", - "recovery", - "$recycle.bin", - "recycler", - "system volume information", - "temporary internet files", - "windows", - - // OS X - ".fseventd", - ".spotlight", - ".trashes", - ".vol", - "cachedmessages", - "caches", - "trash", - - // QNAP - ".@__thumb", - - // Synology - "@eadir", - "#recycle" - }; - public FileSystemLookupService(IDiskProvider diskProvider, IRuntimeInfo runtimeInfo) { _diskProvider = diskProvider; @@ -158,7 +127,7 @@ namespace NzbDrone.Common.Disk }) .ToList(); - directories.RemoveAll(d => _setToRemove.Contains(d.Name.ToLowerInvariant())); + directories.RemoveAll(d => SpecialFolders.IsSpecialFolder(d.Name)); return directories; } diff --git a/src/NzbDrone.Common/Disk/SpecialFolders.cs b/src/NzbDrone.Common/Disk/SpecialFolders.cs new file mode 100644 index 000000000..b1339a7ed --- /dev/null +++ b/src/NzbDrone.Common/Disk/SpecialFolders.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; + +namespace NzbDrone.Common.Disk; + +public static class SpecialFolders +{ + private static readonly HashSet _specialFolders = new HashSet + { + // Windows + "boot", + "bootmgr", + "cache", + "msocache", + "recovery", + "$recycle.bin", + "recycler", + "system volume information", + "temporary internet files", + "windows", + + // OS X + ".fseventd", + ".spotlight", + ".trashes", + ".vol", + "cachedmessages", + "caches", + "trash", + + // QNAP + ".@__thumb", + + // Synology + "@eadir", + "#recycle" + }; + + public static bool IsSpecialFolder(string folder) + { + if (folder == null) + { + return false; + } + + return _specialFolders.Contains(folder.ToLowerInvariant()); + } +} diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/ScanWatchFolderFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/ScanWatchFolderFixture.cs index e1c56ba24..c5ea010c1 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/ScanWatchFolderFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/Blackhole/ScanWatchFolderFixture.cs @@ -99,5 +99,22 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole VerifySingleItem(DownloadItemStatus.Completed); } + + [TestCase("@eaDir")] + [TestCase(".@__thumb")] + public void GetItems_should_not_include_special_subfolders(string folderName) + { + GivenCompletedItem(); + + var targetDir = Path.Combine(_completedDownloadFolder, folderName); + + Mocker.GetMock() + .Setup(c => c.GetDirectories(_completedDownloadFolder)) + .Returns(new[] { targetDir }); + + var items = Subject.GetItems(_completedDownloadFolder, TimeSpan.FromMilliseconds(50)).ToList(); + + items.Count.Should().Be(0); + } } } diff --git a/src/NzbDrone.Core/Download/Clients/Blackhole/ScanWatchFolder.cs b/src/NzbDrone.Core/Download/Clients/Blackhole/ScanWatchFolder.cs index a6c5f8e12..547bb52e2 100644 --- a/src/NzbDrone.Core/Download/Clients/Blackhole/ScanWatchFolder.cs +++ b/src/NzbDrone.Core/Download/Clients/Blackhole/ScanWatchFolder.cs @@ -52,7 +52,13 @@ namespace NzbDrone.Core.Download.Clients.Blackhole { foreach (var folder in _diskScanService.FilterPaths(watchFolder, _diskProvider.GetDirectories(watchFolder))) { - var title = FileNameBuilder.CleanFileName(Path.GetFileName(folder)); + var folderName = Path.GetFileName(folder); + var title = FileNameBuilder.CleanFileName(folderName); + + if (SpecialFolders.IsSpecialFolder(folderName)) + { + continue; + } var newWatchItem = new WatchFolderItem { From 8e01ba5f21033f601fdfdcbf86ca798a295c0179 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 2 Feb 2025 12:48:53 +0200 Subject: [PATCH 173/275] Bump version to 2.9.6 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 870038455..2ff157690 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.9.5' + majorVersion: '2.9.6' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 5bf2ae9e6fdf91fd30f7db0eeded57e1a27b9a16 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 3 Feb 2025 14:11:43 +0200 Subject: [PATCH 174/275] Bump version to 2.10.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2ff157690..4d34b2684 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.9.6' + majorVersion: '2.10.0' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From e0e17a2ea766598e4c2f7eb70ed297f3cf9f5e86 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 6 Feb 2025 00:36:13 +0200 Subject: [PATCH 175/275] Building docs on ARM Co-authored-by: Mark McDowall (cherry picked from commit 147e732c9ca7a4c289d4f6386f1277650e11f15b) (cherry picked from commit dd900eb7395144b6d299f10fe9475d49d194664e) --- docs.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docs.sh b/docs.sh index a84de5fc0..a44dc90ce 100644 --- a/docs.sh +++ b/docs.sh @@ -1,13 +1,18 @@ +#!/bin/bash +set -e + +FRAMEWORK="net6.0" PLATFORM=$1 +ARCHITECTURE="${2:-x64}" if [ "$PLATFORM" = "Windows" ]; then - RUNTIME="win-x64" + RUNTIME="win-$ARCHITECTURE" elif [ "$PLATFORM" = "Linux" ]; then - RUNTIME="linux-x64" + RUNTIME="linux-$ARCHITECTURE" elif [ "$PLATFORM" = "Mac" ]; then - RUNTIME="osx-x64" + RUNTIME="osx-$ARCHITECTURE" else - echo "Platform must be provided as first arguement: Windows, Linux or Mac" + echo "Platform must be provided as first argument: Windows, Linux or Mac" exit 1 fi @@ -35,7 +40,7 @@ dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p dotnet new tool-manifest dotnet tool install --version 6.6.2 Swashbuckle.AspNetCore.Cli -dotnet tool run swagger tofile --output ./src/Lidarr.Api.V1/openapi.json "$outputFolder/net6.0/$RUNTIME/$application" v1 & +dotnet tool run swagger tofile --output ./src/Lidarr.Api.V1/openapi.json "$outputFolder/$FRAMEWORK/$RUNTIME/$application" v1 & sleep 45 From bc6417229e9da3d3cab418f92b46eec7a76168c2 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 5 Feb 2025 15:33:28 +0000 Subject: [PATCH 176/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Gallyam Biktashev Co-authored-by: Havok Dan Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/bg.json | 13 +++++++- src/NzbDrone.Core/Localization/Core/ca.json | 13 +++++++- src/NzbDrone.Core/Localization/Core/fi.json | 31 ++++++++++--------- .../Localization/Core/pt_BR.json | 4 ++- src/NzbDrone.Core/Localization/Core/ru.json | 4 +-- 5 files changed, 45 insertions(+), 20 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index b2316ac09..5a5654ada 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -818,5 +818,16 @@ "BlocklistAndSearch": "Списък за блокиране и търсене", "CustomFormatsSpecificationRegularExpression": "Регулярни изрази", "DownloadClientDelugeSettingsDirectoryHelpText": "Незадължителна локация за изтеглянията, оставете празно, за да използвате мястото по подразбиране на Deluge", - "Absolute": "Абсолютен" + "Absolute": "Абсолютен", + "Episode": "епизод", + "Library": "Библиотека", + "Artist": "изпълнител", + "Theme": "Тема", + "ReleaseProfile": "Профил за издания", + "TBA": "TBA", + "Label": "Етикет", + "Album": "албум", + "AutoAdd": "Автоматично добавяне", + "CatalogNumber": "каталожен номер", + "Discography": "дискография" } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 9c7098bb2..48699e2d2 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -973,5 +973,16 @@ "DownloadClientSettingsRecentPriority": "Prioritat del client", "AddNewArtist": "Afegeix Nou Artista", "AddNewItem": "Afegeix un nou element", - "AlbumCount": "Recompte d'àlbums" + "AlbumCount": "Recompte d'àlbums", + "NotificationsSettingsWebhookHeaders": "Capçaleres", + "NotificationsKodiSettingsDisplayTime": "Temps de visualització", + "TestParsing": "Prova anàlisi", + "PasswordConfirmation": "Confirmeu la contrasenya", + "NotificationsKodiSettingsGuiNotification": "Notificació d'interfície gràfica", + "PreviouslyInstalled": "Instal·lat anteriorment", + "ContinuingOnly": "Només en emissió", + "UpdateFiltered": "Actualitza filtrats", + "IndexerSettingsApiUrl": "URL de l'API", + "CountCustomFormatsSelected": "{count} format(s) personalitzat(s) seleccionat(s)", + "Install": "Instal·la" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 88537f93e..c7bf2dd2f 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -16,7 +16,7 @@ "SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "Tämän hakupalvelun kanssa ei voida käyttää RSS-syötettä.", "Logging": "Lokikirjaus", "ProxyBypassFilterHelpText": "Erota aliverkkotunnukset pilkuilla ja käytä jokerimerkkinä tähteä ja pistettä (*.). Esimerkki: www.esimerkki.fi,*.esimerkki.fi).", - "UnableToAddANewIndexerPleaseTryAgain": "Uuden tietolähteen lisäys epäonnistui. Yritä uudelleen.", + "UnableToAddANewIndexerPleaseTryAgain": "Virhe lisättäessä hakupalvelua. Yritä uudelleen.", "ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Saat lisätietoja yksittäisistä palveluista niiden ohessa olevilla painikkeilla.", "ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Saat lisätietoja yksittäisistä latauspalveluista painamalla niiden ohessa olevia lisätietopainikkeita.", "RssSyncIntervalHelpText": "Aikaväli minuutteina. Poista toiminto käytöstä asettamalla arvoksi 0, joka pysäyttää automaattisen julkaisukaappauksen täysin.", @@ -86,7 +86,7 @@ "Columns": "Sarakkeet", "Calendar": "Kalenteri", "CompletedDownloadHandling": "Valmistuneiden latausten käsittely", - "CloneIndexer": "Monista tietolähde", + "CloneIndexer": "Monista palvelu", "CancelPendingTask": "Haluatko varmasti perua odottavan tehtävän?", "CertificateValidation": "Varmenteen vahvistus", "CertificateValidationHelpText": "Määritä HTTPS-varmennevahvistuksen tiukkuus. Älä muta, jos et ymmärrä riskejä.", @@ -201,14 +201,14 @@ "TestAllClients": "Koesta latauspalvelut", "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Tämä koskee kaikkia hakupalveluita. Noudata niiden asettamia sääntöjä.", "TagAudioFilesWithMetadata": "Tallenna metatiedot äänitiedostoihin", - "TestAllIndexers": "Tietolähteiden testaus", + "TestAllIndexers": "Koesta palvelut", "UnableToLoadBackups": "Varmuuskopioinnin lataus epäonnistui", "UnableToLoadDownloadClients": "Latauspalveluiden lataus epäonnistui", "UnableToLoadGeneralSettings": "Yleisasetusten lataus epäonnistui", - "UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui", - "UnableToLoadIndexerOptions": "Tietolähdeasetusten lataus epäonnistui", + "UnableToLoadIndexers": "Virhe ladattaessa hakupalveluita.", + "UnableToLoadIndexerOptions": "Virhe ladattaessa hakupalveluasetuksia.", "UnableToLoadImportListExclusions": "Tuontilistapoikkeusten lataus epäonnistui", - "UnableToLoadHistory": "Historian lataus epäonnistui", + "UnableToLoadHistory": "Virhe ladattaessa historiaa.", "UnableToLoadTags": "Tunnisteiden lataus epäonnistui", "UnableToLoadQualityDefinitions": "Laatumääritysten lataus epäonnistui", "UpdateScriptPathHelpText": "Polku komentosarjaan, joka käsittelee puretun päivitystiedoston ja hoitaa asennuksen loppuosuuden.", @@ -520,7 +520,7 @@ "AddDelayProfile": "Lisää viiveprofiili", "Added": "Lisäysaika", "AddImportListExclusion": "Lisää tuontilistapoikkeus", - "AddIndexer": "Lisää tietolähde", + "AddIndexer": "Lisää hakupalvelu", "AddMetadataProfile": "Lisää metatietoprofiili", "AddNew": "Lisää uusi", "AddQualityProfile": "Lisää laatuprofiili", @@ -825,7 +825,7 @@ "AddAutoTagError": "Virhe lisättäessä automaattimerkintää. Yritä uudelleen.", "AddCondition": "Lisää ehto", "AddConditionError": "Virhe lisättäessä ehtoa. Yritä uudelleen.", - "AddIndexerImplementation": "Lisätään tietolähdettä – {implementationName}", + "AddIndexerImplementation": "Lisätään hakupalvelua – {implementationName}", "AddDownloadClientImplementation": "Lisätään latauspalvelua – {implementationName}", "AddImportList": "Lisää tuontilista", "AddAutoTag": "Lisää automaattinen tunniste", @@ -873,7 +873,7 @@ "ProxyCheckBadRequestMessage": "Välityspalvelintesti epäonnistui. Tilakoodi: {0}.", "QueueIsEmpty": "Jono on tyhjä", "RecentChanges": "Uusimmat muutokset", - "ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituille tietolähteille", + "ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituille hakupalveluille:", "RemotePathMappingCheckBadDockerPath": "Käytät Dockeria ja latauspalvelu {0} tallentaa lataukset kohteeseen \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista etäsijaintien kohdistukset ja latauspalvelun asetukset.", "DeleteSelectedIndexers": "Poista hakupalvelu(t)", "RemotePathMappingCheckFilesWrongOSPath": "Etälatauspalvelu {0} ilmoitti tiedostosijainniksi \"{1}\", mutta se ei ole kelvollinen {2}-sijainti. Tarkista määritetyt etäsijainnit ja latauspalvelun asetukset.", @@ -906,7 +906,7 @@ "Conditions": "Ehdot", "CountIndexersSelected": "{selectedCount} hakupalvelu(a) on valittu", "DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valittua latauspalvelua?", - "DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) tietoläh(teen/dettä)?", + "DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) hakupalvelu(n/a)?", "EditSelectedIndexers": "Muokkaa valittuja sisältölähteitä", "Negated": "Kielletty", "NegateHelpText": "Jos käytössä, ei mukautettua muotoa sovelleta tämän \"{0}\" -ehdon täsmätessä.", @@ -958,7 +958,7 @@ "EditConditionImplementation": "Muokataan ehtoa – {implementationName}", "EditConnectionImplementation": "Muokataan ilmoituspalvelua – {implementationName}", "EditAutoTag": "Muokkaa automaattimerkintää", - "ManageIndexers": "Hallitse tietolähteitä", + "ManageIndexers": "Palveluiden hallinta", "RenameFiles": "Nimeä tiedostot uudelleen", "Small": "Pieni", "RemoveSelectedItems": "Poista valitut kohteet", @@ -1100,10 +1100,10 @@ "RemoveSelectedItemBlocklistMessageText": "Haluatko varmasti poistaa valitut kohteet estolistalta?", "ResetDefinitions": "Palauta määritykset", "NotificationsSettingsUseSslHelpText": "Muodosta yhteys palveluun {serviceName} SSL-protokollan välityksellä.", - "ClickToChangeIndexerFlags": "Muuta tietolähteen lippuja painamalla tästä", + "ClickToChangeIndexerFlags": "Muuta hakupalvelun lippuja painamalla tästä", "CustomFormatsSpecificationFlag": "Lippu", - "SelectIndexerFlags": "Valitse tietolähteen liput", - "SetIndexerFlags": "Aseta tietolähteen liput", + "SelectIndexerFlags": "Valitse hakupalvelun liput", + "SetIndexerFlags": "Aseta hakupalvelun liput", "CustomFilter": "Mukautettu suodatin", "LabelIsRequired": "Nimi on pakollinen", "ImportList": "Tuontilista", @@ -1347,5 +1347,6 @@ "DelayProfileArtistTagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille esittäjille.", "Disambiguation": "Yksinkertaistaminen", "NotificationsTagsArtistHelpText": "Ilmoita vain vähintään yhdellä täsmäävällä tunnisteella merkityistä esittäjistä.", - "NotificationsSettingsWebhookHeaders": "Otsakkeet" + "NotificationsSettingsWebhookHeaders": "Otsakkeet", + "TracksLoadError": "Virhe ladattaessa kappaleita." } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index f621f6eb4..bc8215799 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -1347,5 +1347,7 @@ "PostImportCategory": "Categoria Pós-Importação", "DownloadClientSettingsOlderPriorityAlbumHelpText": "Prioridade para usar ao pegar álbuns lançados há mais de 14 dias", "DownloadClientSettingsRecentPriorityAlbumHelpText": "Prioridade de uso ao adquirir álbuns lançados nos últimos 14 dias", - "NotificationsSettingsWebhookHeaders": "Cabeçalhos" + "NotificationsSettingsWebhookHeaders": "Cabeçalhos", + "TracksLoadError": "Incapaz de carregar faixas", + "NoMediumInformation": "Nenhuma informação da mídia está disponível." } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index 6e79d1957..f65225d77 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -292,7 +292,7 @@ "DiskSpace": "Дисковое пространство", "DownloadClient": "Клиент загрузки", "DownloadClients": "Клиенты загрузки", - "DownloadClientSettings": "Настройки клиента загрузки", + "DownloadClientSettings": "Настройки загрузчика", "DownloadFailedCheckDownloadClientForMoreDetails": "Неудачное скачивание: подробности в программе для скачивания", "DownloadFailedInterp": "Неудачное скачивание: {0}", "Downloading": "Скачивается", @@ -641,7 +641,7 @@ "CopyToClipboard": "Копировать в буфер обмена", "CouldntFindAnyResultsForTerm": "Не найдено результатов для '{0}'", "Disabled": "Выключено", - "DownloadClientRootFolderHealthCheckMessage": "Клиент загрузки {downloadClientName} помещает загрузки в корневую папку {rootFolderPath}. Вы не должны загружать в корневую папку.", + "DownloadClientRootFolderHealthCheckMessage": "Загрузчик {downloadClientName} помещает файлы в корневую папку {rootFolderPath}. Вы не должны загружать в корневую папку.", "DownloadClientCheckNoneAvailableMessage": "Ни один загрузчик не доступен", "DownloadClientCheckUnableToCommunicateMessage": "Невозможно связаться с {0}.", "DownloadClientStatusCheckAllClientMessage": "Все клиенты для скачивания недоступны из-за ошибок", From d8222c066c04d5219a21a6e7f9f3571a67e8dcca Mon Sep 17 00:00:00 2001 From: Chaz Harris <16189570+Shadowalker125@users.noreply.github.com> Date: Sat, 15 Feb 2025 03:47:22 -0600 Subject: [PATCH 177/275] Bump devcontainer nodejs version to 20 (#5398) --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 6f027453c..d0fa03d5f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -6,7 +6,7 @@ "features": { "ghcr.io/devcontainers/features/node:1": { "nodeGypDependencies": true, - "version": "16", + "version": "20", "nvmVersion": "latest" } }, From 2b2fd5a175b0d23bba84c5caf2dddcbd7eba7731 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 16 Feb 2025 11:50:48 +0200 Subject: [PATCH 178/275] Fix download links for FileList when passkey contains spaces --- src/NzbDrone.Core/Indexers/FileList/FileListParser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/FileList/FileListParser.cs b/src/NzbDrone.Core/Indexers/FileList/FileListParser.cs index f29f22354..10ff2f160 100644 --- a/src/NzbDrone.Core/Indexers/FileList/FileListParser.cs +++ b/src/NzbDrone.Core/Indexers/FileList/FileListParser.cs @@ -77,7 +77,7 @@ namespace NzbDrone.Core.Indexers.FileList var url = new HttpUri(_settings.BaseUrl) .CombinePath("download.php") .AddQueryParam("id", torrentId) - .AddQueryParam("passkey", _settings.Passkey); + .AddQueryParam("passkey", _settings.Passkey.Trim()); return url.FullUri; } From 664b97249458478f8fe1df6ea115dc3dcd158de3 Mon Sep 17 00:00:00 2001 From: Chaz Harris <16189570+Shadowalker125@users.noreply.github.com> Date: Sun, 16 Feb 2025 13:03:41 -0600 Subject: [PATCH 179/275] Fixed: Custom Lists using only ArtistMusicBrainzId (#5399) When using a JSON list that consists of only MusicBrainzId's the list is being filtered. --- .../ImportLists/FetchAndParseImportListService.cs | 4 ++-- src/NzbDrone.Core/ImportLists/ImportListBase.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/ImportLists/FetchAndParseImportListService.cs b/src/NzbDrone.Core/ImportLists/FetchAndParseImportListService.cs index 382b76727..b029f50bf 100644 --- a/src/NzbDrone.Core/ImportLists/FetchAndParseImportListService.cs +++ b/src/NzbDrone.Core/ImportLists/FetchAndParseImportListService.cs @@ -86,7 +86,7 @@ namespace NzbDrone.Core.ImportLists Task.WaitAll(taskList.ToArray()); - result = result.DistinctBy(r => new { r.Artist, r.Album }).ToList(); + result = result.DistinctBy(r => new { r.Artist, r.Album, r.ArtistMusicBrainzId }).ToList(); _logger.Debug("Found {0} total reports from {1} lists", result.Count, importLists.Count); @@ -135,7 +135,7 @@ namespace NzbDrone.Core.ImportLists Task.WaitAll(taskList.ToArray()); - result = result.DistinctBy(r => new { r.Artist, r.Album }).ToList(); + result = result.DistinctBy(r => new { r.Artist, r.Album, r.ArtistMusicBrainzId }).ToList(); return result; } diff --git a/src/NzbDrone.Core/ImportLists/ImportListBase.cs b/src/NzbDrone.Core/ImportLists/ImportListBase.cs index 044d546c1..ec38f5081 100644 --- a/src/NzbDrone.Core/ImportLists/ImportListBase.cs +++ b/src/NzbDrone.Core/ImportLists/ImportListBase.cs @@ -64,7 +64,7 @@ namespace NzbDrone.Core.ImportLists protected virtual IList CleanupListItems(IEnumerable releases) { - var result = releases.DistinctBy(r => new { r.Artist, r.Album }).ToList(); + var result = releases.DistinctBy(r => new { r.Artist, r.Album, r.ArtistMusicBrainzId }).ToList(); result.ForEach(c => { From be115da1577ea98113e3417fe989db76b0b7824d Mon Sep 17 00:00:00 2001 From: Stevie Robinson Date: Wed, 19 Feb 2025 04:23:43 +0100 Subject: [PATCH 180/275] Fixed: Fallback to Instance Name for Discord notifications (cherry picked from commit b99e06acc0a3ecae2857d9225b35424c82c67a2b) --- .../Notifications/Discord/Discord.cs | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/NzbDrone.Core/Notifications/Discord/Discord.cs b/src/NzbDrone.Core/Notifications/Discord/Discord.cs index 41c0ae0d7..94714a4f0 100644 --- a/src/NzbDrone.Core/Notifications/Discord/Discord.cs +++ b/src/NzbDrone.Core/Notifications/Discord/Discord.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using FluentValidation.Results; using NzbDrone.Common.Extensions; +using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaCover; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Music; @@ -14,10 +15,12 @@ namespace NzbDrone.Core.Notifications.Discord public class Discord : NotificationBase { private readonly IDiscordProxy _proxy; + private readonly IConfigFileProvider _configFileProvider; - public Discord(IDiscordProxy proxy) + public Discord(IDiscordProxy proxy, IConfigFileProvider configFileProvider) { _proxy = proxy; + _configFileProvider = configFileProvider; } public override string Name => "Discord"; @@ -33,7 +36,7 @@ namespace NzbDrone.Core.Notifications.Discord { Author = new DiscordAuthor { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, IconUrl = "https://raw.githubusercontent.com/lidarr/Lidarr/develop/Logo/256.png" }, Url = $"https://musicbrainz.org/artist/{artist.ForeignArtistId}", @@ -138,7 +141,7 @@ namespace NzbDrone.Core.Notifications.Discord { Author = new DiscordAuthor { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, IconUrl = "https://raw.githubusercontent.com/lidarr/Lidarr/develop/Logo/256.png" }, Url = $"https://musicbrainz.org/artist/{artist.ForeignArtistId}", @@ -296,7 +299,7 @@ namespace NzbDrone.Core.Notifications.Discord { Author = new DiscordAuthor { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, IconUrl = "https://raw.githubusercontent.com/lidarr/Lidarr/develop/Logo/256.png" }, Title = healthCheck.Source.Name, @@ -319,7 +322,7 @@ namespace NzbDrone.Core.Notifications.Discord { Author = new DiscordAuthor { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, IconUrl = "https://raw.githubusercontent.com/Lidarr/Lidarr/develop/Logo/256.png" }, Title = "Health Issue Resolved: " + previousCheck.Source.Name, @@ -342,7 +345,7 @@ namespace NzbDrone.Core.Notifications.Discord { Author = new DiscordAuthor { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, IconUrl = "https://raw.githubusercontent.com/lidarr/Lidarr/develop/Logo/256.png" }, Title = TRACK_RETAGGED_TITLE, @@ -363,7 +366,7 @@ namespace NzbDrone.Core.Notifications.Discord { Author = new DiscordAuthor { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, IconUrl = "https://raw.githubusercontent.com/lidarr/Lidarr/develop/Logo/256.png" }, Description = message.Message, @@ -385,7 +388,7 @@ namespace NzbDrone.Core.Notifications.Discord { Author = new DiscordAuthor { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, IconUrl = "https://raw.githubusercontent.com/lidarr/Lidarr/develop/Logo/256.png" }, Description = message.Message, @@ -407,7 +410,7 @@ namespace NzbDrone.Core.Notifications.Discord { Author = new DiscordAuthor { - Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author, + Name = Settings.Author.IsNullOrWhiteSpace() ? _configFileProvider.InstanceName : Settings.Author, IconUrl = "https://raw.githubusercontent.com/lidarr/Lidarr/develop/Logo/256.png" }, Title = APPLICATION_UPDATE_TITLE, From ad12617694f7ff02ceec2c31bc30b36e1dadf432 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 16 Feb 2025 19:15:27 -0800 Subject: [PATCH 181/275] Cleanse console log messages (cherry picked from commit 609e964794e17343f63e1ecff3fef323e3d284ff) --- .../Instrumentation/CleansingClefLogLayout.cs | 21 +++++++++++++ .../CleansingConsoleLogLayout.cs | 26 ++++++++++++++++ ...neFileTarget.cs => CleansingFileTarget.cs} | 2 +- .../Instrumentation/NzbDroneLogger.cs | 30 +++++++++++-------- .../Instrumentation/ReconfigureLogging.cs | 8 ++--- 5 files changed, 68 insertions(+), 19 deletions(-) create mode 100644 src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs create mode 100644 src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs rename src/NzbDrone.Common/Instrumentation/{NzbDroneFileTarget.cs => CleansingFileTarget.cs} (87%) diff --git a/src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs b/src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs new file mode 100644 index 000000000..f110b96ac --- /dev/null +++ b/src/NzbDrone.Common/Instrumentation/CleansingClefLogLayout.cs @@ -0,0 +1,21 @@ +using System.Text; +using NLog; +using NLog.Layouts.ClefJsonLayout; +using NzbDrone.Common.EnvironmentInfo; + +namespace NzbDrone.Common.Instrumentation; + +public class CleansingClefLogLayout : CompactJsonLayout +{ + protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target) + { + base.RenderFormattedMessage(logEvent, target); + + if (RuntimeInfo.IsProduction) + { + var result = CleanseLogMessage.Cleanse(target.ToString()); + target.Clear(); + target.Append(result); + } + } +} diff --git a/src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs b/src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs new file mode 100644 index 000000000..f894a4df5 --- /dev/null +++ b/src/NzbDrone.Common/Instrumentation/CleansingConsoleLogLayout.cs @@ -0,0 +1,26 @@ +using System.Text; +using NLog; +using NLog.Layouts; +using NzbDrone.Common.EnvironmentInfo; + +namespace NzbDrone.Common.Instrumentation; + +public class CleansingConsoleLogLayout : SimpleLayout +{ + public CleansingConsoleLogLayout(string format) + : base(format) + { + } + + protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target) + { + base.RenderFormattedMessage(logEvent, target); + + if (RuntimeInfo.IsProduction) + { + var result = CleanseLogMessage.Cleanse(target.ToString()); + target.Clear(); + target.Append(result); + } + } +} diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs b/src/NzbDrone.Common/Instrumentation/CleansingFileTarget.cs similarity index 87% rename from src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs rename to src/NzbDrone.Common/Instrumentation/CleansingFileTarget.cs index 84658cf74..f74d1fca4 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneFileTarget.cs +++ b/src/NzbDrone.Common/Instrumentation/CleansingFileTarget.cs @@ -4,7 +4,7 @@ using NLog.Targets; namespace NzbDrone.Common.Instrumentation { - public class NzbDroneFileTarget : FileTarget + public class CleansingFileTarget : FileTarget { protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target) { diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs index bfb404e98..c33211019 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs +++ b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs @@ -3,7 +3,6 @@ using System.Diagnostics; using System.IO; using NLog; using NLog.Config; -using NLog.Layouts.ClefJsonLayout; using NLog.Targets; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; @@ -13,9 +12,11 @@ namespace NzbDrone.Common.Instrumentation { public static class NzbDroneLogger { - private const string FILE_LOG_LAYOUT = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; - public const string ConsoleLogLayout = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; - public static CompactJsonLayout ClefLogLayout = new CompactJsonLayout(); + private const string FileLogLayout = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; + private const string ConsoleFormat = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; + + private static readonly CleansingConsoleLogLayout CleansingConsoleLayout = new (ConsoleFormat); + private static readonly CleansingClefLogLayout ClefLogLayout = new (); private static bool _isConfigured; @@ -118,11 +119,7 @@ namespace NzbDrone.Common.Instrumentation ? formatEnumValue : ConsoleLogFormat.Standard; - coloredConsoleTarget.Layout = logFormat switch - { - ConsoleLogFormat.Clef => ClefLogLayout, - _ => ConsoleLogLayout - }; + ConfigureConsoleLayout(coloredConsoleTarget, logFormat); var loggingRule = new LoggingRule("*", level, coloredConsoleTarget); @@ -139,7 +136,7 @@ namespace NzbDrone.Common.Instrumentation private static void RegisterAppFile(IAppFolderInfo appFolderInfo, string name, string fileName, int maxArchiveFiles, LogLevel minLogLevel) { - var fileTarget = new NzbDroneFileTarget(); + var fileTarget = new CleansingFileTarget(); fileTarget.Name = name; fileTarget.FileName = Path.Combine(appFolderInfo.GetLogFolder(), fileName); @@ -152,7 +149,7 @@ namespace NzbDrone.Common.Instrumentation fileTarget.MaxArchiveFiles = maxArchiveFiles; fileTarget.EnableFileDelete = true; fileTarget.ArchiveNumbering = ArchiveNumberingMode.Rolling; - fileTarget.Layout = FILE_LOG_LAYOUT; + fileTarget.Layout = FileLogLayout; var loggingRule = new LoggingRule("*", minLogLevel, fileTarget); @@ -171,7 +168,7 @@ namespace NzbDrone.Common.Instrumentation fileTarget.ConcurrentWrites = false; fileTarget.ConcurrentWriteAttemptDelay = 50; fileTarget.ConcurrentWriteAttempts = 100; - fileTarget.Layout = FILE_LOG_LAYOUT; + fileTarget.Layout = FileLogLayout; var loggingRule = new LoggingRule("*", LogLevel.Trace, fileTarget); @@ -216,6 +213,15 @@ namespace NzbDrone.Common.Instrumentation { return GetLogger(obj.GetType()); } + + public static void ConfigureConsoleLayout(ColoredConsoleTarget target, ConsoleLogFormat format) + { + target.Layout = format switch + { + ConsoleLogFormat.Clef => NzbDroneLogger.ClefLogLayout, + _ => NzbDroneLogger.CleansingConsoleLayout + }; + } } public enum ConsoleLogFormat diff --git a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs index 1310255fd..d49bb06d7 100644 --- a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs +++ b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs @@ -95,7 +95,7 @@ namespace NzbDrone.Core.Instrumentation private void ReconfigureFile() { - foreach (var target in LogManager.Configuration.AllTargets.OfType()) + foreach (var target in LogManager.Configuration.AllTargets.OfType()) { target.MaxArchiveFiles = _configFileProvider.LogRotate; target.ArchiveAboveSize = _configFileProvider.LogSizeLimit.Megabytes(); @@ -120,11 +120,7 @@ namespace NzbDrone.Core.Instrumentation { var format = _configFileProvider.ConsoleLogFormat; - consoleTarget.Layout = format switch - { - ConsoleLogFormat.Clef => NzbDroneLogger.ClefLogLayout, - _ => NzbDroneLogger.ConsoleLogLayout - }; + NzbDroneLogger.ConfigureConsoleLayout(consoleTarget, format); } } From 36998abba0a45cb709b0bcfbfcc124cb8b7de193 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 19 Feb 2025 15:25:03 +0000 Subject: [PATCH 182/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Fixer Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_Hans/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/fi.json | 12 ++++++------ src/NzbDrone.Core/Localization/Core/zh_Hans.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index c7bf2dd2f..1497c82e6 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -197,7 +197,7 @@ "StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta", "SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Profiilia käytetään manuaalihakuun.", "Tags": "Tunnisteet", - "TestAll": "Kaikkien testaus", + "TestAll": "Koesta kaikki", "TestAllClients": "Koesta latauspalvelut", "ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Tämä koskee kaikkia hakupalveluita. Noudata niiden asettamia sääntöjä.", "TagAudioFilesWithMetadata": "Tallenna metatiedot äänitiedostoihin", @@ -351,7 +351,7 @@ "RestoreBackup": "Palauta varmuuskopio", "RetentionHelpText": "Vain Usenet: määritä rajoittamaton säilytys asettamalla arvoksi 0.", "RetryingDownloadOn": "Yritetään latausta uudelleen {date} klo {time}", - "TestAllLists": "Kaikkien listojen testaus", + "TestAllLists": "Koesta listat", "Time": "Aika", "TotalFileSize": "Kokonaistiedostokoko", "Track": "Valvo", @@ -781,7 +781,7 @@ "HideTracks": "Piilota kappaleet", "LatestAlbum": "Uusin albumi", "LatestAlbumData": "Valvo uusimpia ja tulevia albumeita", - "ManageTracks": "Kappaleiden hallinta", + "ManageTracks": "Hallitse kappaleita", "ManualDownload": "Manuaalinen lataus", "NewAlbums": "Uudet albumit", "NoneMonitoringOptionHelpText": "Älä valvo esittäjiä äläkä albumeita.", @@ -958,7 +958,7 @@ "EditConditionImplementation": "Muokataan ehtoa – {implementationName}", "EditConnectionImplementation": "Muokataan ilmoituspalvelua – {implementationName}", "EditAutoTag": "Muokkaa automaattimerkintää", - "ManageIndexers": "Palveluiden hallinta", + "ManageIndexers": "Hallitse palveluita", "RenameFiles": "Nimeä tiedostot uudelleen", "Small": "Pieni", "RemoveSelectedItems": "Poista valitut kohteet", @@ -1265,7 +1265,7 @@ "AddDelayProfileError": "Virhe lisättäessä viiveporofiilia. Yritä uudelleen.", "ImportListTagsHelpText": "Tunnisteet, joilla tältä tuontilistalta lisätyt kohteet merkitään.", "Min": "Pienin", - "Preferred": "Suosittu", + "Preferred": "Tavoite", "Max": "Suurin", "Today": "Tänään", "MappedNetworkDrivesWindowsService": "Yhdistetyt verkkoasemat eivät ole käytettävissä kun sovellus suoritetaan Windows-palveluna. Saat lisätietoja UKK:sta ({url}).", @@ -1289,7 +1289,7 @@ "InstallMajorVersionUpdateMessageLink": "Saat lisätietoja osoitteesta [{domain}]({url}).", "LogSizeLimit": "Lokin kokorajoitus", "LogSizeLimitHelpText": "Lokitiedoston enimmäiskoko ennen pakkausta. Oletusarvo on 1 Mt.", - "ManageCustomFormats": "Hallitse mukautettuja muotoja", + "ManageCustomFormats": "Hallitse muotoja", "ManageFormats": "Hallitse muotoja", "NoCustomFormatsFound": "Mukautettuja muotoja ei löytynyt", "NotificationsTelegramSettingsIncludeAppNameHelpText": "Ilmoitukset voidaan tarvittaessa erottaa muista sovelluksista lisäämällä niiden eteen \"{appName}\".", diff --git a/src/NzbDrone.Core/Localization/Core/zh_Hans.json b/src/NzbDrone.Core/Localization/Core/zh_Hans.json index 28374badf..032c8c738 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_Hans.json +++ b/src/NzbDrone.Core/Localization/Core/zh_Hans.json @@ -4,5 +4,5 @@ "Always": "总是", "Analytics": "分析", "Username": "用户名", - "Activity": "111" + "Activity": "活动" } From 261f30d268d401a852f8330c46f76392ec6e24e8 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 23 May 2024 06:42:16 -0700 Subject: [PATCH 183/275] New: Genres and Images for Webhooks and Notifiarr (cherry picked from commit fd3dd1ab7dc86cd9e231fa432cc8d2772d5a4bad) Closes #4832 --- .../Notifications/Notifiarr/Notifiarr.cs | 5 +- .../Notifications/Webhook/Webhook.cs | 5 +- .../Notifications/Webhook/WebhookAlbum.cs | 24 +++++---- .../Notifications/Webhook/WebhookArtist.cs | 5 +- .../Notifications/Webhook/WebhookBase.cs | 51 ++++++++++++++----- .../Notifications/Webhook/WebhookImage.cs | 18 +++++++ 6 files changed, 80 insertions(+), 28 deletions(-) create mode 100644 src/NzbDrone.Core/Notifications/Webhook/WebhookImage.cs diff --git a/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs b/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs index 3d5300de8..25ea84301 100644 --- a/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs +++ b/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using FluentValidation.Results; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; +using NzbDrone.Core.MediaCover; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Music; using NzbDrone.Core.Notifications.Webhook; @@ -13,8 +14,8 @@ namespace NzbDrone.Core.Notifications.Notifiarr { private readonly INotifiarrProxy _proxy; - public Notifiarr(INotifiarrProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService) - : base(configFileProvider, configService) + public Notifiarr(INotifiarrProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, IMapCoversToLocal mediaCoverService) + : base(configFileProvider, configService, mediaCoverService) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs b/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs index 9c0f1855b..0b78dcbec 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using FluentValidation.Results; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; +using NzbDrone.Core.MediaCover; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Music; using NzbDrone.Core.Validation; @@ -12,8 +13,8 @@ namespace NzbDrone.Core.Notifications.Webhook { private readonly IWebhookProxy _proxy; - public Webhook(IWebhookProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService) - : base(configFileProvider, configService) + public Webhook(IWebhookProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, IMapCoversToLocal mediaCoverService) + : base(configFileProvider, configService, mediaCoverService) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookAlbum.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookAlbum.cs index 11a324595..a9070245d 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookAlbum.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookAlbum.cs @@ -7,6 +7,17 @@ namespace NzbDrone.Core.Notifications.Webhook { public class WebhookAlbum { + public int Id { get; set; } + public string MBId { get; set; } + public string Title { get; set; } + public string Disambiguation { get; set; } + public string Overview { get; set; } + public string AlbumType { get; set; } + public List SecondaryAlbumTypes { get; set; } + public DateTime? ReleaseDate { get; set; } + public List Genres { get; set; } + public List Images { get; set; } + public WebhookAlbum() { } @@ -20,18 +31,9 @@ namespace NzbDrone.Core.Notifications.Webhook Overview = album.Overview; AlbumType = album.AlbumType; SecondaryAlbumTypes = album.SecondaryTypes.Select(x => x.Name).ToList(); - Genres = album.Genres; ReleaseDate = album.ReleaseDate; + Genres = album.Genres; + Images = album.Images.Select(i => new WebhookImage(i)).ToList(); } - - public int Id { get; set; } - public string MBId { get; set; } - public string Title { get; set; } - public string Disambiguation { get; set; } - public string Overview { get; set; } - public string AlbumType { get; set; } - public List SecondaryAlbumTypes { get; set; } - public List Genres { get; set; } - public DateTime? ReleaseDate { get; set; } } } diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookArtist.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookArtist.cs index 98acf34c0..e758df600 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookArtist.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookArtist.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using NzbDrone.Core.Music; namespace NzbDrone.Core.Notifications.Webhook @@ -13,6 +14,7 @@ namespace NzbDrone.Core.Notifications.Webhook public string Type { get; set; } public string Overview { get; set; } public List Genres { get; set; } + public List Images { get; set; } public WebhookArtist() { @@ -24,10 +26,11 @@ namespace NzbDrone.Core.Notifications.Webhook Name = artist.Name; Disambiguation = artist.Metadata.Value.Disambiguation; Path = artist.Path; + MBId = artist.Metadata.Value.ForeignArtistId; Type = artist.Metadata.Value.Type; Overview = artist.Metadata.Value.Overview; Genres = artist.Metadata.Value.Genres; - MBId = artist.Metadata.Value.ForeignArtistId; + Images = artist.Metadata.Value.Images.Select(i => new WebhookImage(i)).ToList(); } } } diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs index 9c84efb3e..6d1013194 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using NzbDrone.Core.Configuration; +using NzbDrone.Core.MediaCover; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Music; using NzbDrone.Core.ThingiProvider; @@ -12,11 +13,13 @@ namespace NzbDrone.Core.Notifications.Webhook { private readonly IConfigFileProvider _configFileProvider; private readonly IConfigService _configService; + private readonly IMapCoversToLocal _mediaCoverService; - protected WebhookBase(IConfigFileProvider configFileProvider, IConfigService configService) + protected WebhookBase(IConfigFileProvider configFileProvider, IConfigService configService, IMapCoversToLocal mediaCoverService) { _configFileProvider = configFileProvider; _configService = configService; + _mediaCoverService = mediaCoverService; } public WebhookGrabPayload BuildOnGrabPayload(GrabMessage message) @@ -29,8 +32,8 @@ namespace NzbDrone.Core.Notifications.Webhook EventType = WebhookEventType.Grab, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Artist = new WebhookArtist(message.Artist), - Albums = remoteAlbum.Albums.Select(x => new WebhookAlbum(x)).ToList(), + Artist = GetArtist(message.Artist), + Albums = remoteAlbum.Albums.Select(GetAlbum).ToList(), Release = new WebhookRelease(quality, remoteAlbum), DownloadClient = message.DownloadClientName, DownloadClientType = message.DownloadClientType, @@ -47,8 +50,8 @@ namespace NzbDrone.Core.Notifications.Webhook EventType = WebhookEventType.Download, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Artist = new WebhookArtist(message.Artist), - Album = new WebhookAlbum(message.Album), + Artist = GetArtist(message.Artist), + Album = GetAlbum(message.Album), Tracks = trackFiles.SelectMany(x => x.Tracks.Value.Select(y => new WebhookTrack(y))).ToList(), TrackFiles = trackFiles.ConvertAll(x => new WebhookTrackFile(x)), IsUpgrade = message.OldFiles.Any(), @@ -89,7 +92,7 @@ namespace NzbDrone.Core.Notifications.Webhook EventType = WebhookEventType.ImportFailure, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Artist = new WebhookArtist(message.Artist), + Artist = GetArtist(message.Artist), Tracks = trackFiles.SelectMany(x => x.Tracks.Value.Select(y => new WebhookTrack(y))).ToList(), TrackFiles = trackFiles.ConvertAll(x => new WebhookTrackFile(x)), IsUpgrade = message.OldFiles.Any(), @@ -113,7 +116,7 @@ namespace NzbDrone.Core.Notifications.Webhook EventType = WebhookEventType.Rename, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Artist = new WebhookArtist(artist), + Artist = GetArtist(artist), RenamedTrackFiles = renamedFiles.ConvertAll(x => new WebhookRenamedTrackFile(x)) }; } @@ -125,7 +128,7 @@ namespace NzbDrone.Core.Notifications.Webhook EventType = WebhookEventType.Retag, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Artist = new WebhookArtist(message.Artist), + Artist = GetArtist(message.Artist), TrackFile = new WebhookTrackFile(message.TrackFile) }; } @@ -137,7 +140,7 @@ namespace NzbDrone.Core.Notifications.Webhook EventType = WebhookEventType.ArtistAdd, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Artist = new WebhookArtist(addMessage.Artist), + Artist = GetArtist(addMessage.Artist), }; } @@ -148,7 +151,7 @@ namespace NzbDrone.Core.Notifications.Webhook EventType = WebhookEventType.ArtistDelete, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Artist = new WebhookArtist(deleteMessage.Artist), + Artist = GetArtist(deleteMessage.Artist), DeletedFiles = deleteMessage.DeletedFiles }; } @@ -160,8 +163,8 @@ namespace NzbDrone.Core.Notifications.Webhook EventType = WebhookEventType.AlbumDelete, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Artist = new WebhookArtist(deleteMessage.Album.Artist), - Album = new WebhookAlbum(deleteMessage.Album), + Artist = GetArtist(deleteMessage.Album.Artist), + Album = GetAlbum(deleteMessage.Album), DeletedFiles = deleteMessage.DeletedFiles }; } @@ -230,5 +233,29 @@ namespace NzbDrone.Core.Notifications.Webhook } }; } + + private WebhookArtist GetArtist(Artist artist) + { + if (artist == null) + { + return null; + } + + _mediaCoverService.ConvertToLocalUrls(artist.Id, MediaCoverEntity.Artist, artist.Metadata.Value.Images); + + return new WebhookArtist(artist); + } + + private WebhookAlbum GetAlbum(Album album) + { + if (album == null) + { + return null; + } + + _mediaCoverService.ConvertToLocalUrls(album.Id, MediaCoverEntity.Album, album.Images); + + return new WebhookAlbum(album); + } } } diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookImage.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookImage.cs new file mode 100644 index 000000000..87f511dc1 --- /dev/null +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookImage.cs @@ -0,0 +1,18 @@ +using NzbDrone.Core.MediaCover; + +namespace NzbDrone.Core.Notifications.Webhook +{ + public class WebhookImage + { + public MediaCoverTypes CoverType { get; set; } + public string Url { get; set; } + public string RemoteUrl { get; set; } + + public WebhookImage(MediaCover.MediaCover image) + { + CoverType = image.CoverType; + RemoteUrl = image.RemoteUrl; + Url = image.Url; + } + } +} From 860bd04c5986013862ffea0cf10d31d72069208a Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 7 May 2024 17:45:28 -0700 Subject: [PATCH 184/275] New: Add artist tags to Webhook and Notifiarr events (cherry picked from commit cc0a284660f139d5f47b27a2c389973e5e888587) Closes #4805 --- .../CustomScript/CustomScript.cs | 28 ++++++++++++++----- .../Notifications/Notifiarr/Notifiarr.cs | 5 ++-- .../Notifications/Webhook/Webhook.cs | 5 ++-- .../Notifications/Webhook/WebhookArtist.cs | 4 ++- .../Notifications/Webhook/WebhookBase.cs | 25 +++++++++++++++-- src/NzbDrone.Core/Tags/TagRepository.cs | 7 +++++ 6 files changed, 59 insertions(+), 15 deletions(-) diff --git a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs index 824f6b9fc..9610ef324 100644 --- a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs +++ b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs @@ -63,7 +63,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId); environmentVariables.Add("Lidarr_Artist_Type", artist.Metadata.Value.Type); environmentVariables.Add("Lidarr_Artist_Genres", string.Join("|", artist.Metadata.Value.Genres)); - environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", artist.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", GetTagLabels(artist))); environmentVariables.Add("Lidarr_Release_AlbumCount", remoteAlbum.Albums.Count.ToString()); environmentVariables.Add("Lidarr_Release_AlbumReleaseDates", string.Join(",", remoteAlbum.Albums.Select(e => e.ReleaseDate))); environmentVariables.Add("Lidarr_Release_AlbumTitles", string.Join("|", remoteAlbum.Albums.Select(e => e.Title))); @@ -101,7 +101,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId); environmentVariables.Add("Lidarr_Artist_Type", artist.Metadata.Value.Type); environmentVariables.Add("Lidarr_Artist_Genres", string.Join("|", artist.Metadata.Value.Genres)); - environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", artist.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", GetTagLabels(artist))); environmentVariables.Add("Lidarr_Album_Id", album.Id.ToString()); environmentVariables.Add("Lidarr_Album_Title", album.Title); environmentVariables.Add("Lidarr_Album_Overview", album.Overview); @@ -139,7 +139,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId); environmentVariables.Add("Lidarr_Artist_Type", artist.Metadata.Value.Type); environmentVariables.Add("Lidarr_Artist_Genres", string.Join("|", artist.Metadata.Value.Genres)); - environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", artist.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", GetTagLabels(artist))); environmentVariables.Add("Lidarr_TrackFile_Ids", string.Join(",", renamedFiles.Select(e => e.TrackFile.Id))); environmentVariables.Add("Lidarr_TrackFile_Paths", string.Join("|", renamedFiles.Select(e => e.TrackFile.Path))); environmentVariables.Add("Lidarr_TrackFile_PreviousPaths", string.Join("|", renamedFiles.Select(e => e.PreviousPath))); @@ -164,7 +164,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId); environmentVariables.Add("Lidarr_Artist_Type", artist.Metadata.Value.Type); environmentVariables.Add("Lidarr_Artist_Genres", string.Join("|", artist.Metadata.Value.Genres)); - environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", artist.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", GetTagLabels(artist))); environmentVariables.Add("Lidarr_Album_Id", album.Id.ToString()); environmentVariables.Add("Lidarr_Album_Title", album.Title); environmentVariables.Add("Lidarr_Album_Overview", album.Overview); @@ -201,7 +201,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId.ToString()); environmentVariables.Add("Lidarr_Artist_Type", artist.Metadata.Value.Type); environmentVariables.Add("Lidarr_Artist_Genres", string.Join("|", artist.Metadata.Value.Genres)); - environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", artist.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", GetTagLabels(artist))); ExecuteScript(environmentVariables); } @@ -220,7 +220,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId.ToString()); environmentVariables.Add("Lidarr_Artist_Type", artist.Metadata.Value.Type); environmentVariables.Add("Lidarr_Artist_Genres", string.Join("|", artist.Metadata.Value.Genres)); - environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", artist.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", GetTagLabels(artist))); environmentVariables.Add("Lidarr_Artist_DeletedFiles", deleteMessage.DeletedFiles.ToString()); ExecuteScript(environmentVariables); @@ -241,7 +241,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId); environmentVariables.Add("Lidarr_Artist_Type", artist.Metadata.Value.Type); environmentVariables.Add("Lidarr_Artist_Genres", string.Join("|", artist.Metadata.Value.Genres)); - environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", artist.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", GetTagLabels(artist))); environmentVariables.Add("Lidarr_Album_Id", album.Id.ToString()); environmentVariables.Add("Lidarr_Album_Title", album.Title); environmentVariables.Add("Lidarr_Album_Overview", album.Overview); @@ -342,5 +342,19 @@ namespace NzbDrone.Core.Notifications.CustomScript return processOutput; } + + private List GetTagLabels(Artist artist) + { + if (artist == null) + { + return null; + } + + return _tagRepository.GetTags(artist.Tags) + .Select(s => s.Label) + .Where(l => l.IsNotNullOrWhiteSpace()) + .OrderBy(l => l) + .ToList(); + } } } diff --git a/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs b/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs index 25ea84301..dccf38f6e 100644 --- a/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs +++ b/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs @@ -6,6 +6,7 @@ using NzbDrone.Core.MediaCover; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Music; using NzbDrone.Core.Notifications.Webhook; +using NzbDrone.Core.Tags; using NzbDrone.Core.Validation; namespace NzbDrone.Core.Notifications.Notifiarr @@ -14,8 +15,8 @@ namespace NzbDrone.Core.Notifications.Notifiarr { private readonly INotifiarrProxy _proxy; - public Notifiarr(INotifiarrProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, IMapCoversToLocal mediaCoverService) - : base(configFileProvider, configService, mediaCoverService) + public Notifiarr(INotifiarrProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, ITagRepository tagRepository, IMapCoversToLocal mediaCoverService) + : base(configFileProvider, configService, tagRepository, mediaCoverService) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs b/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs index 0b78dcbec..489d11d23 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs @@ -5,6 +5,7 @@ using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaCover; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Music; +using NzbDrone.Core.Tags; using NzbDrone.Core.Validation; namespace NzbDrone.Core.Notifications.Webhook @@ -13,8 +14,8 @@ namespace NzbDrone.Core.Notifications.Webhook { private readonly IWebhookProxy _proxy; - public Webhook(IWebhookProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, IMapCoversToLocal mediaCoverService) - : base(configFileProvider, configService, mediaCoverService) + public Webhook(IWebhookProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, ITagRepository tagRepository, IMapCoversToLocal mediaCoverService) + : base(configFileProvider, configService, tagRepository, mediaCoverService) { _proxy = proxy; } diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookArtist.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookArtist.cs index e758df600..19ba28319 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookArtist.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookArtist.cs @@ -15,12 +15,13 @@ namespace NzbDrone.Core.Notifications.Webhook public string Overview { get; set; } public List Genres { get; set; } public List Images { get; set; } + public List Tags { get; set; } public WebhookArtist() { } - public WebhookArtist(Artist artist) + public WebhookArtist(Artist artist, List tags) { Id = artist.Id; Name = artist.Name; @@ -31,6 +32,7 @@ namespace NzbDrone.Core.Notifications.Webhook Overview = artist.Metadata.Value.Overview; Genres = artist.Metadata.Value.Genres; Images = artist.Metadata.Value.Images.Select(i => new WebhookImage(i)).ToList(); + Tags = tags; } } } diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs index 6d1013194..2807912f2 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs @@ -1,9 +1,11 @@ using System.Collections.Generic; using System.Linq; +using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaCover; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Music; +using NzbDrone.Core.Tags; using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.Webhook @@ -13,12 +15,14 @@ namespace NzbDrone.Core.Notifications.Webhook { private readonly IConfigFileProvider _configFileProvider; private readonly IConfigService _configService; + private readonly ITagRepository _tagRepository; private readonly IMapCoversToLocal _mediaCoverService; - protected WebhookBase(IConfigFileProvider configFileProvider, IConfigService configService, IMapCoversToLocal mediaCoverService) + protected WebhookBase(IConfigFileProvider configFileProvider, IConfigService configService, ITagRepository tagRepository, IMapCoversToLocal mediaCoverService) { _configFileProvider = configFileProvider; _configService = configService; + _tagRepository = tagRepository; _mediaCoverService = mediaCoverService; } @@ -221,7 +225,8 @@ namespace NzbDrone.Core.Notifications.Webhook Id = 1, Name = "Test Name", Path = "C:\\testpath", - MBId = "aaaaa-aaa-aaaa-aaaaaa" + MBId = "aaaaa-aaa-aaaa-aaaaaa", + Tags = new List { "test-tag" } }, Albums = new List { @@ -243,7 +248,7 @@ namespace NzbDrone.Core.Notifications.Webhook _mediaCoverService.ConvertToLocalUrls(artist.Id, MediaCoverEntity.Artist, artist.Metadata.Value.Images); - return new WebhookArtist(artist); + return new WebhookArtist(artist, GetTagLabels(artist)); } private WebhookAlbum GetAlbum(Album album) @@ -257,5 +262,19 @@ namespace NzbDrone.Core.Notifications.Webhook return new WebhookAlbum(album); } + + private List GetTagLabels(Artist artist) + { + if (artist == null) + { + return null; + } + + return _tagRepository.GetTags(artist.Tags) + .Select(s => s.Label) + .Where(l => l.IsNotNullOrWhiteSpace()) + .OrderBy(l => l) + .ToList(); + } } } diff --git a/src/NzbDrone.Core/Tags/TagRepository.cs b/src/NzbDrone.Core/Tags/TagRepository.cs index 4851ad223..5743dd4a6 100644 --- a/src/NzbDrone.Core/Tags/TagRepository.cs +++ b/src/NzbDrone.Core/Tags/TagRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using NzbDrone.Core.Datastore; using NzbDrone.Core.Messaging.Events; @@ -9,6 +10,7 @@ namespace NzbDrone.Core.Tags { Tag GetByLabel(string label); Tag FindByLabel(string label); + List GetTags(HashSet tagIds); } public class TagRepository : BasicRepository, ITagRepository @@ -34,5 +36,10 @@ namespace NzbDrone.Core.Tags { return Query(c => c.Label == label).SingleOrDefault(); } + + public List GetTags(HashSet tagIds) + { + return Query(t => tagIds.Contains(t.Id)); + } } } From ec050a7b3c6bd2ac87a915f7220eb3b89db2a169 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 22 Feb 2025 16:36:25 +0200 Subject: [PATCH 185/275] Fixed: Prevent NullRef for webhooks when Artist Metadata is not set Fixes #5368 --- src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs index 2807912f2..bd378ae0f 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs @@ -241,7 +241,7 @@ namespace NzbDrone.Core.Notifications.Webhook private WebhookArtist GetArtist(Artist artist) { - if (artist == null) + if (artist?.Metadata?.Value == null) { return null; } From f177345d010cfe578f7f8eba80575d32e69b9de7 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 22 Feb 2025 21:28:33 +0200 Subject: [PATCH 186/275] Fixed: Avoid checking for free space if other specifications fail first --- .../DecisionEngine/Specifications/FreeSpaceSpecification.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/FreeSpaceSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/FreeSpaceSpecification.cs index d83629e08..6f94a5b76 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/FreeSpaceSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/FreeSpaceSpecification.cs @@ -20,7 +20,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications _logger = logger; } - public SpecificationPriority Priority => SpecificationPriority.Default; + public SpecificationPriority Priority => SpecificationPriority.Disk; public RejectionType Type => RejectionType.Permanent; public Decision IsSatisfiedBy(RemoteAlbum subject, SearchCriteriaBase searchCriteria) From 23611cb1161c2181d36057b9c6763d87496165c0 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 23 Feb 2025 12:16:19 +0200 Subject: [PATCH 187/275] Bump version to 2.10.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4d34b2684..0f6862ed2 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.10.0' + majorVersion: '2.10.1' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From f4dc294ab302051a934f1f1dc53c30844093ec58 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 26 Feb 2025 03:59:22 +0200 Subject: [PATCH 188/275] Fixed: Instance name must contain application name --- .../Configuration/ConfigFileProvider.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 389728f84..60014cc95 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -263,7 +263,21 @@ namespace NzbDrone.Core.Configuration } public string UiFolder => BuildInfo.IsDebug ? Path.Combine("..", "UI") : "UI"; - public string InstanceName => _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName); + + public string InstanceName + { + get + { + var instanceName = _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName); + + if (instanceName.Contains(BuildInfo.AppName, StringComparison.OrdinalIgnoreCase)) + { + return instanceName; + } + + return BuildInfo.AppName; + } + } public bool UpdateAutomatically => _updateOptions.Automatically ?? GetValueBoolean("UpdateAutomatically", OsInfo.IsWindows, false); From 6292f223aca1ff01fdb46270ea3fe918bb966bad Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 17 Sep 2024 23:54:40 +0300 Subject: [PATCH 189/275] Fixed: Attempt to ensure all import results are imported Fixes #2746 Closes #4815 --- .../ImportFixture.cs | 19 ++++++++++----- .../Download/CompletedDownloadService.cs | 23 ++++++++++--------- .../TrackImport/Manual/ManualImportService.cs | 14 +++++------ 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs index 16f6cfd1a..9719b7f1f 100644 --- a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs +++ b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs @@ -183,6 +183,8 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests { GivenArtistMatch(); + var tracks = Builder.CreateListOfSize(3).BuildList(); + _trackedDownload.RemoteAlbum.Albums = new List { CreateAlbum(1, 3) @@ -192,9 +194,9 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests .Setup(v => v.ProcessPath(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Returns(new List { - new ImportResult(new ImportDecision(new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic() })), - new ImportResult(new ImportDecision(new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic() })), - new ImportResult(new ImportDecision(new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic() })), + new ImportResult(new ImportDecision(new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic(), Tracks = new List { tracks[0] } })), + new ImportResult(new ImportDecision(new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic(), Tracks = new List { tracks[1] } })), + new ImportResult(new ImportDecision(new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic(), Tracks = new List { tracks[2] } })), new ImportResult(new ImportDecision(new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic() }), "Test Failure") }); @@ -290,6 +292,9 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests [Test] public void should_mark_as_imported_if_all_tracks_were_imported() { + var track1 = new Track { Id = 1 }; + var track2 = new Track { Id = 2 }; + _trackedDownload.RemoteAlbum.Albums = new List { CreateAlbum(1, 2) @@ -301,11 +306,11 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests { new ImportResult( new ImportDecision( - new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic() })), + new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic(), Tracks = new List { track1 } })), new ImportResult( new ImportDecision( - new LocalTrack { Path = @"C:\TestPath\Droned.S01E02.mkv".AsOsAgnostic() })) + new LocalTrack { Path = @"C:\TestPath\Droned.S01E02.mkv".AsOsAgnostic(), Tracks = new List { track2 } })) }); Subject.Import(_trackedDownload); @@ -367,11 +372,13 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests { GivenABadlyNamedDownload(); + var track1 = new Track { Id = 1 }; + Mocker.GetMock() .Setup(v => v.ProcessPath(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Returns(new List { - new ImportResult(new ImportDecision(new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic() })) + new ImportResult(new ImportDecision(new LocalTrack { Path = @"C:\TestPath\Droned.S01E01.mkv".AsOsAgnostic(), Tracks = new List { track1 } })) }); Mocker.GetMock() diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index eca048e78..7fb40d994 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -178,9 +178,11 @@ namespace NzbDrone.Core.Download public bool VerifyImport(TrackedDownload trackedDownload, List importResults) { - var allTracksImported = importResults.All(c => c.Result == ImportResultType.Imported) || - importResults.Count(c => c.Result == ImportResultType.Imported) >= - Math.Max(1, trackedDownload.RemoteAlbum.Albums.Sum(x => x.AlbumReleases.Value.Where(y => y.Monitored).Sum(z => z.TrackCount))); + var allTracksImported = + (importResults.Any() && importResults.All(c => c.Result == ImportResultType.Imported)) || + importResults.Where(c => c.Result == ImportResultType.Imported) + .SelectMany(c => c.ImportDecision.Item.Tracks) + .Count() >= Math.Max(1, trackedDownload.RemoteAlbum.Albums.Sum(x => x.AlbumReleases.Value.Where(y => y.Monitored).Sum(z => z.TrackCount))); if (allTracksImported) { @@ -191,6 +193,10 @@ namespace NzbDrone.Core.Download return true; } + var historyItems = _historyService.FindByDownloadId(trackedDownload.DownloadItem.DownloadId) + .OrderByDescending(h => h.Date) + .ToList(); + // Double check if all episodes were imported by checking the history if at least one // file was imported. This will allow the decision engine to reject already imported // episode files and still mark the download complete when all files are imported. @@ -199,19 +205,14 @@ namespace NzbDrone.Core.Download // and an episode is removed, but later comes back with a different ID then Sonarr will treat it as incomplete. // Since imports should be relatively fast and these types of data changes are infrequent this should be quite // safe, but commenting for future benefit. - var atLeastOneEpisodeImported = importResults.Any(c => c.Result == ImportResultType.Imported); - - var historyItems = _historyService.FindByDownloadId(trackedDownload.DownloadItem.DownloadId) - .OrderByDescending(h => h.Date) - .ToList(); - + var atLeastOneTrackImported = importResults.Any(c => c.Result == ImportResultType.Imported); var allTracksImportedInHistory = _trackedDownloadAlreadyImported.IsImported(trackedDownload, historyItems); if (allTracksImportedInHistory) { // Log different error messages depending on the circumstances, but treat both as fully imported, because that's the reality. // The second message shouldn't be logged in most cases, but continued reporting would indicate an ongoing issue. - if (atLeastOneEpisodeImported) + if (atLeastOneTrackImported) { _logger.Debug("All albums were imported in history for {0}", trackedDownload.DownloadItem.Title); } @@ -233,7 +234,7 @@ namespace NzbDrone.Core.Download return true; } - _logger.Debug("Not all albums have been imported for {0}", trackedDownload.DownloadItem.Title); + _logger.Debug("Not all albums have been imported for the release '{0}'", trackedDownload.DownloadItem.Title); return false; } diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs index 7cf6b7c85..d7d0d2d4e 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs @@ -391,28 +391,26 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual { var trackedDownload = groupedTrackedDownload.First().TrackedDownload; var importArtist = groupedTrackedDownload.First().ImportResult.ImportDecision.Item.Artist; - var outputPath = trackedDownload.ImportItem.OutputPath.FullPath; if (_diskProvider.FolderExists(outputPath)) { if (_downloadedTracksImportService.ShouldDeleteFolder( - _diskProvider.GetDirectoryInfo(outputPath), - importArtist) && trackedDownload.DownloadItem.CanMoveFiles) + _diskProvider.GetDirectoryInfo(outputPath), importArtist) && + trackedDownload.DownloadItem.CanMoveFiles) { _diskProvider.DeleteFolder(outputPath, true); } } - var remoteTrackCount = Math.Max(1, - trackedDownload.RemoteAlbum?.Albums.Sum(x => - x.AlbumReleases.Value.Where(y => y.Monitored).Sum(z => z.TrackCount)) ?? 1); + var remoteTrackCount = Math.Max(1, trackedDownload.RemoteAlbum?.Albums.Sum(x => x.AlbumReleases.Value.Where(y => y.Monitored).Sum(z => z.TrackCount)) ?? 1); - var importResults = groupedTrackedDownload.Select(x => x.ImportResult).ToList(); + var importResults = groupedTrackedDownload.Select(c => c.ImportResult).ToList(); var importedTrackCount = importResults.Where(c => c.Result == ImportResultType.Imported) .SelectMany(c => c.ImportDecision.Item.Tracks) .Count(); - var allTracksImported = importResults.All(c => c.Result == ImportResultType.Imported) || importedTrackCount >= remoteTrackCount; + + var allTracksImported = (importResults.Any() && importResults.All(c => c.Result == ImportResultType.Imported)) || importedTrackCount >= remoteTrackCount; if (allTracksImported) { From e8bb78e5bb44f3f369492124158237cd60ba0027 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 23 Feb 2021 18:39:24 -0800 Subject: [PATCH 190/275] New: Improve messaging if release is in queue because all tracks in release were not imported (cherry picked from commit 2728bf79ca41bc372de515cb09e1034a8c006c2b) --- .../Download/CompletedDownloadService.cs | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index 7fb40d994..9ac8e13e9 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -149,14 +149,11 @@ namespace NzbDrone.Core.Download var statusMessages = new List { - new TrackedDownloadStatusMessage("One or more albums expected in this release were not imported or missing", new List()) + new TrackedDownloadStatusMessage("One or more tracks expected in this release were not imported or missing from the release", new List()) }; if (importResults.Any(c => c.Result != ImportResultType.Imported)) { - // Mark as failed to prevent further attempts at processing - trackedDownload.State = TrackedDownloadState.ImportFailed; - statusMessages.AddRange( importResults .Where(v => v.Result != ImportResultType.Imported && v.ImportDecision.Item != null) @@ -165,14 +162,16 @@ namespace NzbDrone.Core.Download new TrackedDownloadStatusMessage(Path.GetFileName(v.ImportDecision.Item.Path), v.Errors))); - if (statusMessages.Any()) - { - trackedDownload.Warn(statusMessages.ToArray()); - } - - // Publish event to notify Album was imported incompelte + // Publish event to notify album was imported incomplete _eventAggregator.PublishEvent(new AlbumImportIncompleteEvent(trackedDownload)); - return; + } + + if (statusMessages.Any()) + { + trackedDownload.Warn(statusMessages.ToArray()); + + // Mark as failed to prevent further attempts at processing + trackedDownload.State = TrackedDownloadState.ImportFailed; } } From a1a53dbb5e017bbeb9b636aea302fd31b2df598b Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 25 Jun 2024 15:51:20 -0700 Subject: [PATCH 191/275] New: Improve UI status when downloads cannot be imported automatically (cherry picked from commit 6d5ff9c4d6993d16848980aea499a45b1b51d95c) --- .../src/Activity/Queue/QueueStatusCell.js | 36 ++++++++++++------- .../HistoryEventTypeFilterBuilderRowValue.tsx | 2 +- frontend/src/Store/Actions/historyActions.js | 2 +- .../ImportFixture.cs | 2 +- .../Download/CompletedDownloadService.cs | 19 ++++++---- .../TrackedDownloads/TrackedDownload.cs | 1 + src/NzbDrone.Core/Localization/Core/de.json | 2 +- src/NzbDrone.Core/Localization/Core/el.json | 2 +- src/NzbDrone.Core/Localization/Core/en.json | 12 ++++++- src/NzbDrone.Core/Localization/Core/es.json | 2 +- src/NzbDrone.Core/Localization/Core/fi.json | 2 +- src/NzbDrone.Core/Localization/Core/fr.json | 2 +- src/NzbDrone.Core/Localization/Core/hu.json | 2 +- .../Localization/Core/pt_BR.json | 2 +- .../Localization/Core/zh_CN.json | 2 +- 15 files changed, 60 insertions(+), 30 deletions(-) diff --git a/frontend/src/Activity/Queue/QueueStatusCell.js b/frontend/src/Activity/Queue/QueueStatusCell.js index 6d5caf6f9..d4dcdfeee 100644 --- a/frontend/src/Activity/Queue/QueueStatusCell.js +++ b/frontend/src/Activity/Queue/QueueStatusCell.js @@ -57,30 +57,40 @@ function QueueStatusCell(props) { if (status === 'paused') { iconName = icons.PAUSED; - title = 'Paused'; + title = translate('Paused'); } if (status === 'queued') { iconName = icons.QUEUED; - title = 'Queued'; + title = translate('Queued'); } if (status === 'completed') { iconName = icons.DOWNLOADED; - title = 'Downloaded'; + title = translate('Downloaded'); + + if (trackedDownloadState === 'importBlocked') { + title += ` - ${translate('UnableToImportAutomatically')}`; + iconKind = kinds.WARNING; + } + + if (trackedDownloadState === 'importFailed') { + title += ` - ${translate('ImportFailed', { sourceTitle })}`; + iconKind = kinds.WARNING; + } if (trackedDownloadState === 'importPending') { - title += ' - Waiting to Import'; + title += ` - ${translate('WaitingToImport')}`; iconKind = kinds.PURPLE; } if (trackedDownloadState === 'importing') { - title += ' - Importing'; + title += ` - ${translate('Importing')}`; iconKind = kinds.PURPLE; } if (trackedDownloadState === 'failedPending') { - title += ' - Waiting to Process'; + title += ` - ${translate('WaitingToProcess')}`; iconKind = kinds.DANGER; } } @@ -91,36 +101,38 @@ function QueueStatusCell(props) { if (status === 'delay') { iconName = icons.PENDING; - title = 'Pending'; + title = translate('Pending'); } if (status === 'downloadClientUnavailable') { iconName = icons.PENDING; iconKind = kinds.WARNING; - title = 'Pending - Download client is unavailable'; + title = translate('PendingDownloadClientUnavailable'); } if (status === 'failed') { iconName = icons.DOWNLOADING; iconKind = kinds.DANGER; - title = 'Download failed'; + title = translate('DownloadFailed'); } if (status === 'warning') { iconName = icons.DOWNLOADING; iconKind = kinds.WARNING; - title = `Download warning: ${errorMessage || 'check download client for more details'}`; + const warningMessage = + errorMessage || translate('CheckDownloadClientForDetails'); + title = translate('DownloadWarning', { warningMessage }); } if (hasError) { if (status === 'completed') { iconName = icons.DOWNLOAD; iconKind = kinds.DANGER; - title = `Import failed: ${sourceTitle}`; + title = translate('ImportFailed', { sourceTitle }); } else { iconName = icons.DOWNLOADING; iconKind = kinds.DANGER; - title = 'Download failed'; + title = translate('DownloadFailed'); } } diff --git a/frontend/src/Components/Filter/Builder/HistoryEventTypeFilterBuilderRowValue.tsx b/frontend/src/Components/Filter/Builder/HistoryEventTypeFilterBuilderRowValue.tsx index 45e6fc756..1b3b369be 100644 --- a/frontend/src/Components/Filter/Builder/HistoryEventTypeFilterBuilderRowValue.tsx +++ b/frontend/src/Components/Filter/Builder/HistoryEventTypeFilterBuilderRowValue.tsx @@ -25,7 +25,7 @@ const EVENT_TYPE_OPTIONS = [ { id: 7, get name() { - return translate('ImportFailed'); + return translate('ImportCompleteFailed'); }, }, { diff --git a/frontend/src/Store/Actions/historyActions.js b/frontend/src/Store/Actions/historyActions.js index 225698229..9d16d29c4 100644 --- a/frontend/src/Store/Actions/historyActions.js +++ b/frontend/src/Store/Actions/historyActions.js @@ -150,7 +150,7 @@ export const defaultState = { }, { key: 'importFailed', - label: () => translate('ImportFailed'), + label: () => translate('ImportCompleteFailed'), filters: [ { key: 'eventType', diff --git a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs index 9719b7f1f..ee0651ea3 100644 --- a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs +++ b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs @@ -395,7 +395,7 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Never()); - _trackedDownload.State.Should().Be(TrackedDownloadState.ImportFailed); + _trackedDownload.State.Should().Be(TrackedDownloadState.ImportBlocked); } private void AssertImported() diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index 9ac8e13e9..b5010b8f8 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -63,8 +63,8 @@ namespace NzbDrone.Core.Download SetImportItem(trackedDownload); - // Only process tracked downloads that are still downloading - if (trackedDownload.State != TrackedDownloadState.Downloading) + // Only process tracked downloads that are still downloading or have been blocked for importing due to an issue with matching + if (trackedDownload.State != TrackedDownloadState.Downloading && trackedDownload.State != TrackedDownloadState.ImportBlocked) { return; } @@ -93,7 +93,9 @@ namespace NzbDrone.Core.Download if (artist == null) { - trackedDownload.Warn("Artist name mismatch, automatic import is not possible."); + trackedDownload.Warn("Artist name mismatch, automatic import is not possible. Check the download troubleshooting entry on the wiki for common causes."); + SetStateToImportBlocked(trackedDownload); + return; } } @@ -113,6 +115,8 @@ namespace NzbDrone.Core.Download if (trackedDownload.RemoteAlbum == null) { trackedDownload.Warn("Unable to parse download, automatic import is not possible."); + SetStateToImportBlocked(trackedDownload); + return; } @@ -169,9 +173,7 @@ namespace NzbDrone.Core.Download if (statusMessages.Any()) { trackedDownload.Warn(statusMessages.ToArray()); - - // Mark as failed to prevent further attempts at processing - trackedDownload.State = TrackedDownloadState.ImportFailed; + SetStateToImportBlocked(trackedDownload); } } @@ -237,6 +239,11 @@ namespace NzbDrone.Core.Download return false; } + private void SetStateToImportBlocked(TrackedDownload trackedDownload) + { + trackedDownload.State = TrackedDownloadState.ImportBlocked; + } + private void SetImportItem(TrackedDownload trackedDownload) { trackedDownload.ImportItem = _provideImportItemService.ProvideImportItem(trackedDownload.DownloadItem, trackedDownload.ImportItem); diff --git a/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownload.cs b/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownload.cs index d4b4cfe20..af1f85abf 100644 --- a/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownload.cs +++ b/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownload.cs @@ -41,6 +41,7 @@ namespace NzbDrone.Core.Download.TrackedDownloads Downloading, DownloadFailed, DownloadFailedPending, + ImportBlocked, ImportPending, Importing, ImportFailed, diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index 17b53fad5..6ce2aa25f 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -782,7 +782,7 @@ "DownloadImported": "Importiere herunterladen", "EditMetadata": "Metadaten bearbeiten", "ForNewImportsOnly": "Nur für neue Imports", - "ImportFailed": "Import fehlgeschlagen", + "ImportCompleteFailed": "Import fehlgeschlagen", "EndedOnly": "Nur beendete", "MassAlbumsCutoffUnmetWarning": "Bist du dir sicher, dass du nach allen '{0}' Alben suchen willst deren Schwelle nicht erreicht worden ist?", "SearchForAllMissingAlbumsConfirmationCount": "Bist du sicher, dass du nach allen {totalRecords} fehlenden Alben suchen möchtest?", diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index 47363001b..1ba176c58 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -751,7 +751,7 @@ "GoToArtistListing": "Μεταβείτε στη λίστα καλλιτεχνών", "HideAlbums": "Απόκρυψη άλμπουμ", "HideTracks": "Απόκρυψη κομματιών", - "ImportFailed": "Η εισαγωγή απέτυχε", + "ImportCompleteFailed": "Η εισαγωγή απέτυχε", "ImportFailures": "Αστοχίες εισαγωγής", "ImportLists": "Λίστες εισαγωγής", "ImportListSpecificSettings": "Εισαγωγή ειδικών ρυθμίσεων λίστας", diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 2c67fc1ed..5f9c76b0c 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -197,6 +197,7 @@ "ChangeCategoryMultipleHint": "Changes downloads to the 'Post-Import Category' from Download Client", "ChangeFileDate": "Change File Date", "ChangeHasNotBeenSavedYet": "Change has not been saved yet", + "CheckDownloadClientForDetails": "check download client for more details", "ChmodFolder": "chmod Folder", "ChmodFolderHelpText": "Octal, applied during import/rename to media folders and files (without execute bits)", "ChmodFolderHelpTextWarning": "This only works if the user running {appName} is the owner of the file. It's better to ensure the download client sets the permissions properly.", @@ -406,7 +407,9 @@ "DownloadPropersAndRepacksHelpTextWarning": "Use custom formats for automatic upgrades to Propers/Repacks", "DownloadPropersAndRepacksHelpTexts1": "Whether or not to automatically upgrade to Propers/Repacks", "DownloadPropersAndRepacksHelpTexts2": "Use 'Do not Prefer' to sort by preferred word score over propers/repacks", + "DownloadWarning": "Download warning: {warningMessage}", "DownloadWarningCheckDownloadClientForMoreDetails": "Download warning: check download client for more details", + "Downloaded": "Downloaded", "DownloadedImporting": "'Downloaded - Importing'", "DownloadedUnableToImportCheckLogsForDetails": "'Downloaded - Unable to Import: check logs for details'", "DownloadedWaitingToImport": "'Downloaded - Waiting to Import'", @@ -571,9 +574,10 @@ "IllRestartLater": "I'll restart later", "Implementation": "Implementation", "Import": "Import", + "ImportCompleteFailed": "Import Failed", "ImportExtraFiles": "Import Extra Files", "ImportExtraFilesHelpText": "Import matching extra files (subtitles, nfo, etc) after importing an track file", - "ImportFailed": "Import Failed", + "ImportFailed": "Import Failed: {sourceTitle}", "ImportFailedInterp": "Import failed: {0}", "ImportFailures": "Import failures", "ImportList": "Import List", @@ -891,7 +895,10 @@ "Path": "Path", "PathHelpText": "Root Folder containing your music library", "PathHelpTextWarning": "This must be different to the directory where your download client puts files", + "Paused": "Paused", "Peers": "Peers", + "Pending": "Pending", + "PendingDownloadClientUnavailable": "Pending - Download client is unavailable", "Period": "Period", "Permissions": "Permissions", "Playlist": "Playlist", @@ -1268,6 +1275,7 @@ "UnableToAddANewQualityProfilePleaseTryAgain": "Unable to add a new quality profile, please try again.", "UnableToAddANewRemotePathMappingPleaseTryAgain": "Unable to add a new remote path mapping, please try again.", "UnableToAddANewRootFolderPleaseTryAgain": "Unable to add a new root folder, please try again.", + "UnableToImportAutomatically": "Unable to Import Automatically", "UnableToLoadBackups": "Unable to load backups", "UnableToLoadBlocklist": "Unable to load blocklist", "UnableToLoadCustomFormats": "Unable to load custom formats", @@ -1335,6 +1343,8 @@ "UsingExternalUpdateMechanismBranchToUseToUpdateLidarr": "Branch to use to update {appName}", "UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Branch used by external update mechanism", "Version": "Version", + "WaitingToImport": "Waiting to Import", + "WaitingToProcess": "Waiting to Process", "Wanted": "Wanted", "Warn": "Warn", "WatchLibraryForChangesHelpText": "Rescan automatically when files change in a root folder", diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 9db5c4a91..2dc642ba6 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -1126,7 +1126,7 @@ "DefaultLidarrTags": "Etiquetas predeterminadas de {appName}", "ExpandItemsByDefault": "Expandir elementos predeterminados", "DownloadedWaitingToImport": "'Descargados - Esperando para importar'", - "ImportFailed": "La importación falló", + "ImportCompleteFailed": "La importación falló", "IsInUseCantDeleteAMetadataProfileThatIsAttachedToAnArtistOrImportList": "No se puede eliminar un perfil de metadatos que está enlazado a un artista o a una lista de importación", "IsExpandedShowTracks": "Mostrar pistas", "IsInUseCantDeleteAQualityProfileThatIsAttachedToAnArtistOrImportList": "No se puede eliminar un perfil de calidad que está enlazado a un artista o a una lista de importación", diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 1497c82e6..4429df780 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -773,7 +773,7 @@ "ExistingAlbumsData": "Valvo albumeita, joille on tiedostoja tai joita ei ole vielä julkaistu.", "ForNewImportsOnly": "Vain uusille tuonneille", "HasMonitoredAlbumsNoMonitoredAlbumsForThisArtist": "Esittäjältä ei valvota albumeita", - "ImportFailed": "Tuonti epäonnistui", + "ImportCompleteFailed": "Tuonti epäonnistui", "ImportFailures": "Tuontivirheet", "ImportLists": "Tuontilistat", "ImportListSettings": "Tuontilistojen yleisasetukset", diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index a3b29285c..e824e21dd 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -897,7 +897,7 @@ "DeleteMetadataProfile": "Supprimer le profil de métadonnées", "HasMonitoredAlbumsNoMonitoredAlbumsForThisArtist": "Aucun album surveillé pour cet artiste", "ImportFailures": "Échecs d’importation", - "ImportFailed": "Échec de l'importation", + "ImportCompleteFailed": "Échec de l'importation", "IndexerIdHelpTextWarning": "L'utilisation d'un indexeur spécifique avec les mots préférés peut conduire à la saisie de versions en double", "LastAlbum": "Dernier album", "ListRefreshInterval": "Intervalle d'actualisation de la liste", diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index b7c150824..387c736c6 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -790,7 +790,7 @@ "ForNewImportsOnly": "Csak új importokra", "EndedOnly": "Csak a véget értek", "ContinuingOnly": "Csak folytatás", - "ImportFailed": "Az importálás sikertelen", + "ImportCompleteFailed": "Az importálás sikertelen", "MediaCount": "Médiaszám", "MissingTracks": "Hiányzó számok", "MonitorNewItems": "Új albumok monitorozása", diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index bc8215799..e0c1db1d5 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -789,7 +789,7 @@ "EditMetadata": "Editar metadados", "EditReleaseProfile": "Editar perfil de lançamento", "ForNewImportsOnly": "Para novas importações somente", - "ImportFailed": "Falha na importação", + "ImportCompleteFailed": "Falha na importação", "MissingTracks": "Faixas Ausentes", "NewAlbums": "Novos Álbuns", "NextAlbum": "Próximo Álbum", diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index a423a7c51..7247d2857 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -708,7 +708,7 @@ "Other": "其他", "OutputPath": "输出路径", "QualitiesHelpText": "即使未勾选,列表中靠前的质量优先级更高。同组内的质量优先级相同。仅需勾选需要的质量", - "ImportFailed": "导入失败", + "ImportCompleteFailed": "导入失败", "TrackArtist": "歌曲歌手", "OnAlbumDelete": "当专辑删除时", "OnArtistDelete": "当歌手删除时", From 2997c163460a4c590fbb776e5d3b7da0642475c3 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 26 Jun 2024 08:58:22 -0700 Subject: [PATCH 192/275] Fixed: Reprocessing items that were previously blocked during importing (cherry picked from commit bce848facf8aeaeac6a1d59c92941d00589034a4) --- src/NzbDrone.Core/Download/FailedDownloadService.cs | 4 ++-- .../Download/TrackedDownloads/DownloadMonitoringService.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Download/FailedDownloadService.cs b/src/NzbDrone.Core/Download/FailedDownloadService.cs index 72b33dca8..60c9e8d05 100644 --- a/src/NzbDrone.Core/Download/FailedDownloadService.cs +++ b/src/NzbDrone.Core/Download/FailedDownloadService.cs @@ -73,8 +73,8 @@ namespace NzbDrone.Core.Download public void Check(TrackedDownload trackedDownload) { - // Only process tracked downloads that are still downloading - if (trackedDownload.State != TrackedDownloadState.Downloading) + // Only process tracked downloads that are still downloading or import is blocked (if they fail after attempting to be processed) + if (trackedDownload.State != TrackedDownloadState.Downloading && trackedDownload.State != TrackedDownloadState.ImportBlocked) { return; } diff --git a/src/NzbDrone.Core/Download/TrackedDownloads/DownloadMonitoringService.cs b/src/NzbDrone.Core/Download/TrackedDownloads/DownloadMonitoringService.cs index 79ec696b8..4ab3b23da 100644 --- a/src/NzbDrone.Core/Download/TrackedDownloads/DownloadMonitoringService.cs +++ b/src/NzbDrone.Core/Download/TrackedDownloads/DownloadMonitoringService.cs @@ -115,7 +115,7 @@ namespace NzbDrone.Core.Download.TrackedDownloads { var trackedDownload = _trackedDownloadService.TrackDownload((DownloadClientDefinition)downloadClient.Definition, downloadItem); - if (trackedDownload != null && trackedDownload.State == TrackedDownloadState.Downloading) + if (trackedDownload is { State: TrackedDownloadState.Downloading or TrackedDownloadState.ImportBlocked }) { _failedDownloadService.Check(trackedDownload); _completedDownloadService.Check(trackedDownload); From 031f32a52cfd50747abf5b161c030c6e58090478 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 18 Sep 2024 22:43:12 +0300 Subject: [PATCH 193/275] Fixed: Refresh cache for tracked queue on artist/album add or removal Prevents a NullRef in CompletedDownloadService.VerifyImport when publishing DownloadCompletedEvent for an already cached tracked download --- .../TrackedDownloadService.cs | 64 +++++++++++++------ 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs b/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs index efe1d2fd4..636104398 100644 --- a/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs +++ b/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs @@ -16,7 +16,7 @@ using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.Download.TrackedDownloads { - public interface ITrackedDownloadService : IHandle + public interface ITrackedDownloadService { TrackedDownload Find(string downloadId); void StopTracking(string downloadId); @@ -26,13 +26,16 @@ namespace NzbDrone.Core.Download.TrackedDownloads void UpdateTrackable(List trackedDownloads); } - public class TrackedDownloadService : ITrackedDownloadService + public class TrackedDownloadService : ITrackedDownloadService, + IHandle, + IHandle, + IHandle, + IHandle { private readonly IParsingService _parsingService; private readonly IHistoryService _historyService; private readonly IEventAggregator _eventAggregator; private readonly IDownloadHistoryService _downloadHistoryService; - private readonly ITrackedDownloadAlreadyImported _trackedDownloadAlreadyImported; private readonly ICustomFormatCalculationService _formatCalculator; private readonly Logger _logger; private readonly ICached _cache; @@ -43,7 +46,6 @@ namespace NzbDrone.Core.Download.TrackedDownloads ICustomFormatCalculationService formatCalculator, IEventAggregator eventAggregator, IDownloadHistoryService downloadHistoryService, - ITrackedDownloadAlreadyImported trackedDownloadAlreadyImported, Logger logger) { _parsingService = parsingService; @@ -51,7 +53,6 @@ namespace NzbDrone.Core.Download.TrackedDownloads _cache = cacheManager.GetCache(GetType()); _formatCalculator = formatCalculator; _eventAggregator = eventAggregator; - _trackedDownloadAlreadyImported = trackedDownloadAlreadyImported; _downloadHistoryService = downloadHistoryService; _logger = logger; } @@ -264,18 +265,6 @@ namespace NzbDrone.Core.Download.TrackedDownloads } } - public void Handle(AlbumDeletedEvent message) - { - var cachedItems = _cache.Values.Where(x => x.RemoteAlbum != null && x.RemoteAlbum.Albums.Any(a => a.Id == message.Album.Id)).ToList(); - - if (cachedItems.Any()) - { - cachedItems.ForEach(UpdateCachedItem); - - _eventAggregator.PublishEvent(new TrackedDownloadRefreshedEvent(GetTrackedDownloads())); - } - } - public void Handle(AlbumInfoRefreshedEvent message) { var needsToUpdate = false; @@ -301,12 +290,45 @@ namespace NzbDrone.Core.Download.TrackedDownloads } } + public void Handle(AlbumDeletedEvent message) + { + var cachedItems = _cache.Values + .Where(t => + t.RemoteAlbum?.Albums != null && + t.RemoteAlbum.Albums.Any(a => a.Id == message.Album.Id || a.ForeignAlbumId == message.Album.ForeignAlbumId)) + .ToList(); + + if (cachedItems.Any()) + { + cachedItems.ForEach(UpdateCachedItem); + + _eventAggregator.PublishEvent(new TrackedDownloadRefreshedEvent(GetTrackedDownloads())); + } + } + + public void Handle(ArtistAddedEvent message) + { + var cachedItems = _cache.Values + .Where(t => + t.RemoteAlbum?.Artist == null || + message.Artist?.ForeignArtistId == t.RemoteAlbum.Artist.ForeignArtistId) + .ToList(); + + if (cachedItems.Any()) + { + cachedItems.ForEach(UpdateCachedItem); + + _eventAggregator.PublishEvent(new TrackedDownloadRefreshedEvent(GetTrackedDownloads())); + } + } + public void Handle(ArtistsDeletedEvent message) { - var cachedItems = _cache.Values.Where(t => - t.RemoteAlbum?.Artist != null && - message.Artists.Select(a => a.Id).Contains(t.RemoteAlbum.Artist.Id)) - .ToList(); + var cachedItems = _cache.Values + .Where(t => + t.RemoteAlbum?.Artist != null && + message.Artists.Any(a => a.Id == t.RemoteAlbum.Artist.Id || a.ForeignArtistId == t.RemoteAlbum.Artist.ForeignArtistId)) + .ToList(); if (cachedItems.Any()) { From 07db508580266da2f2aaaf63dd23b649cb0aca37 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 18 Sep 2024 23:58:18 +0300 Subject: [PATCH 194/275] Fixed: Calculating custom formats for queue --- .../TrackedDownloads/TrackedDownloadService.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs b/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs index 636104398..085373b56 100644 --- a/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs +++ b/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs @@ -6,6 +6,7 @@ using NzbDrone.Common.Cache; using NzbDrone.Common.Extensions; using NzbDrone.Common.Serializer; using NzbDrone.Core.CustomFormats; +using NzbDrone.Core.Download.Aggregation; using NzbDrone.Core.Download.History; using NzbDrone.Core.History; using NzbDrone.Core.Messaging.Events; @@ -36,6 +37,7 @@ namespace NzbDrone.Core.Download.TrackedDownloads private readonly IHistoryService _historyService; private readonly IEventAggregator _eventAggregator; private readonly IDownloadHistoryService _downloadHistoryService; + private readonly IRemoteAlbumAggregationService _aggregationService; private readonly ICustomFormatCalculationService _formatCalculator; private readonly Logger _logger; private readonly ICached _cache; @@ -46,6 +48,7 @@ namespace NzbDrone.Core.Download.TrackedDownloads ICustomFormatCalculationService formatCalculator, IEventAggregator eventAggregator, IDownloadHistoryService downloadHistoryService, + IRemoteAlbumAggregationService aggregationService, Logger logger) { _parsingService = parsingService; @@ -54,6 +57,7 @@ namespace NzbDrone.Core.Download.TrackedDownloads _formatCalculator = formatCalculator; _eventAggregator = eventAggregator; _downloadHistoryService = downloadHistoryService; + _aggregationService = aggregationService; _logger = logger; } @@ -67,6 +71,8 @@ namespace NzbDrone.Core.Download.TrackedDownloads var parsedAlbumInfo = Parser.Parser.ParseAlbumTitle(trackedDownload.DownloadItem.Title); trackedDownload.RemoteAlbum = parsedAlbumInfo == null ? null : _parsingService.Map(parsedAlbumInfo); + + _aggregationService.Augment(trackedDownload.RemoteAlbum); } public void StopTracking(string downloadId) @@ -191,9 +197,11 @@ namespace NzbDrone.Core.Download.TrackedDownloads } } - // Calculate custom formats if (trackedDownload.RemoteAlbum != null) { + _aggregationService.Augment(trackedDownload.RemoteAlbum); + + // Calculate custom formats trackedDownload.RemoteAlbum.CustomFormats = _formatCalculator.ParseCustomFormat(trackedDownload.RemoteAlbum, downloadItem.TotalSize); } From 8c99280f07498e990a2d786e84428f34ebbc0cb7 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 17 Jun 2024 20:39:13 -0700 Subject: [PATCH 195/275] Fixed: Adding albums with unknown items in queue --- .../Download/Aggregation/RemoteAlbumAggregationService.cs | 5 +++++ src/NzbDrone.Core/Music/Handlers/ArtistScannedHandler.cs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Download/Aggregation/RemoteAlbumAggregationService.cs b/src/NzbDrone.Core/Download/Aggregation/RemoteAlbumAggregationService.cs index 46352c300..ec73a0285 100644 --- a/src/NzbDrone.Core/Download/Aggregation/RemoteAlbumAggregationService.cs +++ b/src/NzbDrone.Core/Download/Aggregation/RemoteAlbumAggregationService.cs @@ -25,6 +25,11 @@ namespace NzbDrone.Core.Download.Aggregation public RemoteAlbum Augment(RemoteAlbum remoteAlbum) { + if (remoteAlbum == null) + { + return null; + } + foreach (var augmenter in _augmenters) { try diff --git a/src/NzbDrone.Core/Music/Handlers/ArtistScannedHandler.cs b/src/NzbDrone.Core/Music/Handlers/ArtistScannedHandler.cs index 97221d909..dda2b3f7c 100644 --- a/src/NzbDrone.Core/Music/Handlers/ArtistScannedHandler.cs +++ b/src/NzbDrone.Core/Music/Handlers/ArtistScannedHandler.cs @@ -47,7 +47,7 @@ namespace NzbDrone.Core.Music _eventAggregator.PublishEvent(new ArtistAddCompletedEvent(artist)); - if (artist.AddOptions.SearchForMissingAlbums) + if (addOptions.SearchForMissingAlbums) { _commandQueueManager.Push(new MissingAlbumSearchCommand(artist.Id)); } From a2201001c514d07da01c63fcb88e912411a30de4 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 5 Mar 2025 18:03:20 +0000 Subject: [PATCH 196/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Fixer Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Co-authored-by: youngjimisme <977671346@qq.com> Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/fi.json | 3 ++- src/NzbDrone.Core/Localization/Core/zh_CN.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 4429df780..370800fd6 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -1348,5 +1348,6 @@ "Disambiguation": "Yksinkertaistaminen", "NotificationsTagsArtistHelpText": "Ilmoita vain vähintään yhdellä täsmäävällä tunnisteella merkityistä esittäjistä.", "NotificationsSettingsWebhookHeaders": "Otsakkeet", - "TracksLoadError": "Virhe ladattaessa kappaleita." + "TracksLoadError": "Virhe ladattaessa kappaleita.", + "NoMediumInformation": "Julkaisumuodon tietoja ei ole saatavilla." } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 7247d2857..6c1f63dbe 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -1336,5 +1336,6 @@ "DownloadClientSettingsPostImportCategoryHelpText": "导入下载后要设置的 {appName} 的分类。 即使做种完成,{appName} 也不会删除该分类中的种子。 留空以保留同一分类。", "DownloadClientSettingsRecentPriority": "最近优先", "PostImportCategory": "导入后分类", - "NotificationsSettingsWebhookHeaders": "标头" + "NotificationsSettingsWebhookHeaders": "标头", + "DefaultDelayProfileArtist": "This is the default profile. It applies to all artists that don't have an explicit profile." } From 9fc549b43bc5076fa8e500134440ffd114c8a899 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 2 Mar 2025 06:53:04 +0200 Subject: [PATCH 197/275] Fixed: Replace diacritics in Clean Title naming tokens --- .../OrganizerTests/FileNameBuilderTests/CleanTitleFixture.cs | 3 ++- src/NzbDrone.Core/Organizer/FileNameBuilder.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/CleanTitleFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/CleanTitleFixture.cs index 0a637fc17..e85ab28b2 100644 --- a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/CleanTitleFixture.cs +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/CleanTitleFixture.cs @@ -64,7 +64,7 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests } [TestCase("Florence + the Machine", "Florence + the Machine")] - [TestCase("Beyoncé X10", "Beyoncé X10")] + [TestCase("Beyoncé X10", "Beyonce X10")] [TestCase("Girlfriends' Guide to Divorce", "Girlfriends Guide to Divorce")] [TestCase("Rule #23: Never Lie to the Kids", "Rule #23 Never Lie to the Kids")] [TestCase("Anne Hathaway/Florence + The Machine", "Anne Hathaway Florence + The Machine")] @@ -81,6 +81,7 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests [TestCase("[a] title", "a title")] [TestCase("backslash \\ backlash", "backslash backlash")] [TestCase("I'm the Boss", "Im the Boss")] + [TestCase("Joker: Folie à deux", "Joker Folie a deux")] public void should_get_expected_title_back(string name, string expected) { _artist.Name = name; diff --git a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs index abfa9399d..a3342f5b3 100644 --- a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs +++ b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs @@ -258,7 +258,7 @@ namespace NzbDrone.Core.Organizer title = ScenifyReplaceChars.Replace(title, " "); title = ScenifyRemoveChars.Replace(title, string.Empty); - return title; + return title.RemoveDiacritics(); } public static string TitleThe(string title) From 6e57c14e57280f4544c8185cce4457d7942a6004 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 11 Aug 2024 08:48:22 -0700 Subject: [PATCH 198/275] Fixed: Marking queued item as failed not blocking the correct Torrent Info Hash (cherry picked from commit 4b186e894e4e229a435c077e00c65b67ca178333) Fixes #4977 Closes #4988 --- src/Lidarr.Api.V1/Queue/QueueController.cs | 2 +- .../Blocklisting/BlocklistService.cs | 4 +- .../Download/FailedDownloadService.cs | 50 ++++++++++--------- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/Lidarr.Api.V1/Queue/QueueController.cs b/src/Lidarr.Api.V1/Queue/QueueController.cs index 730b50436..8123f30fe 100644 --- a/src/Lidarr.Api.V1/Queue/QueueController.cs +++ b/src/Lidarr.Api.V1/Queue/QueueController.cs @@ -302,7 +302,7 @@ namespace Lidarr.Api.V1.Queue if (blocklist) { - _failedDownloadService.MarkAsFailed(trackedDownload.DownloadItem.DownloadId, skipRedownload); + _failedDownloadService.MarkAsFailed(trackedDownload, skipRedownload); } if (!removeFromClient && !blocklist && !changeCategory) diff --git a/src/NzbDrone.Core/Blocklisting/BlocklistService.cs b/src/NzbDrone.Core/Blocklisting/BlocklistService.cs index 18c4503f1..147b436a8 100644 --- a/src/NzbDrone.Core/Blocklisting/BlocklistService.cs +++ b/src/NzbDrone.Core/Blocklisting/BlocklistService.cs @@ -185,7 +185,9 @@ namespace NzbDrone.Core.Blocklisting Indexer = message.Data.GetValueOrDefault("indexer"), Protocol = (DownloadProtocol)Convert.ToInt32(message.Data.GetValueOrDefault("protocol")), Message = message.Message, - TorrentInfoHash = message.Data.GetValueOrDefault("torrentInfoHash") + TorrentInfoHash = message.TrackedDownload?.Protocol == DownloadProtocol.Torrent + ? message.TrackedDownload.DownloadItem.DownloadId + : message.Data.GetValueOrDefault("torrentInfoHash", null) }; if (Enum.TryParse(message.Data.GetValueOrDefault("indexerFlags"), true, out IndexerFlags flags)) diff --git a/src/NzbDrone.Core/Download/FailedDownloadService.cs b/src/NzbDrone.Core/Download/FailedDownloadService.cs index 60c9e8d05..d3d64f28a 100644 --- a/src/NzbDrone.Core/Download/FailedDownloadService.cs +++ b/src/NzbDrone.Core/Download/FailedDownloadService.cs @@ -12,7 +12,7 @@ namespace NzbDrone.Core.Download public interface IFailedDownloadService { void MarkAsFailed(int historyId, bool skipRedownload = false); - void MarkAsFailed(string downloadId, bool skipRedownload = false); + void MarkAsFailed(TrackedDownload trackedDownload, bool skipRedownload = false); void Check(TrackedDownload trackedDownload); void ProcessFailed(TrackedDownload trackedDownload); } @@ -20,15 +20,12 @@ namespace NzbDrone.Core.Download public class FailedDownloadService : IFailedDownloadService { private readonly IHistoryService _historyService; - private readonly ITrackedDownloadService _trackedDownloadService; private readonly IEventAggregator _eventAggregator; public FailedDownloadService(IHistoryService historyService, - ITrackedDownloadService trackedDownloadService, IEventAggregator eventAggregator) { _historyService = historyService; - _trackedDownloadService = trackedDownloadService; _eventAggregator = eventAggregator; } @@ -37,9 +34,10 @@ namespace NzbDrone.Core.Download var history = _historyService.Get(historyId); var downloadId = history.DownloadId; + if (downloadId.IsNullOrWhiteSpace()) { - PublishDownloadFailedEvent(new List { history }, "Manually marked as failed", skipRedownload: skipRedownload); + PublishDownloadFailedEvent(history, new List { history.AlbumId }, "Manually marked as failed", skipRedownload: skipRedownload); return; } @@ -53,21 +51,19 @@ namespace NzbDrone.Core.Download } // Add any other history items for the download ID then filter out any duplicate history items. - grabbedHistory.AddRange(_historyService.Find(downloadId, EntityHistoryEventType.Grabbed)); + grabbedHistory.AddRange(GetGrabbedHistory(downloadId)); grabbedHistory = grabbedHistory.DistinctBy(h => h.Id).ToList(); - PublishDownloadFailedEvent(grabbedHistory, "Manually marked as failed"); + PublishDownloadFailedEvent(history, GetAlbumIds(grabbedHistory), "Manually marked as failed"); } - public void MarkAsFailed(string downloadId, bool skipRedownload = false) + public void MarkAsFailed(TrackedDownload trackedDownload, bool skipRedownload = false) { - var history = _historyService.Find(downloadId, EntityHistoryEventType.Grabbed); + var history = GetGrabbedHistory(trackedDownload.DownloadItem.DownloadId); if (history.Any()) { - var trackedDownload = _trackedDownloadService.Find(downloadId); - - PublishDownloadFailedEvent(history, "Manually marked as failed", trackedDownload, skipRedownload: skipRedownload); + PublishDownloadFailedEvent(history.First(), GetAlbumIds(history), "Manually marked as failed", trackedDownload, skipRedownload: skipRedownload); } } @@ -82,9 +78,7 @@ namespace NzbDrone.Core.Download if (trackedDownload.DownloadItem.IsEncrypted || trackedDownload.DownloadItem.Status == DownloadItemStatus.Failed) { - var grabbedItems = _historyService - .Find(trackedDownload.DownloadItem.DownloadId, EntityHistoryEventType.Grabbed) - .ToList(); + var grabbedItems = GetGrabbedHistory(trackedDownload.DownloadItem.DownloadId); if (grabbedItems.Empty()) { @@ -103,9 +97,7 @@ namespace NzbDrone.Core.Download return; } - var grabbedItems = _historyService - .Find(trackedDownload.DownloadItem.DownloadId, EntityHistoryEventType.Grabbed) - .ToList(); + var grabbedItems = GetGrabbedHistory(trackedDownload.DownloadItem.DownloadId); if (grabbedItems.Empty()) { @@ -124,18 +116,17 @@ namespace NzbDrone.Core.Download } trackedDownload.State = TrackedDownloadState.DownloadFailed; - PublishDownloadFailedEvent(grabbedItems, failure, trackedDownload); + PublishDownloadFailedEvent(grabbedItems.First(), GetAlbumIds(grabbedItems), failure, trackedDownload); } - private void PublishDownloadFailedEvent(List historyItems, string message, TrackedDownload trackedDownload = null, bool skipRedownload = false) + private void PublishDownloadFailedEvent(EntityHistory historyItem, List albumIds, string message, TrackedDownload trackedDownload = null, bool skipRedownload = false) { - var historyItem = historyItems.Last(); Enum.TryParse(historyItem.Data.GetValueOrDefault(EntityHistory.RELEASE_SOURCE, ReleaseSourceType.Unknown.ToString()), out ReleaseSourceType releaseSource); var downloadFailedEvent = new DownloadFailedEvent { ArtistId = historyItem.ArtistId, - AlbumIds = historyItems.Select(h => h.AlbumId).Distinct().ToList(), + AlbumIds = albumIds, Quality = historyItem.Quality, SourceTitle = historyItem.SourceTitle, DownloadClient = historyItem.Data.GetValueOrDefault(EntityHistory.DOWNLOAD_CLIENT), @@ -144,10 +135,23 @@ namespace NzbDrone.Core.Download Data = historyItem.Data, TrackedDownload = trackedDownload, SkipRedownload = skipRedownload, - ReleaseSource = releaseSource + ReleaseSource = releaseSource, }; _eventAggregator.PublishEvent(downloadFailedEvent); } + + private List GetAlbumIds(List historyItems) + { + return historyItems.Select(h => h.AlbumId).Distinct().ToList(); + } + + private List GetGrabbedHistory(string downloadId) + { + // Sort by date so items are always in the same order + return _historyService.Find(downloadId, EntityHistoryEventType.Grabbed) + .OrderByDescending(h => h.Date) + .ToList(); + } } } From 5a3f8794426834d8007ced2f4ebace4448ccadd7 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 6 Mar 2025 17:28:36 +0200 Subject: [PATCH 199/275] Fixed: Sending import failure notifications to webhook/notifiarr --- src/NzbDrone.Core/Notifications/AlbumDownloadMessage.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Notifications/AlbumDownloadMessage.cs b/src/NzbDrone.Core/Notifications/AlbumDownloadMessage.cs index 4cd26be55..f0bd9a323 100644 --- a/src/NzbDrone.Core/Notifications/AlbumDownloadMessage.cs +++ b/src/NzbDrone.Core/Notifications/AlbumDownloadMessage.cs @@ -11,8 +11,8 @@ namespace NzbDrone.Core.Notifications public Artist Artist { get; set; } public Album Album { get; set; } public AlbumRelease Release { get; set; } - public List TrackFiles { get; set; } - public List OldFiles { get; set; } + public List TrackFiles { get; set; } = new (); + public List OldFiles { get; set; } = new (); public DownloadClientItemClientInfo DownloadClientInfo { get; set; } public string DownloadId { get; set; } From 342c82aa1f523aa1e99afde0ec1e160e846fe773 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 6 Mar 2025 19:15:59 +0200 Subject: [PATCH 200/275] Fixed: Avoid notifications on reprocessing failed items in queue --- src/NzbDrone.Core/Download/CompletedDownloadService.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index b5010b8f8..6b80ee34e 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -166,8 +166,13 @@ namespace NzbDrone.Core.Download new TrackedDownloadStatusMessage(Path.GetFileName(v.ImportDecision.Item.Path), v.Errors))); + // Mark as failed to prevent further attempts at processing + trackedDownload.State = TrackedDownloadState.ImportFailed; + // Publish event to notify album was imported incomplete _eventAggregator.PublishEvent(new AlbumImportIncompleteEvent(trackedDownload)); + + return; } if (statusMessages.Any()) From 29f581086550ce5996fd56d516500cc32c13a9ce Mon Sep 17 00:00:00 2001 From: Servarr Date: Thu, 6 Mar 2025 17:22:36 +0000 Subject: [PATCH 201/275] Automated API Docs update --- src/Lidarr.Api.V1/openapi.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index a940258aa..8849354f6 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -12922,6 +12922,7 @@ "downloading", "downloadFailed", "downloadFailedPending", + "importBlocked", "importPending", "importing", "importFailed", From 1e42ae94aa77f2b29dfd85cbc8b2c3914638919f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 6 Mar 2025 19:49:10 +0200 Subject: [PATCH 202/275] Fix Completed Download Service tests --- .../Download/CompletedDownloadServiceTests/ImportFixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs index ee0651ea3..9719b7f1f 100644 --- a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs +++ b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs @@ -395,7 +395,7 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Never()); - _trackedDownload.State.Should().Be(TrackedDownloadState.ImportBlocked); + _trackedDownload.State.Should().Be(TrackedDownloadState.ImportFailed); } private void AssertImported() From 6c6f92fbed4854e7e902aee1c8f0b34e14e99100 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 7 Mar 2025 23:17:29 +0200 Subject: [PATCH 203/275] Bump SixLabors.ImageSharp to 3.1.7 --- src/NzbDrone.Core/Lidarr.Core.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Lidarr.Core.csproj b/src/NzbDrone.Core/Lidarr.Core.csproj index 54543b035..42a17da5d 100644 --- a/src/NzbDrone.Core/Lidarr.Core.csproj +++ b/src/NzbDrone.Core/Lidarr.Core.csproj @@ -27,7 +27,7 @@ - +
From 84b91ba6c1fda2c7ef860ee0e9be9bf5fcb6f76b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 7 Mar 2025 23:18:35 +0200 Subject: [PATCH 204/275] Bump Polly to 8.5.2 --- src/NzbDrone.Core/Lidarr.Core.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Lidarr.Core.csproj b/src/NzbDrone.Core/Lidarr.Core.csproj index 42a17da5d..a56bfb295 100644 --- a/src/NzbDrone.Core/Lidarr.Core.csproj +++ b/src/NzbDrone.Core/Lidarr.Core.csproj @@ -7,7 +7,7 @@ - + From 9314eb34abc75668da42f0939fa4d831e8a0bf50 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 8 Mar 2025 15:44:52 +0200 Subject: [PATCH 205/275] Fixed: Displaying warnings for automatic failed imports in queue --- src/NzbDrone.Core/Download/CompletedDownloadService.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index 6b80ee34e..6d3dd2f96 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -169,6 +169,11 @@ namespace NzbDrone.Core.Download // Mark as failed to prevent further attempts at processing trackedDownload.State = TrackedDownloadState.ImportFailed; + if (statusMessages.Any()) + { + trackedDownload.Warn(statusMessages.ToArray()); + } + // Publish event to notify album was imported incomplete _eventAggregator.PublishEvent(new AlbumImportIncompleteEvent(trackedDownload)); From 6dd87fd3486c17435d028101382d93db15365095 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 9 Mar 2025 11:52:12 +0200 Subject: [PATCH 206/275] Bump version to 2.10.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0f6862ed2..efdb8b4d1 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.10.1' + majorVersion: '2.10.2' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 33049910de8ed733ed915af58ab37a7829434c71 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 16 Mar 2025 10:47:47 +0200 Subject: [PATCH 207/275] Bump version to 2.10.3 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index efdb8b4d1..3050b9438 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.10.2' + majorVersion: '2.10.3' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From a1c2bfa527111c78aef174dadb381524166ee263 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 16 Mar 2025 09:37:29 +0000 Subject: [PATCH 208/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Fixer Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ar/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/bg/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/cs/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/da/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/de/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/el/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/es/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/he/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/hu/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/is/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/it/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ja/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ko/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nb_NO/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/nl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pl/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/pt_BR/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ro/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/sv/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/th/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/tr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/uk/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/vi/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ar.json | 8 ++- src/NzbDrone.Core/Localization/Core/bg.json | 8 ++- src/NzbDrone.Core/Localization/Core/ca.json | 10 ++- src/NzbDrone.Core/Localization/Core/cs.json | 11 ++- src/NzbDrone.Core/Localization/Core/da.json | 10 ++- src/NzbDrone.Core/Localization/Core/de.json | 12 +++- src/NzbDrone.Core/Localization/Core/el.json | 8 ++- src/NzbDrone.Core/Localization/Core/es.json | 12 +++- src/NzbDrone.Core/Localization/Core/fi.json | 12 +++- src/NzbDrone.Core/Localization/Core/fr.json | 12 +++- src/NzbDrone.Core/Localization/Core/he.json | 8 ++- src/NzbDrone.Core/Localization/Core/hi.json | 8 ++- src/NzbDrone.Core/Localization/Core/hr.json | 3 +- src/NzbDrone.Core/Localization/Core/hu.json | 11 ++- src/NzbDrone.Core/Localization/Core/is.json | 8 ++- src/NzbDrone.Core/Localization/Core/it.json | 16 ++++- src/NzbDrone.Core/Localization/Core/ja.json | 8 ++- src/NzbDrone.Core/Localization/Core/ko.json | 70 ++++++++++++++++++- .../Localization/Core/nb_NO.json | 3 +- src/NzbDrone.Core/Localization/Core/nl.json | 10 ++- src/NzbDrone.Core/Localization/Core/pl.json | 8 ++- src/NzbDrone.Core/Localization/Core/pt.json | 9 ++- .../Localization/Core/pt_BR.json | 12 +++- src/NzbDrone.Core/Localization/Core/ro.json | 13 +++- src/NzbDrone.Core/Localization/Core/ru.json | 22 +++++- src/NzbDrone.Core/Localization/Core/sk.json | 3 +- src/NzbDrone.Core/Localization/Core/sv.json | 9 ++- src/NzbDrone.Core/Localization/Core/th.json | 8 ++- src/NzbDrone.Core/Localization/Core/tr.json | 12 +++- src/NzbDrone.Core/Localization/Core/uk.json | 8 ++- src/NzbDrone.Core/Localization/Core/vi.json | 8 ++- .../Localization/Core/zh_CN.json | 12 +++- 32 files changed, 340 insertions(+), 32 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ar.json b/src/NzbDrone.Core/Localization/Core/ar.json index 276ff036c..8e5b877da 100644 --- a/src/NzbDrone.Core/Localization/Core/ar.json +++ b/src/NzbDrone.Core/Localization/Core/ar.json @@ -759,5 +759,11 @@ "Preferred": "يفضل", "Today": "اليوم", "MappedNetworkDrivesWindowsService": "لا تتوفر محركات أقراص الشبكة المعينة عند التشغيل كخدمة Windows. يرجى الاطلاع على التعليمات لمزيد من المعلومات", - "DownloadClientSettingsRecentPriority": "أولوية العميل" + "DownloadClientSettingsRecentPriority": "أولوية العميل", + "CheckDownloadClientForDetails": "تحقق من برنامج التحميل لمزيد من التفاصيل", + "Downloaded": "تم التنزيل", + "Paused": "متوقف مؤقتًا", + "Pending": "قيد الانتظار", + "WaitingToImport": "في انتظار الاستيراد", + "WaitingToProcess": "في انتظار المعالجة" } diff --git a/src/NzbDrone.Core/Localization/Core/bg.json b/src/NzbDrone.Core/Localization/Core/bg.json index 5a5654ada..4150d7860 100644 --- a/src/NzbDrone.Core/Localization/Core/bg.json +++ b/src/NzbDrone.Core/Localization/Core/bg.json @@ -829,5 +829,11 @@ "Album": "албум", "AutoAdd": "Автоматично добавяне", "CatalogNumber": "каталожен номер", - "Discography": "дискография" + "Discography": "дискография", + "CheckDownloadClientForDetails": "проверете клиента за изтегляне за повече подробности", + "WaitingToImport": "Изчаква се импортиране", + "WaitingToProcess": "Изчаква се обработка", + "Downloaded": "Изтеглено", + "Paused": "На пауза", + "Pending": "В очакване" } diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index 48699e2d2..f090fc042 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -984,5 +984,13 @@ "UpdateFiltered": "Actualitza filtrats", "IndexerSettingsApiUrl": "URL de l'API", "CountCustomFormatsSelected": "{count} format(s) personalitzat(s) seleccionat(s)", - "Install": "Instal·la" + "Install": "Instal·la", + "CheckDownloadClientForDetails": "Consulteu el client de descàrrega per a obtenir més detalls", + "DownloadWarning": "Avís de baixada: {warningMessage}", + "Downloaded": "S'ha baixat", + "ImportFailed": "La importació ha fallat: {sourceTitle}", + "Paused": "En pausa", + "Pending": "Pendents", + "WaitingToImport": "S’està esperant per a importar", + "WaitingToProcess": "S’està esperant per a processar" } diff --git a/src/NzbDrone.Core/Localization/Core/cs.json b/src/NzbDrone.Core/Localization/Core/cs.json index c184cd978..62778716a 100644 --- a/src/NzbDrone.Core/Localization/Core/cs.json +++ b/src/NzbDrone.Core/Localization/Core/cs.json @@ -917,5 +917,14 @@ "DoNotBlocklistHint": "Odstraň bez přidání do seznamu blokování", "DownloadClientAriaSettingsDirectoryHelpText": "Volitelné umístění pro stahování, pokud chcete použít výchozí umístění Aria2, ponechte prázdné", "DownloadClientQbittorrentSettingsContentLayout": "Rozvržení obsahu", - "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Zda použít rozvržení obsahu nakonfigurované v qBittorrentu, původní rozvržení z torrentu nebo vždy vytvořit podsložku (qBittorrent 4.3.2+)" + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "Zda použít rozvržení obsahu nakonfigurované v qBittorrentu, původní rozvržení z torrentu nebo vždy vytvořit podsložku (qBittorrent 4.3.2+)", + "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", + "WaitingToImport": "Čekání na import", + "WaitingToProcess": "Čekání na zpracování", + "DownloadClientDelugeSettingsDirectoryCompleted": "Adresář kam přesunout po dokončení", + "CheckDownloadClientForDetails": "zkontrolujte klienta pro stahování pro více informací", + "Downloaded": "Staženo", + "Paused": "Pozastaveno", + "Pending": "čekající" } diff --git a/src/NzbDrone.Core/Localization/Core/da.json b/src/NzbDrone.Core/Localization/Core/da.json index ebe0fb7be..dec645e3e 100644 --- a/src/NzbDrone.Core/Localization/Core/da.json +++ b/src/NzbDrone.Core/Localization/Core/da.json @@ -798,5 +798,13 @@ "Episode": "afsnit", "MetadataProfile": "metadataprofil", "Min": "Min", - "DownloadClientSettingsRecentPriority": "Kundens prioritet" + "DownloadClientSettingsRecentPriority": "Kundens prioritet", + "Pending": "Verserende", + "ImportFailed": "Import mislykkedes: »{sourceTitle}«", + "CheckDownloadClientForDetails": "tjek download klient for flere detaljer", + "DownloadWarning": "Downloadadvarsel: »{warningMessage}«", + "Downloaded": "Downloadet", + "Paused": "Pauset", + "WaitingToImport": "Venter på at importere", + "WaitingToProcess": "Venter på at behandle" } diff --git a/src/NzbDrone.Core/Localization/Core/de.json b/src/NzbDrone.Core/Localization/Core/de.json index 6ce2aa25f..6970578a9 100644 --- a/src/NzbDrone.Core/Localization/Core/de.json +++ b/src/NzbDrone.Core/Localization/Core/de.json @@ -1349,5 +1349,15 @@ "Inactive": "Inaktiv", "AlbumInfo": "Album Informationen", "Banners": "Banner", - "DeleteArtistFolders": "Künstlerordner löschen" + "DeleteArtistFolders": "Künstlerordner löschen", + "ImportFailed": "Import fehlgeschlagen: {sourceTitle}", + "DownloadWarning": "Download Warnung: {warningMessage}", + "Downloaded": "Heruntergeladen", + "Pending": "Ausstehend", + "PendingDownloadClientUnavailable": "Ausstehend - Download-Client nicht verfügbar", + "UnableToImportAutomatically": "Kann nicht automatisch importiert werden", + "CheckDownloadClientForDetails": "Weitere Informationen finden Sie im Download-Client", + "Paused": "Pausiert", + "WaitingToImport": "Warten auf Import", + "WaitingToProcess": "Warten auf Bearbeitung" } diff --git a/src/NzbDrone.Core/Localization/Core/el.json b/src/NzbDrone.Core/Localization/Core/el.json index 1ba176c58..4e8a92dee 100644 --- a/src/NzbDrone.Core/Localization/Core/el.json +++ b/src/NzbDrone.Core/Localization/Core/el.json @@ -1121,5 +1121,11 @@ "Min": "Ελάχ", "Today": "Σήμερα", "MappedNetworkDrivesWindowsService": "Οι αντιστοιχισμένες μονάδες δίσκου δικτύου δεν είναι διαθέσιμες κατά την εκτέλεση ως υπηρεσία Windows. Ανατρέξτε στις Συχνές Ερωτήσεις για περισσότερες πληροφορίες", - "DownloadClientSettingsRecentPriority": "Προτεραιότητα πελάτη" + "DownloadClientSettingsRecentPriority": "Προτεραιότητα πελάτη", + "Pending": "εκκρεμής", + "WaitingToImport": "Αναμονή για εισαγωγή", + "WaitingToProcess": "Αναμονή για επεξεργασία", + "CheckDownloadClientForDetails": "ελέγξτε το πρόγραμμα-πελάτη λήψης για περισσότερες λεπτομέρειες", + "Downloaded": "Κατεβασμένα", + "Paused": "Σε παύση" } diff --git a/src/NzbDrone.Core/Localization/Core/es.json b/src/NzbDrone.Core/Localization/Core/es.json index 2dc642ba6..a649ba180 100644 --- a/src/NzbDrone.Core/Localization/Core/es.json +++ b/src/NzbDrone.Core/Localization/Core/es.json @@ -1349,5 +1349,15 @@ "DownloadClientSettingsOlderPriorityAlbumHelpText": "Prioridad a usar cuando se capturen álbumes lanzados hace más de 14 días", "NotificationsSettingsWebhookHeaders": "Cabeceras", "NoMediumInformation": "Ninguna información del medio disponible.", - "TracksLoadError": "No se pudo cargar las pistas" + "TracksLoadError": "No se pudo cargar las pistas", + "CheckDownloadClientForDetails": "Revisar el cliente de descarga para más detalles", + "DownloadWarning": "Alerta de descarga: {warningMessage}", + "Downloaded": "Descargado", + "ImportFailed": "La importación falló: {sourceTitle}", + "Paused": "Pausado", + "Pending": "Pendiente", + "PendingDownloadClientUnavailable": "Pendiente - El cliente de descarga no está disponible", + "UnableToImportAutomatically": "No se pudo importar automáticamente", + "WaitingToImport": "Esperar para importar", + "WaitingToProcess": "Esperar al proceso" } diff --git a/src/NzbDrone.Core/Localization/Core/fi.json b/src/NzbDrone.Core/Localization/Core/fi.json index 370800fd6..9eab9f71b 100644 --- a/src/NzbDrone.Core/Localization/Core/fi.json +++ b/src/NzbDrone.Core/Localization/Core/fi.json @@ -1349,5 +1349,15 @@ "NotificationsTagsArtistHelpText": "Ilmoita vain vähintään yhdellä täsmäävällä tunnisteella merkityistä esittäjistä.", "NotificationsSettingsWebhookHeaders": "Otsakkeet", "TracksLoadError": "Virhe ladattaessa kappaleita.", - "NoMediumInformation": "Julkaisumuodon tietoja ei ole saatavilla." + "NoMediumInformation": "Julkaisumuodon tietoja ei ole saatavilla.", + "DownloadWarning": "Latausvaroitus: {warningMessage}", + "UnableToImportAutomatically": "Virhe automaattituonnissa.", + "WaitingToImport": "Odottaa tuontia", + "WaitingToProcess": "Odottaa käsittelyä", + "CheckDownloadClientForDetails": "katso lisätietoja latauspalvelusta", + "Downloaded": "Ladattu", + "Paused": "Keskeytetty", + "Pending": "Odottaa", + "PendingDownloadClientUnavailable": "Odottaa – Latauspalvelu ei ole käytettävissä", + "ImportFailed": "Tuonti epäonnistui: {sourceTitle}" } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index e824e21dd..7b10d98b2 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -1340,5 +1340,15 @@ "DownloadClientSettingsRecentPriority": "Priorité récente", "PostImportCategory": "Catégorie après l'importation", "ManageFormats": "Gérer les formats", - "NotificationsSettingsWebhookHeaders": "En-têtes" + "NotificationsSettingsWebhookHeaders": "En-têtes", + "ImportFailed": "Échec de l'importation : {sourceTitle}", + "CheckDownloadClientForDetails": "Pour plus de détails, consultez le client de téléchargement", + "DownloadWarning": "Avertissement de téléchargement : {warningMessage}", + "Downloaded": "Téléchargé", + "Paused": "En pause", + "Pending": "En attente", + "PendingDownloadClientUnavailable": "En attente – Le client de téléchargement n'est pas disponible", + "UnableToImportAutomatically": "Impossible d'importer automatiquement", + "WaitingToImport": "En attente d'import", + "WaitingToProcess": "En attente de traitement" } diff --git a/src/NzbDrone.Core/Localization/Core/he.json b/src/NzbDrone.Core/Localization/Core/he.json index 04a74c103..ec324b3bb 100644 --- a/src/NzbDrone.Core/Localization/Core/he.json +++ b/src/NzbDrone.Core/Localization/Core/he.json @@ -797,5 +797,11 @@ "Min": "דקה", "Preferred": "מועדף", "MappedNetworkDrivesWindowsService": "כונני רשת ממופים אינם זמינים כאשר הם פועלים כשירות Windows. אנא עיין בשאלות הנפוצות למידע נוסף", - "DownloadClientSettingsRecentPriority": "עדיפות לקוח" + "DownloadClientSettingsRecentPriority": "עדיפות לקוח", + "Paused": "מושהית", + "CheckDownloadClientForDetails": "בדוק את לקוח ההורדות לפרטים נוספים", + "Downloaded": "הורד", + "Pending": "ממתין ל", + "WaitingToImport": "ממתין לייבוא", + "WaitingToProcess": "מחכה לעיבוד" } diff --git a/src/NzbDrone.Core/Localization/Core/hi.json b/src/NzbDrone.Core/Localization/Core/hi.json index 67f74f90f..b286c95f9 100644 --- a/src/NzbDrone.Core/Localization/Core/hi.json +++ b/src/NzbDrone.Core/Localization/Core/hi.json @@ -753,5 +753,11 @@ "Preferred": "पसंदीदा", "Today": "आज", "MappedNetworkDrivesWindowsService": "विंडोज सर्विस के रूप में चलने पर मैप्ड नेटवर्क ड्राइव उपलब्ध नहीं हैं। अधिक जानकारी के लिए कृपया FAQ देखें", - "DownloadClientSettingsRecentPriority": "ग्राहक प्राथमिकता" + "DownloadClientSettingsRecentPriority": "ग्राहक प्राथमिकता", + "Downloaded": "डाउनलोड", + "CheckDownloadClientForDetails": "अधिक विवरण के लिए डाउनलोड क्लाइंट की जाँच करें", + "Paused": "रोके गए", + "Pending": "विचाराधीन", + "WaitingToImport": "आयात की प्रतीक्षा में", + "WaitingToProcess": "प्रक्रिया की प्रतीक्षा की जा रही है" } diff --git a/src/NzbDrone.Core/Localization/Core/hr.json b/src/NzbDrone.Core/Localization/Core/hr.json index d2dd93826..0771d0e8e 100644 --- a/src/NzbDrone.Core/Localization/Core/hr.json +++ b/src/NzbDrone.Core/Localization/Core/hr.json @@ -307,5 +307,6 @@ "DeleteSelectedTrackFilesMessageText": "Jeste li sigurni da želite obrisati ovaj profil odgode?", "AddDelayProfileError": "Neuspješno dodavanje profila odgode, molimo pokušaj ponovno.", "Today": "Danas", - "DownloadClientSettingsRecentPriority": "Prioritet Klijenata" + "DownloadClientSettingsRecentPriority": "Prioritet Klijenata", + "CheckDownloadClientForDetails": "provjerite klienta za preuzimanje za još detalja" } diff --git a/src/NzbDrone.Core/Localization/Core/hu.json b/src/NzbDrone.Core/Localization/Core/hu.json index 387c736c6..beb21fdb7 100644 --- a/src/NzbDrone.Core/Localization/Core/hu.json +++ b/src/NzbDrone.Core/Localization/Core/hu.json @@ -1229,5 +1229,14 @@ "Today": "Ma", "DownloadClientSettingsOlderPriority": "Régebbi prioritás", "DownloadClientSettingsRecentPriority": "Legutóbbi prioritás", - "PostImportCategory": "Import utáni kategória" + "PostImportCategory": "Import utáni kategória", + "CheckDownloadClientForDetails": "További részletekért ellenőrizze a letöltési klienst", + "DownloadWarning": "Letöltési figyelmeztetés: {warningMessage}", + "Downloaded": "Letöltve", + "Paused": "Szüneteltetve", + "Pending": "Függőben levő", + "PendingDownloadClientUnavailable": "Függőben – A letöltési kliens nem érhető el", + "ImportFailed": "Sikertelen importálás: {sourceTitle}", + "WaitingToImport": "Várakozás importálásra", + "WaitingToProcess": "Várakozás feldolgozásra" } diff --git a/src/NzbDrone.Core/Localization/Core/is.json b/src/NzbDrone.Core/Localization/Core/is.json index 09291ef88..1718406fe 100644 --- a/src/NzbDrone.Core/Localization/Core/is.json +++ b/src/NzbDrone.Core/Localization/Core/is.json @@ -754,5 +754,11 @@ "Preferred": "Æskilegt", "Today": "Í dag", "MappedNetworkDrivesWindowsService": "Kortlagðar netdrif eru ekki fáanlegar þegar þær eru keyrðar sem Windows þjónusta. Vinsamlegast skoðaðu algengar spurningar fyrir frekari upplýsingar", - "DownloadClientSettingsRecentPriority": "Forgangur viðskiptavinar" + "DownloadClientSettingsRecentPriority": "Forgangur viðskiptavinar", + "CheckDownloadClientForDetails": "athugaðu niðurhals viðskiptavinur til að fá frekari upplýsingar", + "Downloaded": "Sótt", + "Pending": "Í bið", + "Paused": "Hlé gert", + "WaitingToImport": "Bið eftir að flytja inn", + "WaitingToProcess": "Bið eftir að vinna" } diff --git a/src/NzbDrone.Core/Localization/Core/it.json b/src/NzbDrone.Core/Localization/Core/it.json index 97eae932a..ea9515178 100644 --- a/src/NzbDrone.Core/Localization/Core/it.json +++ b/src/NzbDrone.Core/Localization/Core/it.json @@ -1047,5 +1047,19 @@ "Min": "Min", "Today": "Oggi", "MappedNetworkDrivesWindowsService": "Le unità di rete mappate non sono disponibili eseguendo come servizio di Windows. Vedere le FAQ per maggiori informazioni", - "DownloadClientSettingsRecentPriority": "Priorità Client" + "DownloadClientSettingsRecentPriority": "Priorità Client", + "AutoTaggingRequiredHelpText": "Questa condizione {implementationName} deve corrispondere perché si applichi la regola di auto tagging. Altrimenti è sufficiente una singola corrispondenza {implementationName}.", + "CheckDownloadClientForDetails": "controlla il client di download per maggiori dettagli", + "PendingDownloadClientUnavailable": "In Attesa - Client di Download in attesa", + "WaitingToImport": "In attesa di importazione", + "WaitingToProcess": "In attesa di processo", + "AutoRedownloadFailedFromInteractiveSearchHelpText": "Cerca automaticamente e tenta di scaricare una versione diversa quando il rilascio non riuscito è stato acquisito dalla ricerca interattiva", + "AutoRedownloadFailedFromInteractiveSearch": "Riesecuzione del download non riuscita dalla ricerca interattiva", + "AutoTaggingLoadError": "Impossibile caricare auto tagging", + "DownloadWarning": "Avviso di download: {warningMessage}", + "Downloaded": "Scaricato", + "ImportFailed": "Importazione fallita: {sourceTitle}", + "Paused": "In Pausa", + "Pending": "In Attesa", + "UnableToImportAutomatically": "Impossibile Importare Automaticamente" } diff --git a/src/NzbDrone.Core/Localization/Core/ja.json b/src/NzbDrone.Core/Localization/Core/ja.json index fe2555e2f..93383c278 100644 --- a/src/NzbDrone.Core/Localization/Core/ja.json +++ b/src/NzbDrone.Core/Localization/Core/ja.json @@ -754,5 +754,11 @@ "Preferred": "優先", "Today": "今日", "MappedNetworkDrivesWindowsService": "マップされたネットワークドライブは、Windowsサービスとして実行している場合は使用できません。詳細については、FAQを参照してください", - "DownloadClientSettingsRecentPriority": "クライアントの優先順位" + "DownloadClientSettingsRecentPriority": "クライアントの優先順位", + "Downloaded": "ダウンロード済み", + "Paused": "一時停止", + "Pending": "保留中", + "WaitingToProcess": "処理を待っています", + "CheckDownloadClientForDetails": "詳細については、ダウンロードクライアントを確認してください", + "WaitingToImport": "インポートを待機中" } diff --git a/src/NzbDrone.Core/Localization/Core/ko.json b/src/NzbDrone.Core/Localization/Core/ko.json index 1ce9c02f0..c4b133c80 100644 --- a/src/NzbDrone.Core/Localization/Core/ko.json +++ b/src/NzbDrone.Core/Localization/Core/ko.json @@ -899,5 +899,73 @@ "ChangeCategory": "카테고리 변경", "ClearBlocklist": "차단 목록 지우기", "DashOrSpaceDashDependingOnName": "이름에 따라 대시 또는 띄어쓰고 대시", - "Donate": "기부하기" + "Donate": "기부하기", + "IndexerDownloadClientHelpText": "이 인덱서에서 가져온 것을 가져오는 데 사용되는 다운로드 클라이언트를 지정하세요", + "NoDownloadClientsFound": "다운로드 클라이언트를 찾을 수 없음", + "QueueFilterHasNoItems": "선택된 대기열 필터에 항목이 없습니다", + "Total": "합계", + "IndexerSettingsSeedTimeHelpText": "토렌드가 중지되기 전에 시드되어야 하는 시간, 비어 있을 경우 다운로드 클라이언트의 기본값을 사용합니다", + "NotificationsTelegramSettingsIncludeAppNameHelpText": "다른 애플리케이션의 알림을 구분하기 위해 메시지 제목 앞에 {appName}를 접두사로 사용 (선택 사항)", + "Episode": "에피소드", + "FormatRuntimeHours": "{hours}시간", + "FormatRuntimeMinutes": "{minutes}분", + "FormatShortTimeSpanHours": "{hours}시간", + "FormatShortTimeSpanMinutes": "{minutes}분", + "HealthMessagesInfoBox": "행 끝에 있는 위키 링크(책 아이콘)를 클릭하거나 [로그]({link})를 확인하면 이러한 상태 점검 메시지의 원인에 대한 상세 정보를 찾을 수 있습니다. 이러한 메시지를 해석하는 데 어려움이 있는 경우 아래 링크에서 지원팀에 문의할 수 있습니다.", + "MassSearchCancelWarning": "{appName}을 재시작하거나 모든 인덱서를 비활성화하지 않고는 이 작업을 취소할 수 없음", + "Negated": "부정", + "NotificationsSettingsUpdateMapPathsFrom": "다음 위치부터 경로 매핑하기", + "ErrorLoadingContent": "이 콘텐트를 로드하는 중 오류가 발생했습니다", + "IndexerSettingsSeedRatioHelpText": "토런트가 멈추기 전에 도달해야 하는 비율, 비어 있으면 다운로드 클라이언트의 기본값을 사용합니다. 비율은 최소 1.0이어야 하며 인덱서 규칙을 따라야 합니다.", + "DownloadClientSettingsPostImportCategoryHelpText": "다운로드를 가져온 후 {appName}에 대한 카테고리를 설정합니다. {appName}는 시딩이 완료되었더라도 해당 카테고리의 토렌드를 제거하지 않습니다. 같은 카테고리를 유지하려면 비워두세요.", + "DownloadWarning": "다운로드 경고: {0}", + "Downloaded": "다운로드됨", + "ParseModalUnableToParse": "제공된 제목을 구문 분석할 수 없음 재시도하세요.", + "Pending": "대기중", + "PendingDownloadClientUnavailable": "보류 중 - 다운로드 클라이언트를 사용할 수 없음", + "Preferred": "선호", + "PreferredSize": "선호하는 크기", + "UnableToImportAutomatically": "자동으로 가져올 수 없습니다", + "WaitingToProcess": "처리 대기 중", + "AllExpandedCollapseAll": "모두 접기", + "AllExpandedExpandAll": "모두 펼치기", + "ParseModalErrorParsing": "구문분석 중 오류가 발생했습니다. 재시도하세요.", + "ParseModalHelpText": "위의 입력란에 릴리스 제목을 입력하세요", + "FormatDateTimeRelative": "{relativeDay}, {formattedDate} {formattedTime}", + "FormatShortTimeSpanSeconds": "{seconds}초", + "FormatTimeSpanDays": "{days}d {time}", + "IgnoreDownloadHint": "{appName}가 이 다운로드를 더 이상 처리하지 못하도록 합니다", + "IgnoreDownloadsHint": "{appName}가 이러한 다운로드를 더 이상 처리하지 않도록 중지합니다", + "IndexerSettingsSeedRatio": "종자 비율", + "PostImportCategory": "수입 후 카테고리", + "RegularExpressionsTutorialLink": "정규 표현식에 대한 상세 내용은 [여기]({url})에서 확인할 수 있습니다.", + "InstallMajorVersionUpdateMessageLink": "상세 내용은 [{domain}]({url})을 확인하세요.", + "NoCustomFormatsFound": "사용자 정의 형식을 찾을 수 없음", + "ParseModalHelpTextDetails": "{appName}은 제목을 구문 분석하고 해당 제목에 대한 세부 사항를 표시하려고 시도합니다.", + "SceneNumberHasntBeenVerifiedYet": "아직 장면 번호가 확인되지 않았습니다", + "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} 경로는 {serviceName}이 라이브러리 경로 위치를 {appName}와 다르게 볼 때 시리즈 경로를 수정하는 데 사용됨 (라이브러리 업데이트 필요)", + "NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName} 경로는 {serviceName}이 라이브러리 경로 위치를 {appName}와 다르게 볼 때 시리즈 경로를 수정하는 데 사용됨 (라이브러리 업데이트 필요)", + "NotificationsSettingsUpdateMapPathsTo": "다음 위치까지 경로 매핑하기", + "Other": "기타", + "Absolute": "절대", + "EnabledHelpText": "출시 프로필을 활성화하려면 체크하세요", + "EpisodeDoesNotHaveAnAbsoluteEpisodeNumber": "에피소드에는 절대 에피소드 번호가 없음", + "MonitoredStatus": "모니터링 설정/상태", + "Monitoring": "모니터링 중", + "ExpandOtherByDefaultHelpText": "기타", + "Posters": "포스터", + "PreferProtocol": "{preferredProtocol} 선호", + "WithFiles": "파일과 함께", + "CheckDownloadClientForDetails": "상세 내용은 다운로드 클라이언트를 확인하세요", + "DownloadClientQbittorrentSettingsContentLayoutHelpText": "qBittorrent의 구성된 콘텐츠 레이아웃을 사용할지, 토런트의 원래 레이아웃을 사용할지, 항상 하위 폴더를 생성할지(qBittorrent 4.3.2+)", + "EnableRssHelpText": "{appName}가 RSS 동기화를 통해 주기적으로 릴리스를 찾을 때 사용됩니다", + "FormatDateTime": "{formattedDate} {formattedTime}", + "IncludeCustomFormatWhenRenaming": "이름을 바꿀 때 사용자 정의 형식 포함", + "InvalidUILanguage": "UI가 잘못된 언어로 설정되어 있습니다, 수정하고 설정을 저장하세요", + "IsShowingMonitoredMonitorSelected": "선택된 모니터", + "NoEventsFound": "이벤트가 없음", + "Paused": "일시중지", + "RootFolderPathHelpText": "루트 폴더 목록 항목이 다음에 추가됩니다:", + "WaitingToImport": "가져오기 대기 중", + "AddNewArtistRootFolderHelpText": "'{folder}' 하위 폴더가 자동으로 생성됩니다" } diff --git a/src/NzbDrone.Core/Localization/Core/nb_NO.json b/src/NzbDrone.Core/Localization/Core/nb_NO.json index eb62c4211..e694f772b 100644 --- a/src/NzbDrone.Core/Localization/Core/nb_NO.json +++ b/src/NzbDrone.Core/Localization/Core/nb_NO.json @@ -285,5 +285,6 @@ "AddImportListImplementation": "Legg til importliste - {implementationName}", "IgnoredPlaceHolder": "Legg til ny begrensning", "AddImportList": "Ny Importliste", - "AddNewArtistRootFolderHelpText": "Undermappa \"{folder}\" vil bli automatisk laget" + "AddNewArtistRootFolderHelpText": "Undermappa \"{folder}\" vil bli automatisk laget", + "CheckDownloadClientForDetails": "sjekk nedlastningsklienten for mer informasjon" } diff --git a/src/NzbDrone.Core/Localization/Core/nl.json b/src/NzbDrone.Core/Localization/Core/nl.json index 77559467d..8c24bdac1 100644 --- a/src/NzbDrone.Core/Localization/Core/nl.json +++ b/src/NzbDrone.Core/Localization/Core/nl.json @@ -907,5 +907,13 @@ "AddArtistWithName": "{artistName} toevoegen", "AddNewArtist": "Voeg nieuwe artiest toe", "AddNewAlbum": "Voeg nieuw album toe", - "AddNewAlbumSearchForNewAlbum": "Start zoektoch voor een nieuw album" + "AddNewAlbumSearchForNewAlbum": "Start zoektoch voor een nieuw album", + "DownloadWarning": "Download waarschuwing: {warningMessage}", + "Downloaded": "Gedownload", + "Pending": "In afwachting", + "WaitingToProcess": "Wachten tot Verwerking", + "CheckDownloadClientForDetails": "controleer downloader voor meer details", + "ImportFailed": "Importeren mislukt: {sourceTitle}", + "Paused": "Gepauzeerd", + "WaitingToImport": "Wachten tot Importeren" } diff --git a/src/NzbDrone.Core/Localization/Core/pl.json b/src/NzbDrone.Core/Localization/Core/pl.json index fe56245e9..05c8108d0 100644 --- a/src/NzbDrone.Core/Localization/Core/pl.json +++ b/src/NzbDrone.Core/Localization/Core/pl.json @@ -853,5 +853,11 @@ "Preferred": "Preferowane", "Today": "Dzisiaj", "MappedNetworkDrivesWindowsService": "Zmapowane dyski sieciowe nie są dostępne, gdy działają jako usługa systemu Windows. Więcej informacji można znaleźć w FAQ", - "DownloadClientSettingsRecentPriority": "Priorytet klienta" + "DownloadClientSettingsRecentPriority": "Priorytet klienta", + "CheckDownloadClientForDetails": "sprawdź klienta pobierania, aby uzyskać więcej informacji", + "Downloaded": "Pobrano", + "Paused": "Wstrzymano", + "Pending": "W oczekiwaniu", + "WaitingToImport": "Czekam na import", + "WaitingToProcess": "Czekam na przetworzenie" } diff --git a/src/NzbDrone.Core/Localization/Core/pt.json b/src/NzbDrone.Core/Localization/Core/pt.json index 1e8cc00ec..762f82806 100644 --- a/src/NzbDrone.Core/Localization/Core/pt.json +++ b/src/NzbDrone.Core/Localization/Core/pt.json @@ -1024,5 +1024,12 @@ "Preferred": "Preferido", "Today": "Hoje", "MappedNetworkDrivesWindowsService": "As unidades de rede mapeadas não estão disponíveis quando executadas como um serviço do Windows. Veja as Perguntas mais frequentes para obter mais informações", - "DownloadClientSettingsRecentPriority": "Prioridade do cliente" + "DownloadClientSettingsRecentPriority": "Prioridade do cliente", + "Downloaded": "Transferido", + "Paused": "Em pausa", + "WaitingToProcess": "Aguardando para processar", + "CheckDownloadClientForDetails": "verifique o cliente de transferências para obter mais detalhes", + "DownloadWarning": "Alerta de transferência: {warningMessage}", + "Pending": "Pendente", + "WaitingToImport": "Aguardando para importar" } diff --git a/src/NzbDrone.Core/Localization/Core/pt_BR.json b/src/NzbDrone.Core/Localization/Core/pt_BR.json index e0c1db1d5..b3da09969 100644 --- a/src/NzbDrone.Core/Localization/Core/pt_BR.json +++ b/src/NzbDrone.Core/Localization/Core/pt_BR.json @@ -1349,5 +1349,15 @@ "DownloadClientSettingsRecentPriorityAlbumHelpText": "Prioridade de uso ao adquirir álbuns lançados nos últimos 14 dias", "NotificationsSettingsWebhookHeaders": "Cabeçalhos", "TracksLoadError": "Incapaz de carregar faixas", - "NoMediumInformation": "Nenhuma informação da mídia está disponível." + "NoMediumInformation": "Nenhuma informação da mídia está disponível.", + "ImportFailed": "Falha na importação: {sourceTitle}", + "Pending": "Pendente", + "PendingDownloadClientUnavailable": "Pendente - O cliente de download não está disponível", + "WaitingToImport": "Aguardando para Importar", + "WaitingToProcess": "Aguardando para Processar", + "CheckDownloadClientForDetails": "verifique o cliente de download para saber mais", + "DownloadWarning": "Aviso de download: {warningMessage}", + "Downloaded": "Baixado", + "Paused": "Pausado", + "UnableToImportAutomatically": "Não foi possível importar automaticamente" } diff --git a/src/NzbDrone.Core/Localization/Core/ro.json b/src/NzbDrone.Core/Localization/Core/ro.json index 5b67e821c..892838e1f 100644 --- a/src/NzbDrone.Core/Localization/Core/ro.json +++ b/src/NzbDrone.Core/Localization/Core/ro.json @@ -800,5 +800,16 @@ "Today": "Astăzi", "MappedNetworkDrivesWindowsService": "Unitățile de rețea mapate nu sunt disponibile atunci când rulează ca serviciu Windows. Vă rugăm să consultați [FAQ]({url}) pentru mai multe informații", "DownloadClientSettingsRecentPriority": "Prioritate recente", - "DownloadClientSettingsOlderPriority": "Prioritate mai vechi" + "DownloadClientSettingsOlderPriority": "Prioritate mai vechi", + "Paused": "Întrerupt", + "Pending": "În așteptare", + "PendingDownloadClientUnavailable": "În așteptare - Clientul de descărcare nu este disponibil", + "WaitingToImport": "Se așteaptă importul", + "WaitingToProcess": "Se așteaptă procesarea", + "AddAutoTag": "Adăugați Tagare Automata", + "AddCondition": "Adăugați Condiție", + "Any": "Oricare", + "CheckDownloadClientForDetails": "Verificați clientul de descărcare pentru mai multe detalii", + "Downloaded": "Descărcat", + "AddImportList": "Adăugați Lista de Import" } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index f65225d77..ae809669b 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -1088,5 +1088,25 @@ "DownloadClientSettingsOlderPriority": "Более старый приоритет", "DownloadClientSettingsPostImportCategoryHelpText": "Категория для приложения {appName}, которую необходимо установить после импорта загрузки. {appName} не удалит торренты в этой категории, даже если раздача завершена. Оставьте пустым, чтобы сохранить ту же категорию.", "DownloadClientSettingsRecentPriority": "Недавний приоритет", - "PostImportCategory": "Категория после импорта" + "PostImportCategory": "Категория после импорта", + "Downloaded": "Скачано", + "LastSearched": "Искали недавно", + "UnableToImportAutomatically": "Невозможно импортировать автоматически", + "WaitingToImport": "Ожидание импорта", + "WaitingToProcess": "Ожидает обработки", + "NotificationsSettingsWebhookHeaders": "Заголовки", + "DeleteSelected": "Удалить выбранные", + "EditSelectedCustomFormats": "Изменить выбранные пользовательские форматы", + "CheckDownloadClientForDetails": "проверьте клиент загрузки для более подробной информации", + "DownloadWarning": "Предупреждения по скачиванию: {warningMessage}", + "ImportFailed": "Не удалось импортировать: {sourceTitle}", + "InteractiveSearchModalHeaderTitle": "Интерактивный поиск - {title}", + "ManageCustomFormats": "Управлять пользовательскими форматами", + "NoCustomFormatsFound": "Нет пользовательских форматов", + "NoCutoffUnmetItems": "Нет элементов не достигших максимального качества", + "Paused": "Приостановлено", + "Pending": "В ожидании", + "PendingDownloadClientUnavailable": "Ожидание – Клиент для загрузки недоступен", + "SkipFreeSpaceCheckHelpText": "Используете, когда {appName} не может верно определить свободное место в вашей корневой папке", + "ManageFormats": "Управлять форматами" } diff --git a/src/NzbDrone.Core/Localization/Core/sk.json b/src/NzbDrone.Core/Localization/Core/sk.json index 56f223b2a..8d875dc66 100644 --- a/src/NzbDrone.Core/Localization/Core/sk.json +++ b/src/NzbDrone.Core/Localization/Core/sk.json @@ -295,5 +295,6 @@ "Clone": "Zatvoriť", "Reason": "Séria", "AddDelayProfileError": "Nie je možné pridať novú podmienku, skúste to znova.", - "DownloadClientSettingsRecentPriority": "Priorita klienta" + "DownloadClientSettingsRecentPriority": "Priorita klienta", + "CheckDownloadClientForDetails": "ďalšie podrobnosti nájdete v klientovi na sťahovanie" } diff --git a/src/NzbDrone.Core/Localization/Core/sv.json b/src/NzbDrone.Core/Localization/Core/sv.json index 5d0e56896..40a55143c 100644 --- a/src/NzbDrone.Core/Localization/Core/sv.json +++ b/src/NzbDrone.Core/Localization/Core/sv.json @@ -926,5 +926,12 @@ "Preferred": "Föredraget", "Today": "Idag", "MappedNetworkDrivesWindowsService": "Mappade nätverksenheter är inte tillgängliga när de körs som en Windows-tjänst. Se FAQ för mer information", - "DownloadClientSettingsRecentPriority": "Klient prioritet" + "DownloadClientSettingsRecentPriority": "Klient prioritet", + "DownloadWarning": "Hämtningsmeddelande: {warningMessage}", + "Downloaded": "Nerladdad", + "Paused": "Pausad", + "Pending": "I väntan på", + "WaitingToImport": "Väntar på att importera", + "WaitingToProcess": "Väntar på att bearbeta", + "CheckDownloadClientForDetails": "Kontrollera nedladdningsklienten för mer detaljer" } diff --git a/src/NzbDrone.Core/Localization/Core/th.json b/src/NzbDrone.Core/Localization/Core/th.json index cf37ebcb5..57304302d 100644 --- a/src/NzbDrone.Core/Localization/Core/th.json +++ b/src/NzbDrone.Core/Localization/Core/th.json @@ -751,5 +751,11 @@ "Preferred": "ที่ต้องการ", "Today": "วันนี้", "MappedNetworkDrivesWindowsService": "ไดรฟ์เครือข่ายที่แมปไม่พร้อมใช้งานเมื่อเรียกใช้เป็นบริการ Windows โปรดดูคำถามที่พบบ่อยสำหรับข้อมูลเพิ่มเติม", - "DownloadClientSettingsRecentPriority": "ลำดับความสำคัญของลูกค้า" + "DownloadClientSettingsRecentPriority": "ลำดับความสำคัญของลูกค้า", + "CheckDownloadClientForDetails": "ตรวจสอบไคลเอนต์ดาวน์โหลดสำหรับรายละเอียดเพิ่มเติม", + "Pending": "รอดำเนินการ", + "WaitingToImport": "กำลังรอการนำเข้า", + "WaitingToProcess": "กำลังรอดำเนินการ", + "Downloaded": "ดาวน์โหลดแล้ว", + "Paused": "หยุดชั่วคราว" } diff --git a/src/NzbDrone.Core/Localization/Core/tr.json b/src/NzbDrone.Core/Localization/Core/tr.json index 70ba2caab..4c9ee6a6b 100644 --- a/src/NzbDrone.Core/Localization/Core/tr.json +++ b/src/NzbDrone.Core/Localization/Core/tr.json @@ -1083,5 +1083,15 @@ "DownloadClientSettingsRecentPriority": "Yeni Önceliği", "PostImportCategory": "İçe Aktarma Sonrası Kategorisi", "DownloadClientSettingsOlderPriority": "Eski Önceliği", - "NotificationsSettingsWebhookHeaders": "Başlıklar" + "NotificationsSettingsWebhookHeaders": "Başlıklar", + "DownloadWarning": "İndirme Uyası: {warningMessage}", + "Downloaded": "İndirildi", + "Paused": "Duraklatıldı", + "Pending": "Bekliyor", + "PendingDownloadClientUnavailable": "Beklemede - İndirme istemcisi kullanılamıyor", + "UnableToImportAutomatically": "Otomatikman İçe Aktarılamıyor", + "CheckDownloadClientForDetails": "daha fazla ayrıntı için indirme istemcisini kontrol edin", + "WaitingToImport": "İçe Aktarma Bekleniyor", + "WaitingToProcess": "İşlenmek için Bekleniyor", + "ImportFailed": "İçe aktarma başarısız oldu: {sourceTitle}" } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 6cd0ed1f2..7b1d2a391 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -917,5 +917,11 @@ "Preferred": "Бажано", "Max": "Максимальний", "MappedNetworkDrivesWindowsService": "Підключені мережеві диски недоступні під час роботи як служби Windows. Щоб отримати додаткову інформацію, перегляньте FAQ", - "DownloadClientSettingsRecentPriority": "Пріоритет клієнта" + "DownloadClientSettingsRecentPriority": "Пріоритет клієнта", + "Downloaded": "Завантажено", + "Paused": "Призупинено", + "Pending": "В очікуванні", + "WaitingToImport": "Очікування імпорту", + "WaitingToProcess": "Очікування обробки", + "CheckDownloadClientForDetails": "перевірте клієнт завантаження, щоб дізнатися більше" } diff --git a/src/NzbDrone.Core/Localization/Core/vi.json b/src/NzbDrone.Core/Localization/Core/vi.json index ebce4b4bb..f57741ed6 100644 --- a/src/NzbDrone.Core/Localization/Core/vi.json +++ b/src/NzbDrone.Core/Localization/Core/vi.json @@ -788,5 +788,11 @@ "Preferred": "Ưu tiên", "Today": "Hôm nay", "MappedNetworkDrivesWindowsService": "Các ổ đĩa mạng được ánh xạ không khả dụng khi chạy dưới dạng Dịch vụ Windows. Vui lòng xem Câu hỏi thường gặp để biết thêm thông tin", - "DownloadClientSettingsRecentPriority": "Ưu tiên khách hàng" + "DownloadClientSettingsRecentPriority": "Ưu tiên khách hàng", + "Pending": "Đang chờ xử lý", + "WaitingToImport": "Đang chờ nhập", + "CheckDownloadClientForDetails": "kiểm tra ứng dụng khách tải xuống để biết thêm chi tiết", + "Downloaded": "Đã tải xuống", + "Paused": "Tạm dừng", + "WaitingToProcess": "Đang chờ xử lý" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 6c1f63dbe..09dbca921 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -1337,5 +1337,15 @@ "DownloadClientSettingsRecentPriority": "最近优先", "PostImportCategory": "导入后分类", "NotificationsSettingsWebhookHeaders": "标头", - "DefaultDelayProfileArtist": "This is the default profile. It applies to all artists that don't have an explicit profile." + "DefaultDelayProfileArtist": "This is the default profile. It applies to all artists that don't have an explicit profile.", + "CheckDownloadClientForDetails": "查看下载客户端了解更多详细信息", + "DownloadWarning": "下载警告:{warningMessage}", + "UnableToImportAutomatically": "无法自动导入", + "ImportFailed": "导入失败:{sourceTitle}", + "Downloaded": "已下载", + "Paused": "暂停", + "Pending": "挂起", + "PendingDownloadClientUnavailable": "挂起 - 下载客户端不可用", + "WaitingToImport": "等待导入", + "WaitingToProcess": "等待处理" } From 81895f803387492da728a15fbfffdbb9d3b5025b Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 29 Jan 2025 18:46:19 -0800 Subject: [PATCH 209/275] Fixed: Drop downs flickering in some cases (cherry picked from commit 3b024443c5447b7638a69a99809bf44b2419261f) Closes #5386 --- .../src/Components/Form/EnhancedSelectInput.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/frontend/src/Components/Form/EnhancedSelectInput.js b/frontend/src/Components/Form/EnhancedSelectInput.js index cc4215025..8327b9385 100644 --- a/frontend/src/Components/Form/EnhancedSelectInput.js +++ b/frontend/src/Components/Form/EnhancedSelectInput.js @@ -20,6 +20,8 @@ import HintedSelectInputSelectedValue from './HintedSelectInputSelectedValue'; import TextInput from './TextInput'; import styles from './EnhancedSelectInput.css'; +const MINIMUM_DISTANCE_FROM_EDGE = 10; + function isArrowKey(keyCode) { return keyCode === keyCodes.UP_ARROW || keyCode === keyCodes.DOWN_ARROW; } @@ -137,18 +139,9 @@ class EnhancedSelectInput extends Component { // Listeners onComputeMaxHeight = (data) => { - const { - top, - bottom - } = data.offsets.reference; - const windowHeight = window.innerHeight; - if ((/^botton/).test(data.placement)) { - data.styles.maxHeight = windowHeight - bottom; - } else { - data.styles.maxHeight = top; - } + data.styles.maxHeight = windowHeight - MINIMUM_DISTANCE_FROM_EDGE; return data; }; @@ -457,6 +450,10 @@ class EnhancedSelectInput extends Component { order: 851, enabled: true, fn: this.onComputeMaxHeight + }, + preventOverflow: { + enabled: true, + boundariesElement: 'viewport' } }} > From 5cf9624e559f87245232cb676067a11bd64fd3bb Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 23 Mar 2025 13:02:07 +0200 Subject: [PATCH 210/275] Bump version to 2.11.0 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 3050b9438..b87e0a2ed 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.10.3' + majorVersion: '2.11.0' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From f8d4b3a59b32814fe32155999ed3ae0d5fc8756c Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 23 Mar 2025 13:07:35 +0200 Subject: [PATCH 211/275] Bump NLog, Npgsql, System.Memory and System.ValueTuple --- src/Lidarr.Api.V1/Lidarr.Api.V1.csproj | 2 +- src/Lidarr.Http/Lidarr.Http.csproj | 2 +- src/NzbDrone.Common/Lidarr.Common.csproj | 6 +++--- src/NzbDrone.Core/Lidarr.Core.csproj | 8 ++++---- src/NzbDrone.Mono/Lidarr.Mono.csproj | 2 +- src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj | 2 +- src/NzbDrone.Update/Lidarr.Update.csproj | 2 +- src/NzbDrone.Windows/Lidarr.Windows.csproj | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj b/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj index b501c694b..187fa86ff 100644 --- a/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj +++ b/src/Lidarr.Api.V1/Lidarr.Api.V1.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/Lidarr.Http/Lidarr.Http.csproj b/src/Lidarr.Http/Lidarr.Http.csproj index 5164642dc..103ca71ea 100644 --- a/src/Lidarr.Http/Lidarr.Http.csproj +++ b/src/Lidarr.Http/Lidarr.Http.csproj @@ -5,7 +5,7 @@ - + diff --git a/src/NzbDrone.Common/Lidarr.Common.csproj b/src/NzbDrone.Common/Lidarr.Common.csproj index 383149c37..6e16836fc 100644 --- a/src/NzbDrone.Common/Lidarr.Common.csproj +++ b/src/NzbDrone.Common/Lidarr.Common.csproj @@ -9,14 +9,14 @@ - + - + - + diff --git a/src/NzbDrone.Core/Lidarr.Core.csproj b/src/NzbDrone.Core/Lidarr.Core.csproj index a56bfb295..9c5d16036 100644 --- a/src/NzbDrone.Core/Lidarr.Core.csproj +++ b/src/NzbDrone.Core/Lidarr.Core.csproj @@ -9,7 +9,7 @@ - + @@ -20,12 +20,12 @@ - - + + - + diff --git a/src/NzbDrone.Mono/Lidarr.Mono.csproj b/src/NzbDrone.Mono/Lidarr.Mono.csproj index 73a45be81..386105c02 100644 --- a/src/NzbDrone.Mono/Lidarr.Mono.csproj +++ b/src/NzbDrone.Mono/Lidarr.Mono.csproj @@ -4,7 +4,7 @@ true - + diff --git a/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj b/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj index 704b7b0df..77109c6a9 100644 --- a/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj +++ b/src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/NzbDrone.Update/Lidarr.Update.csproj b/src/NzbDrone.Update/Lidarr.Update.csproj index d2d84022e..c23403b1a 100644 --- a/src/NzbDrone.Update/Lidarr.Update.csproj +++ b/src/NzbDrone.Update/Lidarr.Update.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/NzbDrone.Windows/Lidarr.Windows.csproj b/src/NzbDrone.Windows/Lidarr.Windows.csproj index 7f41c9233..4914272c2 100644 --- a/src/NzbDrone.Windows/Lidarr.Windows.csproj +++ b/src/NzbDrone.Windows/Lidarr.Windows.csproj @@ -4,7 +4,7 @@ true - + From 18f13fe7f8cfec6aeab1385cd223fd67eae5bf8f Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 23 Mar 2025 20:06:49 -0700 Subject: [PATCH 212/275] Fixed: Allow tables to scroll on tablets in portrait mode (cherry picked from commit 5fb632eb46cf77ea4f61d407f6429d9c32dba766) --- frontend/src/Components/Modal/Modal.css | 7 ------- frontend/src/Components/Table/Cells/TableRowCell.css | 2 +- .../src/Components/Table/Cells/VirtualTableRowCell.css | 2 +- frontend/src/Components/Table/Table.css | 2 +- frontend/src/Components/Table/TableHeaderCell.css | 2 +- frontend/src/Components/Table/TablePager.css | 2 +- frontend/src/Components/Table/VirtualTableHeaderCell.css | 2 +- 7 files changed, 6 insertions(+), 13 deletions(-) diff --git a/frontend/src/Components/Modal/Modal.css b/frontend/src/Components/Modal/Modal.css index f7a229501..c41e9a2d1 100644 --- a/frontend/src/Components/Modal/Modal.css +++ b/frontend/src/Components/Modal/Modal.css @@ -83,13 +83,6 @@ } @media only screen and (max-width: $breakpointMedium) { - .modal.small, - .modal.medium { - width: 90%; - } -} - -@media only screen and (max-width: $breakpointSmall) { .modalContainer { position: fixed; } diff --git a/frontend/src/Components/Table/Cells/TableRowCell.css b/frontend/src/Components/Table/Cells/TableRowCell.css index 47ce0d22e..7e3353c25 100644 --- a/frontend/src/Components/Table/Cells/TableRowCell.css +++ b/frontend/src/Components/Table/Cells/TableRowCell.css @@ -4,7 +4,7 @@ line-height: 1.52857143; } -@media only screen and (max-width: $breakpointSmall) { +@media only screen and (max-width: $breakpointMedium) { .cell { white-space: nowrap; } diff --git a/frontend/src/Components/Table/Cells/VirtualTableRowCell.css b/frontend/src/Components/Table/Cells/VirtualTableRowCell.css index 2501b7c84..f7f3b9306 100644 --- a/frontend/src/Components/Table/Cells/VirtualTableRowCell.css +++ b/frontend/src/Components/Table/Cells/VirtualTableRowCell.css @@ -7,7 +7,7 @@ white-space: nowrap; } -@media only screen and (max-width: $breakpointSmall) { +@media only screen and (max-width: $breakpointMedium) { .cell { white-space: nowrap; } diff --git a/frontend/src/Components/Table/Table.css b/frontend/src/Components/Table/Table.css index bdfdec641..d0507be6b 100644 --- a/frontend/src/Components/Table/Table.css +++ b/frontend/src/Components/Table/Table.css @@ -10,7 +10,7 @@ border-collapse: collapse; } -@media only screen and (max-width: $breakpointSmall) { +@media only screen and (max-width: $breakpointMedium) { .tableContainer { min-width: 100%; width: fit-content; diff --git a/frontend/src/Components/Table/TableHeaderCell.css b/frontend/src/Components/Table/TableHeaderCell.css index c2c4f58c8..eded9c95b 100644 --- a/frontend/src/Components/Table/TableHeaderCell.css +++ b/frontend/src/Components/Table/TableHeaderCell.css @@ -9,7 +9,7 @@ margin-left: 10px; } -@media only screen and (max-width: $breakpointSmall) { +@media only screen and (max-width: $breakpointMedium) { .headerCell { white-space: nowrap; } diff --git a/frontend/src/Components/Table/TablePager.css b/frontend/src/Components/Table/TablePager.css index d73a0d0c0..6d184196e 100644 --- a/frontend/src/Components/Table/TablePager.css +++ b/frontend/src/Components/Table/TablePager.css @@ -60,7 +60,7 @@ height: 25px; } -@media only screen and (max-width: $breakpointSmall) { +@media only screen and (max-width: $breakpointMedium) { .pager { flex-wrap: wrap; } diff --git a/frontend/src/Components/Table/VirtualTableHeaderCell.css b/frontend/src/Components/Table/VirtualTableHeaderCell.css index c2c4f58c8..eded9c95b 100644 --- a/frontend/src/Components/Table/VirtualTableHeaderCell.css +++ b/frontend/src/Components/Table/VirtualTableHeaderCell.css @@ -9,7 +9,7 @@ margin-left: 10px; } -@media only screen and (max-width: $breakpointSmall) { +@media only screen and (max-width: $breakpointMedium) { .headerCell { white-space: nowrap; } From 950c51bc5928d4b8a72b86d45249eac5be654bd1 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 20 Mar 2025 13:10:06 +0200 Subject: [PATCH 213/275] Fixed: Priority validation for indexers and download clients (cherry picked from commit f0e320f3aa501f120721503b8256f464a31be783) --- src/Lidarr.Api.V1/DownloadClient/DownloadClientController.cs | 2 ++ src/Lidarr.Api.V1/Indexers/IndexerController.cs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/Lidarr.Api.V1/DownloadClient/DownloadClientController.cs b/src/Lidarr.Api.V1/DownloadClient/DownloadClientController.cs index bd4c993bf..bc54aa7e0 100644 --- a/src/Lidarr.Api.V1/DownloadClient/DownloadClientController.cs +++ b/src/Lidarr.Api.V1/DownloadClient/DownloadClientController.cs @@ -1,3 +1,4 @@ +using FluentValidation; using Lidarr.Http; using NzbDrone.Core.Download; @@ -12,6 +13,7 @@ namespace Lidarr.Api.V1.DownloadClient public DownloadClientController(IDownloadClientFactory downloadClientFactory) : base(downloadClientFactory, "downloadclient", ResourceMapper, BulkResourceMapper) { + SharedValidator.RuleFor(c => c.Priority).InclusiveBetween(1, 50); } } } diff --git a/src/Lidarr.Api.V1/Indexers/IndexerController.cs b/src/Lidarr.Api.V1/Indexers/IndexerController.cs index 2ebcd3f29..2187e2b28 100644 --- a/src/Lidarr.Api.V1/Indexers/IndexerController.cs +++ b/src/Lidarr.Api.V1/Indexers/IndexerController.cs @@ -1,3 +1,4 @@ +using FluentValidation; using Lidarr.Http; using NzbDrone.Core.Indexers; using NzbDrone.Core.Validation; @@ -13,6 +14,7 @@ namespace Lidarr.Api.V1.Indexers public IndexerController(IndexerFactory indexerFactory, DownloadClientExistsValidator downloadClientExistsValidator) : base(indexerFactory, "indexer", ResourceMapper, BulkResourceMapper) { + SharedValidator.RuleFor(c => c.Priority).InclusiveBetween(1, 50); SharedValidator.RuleFor(c => c.DownloadClientId).SetValidator(downloadClientExistsValidator); } } From 4bea38ab9c57d1dc111ce7ed6e73fcdea6669d8f Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 11 Mar 2025 08:41:48 -0700 Subject: [PATCH 214/275] Improve logging when login fails due to CryptographicException (cherry picked from commit 1449941471cbb8885e9298317b9a30f2576d7941) --- .../AuthenticationController.cs | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Lidarr.Http/Authentication/AuthenticationController.cs b/src/Lidarr.Http/Authentication/AuthenticationController.cs index 2fc588dd2..f7281cf5c 100644 --- a/src/Lidarr.Http/Authentication/AuthenticationController.cs +++ b/src/Lidarr.Http/Authentication/AuthenticationController.cs @@ -1,9 +1,14 @@ using System.Collections.Generic; +using System.IO; using System.Security.Claims; +using System.Security.Cryptography; using System.Threading.Tasks; +using System.Xml; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using NLog; +using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; using NzbDrone.Core.Authentication; using NzbDrone.Core.Configuration; @@ -16,11 +21,15 @@ namespace Lidarr.Http.Authentication { private readonly IAuthenticationService _authService; private readonly IConfigFileProvider _configFileProvider; + private readonly IAppFolderInfo _appFolderInfo; + private readonly Logger _logger; - public AuthenticationController(IAuthenticationService authService, IConfigFileProvider configFileProvider) + public AuthenticationController(IAuthenticationService authService, IConfigFileProvider configFileProvider, IAppFolderInfo appFolderInfo, Logger logger) { _authService = authService; _configFileProvider = configFileProvider; + _appFolderInfo = appFolderInfo; + _logger = logger; } [HttpPost("login")] @@ -45,7 +54,23 @@ namespace Lidarr.Http.Authentication IsPersistent = resource.RememberMe == "on" }; - await HttpContext.SignInAsync(AuthenticationType.Forms.ToString(), new ClaimsPrincipal(new ClaimsIdentity(claims, "Cookies", "user", "identifier")), authProperties); + try + { + await HttpContext.SignInAsync(AuthenticationType.Forms.ToString(), new ClaimsPrincipal(new ClaimsIdentity(claims, "Cookies", "user", "identifier")), authProperties); + } + catch (CryptographicException e) + { + if (e.InnerException is XmlException) + { + _logger.Error(e, "Failed to authenticate user due to corrupt XML. Please remove all XML files from {0} and restart Lidarr", Path.Combine(_appFolderInfo.AppDataFolder, "asp")); + } + else + { + _logger.Error(e, "Failed to authenticate user. {0}", e.Message); + } + + return Unauthorized(); + } if (returnUrl.IsNullOrWhiteSpace() || !Url.IsLocalUrl(returnUrl)) { From a86bd8e862ebe265efdc44fb7383834edc775e07 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 11 Mar 2025 18:09:19 +0200 Subject: [PATCH 215/275] Fixed: Inherit indexer, size and release group for marked as failed history (cherry picked from commit e08c9d5501e65aabce3456b2dd7571867508d88f) --- src/NzbDrone.Core/History/EntityHistory.cs | 3 +++ src/NzbDrone.Core/History/EntityHistoryService.cs | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/History/EntityHistory.cs b/src/NzbDrone.Core/History/EntityHistory.cs index ffc7e8e7c..496213275 100644 --- a/src/NzbDrone.Core/History/EntityHistory.cs +++ b/src/NzbDrone.Core/History/EntityHistory.cs @@ -10,6 +10,9 @@ namespace NzbDrone.Core.History { public const string DOWNLOAD_CLIENT = "downloadClient"; public const string RELEASE_SOURCE = "releaseSource"; + public const string RELEASE_GROUP = "releaseGroup"; + public const string SIZE = "size"; + public const string INDEXER = "indexer"; public EntityHistory() { diff --git a/src/NzbDrone.Core/History/EntityHistoryService.cs b/src/NzbDrone.Core/History/EntityHistoryService.cs index d94d0cf9e..d88358ddb 100644 --- a/src/NzbDrone.Core/History/EntityHistoryService.cs +++ b/src/NzbDrone.Core/History/EntityHistoryService.cs @@ -267,7 +267,9 @@ namespace NzbDrone.Core.History history.Data.Add("DownloadClient", message.DownloadClient); history.Data.Add("Message", message.Message); - history.Data.Add("Size", message.TrackedDownload?.DownloadItem.TotalSize.ToString()); + history.Data.Add("ReleaseGroup", message.TrackedDownload?.RemoteAlbum?.ParsedAlbumInfo?.ReleaseGroup ?? message.Data.GetValueOrDefault(EntityHistory.RELEASE_GROUP)); + history.Data.Add("Size", message.TrackedDownload?.DownloadItem.TotalSize.ToString() ?? message.Data.GetValueOrDefault(EntityHistory.SIZE)); + history.Data.Add("Indexer", message.TrackedDownload?.RemoteAlbum?.Release?.Indexer ?? message.Data.GetValueOrDefault(EntityHistory.INDEXER)); _historyRepository.Insert(history); } @@ -417,6 +419,7 @@ namespace NzbDrone.Core.History history.Data.Add("Message", message.Message); history.Data.Add("ReleaseGroup", message.TrackedDownload?.RemoteAlbum?.ParsedAlbumInfo?.ReleaseGroup); history.Data.Add("Size", message.TrackedDownload?.DownloadItem.TotalSize.ToString()); + history.Data.Add("Indexer", message.TrackedDownload?.RemoteAlbum?.Release?.Indexer); historyToAdd.Add(history); } From d381463b608e3c09d8cbc77f90dd4224a18feefc Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 11 Mar 2025 18:13:39 +0200 Subject: [PATCH 216/275] New: Display indexer in download failed details (cherry picked from commit a324052debf63a8db73a2f3c79201864892bb62c) --- .../src/Activity/History/Details/HistoryDetails.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/frontend/src/Activity/History/Details/HistoryDetails.js b/frontend/src/Activity/History/Details/HistoryDetails.js index b90a64f47..84aa3e0f2 100644 --- a/frontend/src/Activity/History/Details/HistoryDetails.js +++ b/frontend/src/Activity/History/Details/HistoryDetails.js @@ -172,7 +172,8 @@ function HistoryDetails(props) { if (eventType === 'downloadFailed') { const { - message + message, + indexer } = data; return ( @@ -192,6 +193,14 @@ function HistoryDetails(props) { null } + { + indexer ? ( + + ) : null} + { message ? Date: Sun, 23 Mar 2025 18:16:18 +0200 Subject: [PATCH 217/275] Cleanup unused sorting fields for bulk manage providers (cherry picked from commit 6115236d3853f70a18b73aef15ebe4e18ab48e40) --- .../Manage/ManageCustomFormatsModalContent.tsx | 6 ++---- .../Manage/ManageDownloadClientsModalContent.tsx | 6 ++---- .../Indexers/Indexers/Manage/ManageIndexersModalContent.tsx | 6 ++---- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx index cb2fa3cca..aabaf67c1 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx @@ -10,11 +10,11 @@ import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; +import Column from 'Components/Table/Column'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import useSelectState from 'Helpers/Hooks/useSelectState'; import { kinds } from 'Helpers/Props'; -import SortDirection from 'Helpers/Props/SortDirection'; import { bulkDeleteCustomFormats, bulkEditCustomFormats, @@ -34,7 +34,7 @@ type OnSelectedChangeCallback = React.ComponentProps< typeof ManageCustomFormatsModalRow >['onSelectedChange']; -const COLUMNS = [ +const COLUMNS: Column[] = [ { name: 'name', label: () => translate('Name'), @@ -56,8 +56,6 @@ const COLUMNS = [ interface ManageCustomFormatsModalContentProps { onModalClose(): void; - sortKey?: string; - sortDirection?: SortDirection; } function ManageCustomFormatsModalContent( diff --git a/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx b/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx index 734f5efab..b2c1208cb 100644 --- a/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx +++ b/frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx @@ -10,11 +10,11 @@ import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; +import Column from 'Components/Table/Column'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import useSelectState from 'Helpers/Hooks/useSelectState'; import { kinds } from 'Helpers/Props'; -import SortDirection from 'Helpers/Props/SortDirection'; import { bulkDeleteDownloadClients, bulkEditDownloadClients, @@ -35,7 +35,7 @@ type OnSelectedChangeCallback = React.ComponentProps< typeof ManageDownloadClientsModalRow >['onSelectedChange']; -const COLUMNS = [ +const COLUMNS: Column[] = [ { name: 'name', label: () => translate('Name'), @@ -82,8 +82,6 @@ const COLUMNS = [ interface ManageDownloadClientsModalContentProps { onModalClose(): void; - sortKey?: string; - sortDirection?: SortDirection; } function ManageDownloadClientsModalContent( diff --git a/frontend/src/Settings/Indexers/Indexers/Manage/ManageIndexersModalContent.tsx b/frontend/src/Settings/Indexers/Indexers/Manage/ManageIndexersModalContent.tsx index dbb394959..997d1b566 100644 --- a/frontend/src/Settings/Indexers/Indexers/Manage/ManageIndexersModalContent.tsx +++ b/frontend/src/Settings/Indexers/Indexers/Manage/ManageIndexersModalContent.tsx @@ -10,11 +10,11 @@ import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; +import Column from 'Components/Table/Column'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import useSelectState from 'Helpers/Hooks/useSelectState'; import { kinds } from 'Helpers/Props'; -import SortDirection from 'Helpers/Props/SortDirection'; import { bulkDeleteIndexers, bulkEditIndexers, @@ -35,7 +35,7 @@ type OnSelectedChangeCallback = React.ComponentProps< typeof ManageIndexersModalRow >['onSelectedChange']; -const COLUMNS = [ +const COLUMNS: Column[] = [ { name: 'name', label: () => translate('Name'), @@ -82,8 +82,6 @@ const COLUMNS = [ interface ManageIndexersModalContentProps { onModalClose(): void; - sortKey?: string; - sortDirection?: SortDirection; } function ManageIndexersModalContent(props: ManageIndexersModalContentProps) { From c28a97cafdcb2d068cdca185ed9ceeb40027bddd Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 24 Mar 2025 19:14:58 -0700 Subject: [PATCH 218/275] Fixed: Deleting artist folder fails when files/folders aren't instantly removed (cherry picked from commit c84699ed5d5a2f59f236c26a8999d25a1102ec02) --- src/NzbDrone.Common/Disk/DiskProviderBase.cs | 22 ++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Common/Disk/DiskProviderBase.cs b/src/NzbDrone.Common/Disk/DiskProviderBase.cs index dfdb6b54c..01aaaaded 100644 --- a/src/NzbDrone.Common/Disk/DiskProviderBase.cs +++ b/src/NzbDrone.Common/Disk/DiskProviderBase.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.IO.Abstractions; using System.Linq; +using System.Threading; using NLog; using NzbDrone.Common.EnsureThat; using NzbDrone.Common.EnvironmentInfo; @@ -306,9 +307,26 @@ namespace NzbDrone.Common.Disk { Ensure.That(path, () => path).IsValidPath(PathValidationType.CurrentOs); - var files = GetFiles(path, recursive); + var files = GetFiles(path, recursive).ToList(); - files.ToList().ForEach(RemoveReadOnly); + files.ForEach(RemoveReadOnly); + + var attempts = 0; + + while (attempts < 3 && files.Any()) + { + EmptyFolder(path); + + if (GetFiles(path, recursive).Any()) + { + // Wait for IO operations to complete after emptying the folder since they aren't always + // instantly removed and it can lead to false positives that files are still present. + Thread.Sleep(3000); + } + + attempts++; + files = GetFiles(path, recursive).ToList(); + } _fileSystem.Directory.Delete(path, recursive); } From 1b9b57ae9bb835d5648cf13a15ee98abc5cea528 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 25 Mar 2025 21:13:13 +0200 Subject: [PATCH 219/275] Bump browserslist-db --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a08388e6b..baba74fa1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2323,9 +2323,9 @@ camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001663: - version "1.0.30001668" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz#98e214455329f54bf7a4d70b49c9794f0fbedbed" - integrity sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw== + version "1.0.30001707" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz" + integrity sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw== chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" From 5bdc119b980f6c13a609f35a6c337a0d4e70d09c Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 27 Mar 2025 19:47:03 +0200 Subject: [PATCH 220/275] Fixed: Include Track for history/since Fixes #5421 --- src/NzbDrone.Core/History/EntityHistoryRepository.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/History/EntityHistoryRepository.cs b/src/NzbDrone.Core/History/EntityHistoryRepository.cs index 4b66c88b7..5c659724d 100644 --- a/src/NzbDrone.Core/History/EntityHistoryRepository.cs +++ b/src/NzbDrone.Core/History/EntityHistoryRepository.cs @@ -104,6 +104,7 @@ namespace NzbDrone.Core.History var builder = Builder() .Join((h, a) => h.ArtistId == a.Id) .Join((h, a) => h.AlbumId == a.Id) + .LeftJoin((h, t) => h.TrackId == t.Id) .Where(x => x.Date >= date); if (eventType.HasValue) @@ -111,10 +112,11 @@ namespace NzbDrone.Core.History builder.Where(h => h.EventType == eventType); } - return _database.QueryJoined(builder, (history, artist, album) => + return _database.QueryJoined(builder, (history, artist, album, track) => { history.Artist = artist; history.Album = album; + history.Track = track; return history; }).OrderBy(h => h.Date).ToList(); } From 8027ab5d2e15b128fd56227858e810f37c62c73e Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 28 Mar 2025 09:57:57 +0200 Subject: [PATCH 221/275] Include invalid path in exception message when failing to normalize --- src/NzbDrone.Common/PathEqualityComparer.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Common/PathEqualityComparer.cs b/src/NzbDrone.Common/PathEqualityComparer.cs index bd6fa430d..e8322864a 100644 --- a/src/NzbDrone.Common/PathEqualityComparer.cs +++ b/src/NzbDrone.Common/PathEqualityComparer.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; @@ -6,7 +7,7 @@ namespace NzbDrone.Common { public class PathEqualityComparer : IEqualityComparer { - public static readonly PathEqualityComparer Instance = new PathEqualityComparer(); + public static readonly PathEqualityComparer Instance = new (); private PathEqualityComparer() { @@ -19,12 +20,19 @@ namespace NzbDrone.Common public int GetHashCode(string obj) { - if (OsInfo.IsWindows) + try { - return obj.CleanFilePath().Normalize().ToLower().GetHashCode(); - } + if (OsInfo.IsWindows) + { + return obj.CleanFilePath().Normalize().ToLower().GetHashCode(); + } - return obj.CleanFilePath().Normalize().GetHashCode(); + return obj.CleanFilePath().Normalize().GetHashCode(); + } + catch (ArgumentException ex) + { + throw new ArgumentException($"Invalid path: {obj}", ex); + } } } } From 13f6b1a086ba95e355a9bcc37799bdcec8e5f87f Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 30 Mar 2025 10:17:14 +0300 Subject: [PATCH 222/275] Bump version to 2.11.1 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b87e0a2ed..9076b6da6 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.11.0' + majorVersion: '2.11.1' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From 6150a57596794c42b25cf50e72d1cc5c0f3ea33d Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 30 Mar 2025 07:17:20 +0000 Subject: [PATCH 223/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Maxime Surrel Co-authored-by: Moxitech Co-authored-by: Weblate Co-authored-by: Xing Wang Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ru/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/zh_CN/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/fr.json | 4 +++- src/NzbDrone.Core/Localization/Core/ru.json | 7 +++++-- src/NzbDrone.Core/Localization/Core/zh_CN.json | 6 ++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index 7b10d98b2..ab01fa5e8 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -1350,5 +1350,7 @@ "PendingDownloadClientUnavailable": "En attente – Le client de téléchargement n'est pas disponible", "UnableToImportAutomatically": "Impossible d'importer automatiquement", "WaitingToImport": "En attente d'import", - "WaitingToProcess": "En attente de traitement" + "WaitingToProcess": "En attente de traitement", + "DefaultDelayProfileArtist": "Il s'agit du profil par défaut. Il s'applique à tous les artistes qui n'ont pas de profil explicite.", + "DelayProfileArtistTagsHelpText": "S'applique aux artistes avec au moins une balise correspondante" } diff --git a/src/NzbDrone.Core/Localization/Core/ru.json b/src/NzbDrone.Core/Localization/Core/ru.json index ae809669b..7b1bed1fc 100644 --- a/src/NzbDrone.Core/Localization/Core/ru.json +++ b/src/NzbDrone.Core/Localization/Core/ru.json @@ -834,7 +834,7 @@ "Absolute": "Абсолютный", "RecycleBinUnableToWriteHealthCheck": "Не удается выполнить запись в настроенную папку корзины: {path}. Убедитесь, что этот путь существует и доступен для записи пользователем, запускающим {appName}", "AddListExclusionHelpText": "Запретить добавление серий в {appName} по спискам", - "AddNewArtistRootFolderHelpText": "Подпапка \"{0}\" будет создана автоматически", + "AddNewArtistRootFolderHelpText": "Подпапка \"{folder}\" будет создана автоматически", "AuthenticationRequiredHelpText": "Отредактируйте, для каких запросов требуется авторизация. Не изменяйте, если не понимаете риски.", "DeleteArtistFolderCountConfirmation": "Вы уверены, что хотите удалить {count} выбранных индексатора?", "RenameFiles": "Переименовать файлы", @@ -1108,5 +1108,8 @@ "Pending": "В ожидании", "PendingDownloadClientUnavailable": "Ожидание – Клиент для загрузки недоступен", "SkipFreeSpaceCheckHelpText": "Используете, когда {appName} не может верно определить свободное место в вашей корневой папке", - "ManageFormats": "Управлять форматами" + "ManageFormats": "Управлять форматами", + "AddArtistWithName": "Добавить {artistName}", + "AddNewAlbum": "Добавить новый альбом", + "AddMetadataProfile": "Добавить мета-данные профиля" } diff --git a/src/NzbDrone.Core/Localization/Core/zh_CN.json b/src/NzbDrone.Core/Localization/Core/zh_CN.json index 09dbca921..93e286e22 100644 --- a/src/NzbDrone.Core/Localization/Core/zh_CN.json +++ b/src/NzbDrone.Core/Localization/Core/zh_CN.json @@ -1337,7 +1337,7 @@ "DownloadClientSettingsRecentPriority": "最近优先", "PostImportCategory": "导入后分类", "NotificationsSettingsWebhookHeaders": "标头", - "DefaultDelayProfileArtist": "This is the default profile. It applies to all artists that don't have an explicit profile.", + "DefaultDelayProfileArtist": "这是默认的配置。此配置用于所有的没有配置的艺术家", "CheckDownloadClientForDetails": "查看下载客户端了解更多详细信息", "DownloadWarning": "下载警告:{warningMessage}", "UnableToImportAutomatically": "无法自动导入", @@ -1347,5 +1347,7 @@ "Pending": "挂起", "PendingDownloadClientUnavailable": "挂起 - 下载客户端不可用", "WaitingToImport": "等待导入", - "WaitingToProcess": "等待处理" + "WaitingToProcess": "等待处理", + "DelayProfileArtistTagsHelpText": "应用到至少有一个标签匹配的艺术家", + "AlbumInfo": "专辑 信息" } From 4677a1115a42c2e6c637e591002c9c83619b75cf Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 2 Apr 2025 00:11:01 +0300 Subject: [PATCH 224/275] Bump linux agent to ubuntu-22.04 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9076b6da6..c754fddfd 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -19,7 +19,7 @@ variables: nodeVersion: '20.X' innoVersion: '6.2.0' windowsImage: 'windows-2022' - linuxImage: 'ubuntu-20.04' + linuxImage: 'ubuntu-22.04' macImage: 'macOS-13' trigger: From c83332e58cfd50c95fbb2c26c946628f28f3b4da Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 24 Mar 2025 20:14:55 -0700 Subject: [PATCH 225/275] New: Prevent Remote Path Mapping local folder being set to System folder or '/' (cherry picked from commit 0f904e091702a2ac53771ee3aeb5aafe62688035) --- .../RemotePathMappingController.cs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Lidarr.Api.V1/RemotePathMappings/RemotePathMappingController.cs b/src/Lidarr.Api.V1/RemotePathMappings/RemotePathMappingController.cs index f0679e27b..33edddff3 100644 --- a/src/Lidarr.Api.V1/RemotePathMappings/RemotePathMappingController.cs +++ b/src/Lidarr.Api.V1/RemotePathMappings/RemotePathMappingController.cs @@ -28,10 +28,13 @@ namespace Lidarr.Api.V1.RemotePathMappings .NotEmpty(); SharedValidator.RuleFor(c => c.LocalPath) - .Cascade(CascadeMode.Stop) - .IsValidPath() - .SetValidator(mappedNetworkDriveValidator) - .SetValidator(pathExistsValidator); + .Cascade(CascadeMode.Stop) + .IsValidPath() + .SetValidator(mappedNetworkDriveValidator) + .SetValidator(pathExistsValidator) + .SetValidator(new SystemFolderValidator()) + .NotEqual("/") + .WithMessage("Cannot be set to '/'"); } public override RemotePathMappingResource GetResourceById(int id) @@ -41,7 +44,7 @@ namespace Lidarr.Api.V1.RemotePathMappings [RestPostById] [Consumes("application/json")] - public ActionResult CreateMapping(RemotePathMappingResource resource) + public ActionResult CreateMapping([FromBody] RemotePathMappingResource resource) { var model = resource.ToModel(); @@ -62,7 +65,7 @@ namespace Lidarr.Api.V1.RemotePathMappings } [RestPutById] - public ActionResult UpdateMapping(RemotePathMappingResource resource) + public ActionResult UpdateMapping([FromBody] RemotePathMappingResource resource) { var mapping = resource.ToModel(); From 89b9352fef7ea6a5f70c9010bddef800301efa19 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 24 Mar 2025 20:07:15 -0700 Subject: [PATCH 226/275] Fixed: Set output encoding to UTF-8 when running external processes (cherry picked from commit f8e57b09856278a6d0c65f18704e96a33459687d) --- src/NzbDrone.Common/Processes/ProcessProvider.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Common/Processes/ProcessProvider.cs b/src/NzbDrone.Common/Processes/ProcessProvider.cs index 3c86a06b1..bee099319 100644 --- a/src/NzbDrone.Common/Processes/ProcessProvider.cs +++ b/src/NzbDrone.Common/Processes/ProcessProvider.cs @@ -6,6 +6,7 @@ using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; +using System.Text; using NLog; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Model; @@ -117,7 +118,9 @@ namespace NzbDrone.Common.Processes UseShellExecute = false, RedirectStandardError = true, RedirectStandardOutput = true, - RedirectStandardInput = true + RedirectStandardInput = true, + StandardOutputEncoding = Encoding.UTF8, + StandardErrorEncoding = Encoding.UTF8 }; if (environmentVariables != null) From 9ba71ae6b1fec6698d7b6476768952b131b66637 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 31 Mar 2025 19:26:14 -0700 Subject: [PATCH 227/275] Update WikiUrl type in API docs (cherry picked from commit 9bd619ccfe074abe396bbf043a36a5be18a7ba4b) --- src/Lidarr.Api.V1/Health/HealthResource.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Lidarr.Api.V1/Health/HealthResource.cs b/src/Lidarr.Api.V1/Health/HealthResource.cs index 9de525009..b059198db 100644 --- a/src/Lidarr.Api.V1/Health/HealthResource.cs +++ b/src/Lidarr.Api.V1/Health/HealthResource.cs @@ -1,7 +1,6 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Lidarr.Http.REST; -using NzbDrone.Common.Http; using NzbDrone.Core.HealthCheck; namespace Lidarr.Api.V1.Health @@ -11,7 +10,7 @@ namespace Lidarr.Api.V1.Health public string Source { get; set; } public HealthCheckResult Type { get; set; } public string Message { get; set; } - public HttpUri WikiUrl { get; set; } + public string WikiUrl { get; set; } } public static class HealthResourceMapper @@ -29,7 +28,7 @@ namespace Lidarr.Api.V1.Health Source = model.Source.Name, Type = model.Type, Message = model.Message, - WikiUrl = model.WikiUrl + WikiUrl = model.WikiUrl.FullUri }; } From 1045684935bb22085d3a06f7c3a23ee253d4f849 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 8 Apr 2025 15:28:37 +0300 Subject: [PATCH 228/275] Bump Selenium.WebDriver.ChromeDriver --- src/NzbDrone.Automation.Test/Lidarr.Automation.Test.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Automation.Test/Lidarr.Automation.Test.csproj b/src/NzbDrone.Automation.Test/Lidarr.Automation.Test.csproj index ada550253..8204721f3 100644 --- a/src/NzbDrone.Automation.Test/Lidarr.Automation.Test.csproj +++ b/src/NzbDrone.Automation.Test/Lidarr.Automation.Test.csproj @@ -4,7 +4,7 @@ - + From e4a36ca388e38d670bf865e5c3c59eb0d1bd57ac Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 7 Apr 2025 15:55:38 +0300 Subject: [PATCH 229/275] Log delete statements only once --- src/NzbDrone.Core/Datastore/BasicRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Datastore/BasicRepository.cs b/src/NzbDrone.Core/Datastore/BasicRepository.cs index 75cc9510b..d39858f2f 100644 --- a/src/NzbDrone.Core/Datastore/BasicRepository.cs +++ b/src/NzbDrone.Core/Datastore/BasicRepository.cs @@ -252,7 +252,7 @@ namespace NzbDrone.Core.Datastore protected void Delete(SqlBuilder builder) { - var sql = builder.AddDeleteTemplate(typeof(TModel)).LogQuery(); + var sql = builder.AddDeleteTemplate(typeof(TModel)); using (var conn = _database.OpenConnection()) { From 556f0ea54bb31227cc82253aad219f35e8a65e96 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 7 Apr 2025 15:54:06 +0300 Subject: [PATCH 230/275] Fixed: Disallow tags creation with empty label --- src/Lidarr.Api.V1/Tags/TagController.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Lidarr.Api.V1/Tags/TagController.cs b/src/Lidarr.Api.V1/Tags/TagController.cs index a0e76335e..14f1aef64 100644 --- a/src/Lidarr.Api.V1/Tags/TagController.cs +++ b/src/Lidarr.Api.V1/Tags/TagController.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using FluentValidation; using Lidarr.Http; using Lidarr.Http.REST; using Lidarr.Http.REST.Attributes; @@ -23,6 +24,8 @@ namespace Lidarr.Api.V1.Tags : base(signalRBroadcaster) { _tagService = tagService; + + SharedValidator.RuleFor(c => c.Label).NotEmpty(); } public override TagResource GetResourceById(int id) From d21ad2ad68b9e24c5b50270cdbcd06f8f8bdbf01 Mon Sep 17 00:00:00 2001 From: Servarr Date: Tue, 8 Apr 2025 12:38:22 +0000 Subject: [PATCH 231/275] Automated API Docs update --- src/Lidarr.Api.V1/openapi.json | 45 ++-------------------------------- 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/src/Lidarr.Api.V1/openapi.json b/src/Lidarr.Api.V1/openapi.json index 8849354f6..4c0462717 100644 --- a/src/Lidarr.Api.V1/openapi.json +++ b/src/Lidarr.Api.V1/openapi.json @@ -9808,7 +9808,8 @@ "nullable": true }, "wikiUrl": { - "$ref": "#/components/schemas/HttpUri" + "type": "string", + "nullable": true } }, "additionalProperties": false @@ -10062,48 +10063,6 @@ }, "additionalProperties": false }, - "HttpUri": { - "type": "object", - "properties": { - "fullUri": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "scheme": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "host": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "port": { - "type": "integer", - "format": "int32", - "nullable": true, - "readOnly": true - }, - "path": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "query": { - "type": "string", - "nullable": true, - "readOnly": true - }, - "fragment": { - "type": "string", - "nullable": true, - "readOnly": true - } - }, - "additionalProperties": false - }, "ImportListBulkResource": { "type": "object", "properties": { From d9562c701e069650130ab8e307269cdc411f3986 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 8 Apr 2025 12:32:18 +0000 Subject: [PATCH 232/275] Multiple Translations updated by Weblate ignore-downstream Co-authored-by: Hugoren Martinako Co-authored-by: Ste Co-authored-by: Weblate Co-authored-by: Weblate Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/ca/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/fr/ Translate-URL: https://translate.servarr.com/projects/servarr/lidarr/uk/ Translation: Servarr/Lidarr --- src/NzbDrone.Core/Localization/Core/ca.json | 279 ++++++++++++++++++-- src/NzbDrone.Core/Localization/Core/fr.json | 13 +- src/NzbDrone.Core/Localization/Core/uk.json | 24 +- 3 files changed, 290 insertions(+), 26 deletions(-) diff --git a/src/NzbDrone.Core/Localization/Core/ca.json b/src/NzbDrone.Core/Localization/Core/ca.json index f090fc042..97ac789ac 100644 --- a/src/NzbDrone.Core/Localization/Core/ca.json +++ b/src/NzbDrone.Core/Localization/Core/ca.json @@ -15,7 +15,7 @@ "BindAddress": "Adreça d'enllaç", "DeleteQualityProfileMessageText": "Esteu segur que voleu suprimir el perfil de qualitat '{name}'?", "DeleteReleaseProfile": "Suprimeix el perfil de llançament", - "DeleteReleaseProfileMessageText": "Esteu segur que voleu suprimir aquest perfil de retard?", + "DeleteReleaseProfileMessageText": "Esteu segur que voleu suprimir aquest perfil de llançament?", "DownloadClients": "Descàrrega Clients", "EnableColorImpairedMode": "Activa el mode amb alteracions del color", "EnableHelpText": "Activa la creació de fitxers de metadades per a aquest tipus de metadades", @@ -82,7 +82,7 @@ "TorrentDelayHelpText": "Retard en minuts per a esperar abans de capturar un torrent", "Torrents": "Torrents", "UnableToLoadGeneralSettings": "No es pot carregar la configuració general", - "UnableToLoadHistory": "No es pot carregar l'historial", + "UnableToLoadHistory": "No es pot carregar l'historial.", "UnableToLoadImportListExclusions": "No es poden carregar les exclusions de la llista", "UnableToLoadIndexerOptions": "No es poden carregar les opcions de l'indexador", "RemoveCompleted": "S'ha eliminat", @@ -134,7 +134,7 @@ "MoreInfo": "Més informació", "NoBackupsAreAvailable": "No hi ha còpies de seguretat disponibles", "NETCore": ".NET", - "NoHistory": "Sense història", + "NoHistory": "Sense historial.", "NoLeaveIt": "No, deixa-ho", "NotificationTriggers": "Activadors de notificacions", "NoUpdatesAreAvailable": "No hi ha actualitzacions disponibles", @@ -243,7 +243,7 @@ "ChownGroupHelpText": "Nom del grup o gid. Utilitzeu gid per a sistemes de fitxers remots.", "ChownGroupHelpTextWarning": "Això només funciona si l'usuari que executa {appName} és el propietari del fitxer. És millor assegurar-se que el client de descàrrega utilitza el mateix grup que {appName}.", "ConnectSettings": "Configuració de connexió", - "CopyUsingHardlinksHelpText": "Utilitzeu els enllaços durs quan intenteu copiar fitxers de torrents que encara s'estan sembrant", + "CopyUsingHardlinksHelpText": "Els enllaços durs permeten que {appName} importi torrents de sembra a la carpeta de l'artista sense prendre espai extra al disc o copiar tot el contingut del fitxer. Els enllaços durs només funcionaran si l'origen i la destinació estan en el mateix volum", "CopyUsingHardlinksHelpTextWarning": "De tant en tant, els bloquejos de fitxers poden impedir reanomenar els fitxers que s'estan sembrant. Podeu desactivar temporalment la compartició i utilitzar la funció de reanomenar de {appName} com a solució.", "CreateEmptyArtistFolders": "Creeu carpetes buides per a les pel·lícules", "CreateEmptyArtistFoldersHelpText": "Creeu carpetes de pel·lícules que falten durant l'exploració del disc", @@ -252,7 +252,7 @@ "CutoffUnmet": "Tall no assolit", "Dates": "Dates", "DatabaseMigration": "Migració de BD", - "DelayingDownloadUntil": "S'està retardant la baixada fins a les {0} a les {1}", + "DelayingDownloadUntil": "S'està retardant la baixada fins a les {date} a les {time}", "DelayProfile": "Perfil de retard", "DelayProfiles": "Perfils de retard", "Delete": "Suprimeix", @@ -311,7 +311,7 @@ "IllRestartLater": "Reinicia més tard", "ImportExtraFiles": "Importa fitxers addicionals", "ImportExtraFilesHelpText": "Importeu fitxers addicionals coincidents (subtítols, nfo, etc.) després d'importar un fitxer de pel·lícula", - "ImportFailedInterp": "ImportFailedInterp", + "ImportFailedInterp": "Importació fallida: {0}", "Importing": "S'està important", "IncludeUnmonitored": "Inclou no monitorat", "Indexer": "Indexador", @@ -323,7 +323,7 @@ "LogFiles": "Fitxers de registre", "LogLevel": "Nivell de registre", "MaximumSize": "Mida màxima", - "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.", "Mechanism": "Mecanisme", "MediaInfo": "Informació de mitjans", "MediaManagementSettings": "Configuració de gestió de mitjans", @@ -462,7 +462,7 @@ "Progress": "Progrés", "SizeLimit": "Límit de mida", "Backup": "Còpia de seguretat", - "IndexerTagHelpText": "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.", + "IndexerTagHelpText": "Només utilitza aquest indexador per a pel·lícules que coincideixin amb almenys una etiqueta. Deixar en blanc per a utilitzar-ho amb totes les pel·lícules.", "Info": "Informació", "InstanceName": "Nom de la instància", "InteractiveImport": "Importació interactiva", @@ -593,7 +593,7 @@ "CouldntFindAnyResultsForTerm": "No s'ha pogut trobar cap resultat per a '{0}'", "DeleteCustomFormat": "Suprimeix el format personalitzat", "DeleteCustomFormatMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?", - "DeleteFormatMessageText": "Esteu segur que voleu suprimir l'etiqueta de format {0} ?", + "DeleteFormatMessageText": "Esteu segur que voleu suprimir l'etiqueta de format '{name}'?", "DownloadPropersAndRepacksHelpTextWarning": "Utilitzeu formats personalitzats per a actualitzacions automàtiques a Propers/Repacks", "DownloadedUnableToImportCheckLogsForDetails": "Baixat: no es pot importar: comproveu els registres per obtenir-ne més detalls", "ExportCustomFormat": "Exporta el format personalitzat", @@ -601,7 +601,7 @@ "FailedLoadingSearchResults": "No s'han pogut carregar els resultats de la cerca, torneu-ho a provar.", "Formats": "Formats", "IncludeCustomFormatWhenRenamingHelpText": "Inclou en {Custom Formats} el format de canvi de nom", - "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "És fàcil afegir una pel·lícula nova, només cal que comenceu a escriure el nom de la pel·lícula que voleu afegir", + "ItsEasyToAddANewArtistJustStartTypingTheNameOfTheArtistYouWantToAdd": "És fàcil afegir una pel·lícula nova, només cal que comenceu a escriure el nom de la pel·lícula que voleu afegir.", "MinFormatScoreHelpText": "La puntuació mínima de format personalitzada per a la baixada", "Monitor": "Monitora", "NegateHelpText": "Si està marcat, el format personalitzat no s'aplicarà si la condició {0} coincideix.", @@ -614,7 +614,7 @@ "UnableToLoadInteractiveSearch": "No es poden carregar els resultats d'aquesta cerca de pel·lícules. Torna-ho a provar més tard", "TheArtistFolderStrongpathstrongAndAllOfItsContentWillBeDeleted": "La carpeta de pel·lícules '{0}' i tot el seu contingut es suprimiran.", "CustomFormat": "Format personalitzat", - "CustomFormatRequiredHelpText": "La condició {0} ha de coincidir perquè s'apliqui el format personalitzat. En cas contrari, n'hi ha prou amb una única coincidència de {1}.", + "CustomFormatRequiredHelpText": "La condició {0} ha de coincidir perquè s'apliqui el format personalitzat. En cas contrari, n'hi ha prou amb una única coincidència de {0}.", "CustomFormatSettings": "Configuració de formats personalitzats", "CustomFormats": "Formats personalitzats", "Customformat": "Formats personalitzats", @@ -643,13 +643,13 @@ "ProxyCheckBadRequestMessage": "No s'ha pogut provar el servidor intermediari. Codi d'estat: {0}", "ProxyCheckResolveIpMessage": "No s'ha pogut resoldre l'adreça IP de l'amfitrió intermediari configurat {0}", "RemotePathMappingCheckBadDockerPath": "Esteu utilitzant docker; el client de baixada {0} col·loca les baixades a {1}, però el camí {2} no és vàlid. Reviseu els mapes de camins remots i la configuració del client de baixada.", - "RemotePathMappingCheckDownloadPermissions": "{appName} pot veure però no accedir a la pel·lícula baixada {0}. Error de permisos probable.", + "RemotePathMappingCheckDownloadPermissions": "{appName} pot veure però no accedir a la música descarregada {0}. Probablement s'ha produït un error en els permisos.", "RemotePathMappingCheckDockerFolderMissing": "Esteu utilitzant docker; el client de baixada {0} col·loca les baixades a {1}, però sembla que aquest directori no existeix dins del contenidor. Reviseu els mapes de camins remots i la configuració dels volums del contenidor.", "RemotePathMappingCheckFilesBadDockerPath": "Esteu utilitzant docker; el client de baixada{0} ha informat de fitxers a {1}, però el camí {2} no és vàlid. Reviseu els mapes de camins remots i la configuració del client de baixada.", "RemotePathMappingCheckFilesLocalWrongOSPath": "El client de baixada local {0} ha informat de fitxers a {1}, però el camí {2} no és vàlid. Reviseu la configuració del vostre client de baixada.", "RemotePathMappingCheckFilesWrongOSPath": "El client de baixada remota {0} ha informat de fitxers a {1}, però el camí {2} no és vàlid. Reviseu els mapes de camins remots i baixeu la configuració del client.", "RemotePathMappingCheckGenericPermissions": "El client de baixada {0} col·loca les baixades a {1} però {appName} no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.", - "RemotePathMappingCheckImportFailed": "{appName} no ha pogut importar una pel·lícula. Comproveu els vostres registres per a obtenir més informació.", + "RemotePathMappingCheckImportFailed": "{appName} no ha pogut importar música. Comproveu els vostres registres per obtenir-ne més detalls.", "RemotePathMappingCheckLocalWrongOSPath": "El client de baixada local {0} col·loca les baixades a {1}, però el camí {2} no és vàlid. Reviseu la configuració del vostre client de baixada.", "RemotePathMappingCheckRemoteDownloadClient": "El client de baixada remota {0} ha informat de fitxers a {1}, però sembla que aquest directori no existeix. És probable que falti el mapa de camins remots.", "RootFolderCheckMultipleMessage": "Falten diverses carpetes arrel: {0}", @@ -677,8 +677,8 @@ "BlocklistReleases": "Llista de llançaments bloquejats", "BlocklistReleaseHelpText": "Impedeix que {appName} torni a capturar aquesta versió automàticament", "FailedToLoadQueue": "No s'ha pogut carregar la cua", - "DeleteConditionMessageText": "Esteu segur que voleu suprimir la notificació '{0}'?", - "DeleteSelectedDownloadClients": "Suprimeix el client de descàrrega", + "DeleteConditionMessageText": "Esteu segur que voleu suprimir la condició '{name}'?", + "DeleteSelectedDownloadClients": "Suprimeix els clients seleccionats de baixada", "DeleteSelectedIndexers": "Suprimeix l'indexador(s)", "DeleteSelectedIndexersMessageText": "Esteu segur que voleu suprimir {count} indexador(s) seleccionat(s)?", "DownloadClientSortingCheckMessage": "El client de baixada {0} té l'ordenació {1} activada per a la categoria de {appName}. Hauríeu de desactivar l'ordenació al vostre client de descàrrega per evitar problemes d'importació.", @@ -721,7 +721,7 @@ "ImportListRootFolderMissingRootHealthCheckMessage": "Falta la carpeta arrel per a les llistes d'importació: {0}", "ImportListRootFolderMultipleMissingRootsHealthCheckMessage": "Falten diverses carpetes arrel per a les llistes d'importació: {0}", "Enabled": "Habilitat", - "AddNewArtistRootFolderHelpText": "La subcarpeta '{0}' es crearà automàticament", + "AddNewArtistRootFolderHelpText": "La subcarpeta '{folder}' es crearà automàticament", "Priority": "Prioritat", "DeleteSpecification": "Esborra especificació", "BypassIfHighestQualityHelpText": "Evita el retard quan la versió té la qualitat activada més alta al perfil de qualitat amb el protocol preferit", @@ -826,15 +826,15 @@ "Unlimited": "Il·limitat", "Artist": "artista", "BypassIfAboveCustomFormatScore": "Ometre si està per sobre de la puntuació de format personalitzada", - "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.", "EditConnectionImplementation": "Afegeix una connexió - {implementationName}", "Episode": "Episodi", "AddImportListExclusionAlbumHelpText": "Eviteu que els àlbums s'afegeixin a {appName} per llistes", "ImportLists": "llista d'importació", - "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ó", "BypassIfAboveCustomFormatScoreHelpText": "Habiliteu l'omissió quan la versió tingui una puntuació superior a la puntuació mínima per al format personalitzat", "Artists": "artista", - "CountDownloadClientsSelected": "{count} client(s) de baixada seleccionat(s)", + "CountDownloadClientsSelected": "{selectedCount} client(s) de baixada seleccionat(s)", "EditReleaseProfile": "Afegeix un perfil de llançament", "ReleaseProfiles": "Perfils de llançament", "ExtraFileExtensionsHelpTextsExamples": "Exemples: '.sub, .nfo' o 'sub,nfo'", @@ -859,7 +859,7 @@ "AutoRedownloadFailedFromInteractiveSearch": "Tornar a baixar baixades fallades des de la cerca interactiva", "AutoRedownloadFailed": "Tornar a baixar les baixades fallades", "StatusEndedContinuing": "Continua", - "DeleteTrackFileMessageText": "Esteu segur que voleu suprimir '{path}'?", + "DeleteTrackFileMessageText": "Esteu segur que voleu suprimir {0}?", "NoCutoffUnmetItems": "No hi ha elements de tall no assolits", "Release": " Llançament", "DeleteEmptyFoldersHelpText": "Suprimeix les carpetes de sèries buides durant l'exploració del disc i quan s'esborren els fitxers de sèries", @@ -914,7 +914,7 @@ "DownloadClientDelugeSettingsDirectoryCompleted": "Directori al qual es mou quan s'hagi completat", "DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Ubicació opcional de les baixades completades, deixeu-lo en blanc per utilitzar la ubicació predeterminada de Deluge", "DownloadClientDelugeSettingsDirectoryHelpText": "Ubicació opcional de les baixades completades, deixeu-lo en blanc per utilitzar la ubicació predeterminada de Deluge", - "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName} no ha pogut determinar per a quina pel·lícula era aquest llançament. És possible que {appName} no pugui importar automàticament aquesta versió. Voleu capturar \"{0}\"?", + "GrabReleaseUnknownArtistOrAlbumMessageText": "{appName} no ha pogut determinar per a quina pel·lícula era aquest llançament. És possible que {appName} no pugui importar automàticament aquesta versió. Voleu capturar '{title}'?", "IndexerFlags": "Indicadors de l'indexador", "MonitorNoAlbums": "Cap", "Rejections": "Rebutjats", @@ -992,5 +992,240 @@ "Paused": "En pausa", "Pending": "Pendents", "WaitingToImport": "S’està esperant per a importar", - "WaitingToProcess": "S’està esperant per a processar" + "WaitingToProcess": "S’està esperant per a processar", + "DefaultMonitorOptionHelpText": "Quins àlbums s'han de controlar en afegir inicialment per als artistes detectats en aquesta carpeta", + "DownloadedImporting": "'Descarregat - Important'", + "ExpandItemsByDefault": "Expandeix els elements per defecte", + "HideAlbums": "Oculta els àlbums", + "PathHelpText": "Carpeta arrel que conté la vostra biblioteca de música", + "AllAlbums": "Tots els àlbums", + "AllowFingerprintingHelpText": "Utilitza l'empremta digital per millorar la precisió de la coincidència de la pista", + "DefaultTagsHelpText": "Etiquetes {appName} per defecte per als artistes detectats en aquesta carpeta", + "ShowNextAlbumHelpText": "Mostra el següent àlbum sota el cartell", + "TheAlbumsFilesWillBeDeleted": "Els fitxers de l'àlbum s'eliminaran.", + "TrackCount": "Comptador de pistes", + "TrackDownloaded": "Pista descarregada", + "TrackFiles": "Fitxers de pista", + "ArtistNameHelpText": "El nom de l'artista/àlbum a excloure (pot ser qualsevol cosa significativa)", + "ContinuingNoAdditionalAlbumsAreExpected": "No s'espera cap àlbum addicional", + "ContinuingMoreAlbumsAreExpected": "S'espera més àlbums", + "AddedArtistSettings": "Configuració d'artista afegida", + "AlbumDetails": "Detalls de l'àlbum", + "AlbumHasNotAired": "L'àlbum no s'ha emès", + "AlbumInfo": "Informació de l'àlbum", + "AlbumIsDownloading": "L'àlbum s'està baixant", + "AlbumIsNotMonitored": "L'àlbum no està monitoritzat", + "AlbumRelease": "Publicació de l'àlbum", + "AlbumReleaseDate": "Data de publicació de l'àlbum", + "AlbumStatus": "Estat de l'àlbum", + "AlbumStudio": "Estudi d'àlbum", + "AlbumStudioTracksDownloaded": "{trackFileCount}/{totalTrackCount} pistes baixades", + "AlbumStudioTruncated": "Només es mostren els últims 20 àlbums, ves als detalls per veure tots els àlbums", + "AlbumType": "Tipus d'àlbum", + "AllAlbumsData": "Controla tots els àlbums excepte els especials", + "AllArtistAlbums": "Tots els àlbums d'artista", + "AllMonitoringOptionHelpText": "Monitora els artistes i tots els àlbums de cada artista inclosos a la llista d'importació", + "AllowFingerprintingHelpTextWarning": "Això requereix que {appName} llegeixi parts del fitxer que alentiran els escanejos i poden causar una activitat de disc o xarxa alta.", + "AnchorTooltip": "Aquest fitxer ja és a la vostra biblioteca per a una versió que esteu important", + "AnyReleaseOkHelpText": "{appName} canviarà automàticament a la versió que coincideixi amb les pistes baixades", + "ArtistClickToChangeAlbum": "Feu clic per canviar l'àlbum", + "ArtistEditor": "Editor d'artistes", + "ArtistFolderFormat": "Format de carpeta d'artista", + "ArtistIsMonitored": "L'artista està monitoritzat", + "ArtistMonitoring": "Seguiment de l'artista", + "ArtistProgressBarText": "{trackFileCount} / {trackCount} (Total: {totalTrackCount}, Baixada: {downloadingCount})", + "ArtistType": "Tipus d'artista", + "ArtistsEditRootFolderHelpText": "Moure artistes a la mateixa carpeta arrel es pot utilitzar per a canviar el nom de les carpetes d'artista perquè coincideixin amb el nom o el format de nom actualitzat", + "AutomaticallySwitchRelease": "Commuta automàticament la versió", + "BackupIntervalHelpText": "Interval per a fer una còpia de seguretat de la base de dades {appName} i de la configuració", + "BannerOptions": "Opcions del bàner", + "ContinuingAllTracksDownloaded": "Continuant (totes les pistes baixades)", + "DashOrSpaceDashDependingOnName": "Traç o guió d'espai depenent del nom", + "DelayProfileArtistTagsHelpText": "Aplica als artistes amb almenys una etiqueta coincident", + "DownloadClientSettingsRecentPriorityAlbumHelpText": "Prioritat a utilitzar en capturar àlbums publicats en els últims 14 dies", + "IsShowingMonitoredMonitorSelected": "Monitor seleccionat", + "LidarrSupportsMultipleListsForImportingAlbumsAndArtistsIntoTheDatabase": "{appName} admet múltiples llistes per importar àlbums i artistes a la base de dades.", + "MediumFormat": "Format mitjà", + "MetadataSettingsArtistSummary": "Crea fitxers de metadades quan s'importin pistes o s'actualitzi l'artista", + "MissingTracks": "Manquen pistes", + "MonitorAlbum": "Àlbum del monitor", + "MonitorArtists": "Monitora els artistes", + "MonitorExistingAlbums": "Àlbums existents", + "MonitorFirstAlbum": "Primer àlbum", + "NoTracksInThisMedium": "No hi ha pistes en aquest suport", + "NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName} camí, utilitzat per modificar els camins de sèrie quan {serviceName} veu la ubicació del camí de la biblioteca diferent de {appName} (requereix 'Biblioteca d'actualització')", + "OneAlbum": "1 àlbum", + "Retag": "Reetiqueta", + "SearchForAllCutoffUnmetAlbums": "Cerca tots els àlbums de Cutoff Unmet", + "SecondaryAlbumTypes": "Tipus d'àlbum secundari", + "SetAppTags": "Estableix {appName} etiquetes", + "ShouldMonitorExisting": "Monitora els àlbums existents", + "ShouldMonitorExistingHelpText": "Monitora automàticament els àlbums d'aquesta llista que ja estan a {appName}", + "ShouldMonitorHelpText": "Monitora els artistes i àlbums afegits d'aquesta llista", + "ShowLastAlbum": "Mostra l'últim àlbum", + "TagAudioFilesWithMetadata": "Etiqueta els fitxers d'àudio amb metadades", + "TrackFileMissingTooltip": "Falta el fitxer de la pista", + "TrackNaming": "Nom de la pista", + "TrackProgress": "Progrés de la pista", + "TrackStatus": "Estat de la pista", + "SpecificMonitoringOptionHelpText": "Monitora els artistes, però només supervisa els àlbums inclosos explícitament a la llista", + "OnAlbumDelete": "En suprimir l'àlbum", + "TrackFileDeletedTooltip": "S'ha suprimit el fitxer de pista", + "TrackFileTagsUpdatedTooltip": "S'han actualitzat les etiquetes dels fitxers de seguiment", + "MonitoringOptionsHelpText": "Quins àlbums s'han de controlar després d'afegir l'artista (ajust d'un sol cop)", + "Proceed": "Procedeix", + "SelectArtist": "Selecciona l'artista", + "AllowArtistChangeClickToChangeArtist": "Feu clic per canviar l'artista", + "FutureAlbums": "Àlbums futurs", + "ArtistName": "Nom de l'artista", + "MonitorNoNewAlbums": "Sense àlbums nous", + "IsExpandedShowTracks": "Mostra les pistes", + "MonitorMissingAlbums": "Manquen àlbums", + "ShowAlbumCount": "Mostra el comptador d'àlbums", + "AreYouSure": "N'estàs segur?", + "Banners": "Bàners", + "NoneMonitoringOptionHelpText": "No monitoris artistes ni àlbums", + "DownloadedWaitingToImport": "'Descarregat - Esperant a importar'", + "EpisodeDoesNotHaveAnAbsoluteEpisodeNumber": "L'episodi no té un número d'episodi absolut", + "NoMediumInformation": "No hi ha informació de suport disponible.", + "MissingTracksArtistNotMonitored": "Manquen pistes (l'artista no està monitoritzat)", + "NotDiscography": "No discografia", + "NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} camí, utilitzat per modificar els camins de sèrie quan {serviceName} veu la ubicació del camí de la biblioteca diferent de {appName} (requereix 'Biblioteca d'actualització')", + "NotificationsTagsArtistHelpText": "Envia només notificacions per a artistes amb almenys una etiqueta coincident", + "Playlist": "Reproducció", + "PrimaryAlbumTypes": "Tipus d'àlbum principal", + "PrimaryTypes": "Tipus primaris", + "TrackArtist": "Artista de la pista", + "TrackImported": "S'ha importat la pista", + "DownloadImported": "Baixada importada", + "ForeignId": "Id estranger", + "Inactive": "Inactiu", + "EditArtist": "Edita l'artista", + "ReleasesHelpText": "Canvia el llançament d'aquest àlbum", + "ShouldSearch": "Cerca elements nous", + "GoToArtistListing": "Ves a la llista d'artistes", + "SelectAlbum": "Selecciona l'àlbum", + "SceneNumberHasntBeenVerifiedYet": "El número d'escena encara no s'ha verificat", + "SelectTracks": "Selecciona les pistes", + "ArtistIsUnmonitored": "L'artista no està monitoritzat", + "DefaultQualityProfileIdHelpText": "Perfil de qualitat predeterminat per als artistes detectats en aquesta carpeta", + "ExistingAlbums": "Àlbums existents", + "GroupInformation": "Informació del grup", + "MatchedToAlbums": "Coincideix amb els àlbums", + "MusicbrainzId": "Id del Musicbrainz", + "ThereWasAnErrorLoadingThisItem": "S'ha produït un error en carregar aquest element", + "SearchBoxPlaceHolder": "p. ex. Trencant Benjamin, lidarr:854a1807-025b-42a8-ba8c-2a39717f1d25", + "ShowNextAlbum": "Mostra l'àlbum següent", + "MediaCount": "Comptador de mitjans", + "MissingAlbums": "Manquen àlbums", + "MissingTracksArtistMonitored": "Pistes que falten (controlat per l'artista)", + "MonitorFutureAlbums": "Àlbums futurs", + "MusicBrainzAlbumID": "ID de l'àlbum del MusicBrainz", + "NextAlbum": "Àlbum següent", + "AlbumTitle": "Títol de l'àlbum", + "AllExpandedExpandAll": "Expandeix-ho tot", + "MonitorNewAlbums": "Àlbums nous", + "LatestAlbum": "Últim àlbum", + "RemoveSelectedItemBlocklistMessageText": "Esteu segur que voleu eliminar els elements seleccionats de la llista de bloqueigs?", + "RenameTracks": "Canvia el nom de les pistes", + "ThereWasAnErrorLoadingThisPage": "S'ha produït un error en carregar aquesta pàgina", + "TrackFileCounttotalTrackCountTracksDownloadedInterp": "{0}/{1} pistes baixades", + "TrackFileRenamedTooltip": "S'ha canviat el nom del fitxer de pista", + "WriteMetadataToAudioFiles": "Escriu les metadades als fitxers d'àudio", + "HasMonitoredAlbumsNoMonitoredAlbumsForThisArtist": "No hi ha àlbums supervisats per a aquest artista", + "SearchAlbum": "Cerca un àlbum", + "ForNewImportsOnly": "Només per a importacions noves", + "CollapseMultipleAlbums": "Redueix diversos àlbums", + "CollapseMultipleAlbumsHelpText": "Redueix diversos àlbums que es publiquen el mateix dia", + "CombineWithExistingFiles": "Combina amb els fitxers existents", + "CountAlbums": "{albumCount} àlbums", + "Deceased": "Defunció", + "DefaultDelayProfileArtist": "Aquest és el perfil per defecte. S'aplica a tots els artistes que no tenen un perfil explícit.", + "DefaultLidarrTags": "Etiquetes {appName} per defecte", + "DefaultMetadataProfileIdHelpText": "Perfil predeterminat de metadades per als artistes detectats en aquesta carpeta", + "DeleteArtist": "Suprimeix l'artista seleccionat", + "DeleteArtistFolder": "Suprimeix la carpeta d'artista", + "DeleteArtistFolderCountWithFilesConfirmation": "Esteu segur que voleu suprimir {count} artistes seleccionats i tots els continguts?", + "DeleteFilesHelpText": "Suprimeix els fitxers de la pista i la carpeta de l'artista", + "DeleteSelectedArtists": "Suprimeix els artistes seleccionats", + "DeleteTrackFile": "Suprimeix el fitxer de pista", + "EditSelectedArtists": "Edita els artistes seleccionats", + "EmbedCoverArtHelpText": "Incrusta l'art de l'àlbum Lidarr en fitxers d'àudio en escriure etiquetes", + "EmbedCoverArtInAudioFiles": "Incrusta la caràtula en fitxers d'àudio", + "EnableAutomaticAddHelpText": "Afegeix un artista/àlbum a {appName} quan es realitzen les sincronitzacions a través de la interfície d'usuari o per {appName}", + "EnabledHelpText": "Marqueu-ho per a habilitar el perfil de la versió", + "EndedAllTracksDownloaded": "Finalitzat (totes les pistes baixades)", + "ExistingAlbumsData": "Monitora els àlbums que tenen fitxers o encara no s'han publicat", + "ExpandBroadcastByDefaultHelpText": "Transmissió", + "ExpandEPByDefaultHelpText": "Eps", + "ExpandSingleByDefaultHelpText": "Individuals", + "FilterAlbumPlaceholder": "Filtra l'àlbum", + "FilterArtistPlaceholder": "Filtra l'artista", + "FirstAlbum": "Primer àlbum", + "FirstAlbumData": "Controla els primers àlbums. Tots els altres àlbums seran ignorats", + "ForeignIdHelpText": "L'ID del Musicbrainz de l'artista/àlbum a excloure", + "FutureAlbumsData": "Monitora els àlbums que encara no s'han publicat", + "HideTracks": "Oculta les pistes", + "ICalTagsArtistHelpText": "Feed només contindrà artistes amb almenys una etiqueta coincident", + "IfYouDontAddAnImportListExclusionAndTheArtistHasAMetadataProfileOtherThanNoneThenThisAlbumMayBeReaddedDuringTheNextArtistRefresh": "Si no afegiu una exclusió de la llista d'importació i l'artista té un perfil de metadades diferent de 'None'.", + "ImportCompleteFailed": "Ha fallat la importació", + "ImportListTagsHelpText": "Etiquetes que s'afegiran a la importació des d'aquesta llista", + "IndexerIdHelpText": "Especifiqueu a quin indexador s'aplica el perfil", + "IsExpandedHideAlbums": "Oculta els àlbums", + "IsExpandedHideTracks": "Oculta les pistes", + "IsExpandedShowAlbums": "Mostra els àlbums", + "IsInUseCantDeleteAMetadataProfileThatIsAttachedToAnArtistOrImportList": "No es pot suprimir un perfil de metadades que està adjuntat a un artista o a una llista d'importació", + "IsInUseCantDeleteAQualityProfileThatIsAttachedToAnArtistOrImportList": "No es pot suprimir un perfil de qualitat que estigui adjuntat a un artista o a una llista d'importació", + "IsShowingMonitoredUnmonitorSelected": "Unmonitor seleccionat", + "LastAlbum": "Últim àlbum", + "LatestAlbumData": "Monitoritza els últims àlbums i futurs àlbums", + "ManageTracks": "Gestiona les pistes", + "MatchedToArtist": "Coincideix amb l'artista", + "MassAlbumsCutoffUnmetWarning": "Esteu segur que voleu cercar tots els ‘{0}’ àlbums sense límits satisfets?", + "MissingAlbumsData": "Monitora els àlbums que no tenen fitxers o que encara no s'han publicat", + "MonitorAlbumExistingOnlyWarning": "Aquest és un ajust ajustat de la configuració monitoritzada per a cada àlbum. Utilitzeu l'opció Artist/Edit per controlar què passa amb els àlbums nous", + "MonitorAllAlbums": "Tots els àlbums", + "MonitorArtist": "Monitora l’artista", + "MonitorLastestAlbum": "Últim àlbum", + "MonitorNewItems": "Monitora els àlbums nous", + "MonitorNewItemsHelpText": "Quins àlbums nous s'han de controlar", + "MonitoredHelpText": "Baixa els àlbums monitoritzats d'aquest artista", + "MultiDiscTrackFormat": "Format de pista multidisc", + "MusicBrainzArtistID": "ID de l'artista del MusicBrainz", + "NoneData": "No es controlarà cap àlbum", + "OnArtistAdd": "En afegir l'artista", + "Retagged": "Reetiquetat", + "RecycleBinUnableToWriteHealthCheck": "No s'ha pogut escriure a la carpeta de contenidors de reciclatge configurada: {0}. Assegureu-vos que aquest camí existeix i que l'usuari que executa {appName} pot escriure", + "RefreshArtist": "Actualitza l'artista", + "ReleaseProfileTagArtistHelpText": "Els perfils de llançament s'aplicaran als artistes amb almenys una etiqueta coincident. Deixa en blanc per aplicar a tots els artistes", + "ReplaceExistingFiles": "Substitueix els fitxers existents", + "RetagSelectedArtists": "Reetiqueta els artistes seleccionats", + "SearchForAllCutoffUnmetAlbumsConfirmationCount": "Esteu segur que voleu cercar tots els {totalRecords} àlbums tallats Unmet?", + "SearchForAllMissingAlbums": "Cerca tots els àlbums que falten", + "SearchForAllMissingAlbumsConfirmationCount": "Esteu segur que voleu cercar tots els {totalRecords} àlbums que manquen?", + "SearchForMonitoredAlbums": "Cerca àlbums monitoritzats", + "SecondaryTypes": "Tipus secundaris", + "SelectAlbumRelease": "Selecciona la publicació de l'àlbum", + "SelectedCountArtistsSelectedInterp": "{selectedCount} Artistes seleccionats", + "ShowTitleHelpText": "Mostra el nom de l'artista sota el cartell", + "SkipRedownloadHelpText": "Evita que {appName} intenti baixar versions alternatives per als elements eliminats", + "SpecificAlbum": "Àlbum específic", + "TotalTrackCountTracksTotalTrackFileCountTracksWithFilesInterp": "{0} pistes totals. {1} pistes amb fitxers.", + "TrackFilesCountMessage": "No hi ha fitxers de pista", + "TrackFilesLoadError": "No s'han pogut carregar els fitxers de pista", + "TrackMissingFromDisk": "Falta la pista del disc", + "TracksLoadError": "No s'han pogut carregar les pistes", + "WriteAudioTagsHelpTextWarning": "En seleccionar ‘Tots els fitxers’ s'alteraran els fitxers existents quan s'importin.", + "DeleteArtistFolders": "Suprimeix les carpetes d'artista", + "DownloadClientSettingsOlderPriorityAlbumHelpText": "Prioritat a utilitzar en capturar àlbums publicats fa més de 14 dies", + "EditMetadata": "Edita les metadades", + "NewAlbums": "Àlbums nous", + "NoAlbums": "Sense àlbums", + "NoMissingItems": "No falten elements", + "OnArtistDelete": "En suprimir l'artista", + "OnTrackRetag": "En reetiquetar la pista", + "RootFolderPathHelpText": "Els elements de la llista de carpetes arrel s'afegiran a", + "ScrubAudioTagsHelpText": "Elimina les etiquetes existents dels fitxers, deixant només les afegides per {appName}.", + "ScrubExistingTags": "Neteja les etiquetes existents", + "Disambiguation": "Desambiguació" } diff --git a/src/NzbDrone.Core/Localization/Core/fr.json b/src/NzbDrone.Core/Localization/Core/fr.json index ab01fa5e8..6dbaaf986 100644 --- a/src/NzbDrone.Core/Localization/Core/fr.json +++ b/src/NzbDrone.Core/Localization/Core/fr.json @@ -690,7 +690,7 @@ "ResetDefinitions": "Réinitialiser les définitions", "ResetTitles": "Réinitialiser les titres", "HiddenClickToShow": "Masqué, cliquez pour afficher", - "RemotePathMappingCheckDownloadPermissions": "{appName} peut voir mais ne peut accéder au film téléchargé {0}. Il s'agit probablement d'une erreur de permissions.", + "RemotePathMappingCheckDownloadPermissions": "{appName} peut voir mais ne peut accéder au musique téléchargé {0}. Il s'agit probablement d'une erreur de permissions.", "RemotePathMappingCheckDockerFolderMissing": "Vous utilisez docker ; {0} enregistre les téléchargements dans {1} mais ce dossier n'est pas présent dans ce conteneur. Vérifiez vos paramètres de dossier distant et les paramètres de votre conteneur docker.", "ShownClickToHide": "Affiché, cliquez pour masquer", "ApiKeyValidationHealthCheckMessage": "Veuillez mettre à jour votre clé API pour qu'elle contienne au moins {0} caractères. Vous pouvez le faire via les paramètres ou le fichier de configuration", @@ -729,7 +729,7 @@ "RemotePathMappingCheckFilesWrongOSPath": "Le client de téléchargement distant {0} met les téléchargements dans {1} mais il ne s'agit pas d'un chemin {2} valide. Vérifiez les paramètres de votre client de téléchargement.", "RemotePathMappingCheckFolderPermissions": "{appName} peut voir mais pas accéder au répertoire de téléchargement {0}. Erreur d'autorisations probable.", "RemotePathMappingCheckGenericPermissions": "Le client de téléchargement {0} met les téléchargements dans {1} mais {appName} ne peut voir ce répertoire. Il est possible que vous ayez besoin d'ajuster les permissions de ce dossier.", - "RemotePathMappingCheckImportFailed": "{appName} a échoué en important un Film. Vérifier vos logs pour plus de détails.", + "RemotePathMappingCheckImportFailed": "{appName} a échoué en important une musique. Vérifier vos logs pour plus de détails.", "RemotePathMappingCheckLocalFolderMissing": "Le client de téléchargement distant {0} met les téléchargements dans {1} mais ce chemin ne semble pas exister. Vérifiez vos paramètres de chemins distants.", "RemotePathMappingCheckLocalWrongOSPath": "Le client de téléchargement {0} met les téléchargements dans {1} mais il ne s'agit pas d'un chemin {2} valide. Vérifiez les paramètres de votre client de téléchargement.", "RemotePathMappingCheckRemoteDownloadClient": "Le client de téléchargement distant {0} met les téléchargements dans {1} mais ce chemin ne semble pas exister. Vérifiez vos paramètres de chemins distants.", @@ -1352,5 +1352,12 @@ "WaitingToImport": "En attente d'import", "WaitingToProcess": "En attente de traitement", "DefaultDelayProfileArtist": "Il s'agit du profil par défaut. Il s'applique à tous les artistes qui n'ont pas de profil explicite.", - "DelayProfileArtistTagsHelpText": "S'applique aux artistes avec au moins une balise correspondante" + "DelayProfileArtistTagsHelpText": "S'applique aux artistes avec au moins une balise correspondante", + "ICalTagsArtistHelpText": "Le flux ne contiendra que des artistes ayant au moins un tag correspondant", + "NoMediumInformation": "Aucune information sur le support n'est disponible.", + "DownloadClientSettingsOlderPriorityAlbumHelpText": "Priorité à utiliser lors de la récupération des albums sortis il y a plus de 14 jours", + "DownloadClientSettingsRecentPriorityAlbumHelpText": "Priorité à utiliser lors de la récupération des albums sortis au cours des 14 derniers jours", + "NotificationsTagsArtistHelpText": "Envoyer des notifications uniquement pour les artistes ayant au moins un tag correspondant", + "ReleaseProfileTagArtistHelpText": "Les profils de sortie s'appliqueront aux artistes ayant au moins un tag correspondant. Laisser vide pour appliquer à tous les artistes", + "TracksLoadError": "Impossible de charger les pistes" } diff --git a/src/NzbDrone.Core/Localization/Core/uk.json b/src/NzbDrone.Core/Localization/Core/uk.json index 7b1d2a391..cfd4334cb 100644 --- a/src/NzbDrone.Core/Localization/Core/uk.json +++ b/src/NzbDrone.Core/Localization/Core/uk.json @@ -923,5 +923,27 @@ "Pending": "В очікуванні", "WaitingToImport": "Очікування імпорту", "WaitingToProcess": "Очікування обробки", - "CheckDownloadClientForDetails": "перевірте клієнт завантаження, щоб дізнатися більше" + "CheckDownloadClientForDetails": "перевірте клієнт завантаження, щоб дізнатися більше", + "DashOrSpaceDashDependingOnName": "Тире або пробіл залежно від імені", + "EpisodeDoesNotHaveAnAbsoluteEpisodeNumber": "Епізод не має абсолютного номера епізоду", + "ExpandOtherByDefaultHelpText": "Інше", + "ImportListTagsHelpText": "Теги, які будуть додані при імпорті з цього списку", + "IndexerIdHelpText": "Вкажіть, до якого індексатору застосовується профіль", + "IsShowingMonitoredUnmonitorSelected": "Не відстежувати вибрані", + "RemoveSelectedItemBlocklistMessageText": "Ви впевнені, що хочете видалити вибрані елементи з чорного списку?", + "RootFolderPathHelpText": "Елементи списку кореневих тек будуть додані в", + "ThereWasAnErrorLoadingThisItem": "Сталася помилка при завантаженні цього елемента", + "ThereWasAnErrorLoadingThisPage": "Сталася помилка під час завантаження цієї сторінки", + "AllExpandedExpandAll": "Розгорнути все", + "NoMissingItems": "Немає відсутніх елементів", + "TBA": "Будь ласка, перевірте пізніше", + "IsShowingMonitoredMonitorSelected": "Відстеження вибрано", + "SceneNumberHasntBeenVerifiedYet": "Номер сцени ще не перевірено", + "EnabledHelpText": "Установіть прапорець, щоб увімкнути профіль релізу", + "Loading": "Завантаження", + "NoCutoffUnmetItems": "Не має елементів що не досягли порогу", + "NotificationsEmbySettingsUpdateLibraryHelpText": "Оновити бібліотеку при імпорті, перейменуванні або видаленні", + "NotificationsSettingsUpdateMapPathsFromHelpText": "Шлях {appName}, який використовується для зміни шляхів до серіалів, коли {serviceName} бачить шлях до бібліотеки інакше, ніж {appName} (необхідно 'Оновити бібліотеку')", + "NotificationsSettingsUpdateMapPathsToHelpText": "Шлях {serviceName}, що використовується для зміни шляхів до серіалів, коли {serviceName} бачить шлях до бібліотеки інакше, ніж {appName} (потрібно 'Оновити бібліотеку')", + "Select...": "Вибрати..." } From fbfd24e226ebe1c1aaca2f4d1a3d907784203e10 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 13 Apr 2025 10:08:22 +0300 Subject: [PATCH 233/275] Bump version to 2.11.2 --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c754fddfd..aebacf592 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ variables: testsFolder: './_tests' yarnCacheFolder: $(Pipeline.Workspace)/.yarn nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages - majorVersion: '2.11.1' + majorVersion: '2.11.2' minorVersion: $[counter('minorVersion', 1076)] lidarrVersion: '$(majorVersion).$(minorVersion)' buildName: '$(Build.SourceBranchName).$(lidarrVersion)' From d8850af0193846df6de6ec38d67bfabffe58e86b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 17 Apr 2025 12:32:11 +0300 Subject: [PATCH 234/275] Increase input sizes in edit artist modal Closes #5294 --- .../src/Artist/Edit/EditArtistModalContent.js | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/frontend/src/Artist/Edit/EditArtistModalContent.js b/frontend/src/Artist/Edit/EditArtistModalContent.js index 82a390d84..bca6e3ea6 100644 --- a/frontend/src/Artist/Edit/EditArtistModalContent.js +++ b/frontend/src/Artist/Edit/EditArtistModalContent.js @@ -15,7 +15,7 @@ import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import Popover from 'Components/Tooltip/Popover'; -import { icons, inputTypes, kinds, tooltipPositions } from 'Helpers/Props'; +import { icons, inputTypes, kinds, sizes, tooltipPositions } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import styles from './EditArtistModalContent.css'; @@ -93,7 +93,7 @@ class EditArtistModalContent extends Component { - + {translate('Monitored')} @@ -107,9 +107,10 @@ class EditArtistModalContent extends Component { /> - + {translate('MonitorNewItems')} + - + {translate('QualityProfile')} @@ -146,10 +147,10 @@ class EditArtistModalContent extends Component { { - showMetadataProfile && - + showMetadataProfile ? + - Metadata Profile + {translate('MetadataProfile')} - + : + null } - + {translate('Path')} @@ -189,7 +191,7 @@ class EditArtistModalContent extends Component { /> - + {translate('Tags')} @@ -209,7 +211,7 @@ class EditArtistModalContent extends Component { kind={kinds.DANGER} onPress={onDeleteArtistPress} > - Delete + {translate('Delete')}