Compare commits

..

18 Commits

Author SHA1 Message Date
abcasada
f7bf21df68 Update help text for Tags usage in Applications 2024-01-26 19:13:12 +02:00
Bogdan
d764e3405d New: (Torznab) Internal and Scene tags 2024-01-26 09:58:22 +02:00
Bogdan
16baceb784 New: Option to disable Email encryption
* New: Option to disable Email encryption

(cherry picked from commit 7be5732a3a6679120b0f01bd1eb1207194f57f5e)

* Fix possible NullRef in Email Encryption migration

(cherry picked from commit 271266b10ac51ee6dd7a7024d346b631bd5397c2)
2024-01-24 11:37:01 +02:00
Bogdan
5d2b80d15a Fixed: (SubsPlease) Parse release size from magnet links 2024-01-23 10:59:59 +02:00
Bogdan
a20a81f424 New: Category filter for Indexers 2024-01-23 09:00:49 +02:00
Bogdan
ebb66e9086 Update database migration version translation token 2024-01-23 08:50:05 +02:00
Bogdan
cb8797693e Fixed: Sorting by name in Manage Applications and Download Client modals 2024-01-23 08:40:32 +02:00
Stevie Robinson
255c6335ae New: Add sorting to Manage Applications and Download Client modals
(cherry picked from commit 91053ca51ded804739f94ee936c1376a755dbe11)
2024-01-23 08:38:47 +02:00
Bogdan
155cd53dcd Fix translations for manage applications and download clients 2024-01-23 08:29:59 +02:00
Weblate
ae70a96c10 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Dani Talens <databio@gmail.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Julian Baquero <julian-baquero@upc.edu.co>
Co-authored-by: MaddionMax <kovacs.tamas@ius.hu>
Co-authored-by: Magyar <kochnorbert@icloud.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: blabla <romcrack56@gmail.com>
Co-authored-by: brn <barantsenkul@gmail.com>
Co-authored-by: fordas <fordas15@gmail.com>
Co-authored-by: horvi28 <horvi28@gmail.com>
Co-authored-by: wilfriedarma <wilfriedarma.collet@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/
Translation: Servarr/Prowlarr
2024-01-23 08:15:51 +02:00
Bogdan
16c0daf090 Fix value types for EnhancedSelectInputConnector 2024-01-22 13:24:00 +02:00
Bogdan
34c78c5a9d Fixed: (BTN) Disable ID-based searches for episodes with absolute episode number
Release name searches are not supported, so it's better to prevent an useless request.
2024-01-22 11:48:32 +02:00
Bogdan
dd5b108ffd Fixed: (BTN) Allow ID-based with text search query 2024-01-21 17:13:12 +02:00
Servarr
0b83986255 Automated API Docs update 2024-01-21 07:54:16 +02:00
Bogdan
2bd25fb6f3 Reorder sync fields for App Profiles 2024-01-21 07:47:48 +02:00
Bogdan
0f5eb5d3a3 Bump version to 1.13.1 2024-01-21 07:47:48 +02:00
Bogdan
c9434c61e3 Transpile logical assignment operators with babel 2024-01-21 03:58:55 +02:00
Mark McDowall
ee969b7a06 New: Log warning if less than 1 GB free space during update
(cherry picked from commit e66ba84fc0b5b120dd4e87f6b8ae1b3c038ee72b)
2024-01-21 03:58:28 +02:00
60 changed files with 760 additions and 255 deletions

View File

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

View File

