Compare commits

..

1 Commits

Author SHA1 Message Date
Bogdan
aa20047cd8 Fixed: Overwriting query params for remove item handler (#7075)
(cherry picked from commit eb2fd1350904cdcc8e7d56147111da40a5df8a11)
2024-08-11 15:56:12 +00:00
17 changed files with 62 additions and 167 deletions

View File

@@ -67,7 +67,7 @@ module.exports = (env) => {
output: {
path: distFolder,
publicPath: '/',
filename: isProduction ? '[name]-[contenthash].js' : '[name].js',
filename: '[name]-[contenthash].js',
sourceMapFilename: '[file].map'
},
@@ -92,7 +92,7 @@ module.exports = (env) => {
new MiniCssExtractPlugin({
filename: 'Content/styles.css',
chunkFilename: isProduction ? 'Content/[id]-[chunkhash].css' : 'Content/[id].css'
chunkFilename: 'Content/[id]-[chunkhash].css'
}),
new HtmlWebpackPlugin({
@@ -202,7 +202,7 @@ module.exports = (env) => {
options: {
importLoaders: 1,
modules: {
localIdentName: isProduction ? '[name]/[local]/[hash:base64:5]' : '[name]/[local]'
localIdentName: '[name]/[local]/[hash:base64:5]'
}
}
},

View File

@@ -7,7 +7,7 @@ function createRemoveItemHandler(section, url) {
return function(getState, payload, dispatch) {
const {
id,
...queryParams
queryParams
} = payload;
dispatch(set({ section, isDeleting: true }));

View File

@@ -219,7 +219,7 @@ namespace NzbDrone.Core.Configuration
// TODO: Change back to "master" for the first stable release
public string Branch => _updateOptions.Branch ?? GetValue("Branch", "develop").ToLowerInvariant();
public string LogLevel => _logOptions.Level ?? GetValue("LogLevel", "debug").ToLowerInvariant();
public string LogLevel => _logOptions.Level ?? GetValue("LogLevel", "info").ToLowerInvariant();
public string ConsoleLogLevel => _logOptions.ConsoleLevel ?? GetValue("ConsoleLogLevel", string.Empty, persist: false);
public string PostgresHost => _postgresOptions?.Host ?? GetValue("PostgresHost", string.Empty, persist: false);
@@ -357,7 +357,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", string.Empty, false).IsNotNullOrWhiteSpace() || SslCertPath.IsNullOrWhiteSpace()))
if (EnableSsl && (GetValue("SslCertHash", null).IsNotNullOrWhiteSpace() || SslCertPath.IsNullOrWhiteSpace()))
{
SetValue("EnableSsl", false);
}

View File

@@ -615,7 +615,7 @@
"NotificationStatusSingleClientHealthCheckMessage": "القوائم غير متاحة بسبب الإخفاقات: {0}",
"SomeResultsAreHiddenByTheAppliedFilter": "بعض النتائج مخفية بواسطة عامل التصفية المطبق",
"ConnectionLost": "انقطع الاتصال",
"ConnectionLostReconnect": "سيحاول {appName} الاتصال تلقائيًا ، أو يمكنك النقر فوق إعادة التحميل أدناه.",
"ConnectionLostReconnect": "سيحاول Radarr الاتصال تلقائيًا ، أو يمكنك النقر فوق إعادة التحميل أدناه.",
"LastDuration": "المدة الماضية",
"Large": "كبير",
"WhatsNew": "ما هو الجديد؟",

View File

@@ -699,19 +699,5 @@
"ChangeCategory": "Změnit kategorii",
"BlocklistMultipleOnlyHint": "Blokovat a nehledat náhradu",
"CustomFormatsSettingsTriggerInfo": "Vlastní formát se použije na vydání nebo soubor, pokud odpovídá alespoň jednomu z různých typů zvolených podmínek.",
"ConnectionSettingsUrlBaseHelpText": "Přidá předponu do {connectionName} url, jako např. {url}",
"AuthBasic": "Základní (vyskakovací okno prohlížeče)",
"AuthenticationMethod": "Metoda ověřování",
"AuthenticationMethodHelpTextWarning": "Prosím vyberte platnou metodu ověřování",
"AuthenticationRequired": "Vyžadované ověření",
"AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Pokud nerozumíte rizikům, neměňte je.",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo",
"AuthenticationRequiredPasswordHelpTextWarning": "Vložte nové heslo",
"AuthenticationRequiredUsernameHelpTextWarning": "Vložte nové uživatelské jméno",
"AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName} povolení ověření. Ověřování z místních adres můžete volitelně zakázat.",
"BlocklistOnlyHint": "Blokovat a nehledat náhradu",
"Enabled": "Povoleno",
"ApiKey": "Klíč API",
"AuthForm": "Formuláře (přihlašovací stránka)",
"DisabledForLocalAddresses": "Zakázáno pro místní adresy"
"ConnectionSettingsUrlBaseHelpText": "Přidá předponu do {connectionName} url, jako např. {url}"
}

View File

@@ -896,7 +896,7 @@
"DataListMonitorNone": "No monitorizar autores o libros",
"Iso639-3": "Códigos de idioma ISO 639-3, o 'nulo', separados por coma",
"MinPopularityHelpText": "Popularidad es la media de valoraciones * número de votos",
"DeleteSelected": "Borrar seleccionados",
"DeleteSelected": "Eliminar seleccionados",
"IsExpandedShowFileInfo": "Mostrar información de archivo",
"MassBookSearchWarning": "¿Estás seguro que quieres llevar a cabo una búsqueda masiva para {0} libros?",
"MonitorNewItemsHelpText": "Qué nuevos libros deberían ser monitorizados",

View File

@@ -551,7 +551,7 @@
"OnBookFileDeleteForUpgradeHelpText": "Lors de la suppression du fichier d'un livre pour la mise à niveau",
"OnBookFileDeleteHelpText": "Lors de la suppression du fichier d'un livre",
"OnGrab": "Lors de la saisie",
"OnHealthIssue": "Lors de problème de santé",
"OnHealthIssue": "Sur la question de la santé",
"OnRename": "Au renommage",
"ProxyCheckBadRequestMessage": "Échec du test du proxy. StatusCode: {0}",
"ProxyCheckFailedToTestMessage": "Échec du test du proxy : {0}",
@@ -679,7 +679,7 @@
"CopyToClipboard": "Copier dans le presse-papier",
"CustomFormat": "Format personnalisé",
"CustomFormatSettings": "Réglages Formats Personnalisés",
"CustomFormats": "Formats personnalisés",
"CustomFormats": "Formats perso.",
"DeleteCustomFormat": "Supprimer le format personnalisé",
"DeleteCustomFormatMessageText": "Voulez-vous vraiment supprimer le format personnalisé « {name} » ?",
"DeleteFormatMessageText": "Êtes-vous sûr de vouloir supprimer le tag « {0} » ?",
@@ -766,7 +766,7 @@
"ConnectionLostToBackend": "{appName} a perdu sa connexion au backend et devra être rechargé pour fonctionner à nouveau.",
"RecentChanges": "Changements récents",
"System": "Système",
"WhatsNew": "Quoi de neuf ?",
"WhatsNew": "Quoi de neuf ?",
"AllResultsAreHiddenByTheAppliedFilter": "Tous les résultats sont masqués par le filtre appliqué",
"Location": "Emplacement",
"NoResultsFound": "Aucun résultat trouvé",
@@ -923,7 +923,7 @@
"ExtraFileExtensionsHelpText": "Liste de fichiers supplémentaires séparés par des virgules à importer (.nfo sera importé en tant que .nfo-orig)",
"ExtraFileExtensionsHelpTextsExamples": "Exemples : '.sub, .nfo' ou 'sub,nfo'",
"UseSSL": "Utiliser SSL",
"DeleteSelected": "Supprimer la sélection",
"DeleteSelected": "Supprimer sélectionnée",
"InvalidUILanguage": "Votre interface utilisateur est définie sur une langue non valide, corrigez-la et enregistrez vos paramètres",
"DownloadClientQbittorrentSettingsContentLayout": "Disposition du contenu",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Utiliser la disposition du contenu configurée par qBittorrent, la disposition originale du torrent ou toujours créer un sous-dossier (qBittorrent 4.3.2+)",
@@ -990,9 +990,9 @@
"InteractiveSearchModalHeader": "Recherche interactive",
"FailedLoadingSearchResults": "Échec du chargement des résultats de recherche, veuillez réessayer.",
"MonitoredAuthorIsMonitored": "Artiste non surveillé",
"IndexerSettingsSeedRatio": "Ratio d'envoi",
"IndexerSettingsSeedRatio": "Ratio d'envoie",
"IndexerSettingsSeedRatioHelpText": "Le ratio qu'un torrent doit atteindre avant de s'arrêter, vide utilise la valeur par défaut du client de téléchargement. Le ratio doit être d'au moins 1.0 et suivre les règles des indexeurs",
"IndexerSettingsSeedTime": "Temps d'envoi",
"IndexerSettingsSeedTime": "Temps d'envoie",
"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",
"WhySearchesCouldBeFailing": "Cliquez ici pour savoir pourquoi les recherches pourraient échouer",
"ApiKey": "Clé API",
@@ -1099,7 +1099,5 @@
"WriteTagsAll": "Tous les fichiers ; importation initiale uniquement",
"WriteTagsSync": "Tous les fichiers ; rester synchronisé avec Goodreads",
"Iso639-3": "Codes de langage ISO 639-3, ou 'null', séparés par des virgules",
"SpecificBook": "Livre spécifique",
"SkipSecondarySeriesBooks": "Sauter les livres de séries secondaires",
"SkipPartBooksAndSets": "Livres et coffrets \"Skip part\""
"SpecificBook": "Livre spécifique"
}

View File

@@ -80,7 +80,7 @@
"DelayingDownloadUntilInterp": "Ritardare il download fino al {0} a {1}",
"Delete": "Cancella",
"DeleteBackup": "Cancella Backup",
"DeleteBackupMessageText": "Sei sicuro di voler eliminare il backup '{name}'?",
"DeleteBackupMessageText": "Sei sicuro di voler cancellare il backup '{name}'?",
"DeleteDelayProfile": "Elimina Profilo di Ritardo",
"DeleteDelayProfileMessageText": "Sei sicuro di volere eliminare questo profilo di ritardo?",
"DeleteDownloadClient": "Cancella Client di Download",
@@ -89,9 +89,9 @@
"DeleteEmptyFoldersHelpText": "Cancellare le cartelle vuote dei film durante la scansione del disco e quando i file di film vengono cancellati",
"DeleteImportListExclusion": "Rimuovi Esclusione dalla Lista Importazioni",
"DeleteImportListExclusionMessageText": "Sei sicuro di voler cancellare questa lista di esclusioni delle importazioni?",
"DeleteImportListMessageText": "Sei sicuro di voler eliminare la lista '{name}'?",
"DeleteImportListMessageText": "Sei sicuro di volere eliminare la lista '{name}'?",
"DeleteIndexer": "Cancella Indicizzatore",
"DeleteIndexerMessageText": "Sei sicuro di voler eliminare l'indicizzatore '{name}'?",
"DeleteIndexerMessageText": "Sicuro di voler eliminare l'indicizzatore '{name}'?",
"DeleteMetadataProfileMessageText": "Sicuro di voler cancellare il profilo di qualità '{name}'?",
"DeleteNotification": "Cancella Notifica",
"DeleteNotificationMessageText": "Sei sicuro di voler eliminare la notifica '{name}'?",
@@ -677,7 +677,7 @@
"RemoveSelectedItem": "Rimuovi elemento selezionato",
"ApplyTagsHelpTextReplace": "Sostituire: Sostituisce le etichette con quelle inserite (non inserire nessuna etichette per eliminarle tutte)",
"ApplyTagsHelpTextHowToApplyAuthors": "Come applicare etichette agli indicizzatori selezionati",
"CountIndexersSelected": "{selectedCount} indicizzatori selezionati",
"CountIndexersSelected": "{selectedCount} indicizzatore(i) selezionato(i)",
"No": "No",
"NoChange": "Nessun Cambio",
"RemoveCompleted": "Rimuovi completati",
@@ -898,7 +898,5 @@
"ShouldMonitorExisting": "Monitora Libri Esistenti",
"UseSSL": "Usa SSL",
"Fixed": "Fissato",
"MusicBrainzTrackID": "ID Libro MusicBrainz",
"CountImportListsSelected": "{selectedCount} autore/i selezionato/i",
"DownloadClientDelugeSettingsDirectory": "Cartella Download"
"MusicBrainzTrackID": "ID Libro MusicBrainz"
}

View File

@@ -739,20 +739,5 @@
"AuthenticationRequiredWarning": "Om toegang zonder authenticatie te voorkomen vereist {appName} nu verificatie. Je kan dit optioneel uitschakelen voor lokale adressen.",
"DisabledForLocalAddresses": "Uitgeschakeld voor lokale adressen",
"Enabled": "Ingeschakeld",
"ApiKey": "API-sleutel",
"ClickToChangeIndexerFlags": "Klik om indexeringsvlaggen te wijzigen",
"CustomFormatsSpecificationFlag": "Vlag",
"CustomFormatsSpecificationRegularExpression": "Reguliere expressie",
"BlocklistOnlyHint": "Blokkeer lijst zonder te zoeken naar een vervanger",
"BlocklistAndSearch": "Blokkeerlijst en zoeken",
"BlocklistAndSearchHint": "Een vervanger zoeken na het blokkeren",
"BlocklistAndSearchMultipleHint": "Zoekopdrachten voor vervangers starten na het blokkeren van de lijst",
"CustomFormatsSettingsTriggerInfo": "Een Aangepast Formaat wordt toegepast op een uitgave of bestand als het overeenkomt met ten minste één van de verschillende condities die zijn gekozen.",
"ConnectionSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de {connectionName} url, zoals {url}",
"BlocklistMultipleOnlyHint": "Blocklist zonder te zoeken naar vervangers",
"BlocklistOnly": "Alleen bloklijst",
"ChangeCategoryHint": "Verandert download naar de 'Post-Import Categorie' van Downloadclient",
"Clone": "Kloon",
"CustomFormatsSpecificationRegularExpressionHelpText": "Aangepaste opmaak RegEx is hoofdletterongevoelig",
"ChangeCategoryMultipleHint": "Wijzigt downloads naar de 'Post-Import Categorie' van Downloadclient"
"ApiKey": "API-sleutel"
}

View File

@@ -44,7 +44,7 @@
"AddingTag": "Dodawanie tagu",
"RemoveTagExistingTag": "Istniejący tag",
"RemoveTagRemovingTag": "Usuwanie tagu",
"AgeWhenGrabbed": "Wiek (przy złapaniu)",
"AgeWhenGrabbed": "Wiek (po złapaniu)",
"ShowRelativeDates": "Pokaż daty względne",
"AlreadyInYourLibrary": "Już w Twojej bibliotece",
"AlternateTitles": "Alternatywny tytuł",
@@ -71,7 +71,7 @@
"BackupRetentionHelpText": "Automatyczne kopie zapasowe starsze niż okres przechowywania zostaną automatycznie wyczyszczone",
"Backups": "Kopie zapasowe",
"BindAddress": "Adres powiązania",
"BindAddressHelpText": "Prawidłowy adres IP, localhost lub '*' dla wszystkich interfejsów",
"BindAddressHelpText": "Prawidłowy adres IPv4 lub „*” dla wszystkich interfejsów",
"BindAddressHelpTextWarning": "Wymaga ponownego uruchomienia, aby odniosło skutek",
"BookIsDownloading": "Film jest pobierany",
"BookIsDownloadingInterp": "Film jest pobierany - {0}% {1}",
@@ -111,18 +111,18 @@
"DelayingDownloadUntilInterp": "Opóźnianie pobierania do {0} o {1}",
"Delete": "Usunąć",
"DeleteBackup": "Usuń kopię zapasową",
"DeleteBackupMessageText": "Czy na pewno chcesz usunąć kopię zapasową „{name}”?",
"DeleteBackupMessageText": "Czy na pewno chcesz usunąć kopię zapasową „{0}”?",
"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 „{name}”?",
"DeleteDownloadClientMessageText": "Czy na pewno chcesz usunąć klienta pobierania „{0}”?",
"DeleteEmptyFolders": "Usuń puste foldery",
"DeleteEmptyFoldersHelpText": "Usuń puste foldery z filmami podczas skanowania dysku i po usunięciu plików filmowych",
"DeleteImportListExclusion": "Usuń wykluczenie listy importu",
"DeleteImportListExclusionMessageText": "Czy na pewno chcesz usunąć to wykluczenie listy importu?",
"DeleteImportListMessageText": "Czy na pewno chcesz usunąć listę „{0}”?",
"DeleteIndexer": "Usuń indeksator",
"DeleteIndexerMessageText": "Czy na pewno chcesz usunąć indeksator „{name}”?",
"DeleteIndexerMessageText": "Czy na pewno chcesz usunąć indeksator „{0}”?",
"DeleteMetadataProfileMessageText": "Czy na pewno usunąć informacje dodatkowe '{0name}'?",
"DeleteNotification": "Usuń powiadomienie",
"DeleteNotificationMessageText": "Czy na pewno chcesz usunąć powiadomienie „{0}”?",
@@ -287,7 +287,7 @@
"RemoveCompletedDownloadsHelpText": "Usuń zaimportowane pliki do pobrania z historii klienta pobierania",
"RemoveFailedDownloadsHelpText": "Usuń nieudane pobieranie z historii klienta pobierania",
"RemoveFilter": "Usuń filtr",
"RemoveFromDownloadClient": "Usuń z Klienta Pobierania",
"RemoveFromDownloadClient": "Usuń z klienta pobierania",
"RemoveFromQueue": "Usuń z kolejki",
"RemoveHelpTextWarning": "Usunięcie spowoduje usunięcie pobierania i plików z klienta pobierania.",
"RemoveSelected": "Usuń zaznaczone",
@@ -352,7 +352,7 @@
"SslPortHelpTextWarning": "Wymaga ponownego uruchomienia, aby odniosło skutek",
"StandardBookFormat": "Standardowy format filmu",
"StartTypingOrSelectAPathBelow": "Zacznij pisać lub wybierz ścieżkę poniżej",
"StartupDirectory": "Katalog Startowy",
"StartupDirectory": "Katalog startowy",
"Status": "Status",
"StatusEndedEnded": "Zakończone",
"Style": "Styl",
@@ -691,11 +691,5 @@
"AuthForm": "Formularze (strona logowania)",
"DisabledForLocalAddresses": "Wyłączone dla adresów lokalnych",
"Enabled": "Włączone",
"ApiKey": "Klucz API",
"ASIN": "ASIN",
"AppUpdatedVersion": "{appName} został zaktualizowany do wersji `{version}`, by uzyskać nowe zmiany należy przeładować {appName}",
"AppUpdated": "{appName} Zaktualizowany",
"AuthenticationMethod": "Metoda Autoryzacji",
"AuthenticationMethodHelpTextWarning": "Wybierz prawidłową metodę autoryzacji",
"AuthenticationRequired": "Wymagana Autoryzacja"
"ApiKey": "Klucz API"
}

View File

@@ -113,7 +113,7 @@
"DownloadFailedInterp": "Неудачное скачивание: {0}",
"DownloadPropersAndRepacksHelpTexts1": "Следует ли автоматически обновляться до Propers / Repacks",
"DownloadWarningCheckDownloadClientForMoreDetails": "Предупреждения по скачиванию: подробности в программе для скачивания",
"Edit": "Изменить",
"Edit": "Редактирование",
"Edition": "Издание",
"Enable": "Включить",
"EnableAutomaticAdd": "Включить автоматическое добавление",
@@ -245,7 +245,7 @@
"PortHelpTextWarning": "Для вступления в силу требуется перезапуск",
"PortNumber": "Номер порта",
"PosterSize": "Размер постера",
"PreviewRename": "Предпросмотр\nпереименования",
"PreviewRename": "Предварительный просмотр переименования",
"Profiles": "Профили",
"Proper": "Пропер (Proper)",
"PropersAndRepacks": "Проперы и репаки",
@@ -491,7 +491,7 @@
"IndexersSettingsSummary": "Ограничения для индексаторов и релизов",
"IndexerStatusCheckAllClientMessage": "Все индексаторы недоступны из-за ошибок",
"IndexerStatusCheckSingleClientMessage": "Индексаторы недоступны из-за ошибок: {0}",
"MaintenanceRelease": "Техническая версия: исправлены ошибки и другие улучшения. Дополнительную информацию см. в истории коммитов Github",
"MaintenanceRelease": "Техническая версия: исправлены ошибки и другие улучшения. Дополнительную информацию см. в истории коммитов Github.",
"Monitor": "Монитор",
"OnBookFileDeleteForUpgradeHelpText": "При удалении файла фильма для обновления",
"OnGrab": "При захвате",
@@ -499,7 +499,7 @@
"OnUpgrade": "При обновлении",
"Queued": "В очереди",
"ReadarrSupportsAnyDownloadClient": "Radarr поддерживает многие популярные торрент и usenet-клиенты для скачивания.",
"RefreshAndScan": "Обновить",
"RefreshAndScan": "Обновить и сканировать",
"RemotePathMappingCheckDownloadPermissions": "Radarr видит загруженный фильм {0}, но не может получить доступ к нему. Возможно, ошибка в правах доступа.",
"RemotePathMappingCheckFileRemoved": "Файл {0} был удален в процессе обработки.",
"RemotePathMappingCheckFilesBadDockerPath": "Вы используете docker; клиент загрузки {0} сообщил о файлах в {1}, но это не корректный путь {2}. Проверьте правильность указанного пути и настройки клиента загрузки.",
@@ -567,7 +567,7 @@
"AllAuthorBooks": "Все книги автора",
"AllowAuthorChangeClickToChangeAuthor": "Нажмите, чтобы изменить автора",
"AllExpandedExpandAll": "Развернуть Все",
"RestartRequiredHelpTextWarning": "Для применения изменений, требуется перезапуск",
"RestartRequiredHelpTextWarning": "Для вступления в силу требуется перезапуск",
"Label": "Метка",
"AddList": "Добавить список",
"Publisher": "Издатель",
@@ -822,35 +822,12 @@
"ShowBanners": "Показывать баннеры",
"SetIndexerFlags": "Установить флаги индексатора",
"SelectIndexerFlags": "Выбор флагов индексатора",
"SearchMonitored": "Искать сериал",
"SearchMonitored": "Искать отслеживаемое",
"CustomFormatsSettingsTriggerInfo": "Пользовательский формат будет применен к релизу или файлу, если он соответствует хотя бы одному из каждого из выбранных типов условий.",
"CustomFormatsSpecificationRegularExpressionHelpText": "RegEx пользовательского формата не чувствителен к регистру",
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Использовать ли настроенный макет контента qBittorrent, исходный макет из торрента или всегда создавать подпапку (qBittorrent 4.3.2+)",
"MetadataSource": "Источник метаданных",
"NotificationsSettingsUpdateMapPathsFromHelpText": "Путь {appName}, используемый для изменения путей к сериалам, когда {serviceName} видит путь к библиотеке иначе, чем {appName} (требуется 'Обновить библиотеку')",
"NotificationsSettingsUpdateMapPathsToHelpText": "Путь {serviceName}, используемый для изменения путей к сериям, когда {serviceName} видит путь к библиотеке иначе, чем {appName} (требуется 'Обновить библиотеку')",
"PasswordConfirmation": "Подтверждение пароля",
"DashOrSpaceDashDependingOnName": "Тире или пробел в зависимости от имени",
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Клиент загрузки {downloadClientName} настроен на удаление завершенных загрузок. Это может привести к удалению загрузок из вашего клиента до того, как {appName} сможет их импортировать.",
"NoMissingItems": "Нет отсутствующих элементов",
"ShowBannersHelpText": "Показывать баннеры вместо заголовков",
"RootFolderPathHelpText": "Элементы списка корневых папок будут добавлены в",
"MetadataSettingsSummary": "Создавать файлы метаданных при импорте эпизодов или обновлении сериалов",
"DataMissingBooks": "Отслеживать эпизоды, у которых нет файлов или которые еще не вышли в эфир",
"MetadataProfileIdHelpText": "Элементы списка профиля качества будут добавлены с помощью",
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "{appName} поддерживает несколько списков для импорта сериалов в базу данных.",
"IndexerIdHelpText": "Укажите, к какому индексатору применяется профиль",
"ContinuingAllBooksDownloaded": "Продолжается (все эпизоды скачаны)",
"DeleteBookFileMessageText": "Вы уверены, что хотите удалить '{path}'?",
"QualityProfileIdHelpText": "Элементы списка профиля качества будут добавлены с помощью",
"UseSSL": "Использовать SSL",
"EndedAllBooksDownloaded": "Завершено (Все эпизоды скачаны)",
"SearchForAllCutoffUnmetBooks": "Искать все эпизоды не достигшие указанного качества",
"StatusEndedContinuing": "Продолжается",
"Author": "Автор",
"IsShowingMonitoredUnmonitorSelected": "Неотслеживаемые выбраны",
"EnabledHelpText": "Установите флажок, чтобы включить профиль релиза",
"Authors": "Автор",
"IsShowingMonitoredMonitorSelected": "Отслеживание выбрано",
"SearchForAllMissingBooks": "Искать все недостающие эпизоды"
"PasswordConfirmation": "Подтверждение пароля"
}

View File

@@ -823,6 +823,5 @@
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Yeni şifreyi onayla",
"AuthenticationRequiredPasswordHelpTextWarning": "Yeni şifre girin",
"AuthenticationRequiredUsernameHelpTextWarning": "Yeni kullanıcı adınızı girin",
"AuthenticationRequiredWarning": "Kimlik doğrulaması olmadan uzaktan erişimi engellemek için, {appName}'da artık kimlik doğrulamanın etkinleştirilmesini gerektiriyor. İsteğe bağlı olarak yerel adresler için kimlik doğrulamayı devre dışı bırakabilirsiniz.",
"DeleteSelected": "Seçileni Sil"
"AuthenticationRequiredWarning": "Kimlik doğrulaması olmadan uzaktan erişimi engellemek için, {appName}'da artık kimlik doğrulamanın etkinleştirilmesini gerektiriyor. İsteğe bağlı olarak yerel adresler için kimlik doğrulamayı devre dışı bırakabilirsiniz."
}

