mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2026-04-17 21:44:48 -04:00
Compare commits
18 Commits
v1.13.0.42
...
v1.13.1.42
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f7bf21df68 | ||
|
|
d764e3405d | ||
|
|
16baceb784 | ||
|
|
5d2b80d15a | ||
|
|
a20a81f424 | ||
|
|
ebb66e9086 | ||
|
|
cb8797693e | ||
|
|
255c6335ae | ||
|
|
155cd53dcd | ||
|
|
ae70a96c10 | ||
|
|
16c0daf090 | ||
|
|
34c78c5a9d | ||
|
|
dd5b108ffd | ||
|
|
0b83986255 | ||
|
|
2bd25fb6f3 | ||
|
|
0f5eb5d3a3 | ||
|
|
c9434c61e3 | ||
|
|
ee969b7a06 |
@@ -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)'
|
||||
|
||||
@@ -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 }],
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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}>
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -84,7 +84,7 @@ class DownloadClientSettings extends Component {
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('ManageDownloadClients')}
|
||||
label={translate('ManageClients')}
|
||||
iconName={icons.MANAGE}
|
||||
onPress={this.onManageDownloadClientsPress}
|
||||
/>
|
||||
|
||||
@@ -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}>
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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')}
|
||||
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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": "Индекс на филма: Превъртане отдолу",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": "Ερώτηση",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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}'?",
|
||||
|
||||
@@ -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}' द्वारा लिखने योग्य नहीं है।",
|
||||
|
||||
@@ -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 szkriptjét",
|
||||
"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"
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
"TagCannotBeDeletedWhileInUse": "使用中は削除できません",
|
||||
"TagIsNotUsedAndCanBeDeleted": "タグは使用されておらず、削除できます",
|
||||
"TestAll": "すべてテスト",
|
||||
"UnableToLoadDownloadClients": "ダウンロードクライアントを読み込めません",
|
||||
"DownloadClientsLoadError": "ダウンロードクライアントを読み込めません",
|
||||
"UnableToLoadGeneralSettings": "一般設定を読み込めません",
|
||||
"UpdateAutomaticallyHelpText": "アップデートを自動的にダウンロードしてインストールします。 System:Updatesから引き続きインストールできます。",
|
||||
"Updates": "更新",
|
||||
@@ -141,7 +141,7 @@
|
||||
"UI": "UI",
|
||||
"CouldNotConnectSignalR": "SignalRに接続できませんでした。UIは更新されません",
|
||||
"Custom": "カスタム",
|
||||
"DBMigration": "DB移行",
|
||||
"DatabaseMigration": "DB移行",
|
||||
"Delete": "削除",
|
||||
"DeleteApplicationMessageText": "通知「{0}」を削除してもよろしいですか?",
|
||||
"DeleteBackup": "バックアップを削除する",
|
||||
|
||||
@@ -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 설정을로드 할 수 없습니다.",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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ă",
|
||||
|
||||
@@ -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": "Не удалось загрузить настройки пользовательского интерфейса",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": "ลบข้อมูลสำรอง",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": "Не вдалося завантажити індексатори",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": "无法加载索引器代理",
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,9 +86,9 @@ namespace NzbDrone.Core.Profiles
|
||||
var qualityProfile = new AppSyncProfile
|
||||
{
|
||||
Name = name,
|
||||
EnableRss = true,
|
||||
EnableAutomaticSearch = true,
|
||||
EnableInteractiveSearch = true,
|
||||
EnableRss = true,
|
||||
MinimumSeeders = 1
|
||||
};
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
};
|
||||
}
|
||||
|
||||
@@ -4013,10 +4013,10 @@
|
||||
"enableRss": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"enableInteractiveSearch": {
|
||||
"enableAutomaticSearch": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"enableAutomaticSearch": {
|
||||
"enableInteractiveSearch": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"minimumSeeders": {
|
||||
|
||||
Reference in New Issue
Block a user