@@ -2,6 +2,8 @@ const loose = true;
module.exports = {
plugins: [
'@babel/plugin-transform-logical-assignment-operators',
// Stage 1
'@babel/plugin-proposal-export-default-from',
['@babel/plugin-transform-optional-chaining', { loose }],

View File

@@ -3,6 +3,7 @@ import AppSectionState, {
AppSectionItemState,
AppSectionSaveState,
} from 'App/State/AppSectionState';
import { IndexerCategory } from 'Indexer/Indexer';
import Application from 'typings/Application';
import DownloadClient from 'typings/DownloadClient';
import Notification from 'typings/Notification';
@@ -25,6 +26,11 @@ export interface DownloadClientAppState
AppSectionDeleteState,
AppSectionSaveState {}
export interface IndexerCategoryAppState
extends AppSectionState<IndexerCategory>,
AppSectionDeleteState,
AppSectionSaveState {}
export interface NotificationAppState
extends AppSectionState<Notification>,
AppSectionDeleteState {}
@@ -35,6 +41,7 @@ interface SettingsAppState {
appProfiles: AppProfileAppState;
applications: ApplicationAppState;
downloadClients: DownloadClientAppState;
indexerCategories: IndexerCategoryAppState;
notifications: NotificationAppState;
ui: UiSettingsAppState;
}

View File

@@ -0,0 +1,41 @@
import React from 'react';
import { useSelector } from 'react-redux';
import { createSelector } from 'reselect';
import AppState from 'App/State/AppState';
import { IndexerCategory } from 'Indexer/Indexer';
import FilterBuilderRowValue from './FilterBuilderRowValue';
import FilterBuilderRowValueProps from './FilterBuilderRowValueProps';
const indexerCategoriesSelector = createSelector(
(state: AppState) => state.settings.indexerCategories,
(categories) => categories.items
);
function CategoryFilterBuilderRowValue(props: FilterBuilderRowValueProps) {
const categories: IndexerCategory[] = useSelector(indexerCategoriesSelector);
const tagList = categories.reduce(
(acc: { id: number; name: string }[], element) => {
acc.push({
id: element.id,
name: `${element.name} (${element.id})`,
});
if (element.subCategories && element.subCategories.length > 0) {
element.subCategories.forEach((subCat) => {
acc.push({
id: subCat.id,
name: `${subCat.name} (${subCat.id})`,
});
});
}
return acc;
},
[]
);
return <FilterBuilderRowValue {...props} tagList={tagList} />;
}
export default CategoryFilterBuilderRowValue;

View File

@@ -5,6 +5,7 @@ import IconButton from 'Components/Link/IconButton';
import { filterBuilderTypes, filterBuilderValueTypes, icons } from 'Helpers/Props';
import AppProfileFilterBuilderRowValueConnector from './AppProfileFilterBuilderRowValueConnector';
import BoolFilterBuilderRowValue from './BoolFilterBuilderRowValue';
import CategoryFilterBuilderRowValue from './CategoryFilterBuilderRowValue';
import DateFilterBuilderRowValue from './DateFilterBuilderRowValue';
import FilterBuilderRowValueConnector from './FilterBuilderRowValueConnector';
import HistoryEventTypeFilterBuilderRowValue from './HistoryEventTypeFilterBuilderRowValue';
@@ -56,6 +57,9 @@ function getRowValueConnector(selectedFilterBuilderProp) {
case filterBuilderValueTypes.BOOL:
return BoolFilterBuilderRowValue;
case filterBuilderValueTypes.CATEGORY:
return CategoryFilterBuilderRowValue;
case filterBuilderValueTypes.DATE:
return DateFilterBuilderRowValue;

View File

@@ -147,7 +147,7 @@ EnhancedSelectInputConnector.propTypes = {
provider: PropTypes.string.isRequired,
providerData: PropTypes.object.isRequired,
name: PropTypes.string.isRequired,
value: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.arrayOf(PropTypes.string), PropTypes.arrayOf(PropTypes.number)]).isRequired,
values: PropTypes.arrayOf(PropTypes.object).isRequired,
selectOptionsProviderAction: PropTypes.string,
onChange: PropTypes.func.isRequired,

View File

@@ -7,5 +7,5 @@ export const INDEXER = 'indexer';
export const PROTOCOL = 'protocol';
export const PRIVACY = 'privacy';
export const APP_PROFILE = 'appProfile';
export const MOVIE_STATUS = 'movieStatus';
export const CATEGORY = 'category';
export const TAG = 'tag';

View File

@@ -62,7 +62,7 @@ class Applications extends Component {
return (
<FieldSet legend={translate('Applications')}>
<PageSectionContent
errorMessage={translate('UnableToLoadApplicationList')}
errorMessage={translate('ApplicationsLoadError')}
{...otherProps}
>
<div className={styles.applications}>

View File

@@ -14,9 +14,11 @@ 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 {
bulkDeleteApplications,
bulkEditApplications,
setManageApplicationsSort,
} from 'Store/Actions/settingsActions';
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
import { SelectStateInputProps } from 'typings/props';
@@ -62,6 +64,8 @@ const COLUMNS = [
interface ManageApplicationsModalContentProps {
onModalClose(): void;
sortKey?: string;
sortDirection?: SortDirection;
}
function ManageApplicationsModalContent(
@@ -76,6 +80,8 @@ function ManageApplicationsModalContent(
isSaving,
error,
items,
sortKey,
sortDirection,
}: ApplicationAppState = useSelector(
createClientSideCollectionSelector('settings.applications')
);
@@ -96,6 +102,13 @@ function ManageApplicationsModalContent(
const selectedCount = selectedIds.length;
const onSortPress = useCallback(
(value: string) => {
dispatch(setManageApplicationsSort({ sortKey: value }));
},
[dispatch]
);
const onDeletePress = useCallback(() => {
setIsDeleteModalOpen(true);
}, [setIsDeleteModalOpen]);
@@ -201,6 +214,9 @@ function ManageApplicationsModalContent(
allSelected={allSelected}
allUnselected={allUnselected}
onSelectAllChange={onSelectAllChange}
sortKey={sortKey}
sortDirection={sortDirection}
onSortPress={onSortPress}
>
<TableBody>
{items.map((item) => {

View File

@@ -84,7 +84,7 @@ class DownloadClientSettings extends Component {
/>
<PageToolbarButton
label={translate('ManageDownloadClients')}
label={translate('ManageClients')}
iconName={icons.MANAGE}
onPress={this.onManageDownloadClientsPress}
/>

View File

@@ -61,7 +61,7 @@ class DownloadClients extends Component {
return (
<FieldSet legend={translate('DownloadClients')}>
<PageSectionContent
errorMessage={translate('UnableToLoadDownloadClients')}
errorMessage={translate('DownloadClientsLoadError')}
{...otherProps}
>
<div className={styles.downloadClients}>

View File

@@ -14,9 +14,11 @@ 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,
setManageDownloadClientsSort,
} from 'Store/Actions/settingsActions';
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
import { SelectStateInputProps } from 'typings/props';
@@ -61,6 +63,8 @@ const COLUMNS = [
interface ManageDownloadClientsModalContentProps {
onModalClose(): void;
sortKey?: string;
sortDirection?: SortDirection;
}
function ManageDownloadClientsModalContent(
@@ -75,6 +79,8 @@ function ManageDownloadClientsModalContent(
isSaving,
error,
items,
sortKey,
sortDirection,
}: DownloadClientAppState = useSelector(
createClientSideCollectionSelector('settings.downloadClients')
);
@@ -93,6 +99,13 @@ function ManageDownloadClientsModalContent(
const selectedCount = selectedIds.length;
const onSortPress = useCallback(
(value: string) => {
dispatch(setManageDownloadClientsSort({ sortKey: value }));
},
[dispatch]
);
const onDeletePress = useCallback(() => {
setIsDeleteModalOpen(true);
}, [setIsDeleteModalOpen]);
@@ -174,6 +187,9 @@ function ManageDownloadClientsModalContent(
allSelected={allSelected}
allUnselected={allUnselected}
onSelectAllChange={onSelectAllChange}
sortKey={sortKey}
sortDirection={sortDirection}
onSortPress={onSortPress}
>
<TableBody>
{items.map((item) => {

View File

@@ -97,20 +97,6 @@ class EditAppProfileModalContent extends Component {
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('EnableInteractiveSearch')}
</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="enableInteractiveSearch"
{...enableInteractiveSearch}
helpText={translate('EnableInteractiveSearchHelpText')}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('EnableAutomaticSearch')}
@@ -125,6 +111,20 @@ class EditAppProfileModalContent extends Component {
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('EnableInteractiveSearch')}
</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="enableInteractiveSearch"
{...enableInteractiveSearch}
helpText={translate('EnableInteractiveSearchHelpText')}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('MinimumSeeders')}

View File

@@ -1,4 +1,5 @@
import { createAction } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';
import createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
@@ -7,6 +8,7 @@ import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHand
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
import createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';
import createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';
import createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';
import createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';
import createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';
import { createThunk } from 'Store/thunks';
@@ -30,9 +32,10 @@ export const CANCEL_SAVE_APPLICATION = 'settings/applications/cancelSaveApplicat
export const DELETE_APPLICATION = 'settings/applications/deleteApplication';
export const TEST_APPLICATION = 'settings/applications/testApplication';
export const CANCEL_TEST_APPLICATION = 'settings/applications/cancelTestApplication';
export const TEST_ALL_APPLICATIONS = 'indexers/testAllApplications';
export const TEST_ALL_APPLICATIONS = 'settings/applications/testAllApplications';
export const BULK_EDIT_APPLICATIONS = 'settings/applications/bulkEditApplications';
export const BULK_DELETE_APPLICATIONS = 'settings/applications/bulkDeleteApplications';
export const SET_MANAGE_APPLICATIONS_SORT = 'settings/applications/setManageApplicationsSort';
//
// Action Creators
@@ -49,6 +52,7 @@ export const cancelTestApplication = createThunk(CANCEL_TEST_APPLICATION);
export const testAllApplications = createThunk(TEST_ALL_APPLICATIONS);
export const bulkEditApplications = createThunk(BULK_EDIT_APPLICATIONS);
export const bulkDeleteApplications = createThunk(BULK_DELETE_APPLICATIONS);
export const setManageApplicationsSort = createAction(SET_MANAGE_APPLICATIONS_SORT);
export const setApplicationValue = createAction(SET_APPLICATION_VALUE, (payload) => {
return {
@@ -88,7 +92,14 @@ export default {
isTesting: false,
isTestingAll: false,
items: [],
pendingChanges: {}
pendingChanges: {},
sortKey: 'name',
sortDirection: sortDirections.ASCENDING,
sortPredicates: {
name: function(item) {
return item.name.toLowerCase();
}
}
},
//
@@ -121,7 +132,10 @@ export default {
return selectedSchema;
});
}
},
[SET_MANAGE_APPLICATIONS_SORT]: createSetClientSideCollectionSortReducer(section)
}
};

View File

@@ -1,4 +1,5 @@
import { createAction } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';
import createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
@@ -7,6 +8,7 @@ import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHand
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
import createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';
import createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';
import createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';
import createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';
import createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';
import { createThunk } from 'Store/thunks';
@@ -34,6 +36,7 @@ export const CANCEL_TEST_DOWNLOAD_CLIENT = 'settings/downloadClients/cancelTestD
export const TEST_ALL_DOWNLOAD_CLIENTS = 'settings/downloadClients/testAllDownloadClients';
export const BULK_EDIT_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkEditDownloadClients';
export const BULK_DELETE_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkDeleteDownloadClients';
export const SET_MANAGE_DOWNLOAD_CLIENTS_SORT = 'settings/downloadClients/setManageDownloadClientsSort';
//
// Action Creators
@@ -50,6 +53,7 @@ export const cancelTestDownloadClient = createThunk(CANCEL_TEST_DOWNLOAD_CLIENT)
export const testAllDownloadClients = createThunk(TEST_ALL_DOWNLOAD_CLIENTS);
export const bulkEditDownloadClients = createThunk(BULK_EDIT_DOWNLOAD_CLIENTS);
export const bulkDeleteDownloadClients = createThunk(BULK_DELETE_DOWNLOAD_CLIENTS);
export const setManageDownloadClientsSort = createAction(SET_MANAGE_DOWNLOAD_CLIENTS_SORT);
export const setDownloadClientValue = createAction(SET_DOWNLOAD_CLIENT_VALUE, (payload) => {
return {
@@ -89,7 +93,14 @@ export default {
isTesting: false,
isTestingAll: false,
items: [],
pendingChanges: {}
pendingChanges: {},
sortKey: 'name',
sortDirection: sortDirections.ASCENDING,
sortPredicates: {
name: function(item) {
return item.name.toLowerCase();
}
}
},
//
@@ -147,7 +158,10 @@ export default {
return selectedSchema;
});
}
},
[SET_MANAGE_DOWNLOAD_CLIENTS_SORT]: createSetClientSideCollectionSortReducer(section)
}
};

View File

@@ -1,6 +1,6 @@
import _ from 'lodash';
import { createAction } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import { filterTypePredicates, sortDirections } from 'Helpers/Props';
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
@@ -69,6 +69,28 @@ export const filterPredicates = {
item.fields.find((field) => field.name === 'vipExpiration')?.value ?? null;
return dateFilterPredicate(vipExpiration, filterValue, type);
},
categories: function(item, filterValue, type) {
const predicate = filterTypePredicates[type];
const { categories = [] } = item.capabilities || {};
const categoryList = categories
.filter((category) => category.id < 100000)
.reduce((acc, element) => {
acc.push(element.id);
if (element.subCategories && element.subCategories.length > 0) {
element.subCategories.forEach((subCat) => {
acc.push(subCat.id);
});
}
return acc;
}, []);
return predicate(categoryList, filterValue);
}
};

View File

@@ -186,6 +186,12 @@ export const defaultState = {
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.APP_PROFILE
},
{
name: 'categories',
label: () => translate('Categories'),
type: filterBuilderTypes.ARRAY,
valueType: filterBuilderValueTypes.CATEGORY
},
{
name: 'tags',
label: () => translate('Tags'),

View File

@@ -22,9 +22,9 @@ class About extends Component {
isNetCore,
isDocker,
runtimeVersion,
migrationVersion,
databaseVersion,
databaseType,
migrationVersion,
appData,
startupPath,
mode,
@@ -66,13 +66,13 @@ class About extends Component {
}
<DescriptionListItem
title={translate('DBMigration')}
data={migrationVersion}
title={translate('Database')}
data={`${titleCase(databaseType)} ${databaseVersion}`}
/>
<DescriptionListItem
title={translate('Database')}
data={`${titleCase(databaseType)} ${databaseVersion}`}
title={translate('DatabaseMigration')}
data={migrationVersion}
/>
<DescriptionListItem

View File

@@ -0,0 +1,151 @@
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Common.Serializer;
using NzbDrone.Core.Datastore.Migration;
using NzbDrone.Core.Notifications.Email;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Datastore.Migration
{
[TestFixture]
public class email_encryptionFixture : MigrationTest<email_encryption>
{
[Test]
public void should_convert_do_not_require_encryption_to_auto()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Notifications").Row(new
{
OnGrab = true,
OnHealthIssue = true,
IncludeHealthWarnings = true,
Name = "Mail Prowlarr",
Implementation = "Email",
Tags = "[]",
Settings = new EmailSettings38
{
Server = "smtp.gmail.com",
Port = 563,
To = new List<string> { "dont@email.me" },
RequireEncryption = false
}.ToJson(),
ConfigContract = "EmailSettings"
});
});
var items = db.Query<NotificationDefinition39>("SELECT * FROM \"Notifications\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Email");
items.First().ConfigContract.Should().Be("EmailSettings");
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Preferred);
}
[Test]
public void should_convert_require_encryption_to_always()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Notifications").Row(new
{
OnGrab = true,
OnHealthIssue = true,
IncludeHealthWarnings = true,
Name = "Mail Prowlarr",
Implementation = "Email",
Tags = "[]",
Settings = new EmailSettings38
{
Server = "smtp.gmail.com",
Port = 563,
To = new List<string> { "dont@email.me" },
RequireEncryption = true
}.ToJson(),
ConfigContract = "EmailSettings"
});
});
var items = db.Query<NotificationDefinition39>("SELECT * FROM \"Notifications\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Email");
items.First().ConfigContract.Should().Be("EmailSettings");
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Always);
}
[Test]
public void should_use_defaults_when_settings_are_empty()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Notifications").Row(new
{
OnGrab = true,
OnHealthIssue = true,
IncludeHealthWarnings = true,
Name = "Mail Prowlarr",
Implementation = "Email",
Tags = "[]",
Settings = new { }.ToJson(),
ConfigContract = "EmailSettings"
});
});
var items = db.Query<NotificationDefinition39>("SELECT * FROM \"Notifications\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Email");
items.First().ConfigContract.Should().Be("EmailSettings");
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Preferred);
}
}
public class NotificationDefinition39
{
public int Id { get; set; }
public string Implementation { get; set; }
public string ConfigContract { get; set; }
public EmailSettings39 Settings { get; set; }
public string Name { get; set; }
public bool OnGrab { get; set; }
public bool OnHealthIssue { get; set; }
public bool OnHealthRestored { get; set; }
public bool OnApplicationUpdate { get; set; }
public bool SupportsOnGrab { get; set; }
public bool IncludeManualGrabs { get; set; }
public bool SupportsOnHealthIssue { get; set; }
public bool SupportsOnHealthRestored { get; set; }
public bool IncludeHealthWarnings { get; set; }
public bool SupportsOnApplicationUpdate { get; set; }
public List<int> Tags { get; set; }
}
public class EmailSettings38
{
public string Server { get; set; }
public int Port { get; set; }
public bool RequireEncryption { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string From { get; set; }
public IEnumerable<string> To { get; set; }
public IEnumerable<string> Cc { get; set; }
public IEnumerable<string> Bcc { get; set; }
}
public class EmailSettings39
{
public string Server { get; set; }
public int Port { get; set; }
public int UseEncryption { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string From { get; set; }
public IEnumerable<string> To { get; set; }
public IEnumerable<string> Cc { get; set; }
public IEnumerable<string> Bcc { get; set; }
}
}

View File

@@ -0,0 +1,111 @@
using System;
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Notifications.Email;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.NotificationTests.EmailTests
{
[TestFixture]
public class EmailSettingsValidatorFixture : CoreTest<EmailSettingsValidator>
{
private EmailSettings _emailSettings;
private TestValidator<EmailSettings> _validator;
[SetUp]
public void Setup()
{
_validator = new TestValidator<EmailSettings>
{
v => v.RuleFor(s => s).SetValidator(Subject)
};
_emailSettings = Builder<EmailSettings>.CreateNew()
.With(s => s.Server = "someserver")
.With(s => s.Port = 567)
.With(s => s.UseEncryption = (int)EmailEncryptionType.Always)
.With(s => s.From = "dont@email.me")
.With(s => s.To = new string[] { "dont@email.me" })
.Build();
}
[Test]
public void should_be_valid_if_all_settings_valid()
{
_validator.Validate(_emailSettings).IsValid.Should().BeTrue();
}
[Test]
public void should_not_be_valid_if_port_is_out_of_range()
{
_emailSettings.Port = 900000;
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[Test]
public void should_not_be_valid_if_server_is_empty()
{
_emailSettings.Server = "";
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[Test]
public void should_not_be_valid_if_from_is_empty()
{
_emailSettings.From = "";
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[TestCase("prowlarr")]
[TestCase("email.me")]
[Ignore("Allowed coz some email servers allow arbitrary source, we probably need to support 'Name <email>' syntax")]
public void should_not_be_valid_if_from_is_invalid(string email)
{
_emailSettings.From = email;
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[TestCase("prowlarr")]
[TestCase("email.me")]
public void should_not_be_valid_if_to_is_invalid(string email)
{
_emailSettings.To = new string[] { email };
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[TestCase("prowlarr")]
[TestCase("email.me")]
public void should_not_be_valid_if_cc_is_invalid(string email)
{
_emailSettings.Cc = new string[] { email };
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[TestCase("prowlarr")]
[TestCase("email.me")]
public void should_not_be_valid_if_bcc_is_invalid(string email)
{
_emailSettings.Bcc = new string[] { email };
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
[Test]
public void should_not_be_valid_if_to_bcc_cc_are_all_empty()
{
_emailSettings.To = Array.Empty<string>();
_emailSettings.Cc = Array.Empty<string>();
_emailSettings.Bcc = Array.Empty<string>();
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
}
}
}

View File

@@ -0,0 +1,50 @@
using System.Collections.Generic;
using System.Data;
using Dapper;
using FluentMigrator;
using Newtonsoft.Json.Linq;
using NzbDrone.Common.Serializer;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(039)]
public class email_encryption : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Execute.WithConnection(ChangeEncryption);
}
private void ChangeEncryption(IDbConnection conn, IDbTransaction tran)
{
var updated = new List<object>();
using (var getEmailCmd = conn.CreateCommand())
{
getEmailCmd.Transaction = tran;
getEmailCmd.CommandText = "SELECT \"Id\", \"Settings\" FROM \"Notifications\" WHERE \"Implementation\" = 'Email'";
using (var reader = getEmailCmd.ExecuteReader())
{
while (reader.Read())
{
var id = reader.GetInt32(0);
var settings = Json.Deserialize<JObject>(reader.GetString(1));
settings["useEncryption"] = settings.Value<bool?>("requireEncryption") ?? false ? 1 : 0;
settings["requireEncryption"] = null;
updated.Add(new
{
Settings = settings.ToJson(),
Id = id
});
}
}
}
var updateSql = "UPDATE \"Notifications\" SET \"Settings\" = @Settings WHERE \"Id\" = @Id";
conn.Execute(updateSql, updated, transaction: tran);
}
}
}

View File

@@ -32,7 +32,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
var parameters = new BroadcastheNetTorrentQuery();
var searchString = searchCriteria.SearchTerm ?? string.Empty;
var searchTerm = searchCriteria.SearchTerm ?? string.Empty;
var btnResults = searchCriteria.Limit.GetValueOrDefault();
if (btnResults == 0)
@@ -50,9 +50,10 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
{
parameters.Tvrage = $"{searchCriteria.RId}";
}
else if (searchString.IsNotNullOrWhiteSpace())
if (searchTerm.IsNotNullOrWhiteSpace())
{
parameters.Search = searchString.Replace(" ", "%");
parameters.Search = searchTerm.Replace(" ", "%");
}
// If only the season/episode is searched for then change format to match expected format
@@ -84,6 +85,11 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
parameters.Category = "Episode";
pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset));
}
else if (searchTerm.IsNotNullOrWhiteSpace() && int.TryParse(searchTerm, out _) && (searchCriteria.TvdbId > 0 || searchCriteria.RId > 0))
{
// Disable ID-based searches for episodes with absolute episode number
return new IndexerPageableRequestChain();
}
else
{
// Neither a season only search nor daily nor standard, fall back to query
@@ -104,7 +110,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
var parameters = new BroadcastheNetTorrentQuery();
var searchString = searchCriteria.SearchTerm ?? "";
var searchTerm = searchCriteria.SearchTerm ?? string.Empty;
var btnResults = searchCriteria.Limit.GetValueOrDefault();
if (btnResults == 0)
@@ -114,9 +120,9 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
var btnOffset = searchCriteria.Offset.GetValueOrDefault(0);
if (searchString.IsNotNullOrWhiteSpace())
if (searchTerm.IsNotNullOrWhiteSpace())
{
parameters.Search = searchString.Replace(" ", "%");
parameters.Search = searchTerm.Replace(" ", "%");
}
pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset));

View File

@@ -6,6 +6,7 @@ using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Indexers.Exceptions;
@@ -43,12 +44,12 @@ namespace NzbDrone.Core.Indexers.Definitions
public override IIndexerRequestGenerator GetRequestGenerator()
{
return new SubsPleaseRequestGenerator { Settings = Settings, Capabilities = Capabilities };
return new SubsPleaseRequestGenerator(Settings);
}
public override IParseIndexerResponse GetParser()
{
return new SubsPleaseParser(Settings, Capabilities.Categories);
return new SubsPleaseParser(Settings);
}
private IndexerCapabilities SetCapabilities()
@@ -74,12 +75,16 @@ namespace NzbDrone.Core.Indexers.Definitions
public class SubsPleaseRequestGenerator : IIndexerRequestGenerator
{
public NoAuthTorrentBaseSettings Settings { get; set; }
public IndexerCapabilities Capabilities { get; set; }
private readonly NoAuthTorrentBaseSettings _settings;
public SubsPleaseRequestGenerator(NoAuthTorrentBaseSettings settings)
{
_settings = settings;
}
private IEnumerable<IndexerRequest> GetSearchRequests(string term)
{
var searchUrl = $"{Settings.BaseUrl.TrimEnd('/')}/api/?";
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/api/?";
var searchTerm = Regex.Replace(term, "\\[?SubsPlease\\]?\\s*", string.Empty, RegexOptions.IgnoreCase).Trim();
@@ -104,7 +109,7 @@ namespace NzbDrone.Core.Indexers.Definitions
private IEnumerable<IndexerRequest> GetRssRequest()
{
var searchUrl = $"{Settings.BaseUrl.TrimEnd('/')}/api/?";
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/api/?";
var queryParameters = new NameValueCollection
{
@@ -119,16 +124,12 @@ namespace NzbDrone.Core.Indexers.Definitions
public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
{
var pageableRequests = new IndexerPageableRequestChain();
return pageableRequests;
return new IndexerPageableRequestChain();
}
public IndexerPageableRequestChain GetSearchRequests(MusicSearchCriteria searchCriteria)
{
var pageableRequests = new IndexerPageableRequestChain();
return pageableRequests;
return new IndexerPageableRequestChain();
}
public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
@@ -166,13 +167,13 @@ namespace NzbDrone.Core.Indexers.Definitions
public class SubsPleaseParser : IParseIndexerResponse
{
private readonly NoAuthTorrentBaseSettings _settings;
private readonly IndexerCapabilitiesCategories _categories;
private static readonly Regex RegexSize = new (@"\&xl=(?<size>\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
public SubsPleaseParser(NoAuthTorrentBaseSettings settings, IndexerCapabilitiesCategories categories)
private readonly NoAuthTorrentBaseSettings _settings;
public SubsPleaseParser(NoAuthTorrentBaseSettings settings)
{
_settings = settings;
_categories = categories;
}
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
@@ -216,28 +217,11 @@ namespace NzbDrone.Core.Indexers.Definitions
}
// Ex: [SubsPlease] Shingeki no Kyojin (The Final Season) - 64 (1080p)
release.Title += $"[SubsPlease] {value.Show} - {value.Episode} ({d.Res}p)";
release.Title += $"[SubsPlease] {value.Show} - {value.Episode} ({d.Resolution}p)";
release.MagnetUrl = d.Magnet;
release.DownloadUrl = null;
release.Guid = d.Magnet;
// The API doesn't tell us file size, so give an estimate based on resolution
if (string.Equals(d.Res, "1080"))
{
release.Size = 1395864371; // 1.3GB
}
else if (string.Equals(d.Res, "720"))
{
release.Size = 734003200; // 700MB
}
else if (string.Equals(d.Res, "480"))
{
release.Size = 367001600; // 350MB
}
else
{
release.Size = 1073741824; // 1GB
}
release.Size = GetReleaseSize(d);
torrentInfos.Add(release);
}
@@ -246,6 +230,30 @@ namespace NzbDrone.Core.Indexers.Definitions
return torrentInfos.ToArray();
}
private static long GetReleaseSize(SubPleaseDownloadInfo info)
{
if (info.Magnet.IsNotNullOrWhiteSpace())
{
var sizeMatch = RegexSize.Match(info.Magnet);
if (sizeMatch.Success &&
long.TryParse(sizeMatch.Groups["size"].Value, out var releaseSize)
&& releaseSize > 0)
{
return releaseSize;
}
}
// The API doesn't tell us file size, so give an estimate based on resolution
return info.Resolution switch
{
"1080" => 1.3.Gigabytes(),
"720" => 700.Megabytes(),
"480" => 350.Megabytes(),
_ => 1.Gigabytes()
};
}
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
}
@@ -265,7 +273,8 @@ namespace NzbDrone.Core.Indexers.Definitions
public class SubPleaseDownloadInfo
{
public string Res { get; set; }
[JsonProperty("res")]
public string Resolution { get; set; }
public string Magnet { get; set; }
}
}

View File

@@ -277,6 +277,18 @@ namespace NzbDrone.Core.Indexers.Torznab
flags.Add(IndexerFlag.FreeLeech);
}
var tags = TryGetMultipleTorznabAttributes(item, "tag");
if (tags.Any(t => t.EqualsIgnoreCase("internal")))
{
flags.Add(IndexerFlag.Internal);
}
if (tags.Any(t => t.EqualsIgnoreCase("scene")))
{
flags.Add(IndexerFlag.Scene);
}
return flags;
}