View File

@@ -740,10 +740,5 @@
"BlocklistAndSearchMultipleHint": "Розпочати пошук замін після додавання до чорного списку",
"ChangeCategoryMultipleHint": "Змінює завантаження на «Категорію після імпорту» з клієнта завантажувача",
"CloneCondition": "Клонування умови",
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Автоматично шукати та намагатися завантажити інший реліз, якщо обраний реліз не вдалось завантажити з інтерактивного пошуку.",
"BypassIfAboveCustomFormatScoreHelpText": "Увімкнути обхід, якщо реліз має оцінку вищу за встановлений мінімальний бал користувацького формату",
"CountDownloadClientsSelected": "Вибрано {count} клієнтів завантажувача",
"ReleaseProfiles": "профіль релізу",
"MinimumCustomFormatScoreHelpText": "Мінімальна оцінка користувацького формату, необхідна для обходу затримки для обраного протоколу",
"BypassIfAboveCustomFormatScore": "Пропустити, якщо перевищено оцінку користувацького формату"
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Автоматично шукати та намагатися завантажити інший реліз, якщо обраний реліз не вдалось завантажити з інтерактивного пошуку."
}

View File

@@ -8,7 +8,6 @@ namespace NzbDrone.Core.ThingiProvider.Status
where TModel : ProviderStatusBase, new()
{
TModel FindByProviderId(int providerId);
void DeleteByProviderId(int providerId);
}
public class ProviderStatusRepository<TModel> : BasicRepository<TModel>, IProviderStatusRepository<TModel>
@@ -23,10 +22,5 @@ namespace NzbDrone.Core.ThingiProvider.Status
{
return Query(c => c.ProviderId == providerId).SingleOrDefault();
}
public void DeleteByProviderId(int providerId)
{
Delete(c => c.ProviderId == providerId);
}
}
}