View File

@@ -82,7 +82,7 @@
"ConnectSettings": "ربط الإعدادات",
"CouldNotConnectSignalR": "تعذر الاتصال بـ SignalR ، لن يتم تحديث واجهة المستخدم",
"Dates": "تواريخ",
"DBMigration": "ترحيل DB",
"DatabaseMigration": "ترحيل DB",
"Delete": "حذف",
"Details": "تفاصيل",
"Donations": "التبرعات",
@@ -257,7 +257,7 @@
"Tags": "العلامات",
"TagsHelpText": "ينطبق على الأفلام التي تحتوي على علامة مطابقة واحدة على الأقل",
"UISettings": "إعدادات واجهة المستخدم",
"UnableToLoadDownloadClients": "تعذر تحميل عملاء التنزيل",
"DownloadClientsLoadError": "تعذر تحميل عملاء التنزيل",
"UnableToLoadTags": "تعذر تحميل العلامات",
"UnableToLoadUISettings": "تعذر تحميل إعدادات واجهة المستخدم",
"UpdateCheckStartupTranslocationMessage": "لا يمكن تثبيت التحديث لأن مجلد بدء التشغيل \"{0}\" موجود في مجلد App Translocation.",

View File

@@ -35,7 +35,7 @@
"CustomFilters": "Персонализирани филтри",
"Date": "Дата",
"Dates": "Дати",
"DBMigration": "DB миграция",
"DatabaseMigration": "DB миграция",
"Delete": "Изтрий",
"DeleteDownloadClient": "Изтриване на клиент за изтегляне",
"DeleteDownloadClientMessageText": "Наистина ли искате да изтриете клиента за изтегляне '{0}'?",
@@ -188,7 +188,7 @@
"Priority": "Приоритет",
"SettingsLongDateFormat": "Формат с дълга дата",
"SettingsShowRelativeDates": "Показване на относителни дати",
"UnableToLoadDownloadClients": "Клиентите за изтегляне не могат да се заредят",
"DownloadClientsLoadError": "Клиентите за изтегляне не могат да се заредят",
"Logging": "Регистрация",
"Exception": "Изключение",
"MovieIndexScrollBottom": "Индекс на филма: Превъртане отдолу",

View File

@@ -44,7 +44,7 @@
"UILanguageHelpTextWarning": "Es requereix una recàrrega del navegador",
"UISettings": "Configuració de la interfície",
"UnableToLoadBackups": "No es poden carregar còpies de seguretat",
"UnableToLoadDownloadClients": "No es poden carregar els clients de baixada",
"DownloadClientsLoadError": "No es poden carregar els clients de baixada",
"UnableToLoadTags": "No es poden carregar les etiquetes",
"UnableToLoadUISettings": "No es pot carregar la configuració de la IU",
"UnselectAll": "Desseleccioneu-ho tot",
@@ -82,7 +82,7 @@
"EditIndexer": "Edita l'indexador",
"EnableAutomaticSearch": "Activa la cerca automàtica",
"Enabled": "Habilitat",
"Error": "error",
"Error": "Error",
"ErrorLoadingContents": "S'ha produït un error en carregar el contingut",
"Events": "Esdeveniments",
"ExistingTag": "Etiqueta existent",
@@ -168,7 +168,7 @@
"CustomFilters": "Filtres personalitzats",
"Date": "Data",
"Dates": "Dates",
"DBMigration": "Migració de BD",
"DatabaseMigration": "Migració de BD",
"Delete": "Suprimeix",
"DeleteNotificationMessageText": "Esteu segur que voleu suprimir la notificació '{name}'?",
"DeleteTag": "Suprimeix l'etiqueta",
@@ -358,7 +358,7 @@
"DeleteSelectedIndexersMessageText": "Esteu segur que voleu suprimir {count} indexador(s) seleccionat(s)?",
"DownloadClientPriorityHelpText": "Prioritzeu diversos clients de baixada. S'utilitza round-robin per a clients amb la mateixa prioritat.",
"More": "Més",
"Season": "temporada",
"Season": "Temporada",
"Theme": "Tema",
"Track": "Traça",
"Year": "Any",
@@ -413,7 +413,7 @@
"AuthenticationRequiredUsernameHelpTextWarning": "Introduïu un nom d'usuari nou",
"Categories": "Categories",
"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ó",
"Episode": "episodi",
"Episode": "Episodi",
"EditApplicationImplementation": "Edita la notificació - {implementationName}",
"EditConnectionImplementation": "Afegeix una connexió - {implementationName}",
"EditIndexerProxyImplementation": "Edita l'indexador - {implementationName}",
@@ -425,5 +425,7 @@
"Category": "Categoria",
"Clone": "Clona",
"Yes": "Si",
"No": "No"
"No": "No",
"StopSelecting": "Deixa de seleccionar",
"External": "Extern"
}

View File

@@ -199,7 +199,7 @@
"SSLCertPath": "Cesta certifikátu SSL",
"SSLCertPathHelpText": "Cesta k souboru pfx",
"UnableToLoadBackups": "Nelze načíst zálohy",
"UnableToLoadDownloadClients": "Nelze načíst klienty pro stahování",
"DownloadClientsLoadError": "Nelze načíst klienty pro stahování",
"UnableToLoadGeneralSettings": "Nelze načíst obecná nastavení",
"DeleteNotification": "Smazat oznámení",
"EnableAutomaticSearch": "Povolit automatické vyhledávání",
@@ -244,7 +244,7 @@
"CustomFilters": "Vlastní filtry",
"Date": "datum",
"Dates": "Termíny",
"DBMigration": "Migrace databáze",
"DatabaseMigration": "Migrace databáze",
"Delete": "Vymazat",
"DeleteApplicationMessageText": "Opravdu chcete smazat oznámení „{0}“?",
"DeleteBackup": "Odstranit zálohu",

View File

@@ -53,7 +53,7 @@
"Disabled": "deaktiveret",
"Add": "Tilføj",
"AddDownloadClient": "Tilføj downloadklient",
"DBMigration": "DB Migration",
"DatabaseMigration": "DB Migration",
"MIA": "MIA",
"ResetAPIKey": "Nulstil API-nøgle",
"SettingsTimeFormat": "Tidsformat",
@@ -264,7 +264,7 @@
"SSLPort": "SSL-port",
"StartupDirectory": "Startmappe",
"Status": "Status",
"UnableToLoadDownloadClients": "Kunne ikke indlæse downloadklienter",
"DownloadClientsLoadError": "Kunne ikke indlæse downloadklienter",
"UpdateCheckStartupTranslocationMessage": "Kan ikke installere opdatering, fordi startmappen '{0}' er i en App Translocation-mappe.",
"UpdateMechanismHelpText": "Brug den indbyggede opdateringsfunktion eller et script",
"View": "Udsigt",

View File

@@ -80,7 +80,7 @@
"CouldNotConnectSignalR": "Es konnte keine Verbindung zu SignalR hergestellt werden, die Benutzeroberfläche wird nicht aktualisiert",
"Custom": "Benutzerdefiniert",
"CustomFilters": "Benutzerdefinierte Filter",
"DBMigration": "DB Migration",
"DatabaseMigration": "DB Migration",
"Database": "Datenbank",
"Date": "Datum",
"Dates": "Termine",
@@ -418,10 +418,10 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Der neue Indexer konnte nicht hinzugefügt werden, bitte erneut probieren.",
"UnableToAddANewNotificationPleaseTryAgain": "Die neue Benachrichtigung konnte nicht hinzugefügt werden, bitte erneut probieren.",
"UnableToLoadAppProfiles": "App-Profile können nicht geladen werden",
"UnableToLoadApplicationList": "Anwendungsliste kann nicht geladen werden",
"ApplicationsLoadError": "Anwendungsliste kann nicht geladen werden",
"UnableToLoadBackups": "Sicherungen können nicht geladen werden",
"UnableToLoadDevelopmentSettings": "Entwicklereinstellungen konnten nicht geladen werden",
"UnableToLoadDownloadClients": "Downloader konnten nicht geladen werden",
"DownloadClientsLoadError": "Downloader konnten nicht geladen werden",
"UnableToLoadGeneralSettings": "Allgemeine Einstellungen konnten nicht geladen werden",
"UnableToLoadHistory": "Verlauf konnte nicht geladen werden",
"UnableToLoadIndexerProxies": "Indexer-Proxies können nicht geladen werden",

View File

@@ -122,7 +122,7 @@
"ChangeHasNotBeenSavedYet": "Η αλλαγή δεν έχει αποθηκευτεί ακόμα",
"CloneProfile": "Προφίλ κλώνου",
"CloseCurrentModal": "Κλείσιμο τρέχοντος modal",
"DBMigration": "Μετεγκατάσταση DB",
"DatabaseMigration": "Μετεγκατάσταση DB",
"DeleteApplicationMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε την ειδοποίηση \"{0}\";",
"DeleteBackupMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το αντίγραφο ασφαλείας \"{0}\";",
"DeleteIndexerProxyMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη λίστα \"{0}\";",
@@ -235,7 +235,7 @@
"Security": "Ασφάλεια",
"Tasks": "Καθήκοντα",
"UnableToLoadBackups": "Δεν είναι δυνατή η φόρτωση αντιγράφων ασφαλείας",
"UnableToLoadDownloadClients": "Δεν είναι δυνατή η φόρτωση πελατών λήψης",
"DownloadClientsLoadError": "Δεν είναι δυνατή η φόρτωση πελατών λήψης",
"UpdateMechanismHelpText": "Χρησιμοποιήστε το ενσωματωμένο πρόγραμμα ενημέρωσης του {appName} ή ένα script",
"AnalyticsEnabledHelpText": "Στείλτε ανώνυμες πληροφορίες χρήσης και σφάλματος στους διακομιστές του {appName}. Αυτό περιλαμβάνει πληροφορίες στο πρόγραμμα περιήγησής σας, ποιες σελίδες {appName} WebUI χρησιμοποιείτε, αναφορά σφαλμάτων καθώς και έκδοση λειτουργικού συστήματος και χρόνου εκτέλεσης. Θα χρησιμοποιήσουμε αυτές τις πληροφορίες για να δώσουμε προτεραιότητα σε λειτουργίες και διορθώσεις σφαλμάτων.",
"AppDataDirectory": "Κατάλογος AppData",
@@ -363,7 +363,7 @@
"QueryOptions": "Επιλογές ερωτήματος",
"SearchIndexers": "Αναζήτηση ευρετηρίων",
"SearchType": "Τύπος αναζήτησης",
"UnableToLoadApplicationList": "Δεν είναι δυνατή η φόρτωση της λίστας εφαρμογών",
"ApplicationsLoadError": "Δεν είναι δυνατή η φόρτωση της λίστας εφαρμογών",
"AddRemoveOnly": "Μόνο προσθήκη και αφαίρεση",
"ProwlarrSupportsAnyDownloadClient": "Το {appName} υποστηρίζει οποιοδήποτε από τα προγράμματα-πελάτες λήψης που αναφέρονται παρακάτω.",
"Query": "Ερώτηση",

View File

@@ -35,7 +35,7 @@
"AnalyticsEnabledHelpText": "Send anonymous usage and error information to {appName}'s servers. This includes information on your browser, which {appName} WebUI pages you use, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes.",
"ApiKey": "API Key",
"ApiKeyValidationHealthCheckMessage": "Please update your API key to be at least {0} characters long. You can do this via settings or the config file",
"AppDataDirectory": "AppData directory",
"AppDataDirectory": "AppData Directory",
"AppDataLocationHealthCheckMessage": "Updating will not be possible to prevent deleting AppData on Update",
"AppProfileInUse": "App Profile in Use",
"AppProfileSelectHelpText": "App profiles are used to control RSS, Automatic Search and Interactive Search settings on application sync",
@@ -47,11 +47,12 @@
"ApplicationLongTermStatusCheckSingleClientMessage": "Applications unavailable due to failures for more than 6 hours: {0}",
"ApplicationStatusCheckAllClientMessage": "All applications are unavailable due to failures",
"ApplicationStatusCheckSingleClientMessage": "Applications unavailable due to failures: {0}",
"ApplicationTagsHelpText": "Sync Indexers to this application that have no tags or that have 1 or more matching tags",
"ApplicationTagsHelpText": "Sync Indexers to this application that have one or more matching tags. If no tags are listed here, then no indexers will be prevented from syncing due to their tags.",
"ApplicationTagsHelpTextWarning": "Tags should be used with caution, they can have unintended effects. An app with a tag will only sync with indexers having the same tag.",
"ApplicationURL": "Application URL",
"ApplicationUrlHelpText": "This application's external URL including http(s)://, port and URL base",
"Applications": "Applications",
"ApplicationsLoadError": "Unable to load application list",
"Apply": "Apply",
"ApplyChanges": "Apply Changes",
"ApplyTags": "Apply Tags",
@@ -133,8 +134,8 @@
"CountIndexersSelected": "{count} indexer(s) selected",
"Custom": "Custom",
"CustomFilters": "Custom Filters",
"DBMigration": "DB Migration",
"Database": "Database",
"DatabaseMigration": "Database Migration",
"Date": "Date",
"Dates": "Dates",
"DefaultNameCopiedProfile": "{name} - Copy",
@@ -180,6 +181,7 @@
"DownloadClientStatusCheckAllClientMessage": "All download clients are unavailable due to failures",
"DownloadClientStatusCheckSingleClientMessage": "Download clients unavailable due to failures: {0}",
"DownloadClients": "Download Clients",
"DownloadClientsLoadError": "Unable to load download clients",
"DownloadClientsSettingsSummary": "Download clients configuration for integration into {appName} UI search",
"Duration": "Duration",
"Edit": "Edit",
@@ -317,6 +319,7 @@
"MIA": "MIA",
"MaintenanceRelease": "Maintenance Release: bug fixes and other improvements. See Github Commit History for more details",
"ManageApplications": "Manage Applications",
"ManageClients": "Manage Clients",
"ManageDownloadClients": "Manage Download Clients",
"Manual": "Manual",
"MappedCategories": "Mapped Categories",
@@ -340,6 +343,7 @@
"NewznabUrl": "Newznab Url",
"NextExecution": "Next Execution",
"No": "No",
"NoApplicationsFound": "No applications found",
"NoBackupsAreAvailable": "No backups are available",
"NoChange": "No Change",
"NoChanges": "No Changes",
@@ -362,6 +366,8 @@
"NotificationTriggers": "Notification Triggers",
"NotificationTriggersHelpText": "Select which events should trigger this notification",
"Notifications": "Notifications",
"NotificationsEmailSettingsUseEncryption": "Use Encryption",
"NotificationsEmailSettingsUseEncryptionHelpText": "Whether to prefer using encryption if configured on the server, to always use encryption via SSL (Port 465 only) or StartTLS (any other port) or to never use encryption",
"OAuthPopupMessage": "Pop-ups are being blocked by your browser",
"Ok": "Ok",
"OnApplicationUpdate": "On Application Update",
@@ -502,7 +508,7 @@
"Source": "Source",
"StartTypingOrSelectAPathBelow": "Start typing or select a path below",
"Started": "Started",
"StartupDirectory": "Startup directory",
"StartupDirectory": "Startup Directory",
"Stats": "Stats",
"Status": "Status",
"StopSelecting": "Stop Selecting",
@@ -565,10 +571,8 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Unable to add a new indexer proxy, please try again.",
"UnableToAddANewNotificationPleaseTryAgain": "Unable to add a new notification, please try again.",
"UnableToLoadAppProfiles": "Unable to load app profiles",
"UnableToLoadApplicationList": "Unable to load application list",
"UnableToLoadBackups": "Unable to load backups",
"UnableToLoadDevelopmentSettings": "Unable to load Development settings",
"UnableToLoadDownloadClients": "Unable to load download clients",
"UnableToLoadGeneralSettings": "Unable to load General settings",
"UnableToLoadHistory": "Unable to load history",
"UnableToLoadIndexerProxies": "Unable to load Indexer Proxies",

View File

@@ -12,7 +12,7 @@
"Edit": "Editar",
"DownloadClientStatusCheckSingleClientMessage": "Gestores de descargas no disponibles debido a errores: {0}",
"DownloadClientStatusCheckAllClientMessage": "Los gestores de descargas no están disponibles debido a errores",
"DownloadClients": "Gestores de Descargas",
"DownloadClients": "Clientes de descarga",
"Delete": "Eliminar",
"Dates": "Fechas",
"Date": "Fecha",
@@ -79,7 +79,7 @@
"Failed": "Fallido",
"EventType": "Tipo de Evento",
"DownloadClientsSettingsSummary": "Configuración del cliente de descargas para la integración en {appName} UI search",
"DownloadClient": "Gestor de Descargas",
"DownloadClient": "Cliente de descarga",
"Details": "Detalles",
"ConnectSettingsSummary": "Notificaciones y scripts personalizados",
"Warn": "Advertencia",
@@ -132,13 +132,13 @@
"Fixed": "Arreglado",
"EnableSslHelpText": " Requiere reiniciar la aplicación como administrador para que surta efecto",
"Enable": "Habilitar",
"DownloadClientSettings": "Ajustes de Gestor de Descargas",
"DownloadClientSettings": "Opciones del cliente de descarga",
"Docker": "Docker",
"DeleteTag": "Borrar Etiqueta",
"DeleteNotification": "Borrar Notificación",
"DeleteDownloadClient": "Borrar Gestor de Descargas",
"DeleteTag": "Eliminar Etiqueta",
"DeleteNotification": "Borrar Notificacion",
"DeleteDownloadClient": "Borrar cliente de descarga",
"DeleteBackup": "Eliminar copia de seguridad",
"DBMigration": "Migración de DB",
"DatabaseMigration": "Migración de DB",
"CloneProfile": "Clonar Perfil",
"ClientPriority": "Prioridad del Cliente",
"ChangeHasNotBeenSavedYet": "El cambio aún no se ha guardado",
@@ -171,7 +171,7 @@
"UpdateAutomaticallyHelpText": "Descargar e instalar actualizaciones automáticamente. Se podrán instalar desde Sistema: Actualizaciones también",
"UnableToLoadTags": "No se pueden cargar las Etiquetas",
"UnableToLoadNotifications": "No se pueden cargar las Notificaciones",
"UnableToLoadDownloadClients": "No se puden cargar los gestores de descargas",
"DownloadClientsLoadError": "No se puden cargar los gestores de descargas",
"UISettings": "Ajustes del UI",
"Torrents": "Torrents",
"TestAllClients": "Comprobar Todos los Gestores",
@@ -374,7 +374,7 @@
"Theme": "Tema",
"ApplyTagsHelpTextAdd": "Añadir: Añadir a las etiquetas la lista existente de etiquetas",
"DeleteSelectedApplicationsMessageText": "¿Estás seguro que quieres eliminar {count} aplicación(es) seleccionada(s)?",
"DeleteSelectedDownloadClients": "Borrar Gestor de Descargas",
"DeleteSelectedDownloadClients": "Borrar gestor de descarga(s)",
"DeleteSelectedIndexersMessageText": "¿Está seguro de querer eliminar {count} indexador(es) seleccionado(s)?",
"DeleteSelectedDownloadClientsMessageText": "¿Está seguro de querer eliminar {count} cliente(s) de descarga seleccionado(s)?",
"ApplyTagsHelpTextHowToApplyApplications": "Cómo añadir etiquetas a las películas seleccionadas",
@@ -431,7 +431,7 @@
"AddIndexerImplementation": "Agregar Condición - { implementationName}",
"AddIndexerProxyImplementation": "Agregar Condición - { implementationName}",
"EditApplicationImplementation": "Agregar Condición - { implementationName}",
"EditConnectionImplementation": "Agregar Condición - { implementationName}",
"EditConnectionImplementation": "Editar conexión - {implementationName}",
"AddDownloadClientImplementation": "Añadir Cliente de Descarga - {implementationName}",
"AuthenticationMethod": "Método de autenticación",
"AuthenticationMethodHelpTextWarning": "Por favor selecciona un método válido de autenticación",
@@ -515,5 +515,6 @@
"OnGrabHelpText": "Al Capturar lanzamiento",
"SeedTimeHelpText": "El ratio que un torrent debe alcanzar antes de detenerse, si está vacío se usará el valor por defecto",
"IndexerTagsHelpTextWarning": "Las etiquetas deben utilizarse con cuidado, pueden tener efectos involuntarios. Una aplicación con una etiqueta solo sincronizara con Indexadores que tengan la misma etiqueta.",
"TVSearchTypes": "Tipos de búsquedas"
"TVSearchTypes": "Tipos de búsquedas",
"DownloadClientAriaSettingsDirectoryHelpText": "Ubicación opcional en la que poner las descargas, dejar en blanco para usar la ubicación de Aria2 predeterminada"
}

View File