View File

@@ -151,7 +151,12 @@ namespace NzbDrone.Core.ThingiProvider.Status
public virtual void HandleAsync(ProviderDeletedEvent<TProvider> message)
{
_providerStatusRepository.DeleteByProviderId(message.ProviderId);
var providerStatus = _providerStatusRepository.FindByProviderId(message.ProviderId);
if (providerStatus != null)
{
_providerStatusRepository.Delete(providerStatus);
}
}
}
}

View File

@@ -1,6 +1,7 @@
using System.IO;
using System.Linq;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using FluentValidation;
using Microsoft.AspNetCore.Mvc;
using NzbDrone.Common.Extensions;
@@ -57,7 +58,7 @@ namespace Readarr.Api.V1.Config
.NotEmpty()
.IsValidPath()
.SetValidator(fileExistsValidator)
.IsValidCertificate()
.Must((resource, path) => IsValidSslCertificate(resource)).WithMessage("Invalid SSL certificate file or password")
.When(c => c.EnableSsl);
SharedValidator.RuleFor(c => c.Branch).NotEmpty().WithMessage("Branch name is required, 'master' is the default");
@@ -68,6 +69,21 @@ namespace Readarr.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();

View File

@@ -1,52 +0,0 @@
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using FluentValidation;
using FluentValidation.Validators;
using NLog;
using NzbDrone.Common.Instrumentation;
namespace Sonarr.Api.V3.Config
{
public static class CertificateValidation
{
public static IRuleBuilderOptions<T, string> IsValidCertificate<T>(this IRuleBuilder<T, string> 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;
}
}
}
}