@@ -135,7 +135,7 @@
"UnableToAddANewIndexerPleaseTryAgain": "Uuden tietolähteen lisäys epäonnistui. Yritä uudelleen.",
"UnableToAddANewIndexerProxyPleaseTryAgain": "Uuden tiedonhaun välityspalvelimen lisäys epäonnistui. Yritä uudelleen.",
"UnableToLoadBackups": "Varmuuskopioiden lataus epäonnistui",
"UnableToLoadDownloadClients": "Lataustyökalujen lataus ei onistu",
"DownloadClientsLoadError": "Lataustyökalujen lataus ei onistu",
"UnableToLoadGeneralSettings": "Yleisten asetusten lataus epäonnistui.",
"UpdateAutomaticallyHelpText": "Lataa ja asenna päivitykset automaattisesti. Voit myös edelleen suorittaa asennuksen järjestelmäasetusten päivitykset-osiosta.",
"Added": "Lisäysaika",
@@ -148,7 +148,7 @@
"AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja {appName}in palvelimille. Tämä sisältää tietoja selaimestasi, käyttöliittymän sivujen käytöstä, virheraportoinnista, käyttöjärjestelmästä ja suoritusalustasta. Käytämme näitä tietoja ominaisuuksien ja vikakorjausten painotukseen.",
"ApiKey": "API-avain",
"AppDataDirectory": "AppData-kansio",
"DBMigration": "Tietokannan siirto",
"DatabaseMigration": "Tietokannan siirto",
"Delete": "Poista",
"DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa tietolähdevälityspalvelimen \"{name}\"?",
"DeleteNotificationMessageText": "Haluatko varmasti poistaa ilmoituspalvelun \"{name}\"?",
@@ -403,7 +403,7 @@
"Proxies": "Välityspalvelimet",
"Public": "Julkinen",
"SemiPrivate": "Osittain yksityinen",
"UnableToLoadApplicationList": "Sovelluslistausta ei voitu ladata",
"ApplicationsLoadError": "Sovelluslistausta ei voitu ladata",
"Url": "URL",
"Website": "Verkkosivusto",
"IndexerNoDefCheckMessage": "Tietolähteillä ei ole määritystä, eivätkä ne toimi: {0}. Poista ja/tai lisää {appName}iin uudelleen",

View File

@@ -162,7 +162,7 @@
"DeleteNotification": "Supprimer la notification",
"DeleteDownloadClient": "Supprimer le client de téléchargement",
"DeleteBackup": "Supprimer la sauvegarde",
"DBMigration": "Migration de la base de données",
"DatabaseMigration": "Migration de la base de données",
"ConnectSettings": "Paramètres de connexion",
"BackupFolderHelpText": "Les chemins correspondants seront sous le répertoire AppData de {appName}",
"IllRestartLater": "Je redémarrerai plus tard",
@@ -213,7 +213,7 @@
"UnableToLoadTags": "Impossible de charger les étiquettes",
"UnableToLoadHistory": "Impossible de charger l'historique",
"UnableToLoadGeneralSettings": "Impossible de charger les paramètres généraux",
"UnableToLoadDownloadClients": "Impossible de charger les clients de téléchargement",
"DownloadClientsLoadError": "Impossible de charger les clients de téléchargement",
"UnableToLoadBackups": "Impossible de charger les sauvegardes",
"UnableToAddANewNotificationPleaseTryAgain": "Impossible d'ajouter une nouvelle notification, veuillez réessayer.",
"UnableToAddANewIndexerPleaseTryAgain": "Impossible d'ajouter un nouvel indexeur, veuillez réessayer.",
@@ -282,7 +282,7 @@
"CloseCurrentModal": "Fermer cette fenêtre modale",
"AddingTag": "Ajout d'une étiquette",
"OnHealthIssueHelpText": "Sur un problème de santé",
"AcceptConfirmationModal": "Accepter les modalités d'utilisations",
"AcceptConfirmationModal": "Accepter les modalités d'utilisation",
"OpenThisModal": "Ouvrir cette fenêtre modale",
"IndexerLongTermStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison de pannes pendant plus de 6 heures : {0}",
"IndexerLongTermStatusCheckAllClientMessage": "Tous les indexeurs sont indisponibles en raison d'échecs de plus de 6 heures",
@@ -400,7 +400,7 @@
"SearchType": "Type de recherche",
"Categories": "Catégories",
"MassEditor": "Éditer en masse",
"UnableToLoadApplicationList": "Impossible de charger la liste des applications",
"ApplicationsLoadError": "Impossible de charger la liste des applications",
"Website": "Site internet",
"AudioSearch": "Recherche de musique",
"BookSearch": "Recherche de livres",

View File

@@ -31,7 +31,7 @@
"SettingsEnableColorImpairedModeHelpText": "סגנון שונה כדי לאפשר למשתמשים לקויי צבע להבחין טוב יותר במידע המקודד בצבע",
"SettingsLongDateFormat": "פורמט תאריך ארוך",
"SettingsShortDateFormat": "פורמט תאריך קצר",
"UnableToLoadDownloadClients": "לא ניתן לטעון לקוחות הורדות",
"DownloadClientsLoadError": "לא ניתן לטעון לקוחות הורדות",
"UnableToAddANewNotificationPleaseTryAgain": "לא ניתן להוסיף התראה חדשה, נסה שוב.",
"UnableToLoadGeneralSettings": "לא ניתן לטעון את ההגדרות הכלליות",
"About": "אודות",
@@ -272,7 +272,7 @@
"CloneProfile": "פרופיל שיבוט",
"Close": "סגור",
"CloseCurrentModal": "סגור את המודול הנוכחי",
"DBMigration": "הגירת DB",
"DatabaseMigration": "הגירת DB",
"Delete": "לִמְחוֹק",
"DeleteNotification": "מחק הודעה",
"DeleteNotificationMessageText": "האם אתה בטוח שברצונך למחוק את ההודעה '{0}'?",

View File

@@ -120,7 +120,7 @@
"New": "नया",
"CustomFilters": "कस्टम फ़िल्टर",
"Dates": "खजूर",
"DBMigration": "DB प्रवासन",
"DatabaseMigration": "DB प्रवासन",
"DeleteApplicationMessageText": "क्या आप वाकई '{0}' की सूचना हटाना चाहते हैं?",
"DeleteBackup": "बैकअप हटाएं",
"DeleteBackupMessageText": "क्या आप वाकई '{0}' बैकअप हटाना चाहते हैं?",
@@ -294,7 +294,7 @@
"RestartNow": "अब पुनःचालू करें",
"SettingsEnableColorImpairedMode": "रंग-बिगड़ा मोड सक्षम करें",
"UnableToAddANewNotificationPleaseTryAgain": "नई अधिसूचना जोड़ने में असमर्थ, कृपया पुनः प्रयास करें।",
"UnableToLoadDownloadClients": "डाउनलोड क्लाइंट लोड करने में असमर्थ",
"DownloadClientsLoadError": "डाउनलोड क्लाइंट लोड करने में असमर्थ",
"UnableToLoadGeneralSettings": "सामान्य सेटिंग्स लोड करने में असमर्थ",
"UnableToLoadNotifications": "सूचनाएं लोड करने में असमर्थ",
"UpdateCheckStartupNotWritableMessage": "अपडेट स्थापित नहीं किया जा सकता क्योंकि स्टार्टअप फ़ोल्डर '{0}' उपयोगकर्ता '{1}' द्वारा लिखने योग्य नहीं है।",

View File

@@ -9,13 +9,13 @@
"EnableAutomaticSearch": "Engedélyezd az Automatikus Keresést",
"Enable": "Aktiválás",
"EditIndexer": "Indexer Szerkesztése",
"Edit": "szerkeszt",
"Edit": "Szerkeszt",
"DownloadClientStatusCheckSingleClientMessage": "Letöltőkliens hiba miatt nem elérhető: {0}",
"DownloadClientStatusCheckAllClientMessage": "Az összes letöltőkliens elérhetetlen, hiba miatt",
"DownloadClientsSettingsSummary": "Letöltőkliens konfigurációja a {appName} felhasználói felület keresésbe történő integráláshoz",
"DownloadClientSettings": "Letöltőkliens Beállítások",
"DownloadClients": "Letöltőkliensek",
"DownloadClient": "Letöltési Kliens",
"DownloadClients": "Letöltő kliensek",
"DownloadClient": "Letöltési kliens",
"Docker": "Docker",
"Disabled": "Tiltva",
"Details": "részletek",
@@ -27,21 +27,21 @@
"DeleteBackupMessageText": "Biztosan törli a '{name}' biztonsági mentést?",
"DeleteBackup": "Biztonsági Mentés törlése",
"Delete": "Törlés",
"DBMigration": "DB Migráció",
"DatabaseMigration": "DB Migráció",
"Dates": "Dátumok",
"Date": "Dátum",
"CustomFilters": "Egyéni Szűrők",
"ConnectSettingsSummary": "Értesítések és egyéni szkriptek",
"ConnectSettings": "Kapcsolódási Beállítások",
"ConnectSettings": "Csatlakozási beállítások",
"Connections": "Kapcsolatok",
"ConnectionLost": "Kapcsolódás Elveszett",
"ConnectionLost": "A kapcsolat megszakadt",
"Connect": "Értesítések",
"Component": "Komponens",
"Component": "Összetevő",
"Columns": "Oszlopok",
"CloseCurrentModal": "Aktuális Mód Bezárása",
"Close": "Bezárás",
"CloneProfile": "Profil Klónozása",
"ClientPriority": "Kliens Prioritás",
"CloneProfile": "Profil klónozása",
"ClientPriority": "Kliens prioritás",
"Clear": "Törölni",
"ChangeHasNotBeenSavedYet": "A változások még nem lettek elmentve",
"CertificateValidationHelpText": "Módosítsa a HTTPS tanúsítás szigorúságát",
@@ -49,22 +49,22 @@
"CancelPendingTask": "Biztosan törölni szeretné ezt a függőben lévő feladatot?",
"Cancel": "Mégse",
"BypassProxyForLocalAddresses": "Proxy megkerülése a helyi hálózatos címekhez",
"BranchUpdateMechanism": "A külső frissítési mechanizmus által használt ágazat",
"BranchUpdateMechanism": "Külső frissítési mechanizmus által használt ág",
"BranchUpdate": "Ágazattípus a {appName} frissítéseihez",
"Branch": "Ágazat",
"BindAddressHelpText": "Érvényes IP-cím, localhost vagy '*' minden interfészhez",
"BindAddress": "Kapcsolási Cím",
"BindAddress": "Kötési cím",
"BeforeUpdate": "Frissítés előtt",
"Backups": "Biztonsági mentések",
"BackupRetentionHelpText": "A megőrzési időszaknál régebbi automatikus biztonsági másolatok automatikusan törlődnek",
"BackupNow": "Biztonsági Mentés",
"BackupIntervalHelpText": "Az automatikus biztonsági mentések közötti időköz",
"BackupFolderHelpText": "Az elérési útvonalak a {appName} AppData könyvtárában lesznek",
"Backup": "biztonsági mentés",
"Backup": "Biztonsági mentés",
"AutomaticSearch": "Automatikus keresés",
"Automatic": "Automatikus",
"AnalyticsEnabledHelpText": "Küldjön névtelen használati és hibainformációkat a {appName} szervereire. Ez magában foglalja a böngészőjéről szóló információkat, mely {appName} WebUI oldalakat használja, a hibajelentést, valamint az operációs rendszer adatait. Ezeket az információkat a funkciók és a hibajavítások rangsorolására használjuk fel.",
"AuthenticationMethodHelpText": "Felhasználónév és Jelszó szükséges a {appName}-hoz való hozzáféréshez",
"AnalyticsEnabledHelpText": "Névtelen használati és hibainformáció küldése {appName} szervereinek. Ez magában foglalja a böngészővel kapcsolatos információkat, a használt {appName} WebUI oldalakat, a hibajelentéseket, valamint az operációs rendszert és a futásidejű verziót. Ezeket az információkat a funkciók és a hibajavítások fontossági sorrendjének meghatározására fogjuk használni.",
"AuthenticationMethodHelpText": "Felhasználónév és jelszó szükséges a(z) {appName} eléréséhez",
"Authentication": "Hitelesítés",
"ApplyTags": "Címkék alkalmazása",
"Age": "Kor",
@@ -72,14 +72,14 @@
"All": "Összes",
"AcceptConfirmationModal": "Változás Megerősítése",
"Apply": "Alkamaz",
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges anélkül hogy az AppData ne törlődjön",
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges az alkalmazás adatok törlése nélkül",
"AppDataDirectory": "AppData Könyvtár",
"Added": "Hozzáadva",
"Actions": "Teendők",
"History": "Előzmény",
"HideAdvanced": "Haladó Elrejtése",
"HealthNoIssues": "Nincs hiba a konfigurációval",
"Health": "Állapot",
"Health": "Egészség",
"GeneralSettingsSummary": "Port, SSL, felhasználónév / jelszó, proxy, elemzések, és frissítések",
"ForMoreInformationOnTheIndividualDownloadClients": "Ha többet szeretnél megtudni a különböző letöltési kliensekről, kattints az információs gombokra.",
"Folder": "Mappa",
@@ -87,10 +87,10 @@
"Fixed": "Rögzített",
"FilterPlaceHolder": "Filmek Keresése",
"Filter": "Szűrő",
"Files": "Fájl",
"Files": "Fájlok",
"Filename": "Fájl név",
"Failed": "Sikertelen",
"ExistingTag": "Meglévő Címke",
"Failed": "Nem sikerült",
"ExistingTag": "Létező címke",
"Exception": "Kivétel",
"EventType": "Események Típusa",
"Events": "Események",
@@ -138,11 +138,11 @@
"Retention": "Visszatartás",
"Result": "Eredmény",
"RestoreBackup": "Biztonsági mentés visszaállítása",
"Restore": "Visszaállítás",
"Restore": "Visszaállít",
"RestartRequiredHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
"RestartProwlarr": "{appName} Újraindítása",
"RestartNow": "Újraindítás Most",
"Restart": "Újraindítás",
"Restart": "Újrakezd",
"ResetAPIKey": "API Kulcs visszaállítása",
"Reset": "Visszaállítás",
"RemovingTag": "Címke eltávolítása",
@@ -183,47 +183,47 @@
"OnHealthIssueHelpText": "Állapotprobléma",
"Ok": "Ok",
"OAuthPopupMessage": "A böngésződ blokkolja az előugró ablakokat",
"NoUpdatesAreAvailable": "Nincsenek elérhető frissítések",
"NoTagsHaveBeenAddedYet": "Még nem adtál hozzá címkéket",
"NoLogFiles": "Nincsen log fájl",
"NoLeaveIt": "Nem, hagyd így",
"NoChanges": "Nincsenek változások",
"NoChange": "Nincs változtatás",
"NoBackupsAreAvailable": "Nincs elérhető biztonsági mentés",
"NoUpdatesAreAvailable": "Nem érhetők el frissítések",
"NoTagsHaveBeenAddedYet": "Még nem adtak hozzá címkéket",
"NoLogFiles": "Nincsenek naplófájlok",
"NoLeaveIt": "Nem, Hagyd",
"NoChanges": "Nincs változás",
"NoChange": "Nincs változás",
"NoBackupsAreAvailable": "Nincsenek biztonsági mentések",
"New": "Új",
"NetCore": ".NET",
"Name": "Név",
"MovieIndexScrollTop": "Film Index: Görgess fel",
"MovieIndexScrollBottom": "Film Index: Görgess le",
"MoreInfo": "Több Információ",
"MoreInfo": "Több információ",
"Mode": "Mód",
"MIA": "MIA",
"Message": "Üzenet",
"Mechanism": "Mechanizmus",
"Mechanism": "Gépezet",
"Manual": "Kézi",
"MaintenanceRelease": "Karbantartási frissítés: hibajavítások és egyéb fejlesztések. További részletekért lásd: Github Commit History",
"MaintenanceRelease": "Karbantartási kiadás: hibajavítások és egyéb fejlesztések. További részletekért lásd: Github Commit History",
"Logs": "Naplók",
"LogLevelTraceHelpTextWarning": "A nyomkövetést csak ideiglenesen szabad engedélyezni",
"LogLevel": "Log Szint",
"LogLevelTraceHelpTextWarning": "A nyomkövetési naplózást csak ideiglenesen szabad engedélyezni",
"LogLevel": "Napló szint",
"Logging": "Loggolás",
"LogFiles": "Log Fájlok",
"LogFiles": "Naplófájlok",
"Level": "Szint",
"LaunchBrowserHelpText": " Nyisson meg egy böngészőt, és az alkalmazás indításakor lépjen a {appName} kezdőlapjára.",
"LastWriteTime": "Utolsó írási idő",
"Language": "Nyelv",
"KeyboardShortcuts": "Gyorsbillentyűk",
"KeyboardShortcuts": "Gyorsbillentyűket",
"Interval": "Intervallum",
"InteractiveSearch": "Interaktív Keresés",
"Info": "Infó",
"IndexerStatusCheckSingleClientMessage": "Indexerek elérhetetlenek a következő hiba miatt: {0}",
"Hostname": "Hosztnév",
"Host": "Hoszt",
"Grabbed": "Megfogva",
"Grabbed": "Megragadta",
"GeneralSettings": "Általános Beállítások",
"General": "Általános",
"UnableToLoadHistory": "Nem sikerült betölteni az előzményeket",
"UnableToLoadGeneralSettings": "Nem sikerült betölteni az általános beállításokat",
"UnableToLoadDownloadClients": "Nem sikerült betölteni a letöltőkliens(eke)t",
"DownloadClientsLoadError": "Nem sikerült betölteni a letöltőkliens(eke)t",
"UnableToLoadBackups": "Biztonsági mentés(ek) betöltése sikertelen",
"UnableToAddANewNotificationPleaseTryAgain": "Nem lehet új értesítést hozzáadni, próbálkozz újra.",
"UnableToAddANewIndexerPleaseTryAgain": "Nem lehet új indexert hozzáadni, próbálkozz újra.",
@@ -258,8 +258,8 @@
"IncludeHealthWarningsHelpText": "Tartalmazza a Állapot Figyelmeztetéseket",
"IllRestartLater": "Később Újraindítom",
"IgnoredAddresses": "Ignorált címek",
"YesCancel": "Igen, Mégsem",
"Warn": "Figyelmeztet",
"YesCancel": "Igen, elvet",
"Warn": "Figyelmeztetés",
"View": "Nézet",
"Version": "Verzió",
"Username": "Felhasználónév",
@@ -270,7 +270,7 @@
"Uptime": "Üzemidő",
"UpdateScriptPathHelpText": "Keresse meg az egyéni parancsfájl elérési útját, amely kibontott frissítési csomagot vesz fel, és kezeli a frissítési folyamat fennmaradó részét",
"Updates": "Frissítések",
"UpdateMechanismHelpText": "Használja a {appName} beépített frissítőjét vagy egy szkriptet",
"UpdateMechanismHelpText": "Használja a {appName} beépített frissítőjét vagy szkriptt",
"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ó.",
"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ó.",
"UpdateCheckStartupNotWritableMessage": "A frissítés nem telepíthető, mert a (z) „{0}” indítási mappát a „{1}” felhasználó nem írhatja.",
@@ -283,7 +283,7 @@
"TableOptions": "Táblázat Beállítások",
"ShowSearch": "Keresés(ek) megjelenítése",
"SetTags": "Címkék beállítása",
"NotificationTriggers": "Értesítés(ek) kiváltója",
"NotificationTriggers": "Értesítési triggerek",
"IndexerLongTermStatusCheckSingleClientMessage": "Az összes indexer elérhetetlen több mint 6 órája, meghibásodás miatt: {0}",
"IndexerLongTermStatusCheckAllClientMessage": "Az összes indexer elérhetetlen több mint 6 órája, meghibásodás miatt",
"SettingsLogSql": "SQL naplózás",
@@ -327,7 +327,7 @@
"Redirect": "Átirányítás",
"Reddit": "Reddit",
"HomePage": "Kezdőlap",
"FeatureRequests": "Funkció kérése",
"FeatureRequests": "Funkciókérés",
"Discord": "Discord",
"AppProfileSelectHelpText": "Az alkalmazásprofilok az RSS vezérlésére szolgálnak, Automatikus keresés és Interaktív keresés beállításai az alkalmazás szinkronizálásakor",
"UnableToAddANewApplicationPleaseTryAgain": "Nem lehet új alkalmazást hozzáadni, próbálkozzon újra.",
@@ -347,7 +347,7 @@
"Encoding": "Kódolás",
"Grabs": "Megfogások",
"Id": "Azonosító",
"NotificationTriggersHelpText": "Válaszd ki, hogy mely események indítsák el ezt az értesítést",
"NotificationTriggersHelpText": "Válassza ki, hogy mely események váltsák ki ezt az értesítést",
"Presets": "Előbeállítások",
"Privacy": "Titkosítás",
"Query": "Lekérdezés",
@@ -405,7 +405,7 @@
"QueryResults": "Lekérdezési eredmények",
"SemiPrivate": "Fél-Privát",
"TestAllIndexers": "Indexerek tesztelése",
"UnableToLoadApplicationList": "Nem sikerült betölteni az alkalmazáslistát",
"ApplicationsLoadError": "Nem sikerült betölteni az alkalmazáslistát",
"Url": "URL",
"UserAgentProvidedByTheAppThatCalledTheAPI": "Az API-t hívó alkalmazás biztosítja a User-Agent szolgáltatást",
"Website": "Weboldal",
@@ -444,8 +444,8 @@
"LastDuration": "Utolsó időtartam",
"LastExecution": "Utolsó végrehajtás",
"Parameters": "Paraméterek",
"Queued": "Sorba helyezve",
"Started": "Elkezdődött",
"Queued": "Sorban",
"Started": "Elindult",
"NextExecution": "Következő végrehajtás",
"ApplicationLongTermStatusCheckSingleClientMessage": "Az alkamazások elérhetetlenek több mint 6 órája az alábbi hiba miatt: {0}",
"ApplicationLongTermStatusCheckAllClientMessage": "Az összes alkalmazás elérhetetlen több mint 6 órája meghibásodás miatt",
@@ -454,13 +454,13 @@
"MappedCategories": "Térképezett kategóriák",
"DownloadClientCategory": "Letöltési kliens kategória",
"AuthenticationRequired": "Azonosítás szükséges",
"AuthenticationRequiredHelpText": "Módosítsd, hogy mely kérésekhez van szükség hitelesítésre. Ne változtasson, hacsak nem érti a kockázatokat.",
"AuthenticationRequiredWarning": "A hitelesítés nélküli távoli hozzáférés megakadályozása érdekében a {appName}nak mostantól engedélyezni kell a hitelesítést. Konfigurálja a hitelesítési módszert és a hitelesítési adatokat. Opcionálisan letilthatja a helyi címekről történő hitelesítést. További információkért tekintsd meg a GYIK-et.",
"AuthenticationRequiredHelpText": "Módosítsa, hogy mely kérésekhez van szükség hitelesítésre. Ne változtasson, hacsak nem érti a kockázatokat.",
"AuthenticationRequiredWarning": "A hitelesítés nélküli távoli hozzáférés megakadályozása érdekében a(z) {appName} alkalmazásnak engedélyeznie kell a hitelesítést. Opcionálisan letilthatja a helyi címekről történő hitelesítést.",
"TheLatestVersionIsAlreadyInstalled": "A {appName} legújabb verziója már telepítva van",
"Remove": "Eltávolítás",
"Replace": "Kicserél",
"ApplicationURL": "Alkalmazás URL",
"ApplicationUrlHelpText": "Az alkalmazás külső URL-címe, beleértve a http(s)://-t, a portot és az URL-alapot",
"ApplicationUrlHelpText": "Ennek az alkalmazásnak a külső URL-címe, beleértve a http-eket",
"More": "Több",
"Publisher": "Kiadó",
"ApplyChanges": "Változások alkalmazása",
@@ -495,12 +495,12 @@
"ConnectionLostToBackend": "A Radarr elvesztette kapcsolatát a háttérrendszerrel, a funkciók helyreállításához frissíts.",
"minutes": "percek",
"AddConnection": "Csatlakozás hozzáadása",
"NotificationStatusAllClientHealthCheckMessage": "Összes alkalmazás elérhetetlen hiba miatt",
"NotificationStatusAllClientHealthCheckMessage": "Az összes értesítés nem érhető el hibák miatt",
"NotificationStatusSingleClientHealthCheckMessage": "Az alkalmazás nem áll rendelkezésre az alábbi hibák miatt: {0}",
"AuthBasic": "Alap (böngésző előugró ablak)",
"AuthForm": "Űrlapok (bejelentkezési oldal)",
"DisabledForLocalAddresses": "Letiltva a helyi címeknél",
"None": "Nincs",
"None": "Egyik sem",
"ResetAPIKeyMessageText": "Biztos hogy vissza szeretnéd állítani az API-Kulcsod?",
"AuthenticationRequiredPasswordHelpTextWarning": "Adjon meg új jelszót",
"AuthenticationRequiredUsernameHelpTextWarning": "Adjon meg új felhasználónevet",
@@ -518,11 +518,21 @@
"AuthenticationMethodHelpTextWarning": "Kérjük, válasszon érvényes hitelesítési módot",
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Erősítsd meg az új jelszót",
"DefaultNameCopiedProfile": "{name} - Másolat",
"EditConnectionImplementation": "Csatlakozás hozzáadása - {megvalósítás neve}",
"EditConnectionImplementation": "Kapcsolat szerkesztése - {implementationName}",
"EditIndexerProxyImplementation": "Indexelő hozzáadása - {megvalósítás neve}",
"AddApplicationImplementation": "Csatlakozás hozzáadása - {implementationName}",
"AddIndexerProxyImplementation": "Indexelő hozzáadása - {implementationName}",
"EditIndexerImplementation": "Indexelő hozzáadása - {megvalósítás neve}",
"EditIndexerImplementation": "Indexelő szerkesztése {implementationName}",
"EditApplicationImplementation": "Csatlakozás hozzáadása - {megvalósítás neve}",
"EditDownloadClientImplementation": "Letöltési kliens hozzáadása {megvalósítási név}"
"EditDownloadClientImplementation": "Letöltési kliens szerkesztése {implementationName}",
"NoIndexersFound": "Nem található indexelő",
"NoDownloadClientsFound": "Nem találhatók letöltő kliensek",
"AdvancedSettingsShownClickToHide": "Haladó beállítások megjelenítve, kattints az elrejtéshez",
"AdvancedSettingsHiddenClickToShow": "Haladó beállítások rejtve, kattints a megjelenítéshez",
"AppUpdatedVersion": "{appName} frissítve lett `{version}` verzióra, ahhoz hogy a legutóbbi változtatások életbelépjenek, töltsd újra a {appName}-t",
"AddCategory": "Kategória hozzáadása",
"External": "Külső",
"NoHistoryFound": "Nem található előzmény",
"InvalidUILanguage": "A felhasználói felület érvénytelen nyelvre van állítva, javítsa ki, és mentse el a beállításait",
"ManageDownloadClients": "Letöltési kliensek kezelése"
}

View File

@@ -65,7 +65,7 @@
"Type": "Tegund",
"UnableToAddANewApplicationPleaseTryAgain": "Ekki er hægt að bæta við nýrri tilkynningu. Reyndu aftur.",
"UnableToLoadBackups": "Ekki er hægt að hlaða afrit",
"UnableToLoadDownloadClients": "Ekki er hægt að hlaða niður viðskiptavinum",
"DownloadClientsLoadError": "Ekki er hægt að hlaða niður viðskiptavinum",
"UnableToLoadGeneralSettings": "Ekki er hægt að hlaða almennar stillingar",
"UnableToLoadHistory": "Ekki er hægt að hlaða sögu",
"UnableToLoadNotifications": "Ekki er hægt að hlaða tilkynningar",
@@ -199,7 +199,7 @@
"CouldNotConnectSignalR": "Gat ekki tengst SignalR, HÍ mun ekki uppfæra",
"CustomFilters": "Sérsniðin síur",
"Dates": "Dagsetningar",
"DBMigration": "DB fólksflutningar",
"DatabaseMigration": "DB fólksflutningar",
"Delete": "Eyða",
"DeleteApplicationMessageText": "Ertu viss um að þú viljir eyða tilkynningunni „{0}“?",
"DeleteBackup": "Eyða afritun",

View File

@@ -139,7 +139,7 @@
"DeleteNotification": "Cancella Notifica",
"DeleteDownloadClient": "Cancella Client di Download",
"DeleteBackup": "Cancella Backup",
"DBMigration": "Migrazione DB",
"DatabaseMigration": "Migrazione DB",
"ConnectSettings": "Impostazioni Collegamento",
"ConnectionLost": "Connessione Persa",
"Component": "Componente",
@@ -240,7 +240,7 @@
"UnableToLoadNotifications": "Impossibile caricare le Notifiche",
"UnableToLoadHistory": "Impossibile caricare la storia",
"UnableToLoadGeneralSettings": "Impossibile caricare le impostazioni Generali",
"UnableToLoadDownloadClients": "Impossibile caricare i client di download",
"DownloadClientsLoadError": "Impossibile caricare i client di download",
"UnableToLoadBackups": "Impossibile caricare i backup",
"UnableToAddANewNotificationPleaseTryAgain": "Impossibile aggiungere una nuova notifica, riprova.",
"UnableToAddANewIndexerPleaseTryAgain": "Impossibile aggiungere un nuovo Indicizzatore, riprova.",
@@ -374,7 +374,7 @@
"SyncLevel": "Livello Sincronizzazione",
"IndexerProxy": "Proxy dell'Indicizzatore",
"Proxies": "Proxy",
"UnableToLoadApplicationList": "Impossibile careicare la lista applicazioni",
"ApplicationsLoadError": "Impossibile careicare la lista applicazioni",
"Website": "Sito",
"Privacy": "Privacy",
"SettingsIndexerLogging": "Logging Migliorato dell'Indicizzatore",

View File

@@ -100,7 +100,7 @@
"TagCannotBeDeletedWhileInUse": "使用中は削除できません",
"TagIsNotUsedAndCanBeDeleted": "タグは使用されておらず、削除できます",
"TestAll": "すべてテスト",
"UnableToLoadDownloadClients": "ダウンロードクライアントを読み込めません",
"DownloadClientsLoadError": "ダウンロードクライアントを読み込めません",
"UnableToLoadGeneralSettings": "一般設定を読み込めません",
"UpdateAutomaticallyHelpText": "アップデートを自動的にダウンロードしてインストールします。 SystemUpdatesから引き続きインストールできます。",
"Updates": "更新",
@@ -141,7 +141,7 @@
"UI": "UI",
"CouldNotConnectSignalR": "SignalRに接続できませんでした。UIは更新されません",
"Custom": "カスタム",
"DBMigration": "DB移行",
"DatabaseMigration": "DB移行",
"Delete": "削除",
"DeleteApplicationMessageText": "通知「{0}」を削除してもよろしいですか?",
"DeleteBackup": "バックアップを削除する",

View File

@@ -26,7 +26,7 @@
"Connections": "연결",
"CouldNotConnectSignalR": "SignalR에 연결할 수 없습니다. UI가 업데이트되지 않습니다.",
"Custom": "사용자 지정",
"DBMigration": "DB 마이그레이션",
"DatabaseMigration": "DB 마이그레이션",
"DeleteBackupMessageText": "백업 '{0}'을(를) 삭제하시겠습니까?",
"BackupNow": "지금 백업",
"Authentication": "인증",
@@ -160,7 +160,7 @@
"Title": "표제",
"Today": "오늘",
"UILanguageHelpTextWarning": "브라우저 새로 고침 필요",
"UnableToLoadDownloadClients": "다운로드 클라이언트를로드 할 수 없습니다.",
"DownloadClientsLoadError": "다운로드 클라이언트를로드 할 수 없습니다.",
"UnableToLoadHistory": "기록을로드 할 수 없습니다.",
"UnableToLoadTags": "태그를로드 할 수 없습니다.",
"UnableToLoadUISettings": "UI 설정을로드 할 수 없습니다.",

View File

@@ -81,7 +81,7 @@
"CouldNotConnectSignalR": "Kan geen verbinding maken met SignalR, gebruikersinterface wordt niet bijgewerkt",
"Custom": "Aangepast",
"CustomFilters": "Aangepaste Filters",
"DBMigration": "DB Migratie",
"DatabaseMigration": "DB Migratie",
"Database": "Databasis",
"Date": "Datum",
"Dates": "Datum en tijd",
@@ -388,7 +388,7 @@
"UnableToLoadAppProfiles": "Kan app-profielen niet laden",
"UnableToLoadBackups": "Kon geen veiligheidskopieën laden",
"UnableToLoadDevelopmentSettings": "Kan ontwikkelingsinstellingen niet laden",
"UnableToLoadDownloadClients": "Downloaders kunnen niet worden geladen",
"DownloadClientsLoadError": "Downloaders kunnen niet worden geladen",
"UnableToLoadGeneralSettings": "Kon Algemene instellingen niet inladen",
"UnableToLoadHistory": "Kon geschiedenis niet laden",
"UnableToLoadIndexerProxies": "Kan Indexeerder-proxy's niet laden",

View File

@@ -121,7 +121,7 @@
"Custom": "Zwyczaj",
"Date": "Data",
"Dates": "Daktyle",
"DBMigration": "Migracja bazy danych",
"DatabaseMigration": "Migracja bazy danych",
"DeleteApplicationMessageText": "Czy na pewno chcesz usunąć powiadomienie „{0}”?",
"DeleteBackup": "Usuń kopię zapasową",
"DeleteBackupMessageText": "Czy na pewno chcesz usunąć kopię zapasową „{0}”?",
@@ -262,7 +262,7 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Nie można dodać nowego indeksatora, spróbuj ponownie.",
"UnableToAddANewNotificationPleaseTryAgain": "Nie można dodać nowego powiadomienia, spróbuj ponownie.",
"UnableToLoadBackups": "Nie można załadować kopii zapasowych",
"UnableToLoadDownloadClients": "Nie można załadować klientów pobierania",
"DownloadClientsLoadError": "Nie można załadować klientów pobierania",
"UnableToLoadGeneralSettings": "Nie można załadować ustawień ogólnych",
"UnableToLoadHistory": "Nie można załadować historii",
"UnableToLoadTags": "Nie można załadować tagów",

View File

@@ -170,7 +170,7 @@
"DeleteNotification": "Eliminar notificação",
"DeleteDownloadClient": "Eliminar cliente de transferências",
"DeleteBackup": "Eliminar cópia de segurança",
"DBMigration": "Migração da base de dados",
"DatabaseMigration": "Migração da base de dados",
"ConnectSettings": "Definições de ligação",
"CloneProfile": "Clonar perfil",
"ChangeHasNotBeenSavedYet": "A mudança ainda não foi guardada",
@@ -268,7 +268,7 @@
"UnableToLoadNotifications": "Não foi possível carregar as notificações",
"UnableToLoadHistory": "Não foi possível carregar o histórico",
"UnableToLoadGeneralSettings": "Não foi possível carregar as definições gerais",
"UnableToLoadDownloadClients": "Não foi possível carregar os clientes de transferências",
"DownloadClientsLoadError": "Não foi possível carregar os clientes de transferências",
"UnableToAddANewDownloadClientPleaseTryAgain": "Não foi possível adicionar um novo cliente de transferências, tenta novamente.",
"UnableToLoadBackups": "Não foi possível carregar as cópias de segurança",
"UnableToAddANewNotificationPleaseTryAgain": "Não foi possível adicionar uma nova notificação, tenta novamente.",
@@ -390,7 +390,7 @@
"InstanceName": "Nome da Instancia",
"InstanceNameHelpText": "Nome da instância na aba e nome da aplicação para Syslog",
"UnableToLoadIndexerProxies": "Incapaz de ler o indexador de proxies",
"UnableToLoadApplicationList": "Não foi possível carregar a lista de aplicações",
"ApplicationsLoadError": "Não foi possível carregar a lista de aplicações",
"ApplicationLongTermStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a erros á mais de 6 horas",
"ApplicationLongTermStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a erros à mais de 6 horas: {0}",
"Duration": "Duração",

View File

@@ -93,7 +93,7 @@
"CouldNotConnectSignalR": "Não é possível conectar ao SignalR, a interface não atualizará",
"Custom": "Personalizado",
"CustomFilters": "Filtros personalizados",
"DBMigration": "Migração de banco de dados",
"DatabaseMigration": "Migração de banco de dados",
"Database": "Banco de dados",
"Date": "Data",
"Dates": "Datas",
@@ -461,10 +461,10 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Não foi possível adicionar um novo proxy indexador, tente novamente.",
"UnableToAddANewNotificationPleaseTryAgain": "Não foi possível adicionar uma nova notificação. Tente novamente.",
"UnableToLoadAppProfiles": "Não foi possível carregar os perfis de aplicativos",
"UnableToLoadApplicationList": "Não é possível carregar a lista de aplicativos",
"ApplicationsLoadError": "Não é possível carregar a lista de aplicativos",
"UnableToLoadBackups": "Não foi possível carregar os backups",
"UnableToLoadDevelopmentSettings": "Não foi possível carregar as configurações de desenvolvimento",
"UnableToLoadDownloadClients": "Não foi possível carregar os clientes de download",
"DownloadClientsLoadError": "Não foi possível carregar os clientes de download",
"UnableToLoadGeneralSettings": "Não foi possível carregar as configurações gerais",
"UnableToLoadHistory": "Não foi possível carregar o histórico",
"UnableToLoadIndexerProxies": "Não foi possível carregar proxies do indexador",
@@ -604,5 +604,6 @@
"InvalidUILanguage": "Sua UI está definida com um idioma inválido, corrija-a e salve suas configurações",
"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+)",
"DownloadClientQbittorrentSettingsContentLayout": "Layout de Conteúdo",
"IndexerId": "ID do Indexador"
"IndexerId": "ID do Indexador",
"DownloadClientAriaSettingsDirectoryHelpText": "Local opcional para colocar downloads, deixe em branco para usar o local padrão do Aria2"
}

View File

@@ -179,7 +179,7 @@
"Today": "Astăzi",
"UnableToAddANewNotificationPleaseTryAgain": "Imposibil de adăugat o nouă notificare, încercați din nou.",
"UnableToLoadBackups": "Imposibil de încărcat copiile de rezervă",
"UnableToLoadDownloadClients": "Nu se pot încărca clienții de descărcare",
"DownloadClientsLoadError": "Nu se pot încărca clienții de descărcare",
"URLBase": "Baza URL",
"UrlBaseHelpText": "Pentru suport proxy invers, implicit este gol",
"Usenet": "Usenet",
@@ -228,7 +228,7 @@
"ChangeHasNotBeenSavedYet": "Modificarea nu a fost încă salvată",
"CloneProfile": "Clonați profil",
"NoLeaveIt": "Nu, lasă-l",
"DBMigration": "Migrarea BD",
"DatabaseMigration": "Migrarea BD",
"DeleteBackupMessageText": "Sigur doriți să ștergeți copia de siguranță „{0}”?",
"DeleteTagMessageText": "Sigur doriți să ștergeți eticheta '{label}'?",
"EnableInteractiveSearch": "Activați căutarea interactivă",

View File

@@ -118,7 +118,7 @@
"CustomFilters": "Настраиваемые фильтры",
"Date": "Дата",
"Dates": "Даты",
"DBMigration": "Перенос БД",
"DatabaseMigration": "Перенос БД",
"DeleteNotification": "Удалить уведомление",
"DeleteNotificationMessageText": "Вы уверены, что хотите удалить уведомление '{name}'?",
"DeleteTag": "Удалить тэг",
@@ -256,7 +256,7 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Не удалось добавить новый индексатор, повторите попытку.",
"UnableToAddANewNotificationPleaseTryAgain": "Невозможно добавить новое уведомление, попробуйте еще раз.",
"UnableToLoadBackups": "Невозможно загрузить резервные копии",
"UnableToLoadDownloadClients": "Невозможно загрузить загрузчики",
"DownloadClientsLoadError": "Невозможно загрузить загрузчики",
"UnableToLoadGeneralSettings": "Невозможно загрузить общие настройки",
"UnableToLoadNotifications": "Невозможно загрузить уведомления",
"UnableToLoadUISettings": "Не удалось загрузить настройки пользовательского интерфейса",

View File

@@ -169,7 +169,7 @@
"BindAddress": "Bindningsadress",
"Branch": "Gren",
"CloseCurrentModal": "Stäng nuvarande modal",
"DBMigration": "DB Migration",
"DatabaseMigration": "DB Migration",
"DeleteApplicationMessageText": "Är du säker på att du vill radera aviseringen '{0}'?",
"Discord": "Discord",
"Donations": "Donationer",
@@ -308,7 +308,7 @@
"ApplicationStatusCheckAllClientMessage": "Samtliga listor otillgängliga på grund av fel",
"LogLevel": "Loggnivå",
"NoLogFiles": "Inga loggfiler",
"UnableToLoadDownloadClients": "Det gick inte att ladda nedladdningsklienter",
"DownloadClientsLoadError": "Det gick inte att ladda nedladdningsklienter",
"UpdateMechanismHelpText": "Använd {appName}s inbyggda uppdaterare eller ett skript",
"AddDownloadClientToProwlarr": "Lägg till en nedladdningsklient tillåter {appName} att sända nyutgåvor direkt från UI:t samtidigt som en manuell sökning genomförs.",
"UnableToLoadIndexerProxies": "Kunde inte ladda Indexer Proxies",

View File

@@ -58,7 +58,7 @@
"UILanguageHelpTextWarning": "จำเป็นต้องโหลดเบราว์เซอร์ใหม่",
"UnableToAddANewIndexerPleaseTryAgain": "ไม่สามารถเพิ่มตัวสร้างดัชนีใหม่ได้โปรดลองอีกครั้ง",
"UnableToAddANewIndexerProxyPleaseTryAgain": "ไม่สามารถเพิ่มตัวสร้างดัชนีใหม่ได้โปรดลองอีกครั้ง",
"UnableToLoadDownloadClients": "ไม่สามารถโหลดไคลเอนต์ดาวน์โหลด",
"DownloadClientsLoadError": "ไม่สามารถโหลดไคลเอนต์ดาวน์โหลด",
"UpdateCheckUINotWritableMessage": "ไม่สามารถติดตั้งการอัปเดตเนื่องจากโฟลเดอร์ UI \"{0}\" ไม่สามารถเขียนได้โดยผู้ใช้ \"{1}\"",
"Updates": "อัปเดต",
"UpdateScriptPathHelpText": "พา ธ ไปยังสคริปต์แบบกำหนดเองที่ใช้แพ็กเกจโปรแกรมปรับปรุงที่แยกออกมาและจัดการส่วนที่เหลือของกระบวนการอัพเดต",
@@ -139,7 +139,7 @@
"CustomFilters": "ตัวกรองที่กำหนดเอง",
"Date": "วันที่",
"Dates": "วันที่",
"DBMigration": "การย้ายฐานข้อมูล",
"DatabaseMigration": "การย้ายฐานข้อมูล",
"Delete": "ลบ",
"DeleteApplicationMessageText": "แน่ใจไหมว่าต้องการลบการแจ้งเตือน \"{0}\"",
"DeleteBackup": "ลบข้อมูลสำรอง",

View File

@@ -21,7 +21,7 @@
"Files": "Dosyalar",
"Filename": "Dosya adı",
"AppDataLocationHealthCheckMessage": "Güncellemede AppData'nın silinmesini önlemek için güncelleme mümkün olmayacak",
"Actions": "Etkiler",
"Actions": "Eylemler",
"About": "Hakkında",
"View": "Görünüm",
"Updates": "Güncellemeler",
@@ -106,7 +106,7 @@
"DeleteTag": "Etiketi Sil",
"BindAddressHelpText": "Tüm arayüzler için geçerli IP4 adresi veya '*'",
"ConnectSettings": "Bağlantı Ayarları",
"DBMigration": "DB Geçişi",
"DatabaseMigration": "DB Geçişi",
"DeleteApplicationMessageText": "'{0}' bildirimini silmek istediğinizden emin misiniz?",
"DeleteBackup": "Yedeklemeyi Sil",
"DeleteBackupMessageText": "'{0}' yedeğini silmek istediğinizden emin misiniz?",
@@ -301,7 +301,7 @@
"UpdateAutomaticallyHelpText": "Güncellemeleri otomatik olarak indirin ve yükleyin. Yine de Sistem'den yükleyebileceksiniz: Güncellemeler",
"UpdateMechanismHelpText": "{appName}'ın yerleşik güncelleyicisini veya bir komut dosyasını kullanın",
"ShowSearch": "Aramayı Göster",
"UnableToLoadDownloadClients": "İndirme istemcileri yüklenemiyor",
"DownloadClientsLoadError": "İndirme istemcileri yüklenemiyor",
"UnableToLoadGeneralSettings": "Genel ayarlar yüklenemiyor",
"Automatic": "Otomatik",
"AutomaticSearch": "Otomatik Arama",

View File

@@ -29,7 +29,7 @@
"Database": "База даних",
"Date": "Дата",
"Dates": "Дати",
"DBMigration": "Міграція БД",
"DatabaseMigration": "Міграція БД",
"DeleteBackup": "Видалити резервну копію",
"DeleteBackupMessageText": "Ви впевнені, що хочете видалити резервну копію '{0}'?",
"DeleteDownloadClient": "Видалити клієнт завантаження",
@@ -72,7 +72,7 @@
"SSLCertPasswordHelpText": "Пароль для файлу pfx",
"TestAll": "Перевірити все",
"Type": "Тип",
"UnableToLoadDownloadClients": "Не вдалося завантажити клієнти для завантаження",
"DownloadClientsLoadError": "Не вдалося завантажити клієнти для завантаження",
"UnableToLoadGeneralSettings": "Не вдалося завантажити загальні налаштування",
"UnableToLoadHistory": "Не вдалося завантажити історію",
"UnableToLoadIndexers": "Не вдалося завантажити індексатори",

View File

@@ -6,7 +6,7 @@
"CustomFilters": "Bộ lọc tùy chỉnh",
"Date": "Ngày",
"Dates": "ngày",
"DBMigration": "Di chuyển DB",
"DatabaseMigration": "Di chuyển DB",
"NoBackupsAreAvailable": "Không có bản sao lưu nào",
"NoChanges": "Không thay đổi",
"NoLeaveIt": "Không để nó",
@@ -215,7 +215,7 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "Không thể thêm trình chỉ mục mới, vui lòng thử lại.",
"UnableToAddANewNotificationPleaseTryAgain": "Không thể thêm thông báo mới, vui lòng thử lại.",
"UnableToLoadBackups": "Không thể tải các bản sao lưu",
"UnableToLoadDownloadClients": "Không thể tải ứng dụng khách tải xuống",
"DownloadClientsLoadError": "Không thể tải ứng dụng khách tải xuống",
"UnableToLoadGeneralSettings": "Không thể tải Cài đặt chung",
"UnableToLoadHistory": "Không thể tải lịch sử",
"UnableToLoadNotifications": "Không thể tải thông báo",

View File

@@ -92,7 +92,7 @@
"CouldNotConnectSignalR": "无法连接至SignalR不会升级UI",
"Custom": "自定义",
"CustomFilters": "自定义过滤器",
"DBMigration": "数据库迁移版本",
"DatabaseMigration": "数据库迁移版本",
"Database": "数据库",
"Date": "日期",
"Dates": "日期",
@@ -451,10 +451,9 @@
"UnableToAddANewIndexerProxyPleaseTryAgain": "无法添加搜刮器,请稍后重试。",
"UnableToAddANewNotificationPleaseTryAgain": "无法添加新通知,请稍后重试。",
"UnableToLoadAppProfiles": "无法加载应用配置",
"UnableToLoadApplicationList": "123",
"UnableToLoadBackups": "无法加载备份",
"UnableToLoadDevelopmentSettings": "无法加载开发设置",
"UnableToLoadDownloadClients": "无法加载下载客户端",
"DownloadClientsLoadError": "无法加载下载客户端",
"UnableToLoadGeneralSettings": "无法加载通用设置",
"UnableToLoadHistory": "无法加载历史记录",
"UnableToLoadIndexerProxies": "无法加载索引器代理",

View File

@@ -108,47 +108,42 @@ namespace NzbDrone.Core.Notifications.Email
private void Send(MimeMessage email, EmailSettings settings)
{
using (var client = new SmtpClient())
using var client = new SmtpClient();
client.Timeout = 10000;
var useEncyption = (EmailEncryptionType)settings.UseEncryption;
var serverOption = useEncyption switch
{
client.Timeout = 10000;
EmailEncryptionType.Always => settings.Port == 465
? SecureSocketOptions.SslOnConnect
: SecureSocketOptions.StartTls,
EmailEncryptionType.Never => SecureSocketOptions.None,
_ => SecureSocketOptions.Auto
};
var serverOption = SecureSocketOptions.Auto;
client.ServerCertificateValidationCallback = _certificateValidationService.ShouldByPassValidationError;
if (settings.RequireEncryption)
{
if (settings.Port == 465)
{
serverOption = SecureSocketOptions.SslOnConnect;
}
else
{
serverOption = SecureSocketOptions.StartTls;
}
}
_logger.Debug("Connecting to mail server");
client.ServerCertificateValidationCallback = _certificateValidationService.ShouldByPassValidationError;
client.Connect(settings.Server, settings.Port, serverOption);
_logger.Debug("Connecting to mail server");
if (!string.IsNullOrWhiteSpace(settings.Username))
{
_logger.Debug("Authenticating to mail server");
client.Connect(settings.Server, settings.Port, serverOption);
if (!string.IsNullOrWhiteSpace(settings.Username))
{
_logger.Debug("Authenticating to mail server");
client.Authenticate(settings.Username, settings.Password);
}
_logger.Debug("Sending to mail server");
client.Send(email);
_logger.Debug("Sent to mail server, disconnecting");
client.Disconnect(true);
_logger.Debug("Disconnecting from mail server");
client.Authenticate(settings.Username, settings.Password);
}
_logger.Debug("Sending to mail server");
client.Send(email);
_logger.Debug("Sent to mail server, disconnecting");
client.Disconnect(true);
_logger.Debug("Disconnecting from mail server");
}
private MailboxAddress ParseAddress(string type, string address)

View File

@@ -44,8 +44,8 @@ namespace NzbDrone.Core.Notifications.Email
[FieldDefinition(1, Label = "Port")]
public int Port { get; set; }
[FieldDefinition(2, Label = "Require Encryption", HelpText = "Require SSL (Port 465 only) or StartTLS (any other port)", Type = FieldType.Checkbox)]
public bool RequireEncryption { get; set; }
[FieldDefinition(2, Label = "NotificationsEmailSettingsUseEncryption", HelpText = "NotificationsEmailSettingsUseEncryptionHelpText", Type = FieldType.Select, SelectOptions = typeof(EmailEncryptionType))]
public int UseEncryption { get; set; }
[FieldDefinition(3, Label = "Username", HelpText = "Username", Type = FieldType.Textbox, Privacy = PrivacyLevel.UserName)]
public string Username { get; set; }
@@ -70,4 +70,11 @@ namespace NzbDrone.Core.Notifications.Email
return new NzbDroneValidationResult(Validator.Validate(this));
}
}
public enum EmailEncryptionType
{
Preferred = 0,
Always = 1,
Never = 2
}
}

View File

@@ -86,9 +86,9 @@ namespace NzbDrone.Core.Profiles
var qualityProfile = new AppSyncProfile
{
Name = name,
EnableRss = true,
EnableAutomaticSearch = true,
EnableInteractiveSearch = true,
EnableRss = true,
MinimumSeeders = 1
};

View File

@@ -107,6 +107,11 @@ namespace NzbDrone.Core.Update
var updateSandboxFolder = _appFolderInfo.GetUpdateSandboxFolder();
if (_diskProvider.GetTotalSize(updateSandboxFolder) < 1.Gigabytes())
{
_logger.Warn("Temporary location '{0}' has less than 1 GB free space, Prowlarr may not be able to update itself.", updateSandboxFolder);
}
var packageDestination = Path.Combine(updateSandboxFolder, updatePackage.FileName);
if (_diskProvider.FolderExists(updateSandboxFolder))

View File

@@ -9,8 +9,8 @@ namespace Prowlarr.Api.V1.Profiles.App
{
public string Name { get; set; }
public bool EnableRss { get; set; }
public bool EnableInteractiveSearch { get; set; }
public bool EnableAutomaticSearch { get; set; }
public bool EnableInteractiveSearch { get; set; }
public int MinimumSeeders { get; set; }
}
@@ -28,8 +28,8 @@ namespace Prowlarr.Api.V1.Profiles.App
Id = model.Id,
Name = model.Name,
EnableRss = model.EnableRss,
EnableInteractiveSearch = model.EnableInteractiveSearch,
EnableAutomaticSearch = model.EnableAutomaticSearch,
EnableInteractiveSearch = model.EnableInteractiveSearch,
MinimumSeeders = model.MinimumSeeders
};
}
@@ -46,8 +46,8 @@ namespace Prowlarr.Api.V1.Profiles.App
Id = resource.Id,
Name = resource.Name,
EnableRss = resource.EnableRss,
EnableInteractiveSearch = resource.EnableInteractiveSearch,
EnableAutomaticSearch = resource.EnableAutomaticSearch,
EnableInteractiveSearch = resource.EnableInteractiveSearch,
MinimumSeeders = resource.MinimumSeeders
};
}

View File

@@ -4013,10 +4013,10 @@
"enableRss": {
"type": "boolean"
},
"enableInteractiveSearch": {
"enableAutomaticSearch": {
"type": "boolean"
},
"enableAutomaticSearch": {
"enableInteractiveSearch": {
"type": "boolean"
},
"minimumSeeders": {