mirror of
https://github.com/Readarr/Readarr.git
synced 2026-03-28 18:05:51 -04:00
Compare commits
69 Commits
v0.3.8.226
...
v0.3.14.23
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cf415e61de | ||
|
|
9865e92cea | ||
|
|
1cf956a9d9 | ||
|
|
8989c55c8c | ||
|
|
dc83e0127e | ||
|
|
34eb312426 | ||
|
|
9d5cdebdb2 | ||
|
|
a0ab224acd | ||
|
|
05aa35a54d | ||
|
|
ca7f8775f5 | ||
|
|
2a01e9b445 | ||
|
|
7d30c7d1ea | ||
|
|
50be87e5a4 | ||
|
|
0572d1ac80 | ||
|
|
d2240514d7 | ||
|
|
ad47dc032d | ||
|
|
6c6df7d7d9 | ||
|
|
2121204064 | ||
|
|
61004ea33f | ||
|
|
54c1c7862e | ||
|
|
43dfdc8bf5 | ||
|
|
0d1ae0ca4e | ||
|
|
9902889a30 | ||
|
|
04d7061030 | ||
|
|
fd201912a9 | ||
|
|
c412701a3d | ||
|
|
7451a66365 | ||
|
|
a6431fdb0b | ||
|
|
060b133f6d | ||
|
|
5ed13b942b | ||
|
|
89f3d8167b | ||
|
|
77b027374f | ||
|
|
650490abb2 | ||
|
|
7d2e215d61 | ||
|
|
65ff890c74 | ||
|
|
50c0b0dbaa | ||
|
|
d5f36d0144 | ||
|
|
fab7558bd4 | ||
|
|
3dc86b3a01 | ||
|
|
24ad6134e3 | ||
|
|
033f8c40af | ||
|
|
4c73a619eb | ||
|
|
3ca798e983 | ||
|
|
d9827fd6a6 | ||
|
|
f4f03a853f | ||
|
|
4f4e4bf2ca | ||
|
|
413a70a312 | ||
|
|
a8f2b91010 | ||
|
|
68a4ee6000 | ||
|
|
5196ce311b | ||
|
|
ae92b22727 | ||
|
|
0bccffef01 | ||
|
|
bca899b9c0 | ||
|
|
2bb576a94b | ||
|
|
bb49949853 | ||
|
|
a093061b29 | ||
|
|
df876707c4 | ||
|
|
2af33143ba | ||
|
|
c3c5a47776 | ||
|
|
a21abe0838 | ||
|
|
a32f5f6639 | ||
|
|
4cd45ecc21 | ||
|
|
2c8e0b1ca4 | ||
|
|
bd25c9e3e0 | ||
|
|
ee64b8788b | ||
|
|
7aeada2089 | ||
|
|
e188c9aac0 | ||
|
|
a3ae2359f5 | ||
|
|
5b92905dd4 |
@@ -9,13 +9,13 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '0.3.8'
|
||||
majorVersion: '0.3.14'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
readarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
|
||||
sentryOrg: 'servarr'
|
||||
sentryUrl: 'https://sentry.servarr.com'
|
||||
dotnetVersion: '6.0.413'
|
||||
dotnetVersion: '6.0.417'
|
||||
nodeVersion: '16.X'
|
||||
innoVersion: '6.2.0'
|
||||
windowsImage: 'windows-2022'
|
||||
|
||||
@@ -338,4 +338,8 @@ Queue.propTypes = {
|
||||
onRemoveSelectedPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
Queue.defaultProps = {
|
||||
count: 0
|
||||
};
|
||||
|
||||
export default Queue;
|
||||
|
||||
@@ -44,6 +44,10 @@
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.filterIcon {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.authorNavigationButtons {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
|
||||
@@ -6,6 +6,7 @@ interface CssExports {
|
||||
'authorUpButton': string;
|
||||
'contentContainer': string;
|
||||
'errorMessage': string;
|
||||
'filterIcon': string;
|
||||
'innerContentBody': string;
|
||||
'metadataMessage': string;
|
||||
'selectedTab': string;
|
||||
|
||||
@@ -239,9 +239,14 @@ class AuthorDetails extends Component {
|
||||
saveError,
|
||||
isDeleting,
|
||||
deleteError,
|
||||
statistics
|
||||
statistics = {}
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
bookFileCount = 0,
|
||||
totalBookCount = 0
|
||||
} = statistics;
|
||||
|
||||
const {
|
||||
isOrganizeModalOpen,
|
||||
isRetagModalOpen,
|
||||
@@ -435,7 +440,7 @@ class AuthorDetails extends Component {
|
||||
className={styles.tab}
|
||||
selectedClassName={styles.selectedTab}
|
||||
>
|
||||
{translate('BooksTotal', [statistics.totalBookCount])}
|
||||
{translate('BooksTotal', [totalBookCount])}
|
||||
</Tab>
|
||||
|
||||
<Tab
|
||||
@@ -463,7 +468,7 @@ class AuthorDetails extends Component {
|
||||
className={styles.tab}
|
||||
selectedClassName={styles.selectedTab}
|
||||
>
|
||||
{translate('FilesTotal', [statistics.bookFileCount])}
|
||||
{translate('FilesTotal', [bookFileCount])}
|
||||
</Tab>
|
||||
|
||||
{
|
||||
|
||||
@@ -136,8 +136,9 @@
|
||||
}
|
||||
|
||||
.title {
|
||||
font-weight: 300;
|
||||
font-size: 30px;
|
||||
line-height: 50px;
|
||||
line-height: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
9
frontend/src/Author/History/AuthorHistoryTable.css
Normal file
9
frontend/src/Author/History/AuthorHistoryTable.css
Normal file
@@ -0,0 +1,9 @@
|
||||
.container {
|
||||
border: 1px solid var(--borderColor);
|
||||
border-radius: 4px;
|
||||
background-color: var(--inputBackgroundColor);
|
||||
|
||||
&:last-of-type {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
7
frontend/src/Author/History/AuthorHistoryTable.css.d.ts
vendored
Normal file
7
frontend/src/Author/History/AuthorHistoryTable.css.d.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
// This file is automatically generated.
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'container': string;
|
||||
}
|
||||
export const cssExports: CssExports;
|
||||
export default cssExports;
|
||||
@@ -1,6 +1,7 @@
|
||||
import React from 'react';
|
||||
import AuthorHistoryContentConnector from 'Author/History/AuthorHistoryContentConnector';
|
||||
import AuthorHistoryTableContent from 'Author/History/AuthorHistoryTableContent';
|
||||
import styles from './AuthorHistoryTable.css';
|
||||
|
||||
function AuthorHistoryTable(props) {
|
||||
const {
|
||||
@@ -8,10 +9,12 @@ function AuthorHistoryTable(props) {
|
||||
} = props;
|
||||
|
||||
return (
|
||||
<AuthorHistoryContentConnector
|
||||
component={AuthorHistoryTableContent}
|
||||
{...otherProps}
|
||||
/>
|
||||
<div className={styles.container}>
|
||||
<AuthorHistoryContentConnector
|
||||
component={AuthorHistoryTableContent}
|
||||
{...otherProps}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
.blankpad {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
padding-left: 2em;
|
||||
}
|
||||
7
frontend/src/Author/History/AuthorHistoryTableContent.css.d.ts
vendored
Normal file
7
frontend/src/Author/History/AuthorHistoryTableContent.css.d.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
// This file is automatically generated.
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'blankpad': string;
|
||||
}
|
||||
export const cssExports: CssExports;
|
||||
export default cssExports;
|
||||
@@ -7,6 +7,7 @@ import TableBody from 'Components/Table/TableBody';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import AuthorHistoryRowConnector from './AuthorHistoryRowConnector';
|
||||
import styles from './AuthorHistoryTableContent.css';
|
||||
|
||||
const columns = [
|
||||
{
|
||||
@@ -64,7 +65,7 @@ class AuthorHistoryTableContent extends Component {
|
||||
const hasItems = !!items.length;
|
||||
|
||||
return (
|
||||
<>
|
||||
<div>
|
||||
{
|
||||
isFetching &&
|
||||
<LoadingIndicator />
|
||||
@@ -79,7 +80,7 @@ class AuthorHistoryTableContent extends Component {
|
||||
|
||||
{
|
||||
isPopulated && !hasItems && !error &&
|
||||
<div>
|
||||
<div className={styles.blankpad}>
|
||||
{translate('NoHistory')}
|
||||
</div>
|
||||
}
|
||||
@@ -103,7 +104,7 @@ class AuthorHistoryTableContent extends Component {
|
||||
</TableBody>
|
||||
</Table>
|
||||
}
|
||||
</>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,9 +99,14 @@ class BookDetails extends Component {
|
||||
nextBook,
|
||||
isSearching,
|
||||
onRefreshPress,
|
||||
onSearchPress
|
||||
onSearchPress,
|
||||
statistics = {}
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
bookFileCount = 0
|
||||
} = statistics;
|
||||
|
||||
const {
|
||||
isOrganizeModalOpen,
|
||||
isRetagModalOpen,
|
||||
@@ -238,21 +243,21 @@ class BookDetails extends Component {
|
||||
className={styles.tab}
|
||||
selectedClassName={styles.selectedTab}
|
||||
>
|
||||
History
|
||||
{translate('History')}
|
||||
</Tab>
|
||||
|
||||
<Tab
|
||||
className={styles.tab}
|
||||
selectedClassName={styles.selectedTab}
|
||||
>
|
||||
Search
|
||||
{translate('Search')}
|
||||
</Tab>
|
||||
|
||||
<Tab
|
||||
className={styles.tab}
|
||||
selectedClassName={styles.selectedTab}
|
||||
>
|
||||
Files
|
||||
{translate('FilesTotal', [bookFileCount])}
|
||||
</Tab>
|
||||
|
||||
{
|
||||
@@ -335,6 +340,7 @@ BookDetails.propTypes = {
|
||||
ratings: PropTypes.object.isRequired,
|
||||
images: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
links: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
statistics: PropTypes.object.isRequired,
|
||||
monitored: PropTypes.bool.isRequired,
|
||||
shortDateFormat: PropTypes.string.isRequired,
|
||||
isSaving: PropTypes.bool.isRequired,
|
||||
|
||||
@@ -117,8 +117,9 @@
|
||||
}
|
||||
|
||||
.title {
|
||||
font-weight: 300;
|
||||
font-size: 30px;
|
||||
line-height: 50px;
|
||||
line-height: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -229,7 +229,6 @@ class BookIndexRow extends Component {
|
||||
className={styles[name]}
|
||||
>
|
||||
{bookFileCount}
|
||||
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
9
frontend/src/BookFile/Editor/BookFileEditorTable.css
Normal file
9
frontend/src/BookFile/Editor/BookFileEditorTable.css
Normal file
@@ -0,0 +1,9 @@
|
||||
.container {
|
||||
border: 1px solid var(--borderColor);
|
||||
border-radius: 4px;
|
||||
background-color: var(--inputBackgroundColor);
|
||||
|
||||
&:last-of-type {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
7
frontend/src/BookFile/Editor/BookFileEditorTable.css.d.ts
vendored
Normal file
7
frontend/src/BookFile/Editor/BookFileEditorTable.css.d.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
// This file is automatically generated.
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'container': string;
|
||||
}
|
||||
export const cssExports: CssExports;
|
||||
export default cssExports;
|
||||
@@ -1,5 +1,6 @@
|
||||
import React from 'react';
|
||||
import BookFileEditorTableContentConnector from './BookFileEditorTableContentConnector';
|
||||
import styles from './BookFileEditorTable.css';
|
||||
|
||||
function BookFileEditorTable(props) {
|
||||
const {
|
||||
@@ -7,9 +8,11 @@ function BookFileEditorTable(props) {
|
||||
} = props;
|
||||
|
||||
return (
|
||||
<BookFileEditorTableContentConnector
|
||||
{...otherProps}
|
||||
/>
|
||||
<div className={styles.container}>
|
||||
<BookFileEditorTableContentConnector
|
||||
{...otherProps}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.filesTable {
|
||||
margin-bottom: 20px;
|
||||
padding-top: 15px;
|
||||
margin: 10px;
|
||||
padding-top: 5px;
|
||||
border: 1px solid var(--borderColor);
|
||||
border-top: 1px solid var(--borderColor);
|
||||
border-radius: 4px;
|
||||
@@ -13,9 +13,15 @@
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
margin-right: auto;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.selectInput {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.blankpad {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'actions': string;
|
||||
'blankpad': string;
|
||||
'filesTable': string;
|
||||
'selectInput': string;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import SelectInput from 'Components/Form/SelectInput';
|
||||
import SpinnerButton from 'Components/Link/SpinnerButton';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
@@ -120,7 +121,7 @@ class BookFileEditorTableContent extends Component {
|
||||
const hasSelectedFiles = this.getSelectedIds().length > 0;
|
||||
|
||||
return (
|
||||
<>
|
||||
<div>
|
||||
{
|
||||
isFetching && !isPopulated ?
|
||||
<LoadingIndicator /> :
|
||||
@@ -129,13 +130,13 @@ class BookFileEditorTableContent extends Component {
|
||||
|
||||
{
|
||||
!isFetching && error ?
|
||||
<div>{error}</div> :
|
||||
<Alert kind={kinds.DANGER}>{error}</Alert> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
isPopulated && !items.length ?
|
||||
<div>
|
||||
<div className={styles.blankpad}>
|
||||
No book files to manage.
|
||||
</div> :
|
||||
null
|
||||
@@ -173,26 +174,30 @@ class BookFileEditorTableContent extends Component {
|
||||
null
|
||||
}
|
||||
|
||||
<div className={styles.actions}>
|
||||
<SpinnerButton
|
||||
kind={kinds.DANGER}
|
||||
isSpinning={isDeleting}
|
||||
isDisabled={!hasSelectedFiles}
|
||||
onPress={this.onDeletePress}
|
||||
>
|
||||
Delete
|
||||
</SpinnerButton>
|
||||
{
|
||||
isPopulated && items.length ? (
|
||||
<div className={styles.actions}>
|
||||
<SpinnerButton
|
||||
kind={kinds.DANGER}
|
||||
isSpinning={isDeleting}
|
||||
isDisabled={!hasSelectedFiles}
|
||||
onPress={this.onDeletePress}
|
||||
>
|
||||
{translate('Delete')}
|
||||
</SpinnerButton>
|
||||
|
||||
<div className={styles.selectInput}>
|
||||
<SelectInput
|
||||
name="quality"
|
||||
value="selectQuality"
|
||||
values={qualityOptions}
|
||||
isDisabled={!hasSelectedFiles}
|
||||
onChange={this.onQualityChange}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles.selectInput}>
|
||||
<SelectInput
|
||||
name="quality"
|
||||
value="selectQuality"
|
||||
values={qualityOptions}
|
||||
isDisabled={!hasSelectedFiles}
|
||||
onChange={this.onQualityChange}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
) : null
|
||||
}
|
||||
|
||||
<ConfirmModal
|
||||
isOpen={isConfirmDeleteModalOpen}
|
||||
@@ -203,7 +208,7 @@ class BookFileEditorTableContent extends Component {
|
||||
onConfirm={this.onConfirmDelete}
|
||||
onCancel={this.onConfirmDeleteModalClose}
|
||||
/>
|
||||
</>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ class CalendarConnector extends Component {
|
||||
gotoCalendarToday
|
||||
} = this.props;
|
||||
|
||||
registerPagePopulator(this.repopulate);
|
||||
registerPagePopulator(this.repopulate, ['bookFileUpdated', 'bookFileDeleted']);
|
||||
|
||||
if (useCurrentPage) {
|
||||
fetchCalendar();
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
.description {
|
||||
line-height: $lineHeight;
|
||||
}
|
||||
|
||||
.description {
|
||||
margin-left: 0;
|
||||
line-height: $lineHeight;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
|
||||
@@ -202,6 +202,8 @@ class SignalRConnector extends Component {
|
||||
this.props.dispatchUpdateItem({ section, ...body.resource });
|
||||
} else if (body.action === 'deleted') {
|
||||
this.props.dispatchRemoveItem({ section, id: body.resource.id });
|
||||
|
||||
repopulatePage('bookFileDeleted');
|
||||
}
|
||||
|
||||
// Repopulate the page to handle recently imported file
|
||||
|
||||
@@ -15,5 +15,5 @@
|
||||
"start_url": "../../../../",
|
||||
"theme_color": "#3a3f51",
|
||||
"background_color": "#3a3f51",
|
||||
"display": "standalone"
|
||||
"display": "minimal-ui"
|
||||
}
|
||||
|
||||
120
frontend/src/Diag/ConsoleApi.js
Normal file
120
frontend/src/Diag/ConsoleApi.js
Normal file
@@ -0,0 +1,120 @@
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
|
||||
// This file contains some helpers for power users in a browser console
|
||||
|
||||
let hasWarned = false;
|
||||
|
||||
function checkActivationWarning() {
|
||||
if (!hasWarned) {
|
||||
console.log('Activated ReadarrApi console helpers.');
|
||||
console.warn('Be warned: There will be no further confirmation checks.');
|
||||
hasWarned = true;
|
||||
}
|
||||
}
|
||||
|
||||
function attachAsyncActions(promise) {
|
||||
promise.filter = function() {
|
||||
const args = arguments;
|
||||
const res = this.then((d) => d.filter(...args));
|
||||
attachAsyncActions(res);
|
||||
return res;
|
||||
};
|
||||
|
||||
promise.map = function() {
|
||||
const args = arguments;
|
||||
const res = this.then((d) => d.map(...args));
|
||||
attachAsyncActions(res);
|
||||
return res;
|
||||
};
|
||||
|
||||
promise.all = function() {
|
||||
const res = this.then((d) => Promise.all(d));
|
||||
attachAsyncActions(res);
|
||||
return res;
|
||||
};
|
||||
|
||||
promise.forEach = function(action) {
|
||||
const res = this.then((d) => Promise.all(d.map(action)));
|
||||
attachAsyncActions(res);
|
||||
return res;
|
||||
};
|
||||
}
|
||||
|
||||
class ResourceApi {
|
||||
constructor(api, url) {
|
||||
this.api = api;
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
single(id) {
|
||||
return this.api.fetch(`${this.url}/${id}`);
|
||||
}
|
||||
|
||||
all() {
|
||||
return this.api.fetch(this.url);
|
||||
}
|
||||
|
||||
filter(pred) {
|
||||
return this.all().filter(pred);
|
||||
}
|
||||
|
||||
update(resource) {
|
||||
return this.api.fetch(`${this.url}/${resource.id}`, { method: 'PUT', data: resource });
|
||||
}
|
||||
|
||||
delete(resource) {
|
||||
if (typeof resource === 'object' && resource !== null && resource.id) {
|
||||
resource = resource.id;
|
||||
}
|
||||
|
||||
if (!resource || !Number.isInteger(resource)) {
|
||||
throw Error('Invalid resource', resource);
|
||||
}
|
||||
|
||||
return this.api.fetch(`${this.url}/${resource}`, { method: 'DELETE' });
|
||||
}
|
||||
|
||||
fetch(url, options) {
|
||||
return this.api.fetch(`${this.url}${url}`, options);
|
||||
}
|
||||
}
|
||||
|
||||
class ConsoleApi {
|
||||
constructor() {
|
||||
this.author = new ResourceApi(this, '/author');
|
||||
}
|
||||
|
||||
resource(url) {
|
||||
return new ResourceApi(this, url);
|
||||
}
|
||||
|
||||
fetch(url, options) {
|
||||
checkActivationWarning();
|
||||
|
||||
options = options || {};
|
||||
|
||||
const req = {
|
||||
url,
|
||||
method: options.method || 'GET'
|
||||
};
|
||||
|
||||
if (options.data) {
|
||||
req.dataType = 'json';
|
||||
req.data = JSON.stringify(options.data);
|
||||
}
|
||||
|
||||
const promise = createAjaxRequest(req).request;
|
||||
|
||||
promise.fail((xhr) => {
|
||||
console.error(`Failed to fetch ${url}`, xhr);
|
||||
});
|
||||
|
||||
attachAsyncActions(promise);
|
||||
|
||||
return promise;
|
||||
}
|
||||
}
|
||||
|
||||
window.ReadarrApi = new ConsoleApi();
|
||||
|
||||
export default ConsoleApi;
|
||||
@@ -8,11 +8,13 @@
|
||||
}
|
||||
|
||||
.name {
|
||||
flex: 1 0 300px;
|
||||
@add-mixin truncate;
|
||||
|
||||
flex: 0 1 600px;
|
||||
}
|
||||
|
||||
.foreignId {
|
||||
flex: 0 0 200px;
|
||||
flex: 0 0 100px;
|
||||
}
|
||||
|
||||
.actions {
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.foreignId {
|
||||
flex: 0 0 200px;
|
||||
.name {
|
||||
flex: 0 1 600px;
|
||||
}
|
||||
|
||||
.name {
|
||||
flex: 1 0 300px;
|
||||
.foreignId {
|
||||
flex: 0 0 100px;
|
||||
}
|
||||
|
||||
.addImportListExclusion {
|
||||
|
||||
@@ -212,26 +212,24 @@ class MediaManagement extends Component {
|
||||
</FormGroup>
|
||||
|
||||
{
|
||||
settings.importExtraFiles.value &&
|
||||
settings.importExtraFiles.value ?
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>
|
||||
{translate('ImportExtraFiles')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('ImportExtraFiles')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="extraFileExtensions"
|
||||
helpTexts={[
|
||||
translate('ExtraFileExtensionsHelpTexts1'),
|
||||
translate('ExtraFileExtensionsHelpTexts2')
|
||||
translate('ExtraFileExtensionsHelpText'),
|
||||
translate('ExtraFileExtensionsHelpTextsExamples')
|
||||
]}
|
||||
onChange={onInputChange}
|
||||
{...settings.extraFileExtensions}
|
||||
/>
|
||||
</FormGroup>
|
||||
</FormGroup> : null
|
||||
}
|
||||
</FieldSet>
|
||||
}
|
||||
|
||||
@@ -41,6 +41,14 @@ export const defaultState = {
|
||||
},
|
||||
|
||||
columns: [
|
||||
{
|
||||
name: 'select',
|
||||
columnLabel: 'Select',
|
||||
isSortable: false,
|
||||
isVisible: true,
|
||||
isModifiable: false,
|
||||
isHidden: true
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Path',
|
||||
|
||||
@@ -158,7 +158,7 @@ export const defaultState = {
|
||||
bookFileCount: function(item) {
|
||||
const { statistics = {} } = item;
|
||||
|
||||
return statistics.bookCount || 0;
|
||||
return statistics.bookFileCount || 0;
|
||||
},
|
||||
|
||||
ratings: function(item) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import { sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import updateSectionState from 'Utilities/State/updateSectionState';
|
||||
import naturalExpansion from 'Utilities/String/naturalExpansion';
|
||||
import { set, update, updateItem } from './baseActions';
|
||||
import createFetchHandler from './Creators/createFetchHandler';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
@@ -17,6 +18,7 @@ export const section = 'interactiveImport';
|
||||
|
||||
const booksSection = `${section}.books`;
|
||||
const bookFilesSection = `${section}.bookFiles`;
|
||||
let abortCurrentFetchRequest = null;
|
||||
let abortCurrentRequest = null;
|
||||
let currentIds = [];
|
||||
|
||||
@@ -32,15 +34,17 @@ export const defaultState = {
|
||||
error: null,
|
||||
items: [],
|
||||
pendingChanges: {},
|
||||
sortKey: 'quality',
|
||||
sortDirection: sortDirections.DESCENDING,
|
||||
sortKey: 'path',
|
||||
sortDirection: sortDirections.ASCENDING,
|
||||
secondarySortKey: 'path',
|
||||
secondarySortDirection: sortDirections.ASCENDING,
|
||||
recentFolders: [],
|
||||
importMode: 'chooseImportMode',
|
||||
sortPredicates: {
|
||||
path: function(item, direction) {
|
||||
const path = item.path;
|
||||
|
||||
return path.toLowerCase();
|
||||
return naturalExpansion(path.toLowerCase());
|
||||
},
|
||||
|
||||
author: function(item, direction) {
|
||||
@@ -74,6 +78,8 @@ export const defaultState = {
|
||||
};
|
||||
|
||||
export const persistState = [
|
||||
'interactiveImport.sortKey',
|
||||
'interactiveImport.sortDirection',
|
||||
'interactiveImport.recentFolders',
|
||||
'interactiveImport.importMode'
|
||||
];
|
||||
@@ -122,6 +128,11 @@ export const clearInteractiveImportBookFiles = createAction(CLEAR_INTERACTIVE_IM
|
||||
// Action Handlers
|
||||
export const actionHandlers = handleThunks({
|
||||
[FETCH_INTERACTIVE_IMPORT_ITEMS]: function(getState, payload, dispatch) {
|
||||
if (abortCurrentFetchRequest) {
|
||||
abortCurrentFetchRequest();
|
||||
abortCurrentFetchRequest = null;
|
||||
}
|
||||
|
||||
if (!payload.downloadId && !payload.folder) {
|
||||
dispatch(set({ section, error: { message: '`downloadId` or `folder` is required.' } }));
|
||||
return;
|
||||
@@ -129,12 +140,14 @@ export const actionHandlers = handleThunks({
|
||||
|
||||
dispatch(set({ section, isFetching: true }));
|
||||
|
||||
const promise = createAjaxRequest({
|
||||
const { request, abortRequest } = createAjaxRequest({
|
||||
url: '/manualimport',
|
||||
data: payload
|
||||
}).request;
|
||||
});
|
||||
|
||||
promise.done((data) => {
|
||||
abortCurrentFetchRequest = abortRequest;
|
||||
|
||||
request.done((data) => {
|
||||
dispatch(batchActions([
|
||||
update({ section, data }),
|
||||
|
||||
@@ -147,7 +160,11 @@ export const actionHandlers = handleThunks({
|
||||
]));
|
||||
});
|
||||
|
||||
promise.fail((xhr) => {
|
||||
request.fail((xhr) => {
|
||||
if (xhr.aborted) {
|
||||
return;
|
||||
}
|
||||
|
||||
dispatch(set({
|
||||
section,
|
||||
isFetching: false,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
@@ -9,8 +10,12 @@ import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
||||
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
|
||||
import VirtualTable from 'Components/Table/VirtualTable';
|
||||
import VirtualTableRow from 'Components/Table/VirtualTableRow';
|
||||
import { align, icons, sortDirections } from 'Helpers/Props';
|
||||
import { align, icons, kinds, sortDirections } from 'Helpers/Props';
|
||||
import hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import getSelectedIds from 'Utilities/Table/getSelectedIds';
|
||||
import selectAll from 'Utilities/Table/selectAll';
|
||||
import toggleSelected from 'Utilities/Table/toggleSelected';
|
||||
import UnmappedFilesTableHeader from './UnmappedFilesTableHeader';
|
||||
import UnmappedFilesTableRow from './UnmappedFilesTableRow';
|
||||
|
||||
@@ -23,10 +28,43 @@ class UnmappedFilesTable extends Component {
|
||||
super(props, context);
|
||||
|
||||
this.state = {
|
||||
scroller: null
|
||||
scroller: null,
|
||||
allSelected: false,
|
||||
allUnselected: false,
|
||||
lastToggled: null,
|
||||
selectedState: {}
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.setSelectedState();
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
const {
|
||||
items,
|
||||
sortKey,
|
||||
sortDirection,
|
||||
isDeleting,
|
||||
deleteError
|
||||
} = this.props;
|
||||
|
||||
if (sortKey !== prevProps.sortKey ||
|
||||
sortDirection !== prevProps.sortDirection ||
|
||||
hasDifferentItemsOrOrder(prevProps.items, items)
|
||||
) {
|
||||
this.setSelectedState();
|
||||
}
|
||||
|
||||
const hasFinishedDeleting = prevProps.isDeleting &&
|
||||
!isDeleting &&
|
||||
!deleteError;
|
||||
|
||||
if (hasFinishedDeleting) {
|
||||
this.onSelectAllChange({ value: false });
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Control
|
||||
|
||||
@@ -34,6 +72,68 @@ class UnmappedFilesTable extends Component {
|
||||
this.setState({ scroller: ref });
|
||||
};
|
||||
|
||||
getSelectedIds = () => {
|
||||
if (this.state.allUnselected) {
|
||||
return [];
|
||||
}
|
||||
return getSelectedIds(this.state.selectedState);
|
||||
};
|
||||
|
||||
setSelectedState() {
|
||||
const {
|
||||
items
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
selectedState
|
||||
} = this.state;
|
||||
|
||||
const newSelectedState = {};
|
||||
|
||||
items.forEach((file) => {
|
||||
const isItemSelected = selectedState[file.id];
|
||||
|
||||
if (isItemSelected) {
|
||||
newSelectedState[file.id] = isItemSelected;
|
||||
} else {
|
||||
newSelectedState[file.id] = false;
|
||||
}
|
||||
});
|
||||
|
||||
const selectedCount = getSelectedIds(newSelectedState).length;
|
||||
const newStateCount = Object.keys(newSelectedState).length;
|
||||
let isAllSelected = false;
|
||||
let isAllUnselected = false;
|
||||
|
||||
if (selectedCount === 0) {
|
||||
isAllUnselected = true;
|
||||
} else if (selectedCount === newStateCount) {
|
||||
isAllSelected = true;
|
||||
}
|
||||
|
||||
this.setState({ selectedState: newSelectedState, allSelected: isAllSelected, allUnselected: isAllUnselected });
|
||||
}
|
||||
|
||||
onSelectAllChange = ({ value }) => {
|
||||
this.setState(selectAll(this.state.selectedState, value));
|
||||
};
|
||||
|
||||
onSelectAllPress = () => {
|
||||
this.onSelectAllChange({ value: !this.state.allSelected });
|
||||
};
|
||||
|
||||
onSelectedChange = ({ id, value, shiftKey = false }) => {
|
||||
this.setState((state) => {
|
||||
return toggleSelected(state, this.props.items, id, value, shiftKey);
|
||||
});
|
||||
};
|
||||
|
||||
onDeleteUnmappedFilesPress = () => {
|
||||
const selectedIds = this.getSelectedIds();
|
||||
|
||||
this.props.deleteUnmappedFiles(selectedIds);
|
||||
};
|
||||
|
||||
rowRenderer = ({ key, rowIndex, style }) => {
|
||||
const {
|
||||
items,
|
||||
@@ -41,6 +141,10 @@ class UnmappedFilesTable extends Component {
|
||||
deleteUnmappedFile
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
selectedState
|
||||
} = this.state;
|
||||
|
||||
const item = items[rowIndex];
|
||||
|
||||
return (
|
||||
@@ -51,6 +155,8 @@ class UnmappedFilesTable extends Component {
|
||||
<UnmappedFilesTableRow
|
||||
key={item.id}
|
||||
columns={columns}
|
||||
isSelected={selectedState[item.id]}
|
||||
onSelectedChange={this.onSelectedChange}
|
||||
deleteUnmappedFile={deleteUnmappedFile}
|
||||
{...item}
|
||||
/>
|
||||
@@ -63,6 +169,7 @@ class UnmappedFilesTable extends Component {
|
||||
const {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
isDeleting,
|
||||
error,
|
||||
items,
|
||||
columns,
|
||||
@@ -72,13 +179,19 @@ class UnmappedFilesTable extends Component {
|
||||
onSortPress,
|
||||
isScanningFolders,
|
||||
onAddMissingAuthorsPress,
|
||||
deleteUnmappedFiles,
|
||||
...otherProps
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
scroller
|
||||
scroller,
|
||||
allSelected,
|
||||
allUnselected,
|
||||
selectedState
|
||||
} = this.state;
|
||||
|
||||
const selectedTrackFileIds = this.getSelectedIds();
|
||||
|
||||
return (
|
||||
<PageContent title={translate('UnmappedFiles')}>
|
||||
<PageToolbar>
|
||||
@@ -90,6 +203,13 @@ class UnmappedFilesTable extends Component {
|
||||
isSpinning={isScanningFolders}
|
||||
onPress={onAddMissingAuthorsPress}
|
||||
/>
|
||||
<PageToolbarButton
|
||||
label={translate('DeleteSelected')}
|
||||
iconName={icons.DELETE}
|
||||
isDisabled={selectedTrackFileIds.length === 0}
|
||||
isSpinning={isDeleting}
|
||||
onPress={this.onDeleteUnmappedFilesPress}
|
||||
/>
|
||||
</PageToolbarSection>
|
||||
|
||||
<PageToolbarSection alignContent={align.RIGHT}>
|
||||
@@ -117,9 +237,9 @@ class UnmappedFilesTable extends Component {
|
||||
|
||||
{
|
||||
isPopulated && !error && !items.length &&
|
||||
<div>
|
||||
<Alert kind={kinds.INFO}>
|
||||
Success! My work is done, all files on disk are matched to known books.
|
||||
</div>
|
||||
</Alert>
|
||||
}
|
||||
|
||||
{
|
||||
@@ -138,8 +258,12 @@ class UnmappedFilesTable extends Component {
|
||||
sortDirection={sortDirection}
|
||||
onTableOptionChange={onTableOptionChange}
|
||||
onSortPress={onSortPress}
|
||||
allSelected={allSelected}
|
||||
allUnselected={allUnselected}
|
||||
onSelectAllChange={this.onSelectAllChange}
|
||||
/>
|
||||
}
|
||||
selectedState={selectedState}
|
||||
sortKey={sortKey}
|
||||
sortDirection={sortDirection}
|
||||
/>
|
||||
@@ -153,6 +277,8 @@ class UnmappedFilesTable extends Component {
|
||||
UnmappedFilesTable.propTypes = {
|
||||
isFetching: PropTypes.bool.isRequired,
|
||||
isPopulated: PropTypes.bool.isRequired,
|
||||
isDeleting: PropTypes.bool.isRequired,
|
||||
deleteError: PropTypes.object,
|
||||
error: PropTypes.object,
|
||||
items: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
@@ -161,6 +287,7 @@ UnmappedFilesTable.propTypes = {
|
||||
onTableOptionChange: PropTypes.func.isRequired,
|
||||
onSortPress: PropTypes.func.isRequired,
|
||||
deleteUnmappedFile: PropTypes.func.isRequired,
|
||||
deleteUnmappedFiles: PropTypes.func.isRequired,
|
||||
isScanningFolders: PropTypes.bool.isRequired,
|
||||
onAddMissingAuthorsPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
@@ -5,7 +5,7 @@ import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import * as commandNames from 'Commands/commandNames';
|
||||
import withCurrentPage from 'Components/withCurrentPage';
|
||||
import { deleteBookFile, fetchBookFiles, setBookFilesSort, setBookFilesTableOption } from 'Store/Actions/bookFileActions';
|
||||
import { deleteBookFile, deleteBookFiles, fetchBookFiles, setBookFilesSort, setBookFilesTableOption } from 'Store/Actions/bookFileActions';
|
||||
import { executeCommand } from 'Store/Actions/commandActions';
|
||||
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
|
||||
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
|
||||
@@ -28,7 +28,9 @@ function createMapStateToProps() {
|
||||
items,
|
||||
...otherProps
|
||||
} = bookFiles;
|
||||
|
||||
const unmappedFiles = _.filter(items, { bookId: 0 });
|
||||
|
||||
return {
|
||||
items: unmappedFiles,
|
||||
...otherProps,
|
||||
@@ -57,6 +59,10 @@ function createMapDispatchToProps(dispatch, props) {
|
||||
dispatch(deleteBookFile({ id }));
|
||||
},
|
||||
|
||||
deleteUnmappedFiles(bookFileIds) {
|
||||
dispatch(deleteBookFiles({ bookFileIds }));
|
||||
},
|
||||
|
||||
onAddMissingAuthorsPress() {
|
||||
dispatch(executeCommand({
|
||||
name: commandNames.RESCAN_FOLDERS,
|
||||
@@ -106,7 +112,8 @@ UnmappedFilesTableConnector.propTypes = {
|
||||
onSortPress: PropTypes.func.isRequired,
|
||||
onTableOptionChange: PropTypes.func.isRequired,
|
||||
fetchUnmappedFiles: PropTypes.func.isRequired,
|
||||
deleteUnmappedFile: PropTypes.func.isRequired
|
||||
deleteUnmappedFile: PropTypes.func.isRequired,
|
||||
deleteUnmappedFiles: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default withCurrentPage(
|
||||
|
||||
@@ -4,6 +4,7 @@ import IconButton from 'Components/Link/IconButton';
|
||||
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
|
||||
import VirtualTableHeader from 'Components/Table/VirtualTableHeader';
|
||||
import VirtualTableHeaderCell from 'Components/Table/VirtualTableHeaderCell';
|
||||
import VirtualTableSelectAllHeaderCell from 'Components/Table/VirtualTableSelectAllHeaderCell';
|
||||
import { icons } from 'Helpers/Props';
|
||||
// import hasGrowableColumns from './hasGrowableColumns';
|
||||
import styles from './UnmappedFilesTableHeader.css';
|
||||
@@ -12,6 +13,9 @@ function UnmappedFilesTableHeader(props) {
|
||||
const {
|
||||
columns,
|
||||
onTableOptionChange,
|
||||
allSelected,
|
||||
allUnselected,
|
||||
onSelectAllChange,
|
||||
...otherProps
|
||||
} = props;
|
||||
|
||||
@@ -30,6 +34,17 @@ function UnmappedFilesTableHeader(props) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (name === 'select') {
|
||||
return (
|
||||
<VirtualTableSelectAllHeaderCell
|
||||
key={name}
|
||||
allSelected={allSelected}
|
||||
allUnselected={allUnselected}
|
||||
onSelectAllChange={onSelectAllChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'actions') {
|
||||
return (
|
||||
<VirtualTableHeaderCell
|
||||
@@ -71,6 +86,9 @@ function UnmappedFilesTableHeader(props) {
|
||||
|
||||
UnmappedFilesTableHeader.propTypes = {
|
||||
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
allSelected: PropTypes.bool.isRequired,
|
||||
allUnselected: PropTypes.bool.isRequired,
|
||||
onSelectAllChange: PropTypes.func.isRequired,
|
||||
onTableOptionChange: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
||||
@@ -20,3 +20,9 @@
|
||||
|
||||
flex: 0 0 100px;
|
||||
}
|
||||
|
||||
.checkInput {
|
||||
composes: input from '~Components/Form/CheckInput.css';
|
||||
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'actions': string;
|
||||
'checkInput': string;
|
||||
'dateAdded': string;
|
||||
'path': string;
|
||||
'quality': string;
|
||||
|
||||
@@ -6,6 +6,7 @@ import IconButton from 'Components/Link/IconButton';
|
||||
import ConfirmModal from 'Components/Modal/ConfirmModal';
|
||||
import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
|
||||
import VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';
|
||||
import VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell';
|
||||
import { icons, kinds } from 'Helpers/Props';
|
||||
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
|
||||
import formatBytes from 'Utilities/Number/formatBytes';
|
||||
@@ -69,7 +70,9 @@ class UnmappedFilesTableRow extends Component {
|
||||
size,
|
||||
dateAdded,
|
||||
quality,
|
||||
columns
|
||||
columns,
|
||||
isSelected,
|
||||
onSelectedChange
|
||||
} = this.props;
|
||||
|
||||
const folder = path.substring(0, Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\')));
|
||||
@@ -93,6 +96,19 @@ class UnmappedFilesTableRow extends Component {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (name === 'select') {
|
||||
return (
|
||||
<VirtualTableSelectCell
|
||||
inputClassName={styles.checkInput}
|
||||
id={id}
|
||||
key={name}
|
||||
isSelected={isSelected}
|
||||
isDisabled={false}
|
||||
onSelectedChange={onSelectedChange}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'path') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
@@ -208,6 +224,8 @@ UnmappedFilesTableRow.propTypes = {
|
||||
quality: PropTypes.object.isRequired,
|
||||
dateAdded: PropTypes.string.isRequired,
|
||||
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
isSelected: PropTypes.bool,
|
||||
onSelectedChange: PropTypes.func.isRequired,
|
||||
deleteUnmappedFile: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
||||
11
frontend/src/Utilities/String/naturalExpansion.js
Normal file
11
frontend/src/Utilities/String/naturalExpansion.js
Normal file
@@ -0,0 +1,11 @@
|
||||
const regex = /\d+/g;
|
||||
|
||||
function naturalExpansion(input) {
|
||||
if (!input) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return input.replace(regex, (n) => n.padStart(8, '0'));
|
||||
}
|
||||
|
||||
export default naturalExpansion;
|
||||
@@ -1,9 +1,11 @@
|
||||
const regex = /\b\w+/g;
|
||||
|
||||
function titleCase(input) {
|
||||
if (!input) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return input.replace(/\b\w+/g, (match) => {
|
||||
return input.replace(regex, (match) => {
|
||||
return match.charAt(0).toUpperCase() + match.substr(1).toLowerCase();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ export async function fetchTranslations(): Promise<boolean> {
|
||||
|
||||
export default function translate(
|
||||
key: string,
|
||||
tokens?: Record<string, string | number | boolean>
|
||||
tokens: Record<string, string | number | boolean> = { appName: 'Readarr' }
|
||||
) {
|
||||
const translation = translations[key] || key;
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ class CutoffUnmetConnector extends Component {
|
||||
gotoCutoffUnmetFirstPage
|
||||
} = this.props;
|
||||
|
||||
registerPagePopulator(this.repopulate, ['bookFileUpdated']);
|
||||
registerPagePopulator(this.repopulate, ['bookFileUpdated', 'bookFileDeleted']);
|
||||
|
||||
if (useCurrentPage) {
|
||||
fetchCutoffUnmet();
|
||||
|
||||
@@ -50,7 +50,7 @@ class MissingConnector extends Component {
|
||||
gotoMissingFirstPage
|
||||
} = this.props;
|
||||
|
||||
registerPagePopulator(this.repopulate, ['bookFileUpdated']);
|
||||
registerPagePopulator(this.repopulate, ['bookFileUpdated', 'bookFileDeleted']);
|
||||
|
||||
if (useCurrentPage) {
|
||||
fetchMissing();
|
||||
|
||||
@@ -4,6 +4,8 @@ import { render } from 'react-dom';
|
||||
import createAppStore from 'Store/createAppStore';
|
||||
import App from './App/App';
|
||||
|
||||
import 'Diag/ConsoleApi';
|
||||
|
||||
export async function bootstrap() {
|
||||
const history = createBrowserHistory();
|
||||
const store = createAppStore(history);
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
"@fortawesome/free-regular-svg-icons": "6.4.0",
|
||||
"@fortawesome/free-solid-svg-icons": "6.4.0",
|
||||
"@fortawesome/react-fontawesome": "0.2.0",
|
||||
"@microsoft/signalr": "6.0.21",
|
||||
"@microsoft/signalr": "6.0.25",
|
||||
"@sentry/browser": "7.51.2",
|
||||
"@sentry/integrations": "7.51.2",
|
||||
"@types/node": "18.16.16",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<PackageVersion Include="AutoFixture" Version="4.17.0" />
|
||||
<PackageVersion Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" PrivateAssets="all" />
|
||||
<PackageVersion Include="Dapper" Version="2.0.123" />
|
||||
<PackageVersion Include="DryIoc.dll" Version="5.4.1" />
|
||||
<PackageVersion Include="DryIoc.dll" Version="5.4.3" />
|
||||
<PackageVersion Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" />
|
||||
<PackageVersion Include="Equ" Version="2.3.0" />
|
||||
<PackageVersion Include="FluentAssertions" Version="5.10.3" />
|
||||
@@ -16,11 +16,11 @@
|
||||
<PackageVersion Include="ImpromptuInterface" Version="7.0.1" />
|
||||
<PackageVersion Include="LazyCache" Version="2.4.0" />
|
||||
<PackageVersion Include="Mailkit" Version="3.6.0" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.21" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.25" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
|
||||
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
@@ -32,7 +32,7 @@
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="5.2.3" />
|
||||
<PackageVersion Include="NLog" Version="5.1.4" />
|
||||
<PackageVersion Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||
<PackageVersion Include="Npgsql" Version="7.0.4" />
|
||||
<PackageVersion Include="Npgsql" Version="7.0.6" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageVersion Include="NUnit" Version="3.13.3" />
|
||||
<PackageVersion Include="NunitXml.TestLogger" Version="3.0.117" />
|
||||
@@ -59,7 +59,7 @@
|
||||
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
|
||||
<PackageVersion Include="System.ServiceProcess.ServiceController" Version="6.0.1" />
|
||||
<PackageVersion Include="System.Text.Encoding.CodePages" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Text.Json" Version="6.0.8" />
|
||||
<PackageVersion Include="System.Text.Json" Version="6.0.9" />
|
||||
<PackageVersion Include="System.ValueTuple" Version="4.5.0" />
|
||||
<PackageVersion Include="TagLibSharp-Lidarr" Version="2.2.0.19" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -70,15 +70,15 @@ namespace NzbDrone.Common.Test.InstrumentationTests
|
||||
[TestCase(@"[Info] MigrationController: *** Migrating Database=readarr-main;Host=postgres14;Username=mySecret;Password=mySecret;Port=5432;token=mySecret;Enlist=False&username=mySecret;mypassword=mySecret;mypass=shouldkeep1;test_token=mySecret;password=123%@%_@!#^#@;use_password=mySecret;get_token=shouldkeep2;usetoken=shouldkeep3;passwrd=mySecret;")]
|
||||
|
||||
// Announce URLs (passkeys) Magnet & Tracker
|
||||
[TestCase(@"magnet_uri"":""magnet:?xt=urn:btih:9pr04sgkillroyimaveql2tyu8xyui&dn=&tr=https%3a%2f%2fxxx.yyy%2f9pr04sg601233210imaveql2tyu8xyui%2fannounce""}")]
|
||||
[TestCase(@"magnet_uri"":""magnet:?xt=urn:btih:9pr04sgkillroyimaveql2tyu8xyui&dn=&tr=https%3a%2f%2fxxx.yyy%2ftracker.php%2f9pr04sg601233210imaveql2tyu8xyui%2fannounce""}")]
|
||||
[TestCase(@"magnet_uri"":""magnet:?xt=urn:btih:9pr04sgkillroyimaveql2tyu8xyui&dn=&tr=https%3a%2f%2fxxx.yyy%2fannounce%2f9pr04sg601233210imaveql2tyu8xyui""}")]
|
||||
[TestCase(@"magnet_uri"":""magnet:?xt=urn:btih:9pr04sgkillroyimaveql2tyu8xyui&dn=&tr=https%3a%2f%2fxxx.yyy%2fannounce.php%3fpasskey%3d9pr04sg601233210imaveql2tyu8xyui""}")]
|
||||
[TestCase(@"tracker"":""https://xxx.yyy/9pr04sg601233210imaveql2tyu8xyui/announce""}")]
|
||||
[TestCase(@"tracker"":""https://xxx.yyy/tracker.php/9pr04sg601233210imaveql2tyu8xyui/announce""}")]
|
||||
[TestCase(@"tracker"":""https://xxx.yyy/announce/9pr04sg601233210imaveql2tyu8xyui""}")]
|
||||
[TestCase(@"tracker"":""https://xxx.yyy/announce.php?passkey=9pr04sg601233210imaveql2tyu8xyui""}")]
|
||||
[TestCase(@"tracker"":""http://xxx.yyy/announce.php?passkey=9pr04sg601233210imaveql2tyu8xyui"",""info"":""http://xxx.yyy/info?a=b""")]
|
||||
[TestCase(@"magnet_uri"":""magnet:?xt=urn:btih:9pr04sgkillroyimaveql2tyu8xyui&dn=&tr=https%3a%2f%2fxxx.yyy%2f9pr04sg601233210IMAveQL2tyu8xyui%2fannounce""}")]
|
||||
[TestCase(@"magnet_uri"":""magnet:?xt=urn:btih:9pr04sgkillroyimaveql2tyu8xyui&dn=&tr=https%3a%2f%2fxxx.yyy%2ftracker.php%2f9pr04sg601233210IMAveQL2tyu8xyui%2fannounce""}")]
|
||||
[TestCase(@"magnet_uri"":""magnet:?xt=urn:btih:9pr04sgkillroyimaveql2tyu8xyui&dn=&tr=https%3a%2f%2fxxx.yyy%2fannounce%2f9pr04sg601233210IMAveQL2tyu8xyui""}")]
|
||||
[TestCase(@"magnet_uri"":""magnet:?xt=urn:btih:9pr04sgkillroyimaveql2tyu8xyui&dn=&tr=https%3a%2f%2fxxx.yyy%2fannounce.php%3fpasskey%3d9pr04sg601233210IMAveQL2tyu8xyui""}")]
|
||||
[TestCase(@"tracker"":""https://xxx.yyy/9pr04sg601233210IMAveQL2tyu8xyui/announce""}")]
|
||||
[TestCase(@"tracker"":""https://xxx.yyy/tracker.php/9pr04sg601233210IMAveQL2tyu8xyui/announce""}")]
|
||||
[TestCase(@"tracker"":""https://xxx.yyy/announce/9pr04sg601233210IMAveQL2tyu8xyui""}")]
|
||||
[TestCase(@"tracker"":""https://xxx.yyy/announce.php?passkey=9pr04sg601233210IMAveQL2tyu8xyui""}")]
|
||||
[TestCase(@"tracker"":""http://xxx.yyy/announce.php?passkey=9pr04sg601233210IMAveQL2tyu8xyui"",""info"":""http://xxx.yyy/info?a=b""")]
|
||||
|
||||
// Notifiarr
|
||||
[TestCase(@"https://xxx.yyy/api/v1/notification/readarr/9pr04sg6-0123-3210-imav-eql2tyu8xyui")]
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
new (@"\b(\w*)?(_?(?<!use|get_)token|username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$|;)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
|
||||
// Trackers Announce Keys; Designed for Qbit Json; should work for all in theory
|
||||
new (@"announce(\.php)?(/|%2f|%3fpasskey%3d)(?<secret>[a-z0-9]{16,})|(?<secret>[a-z0-9]{16,})(/|%2f)announce"),
|
||||
new (@"announce(\.php)?(/|%2f|%3fpasskey%3d)(?<secret>[a-z0-9]{16,})|(?<secret>[a-z0-9]{16,})(/|%2f)announce", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
|
||||
// Path
|
||||
new (@"C:\\Users\\(?<secret>[^\""]+?)(\\|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
|
||||
@@ -5,6 +5,7 @@ using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Books;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.CustomFormats;
|
||||
using NzbDrone.Core.DecisionEngine.Specifications;
|
||||
using NzbDrone.Core.Download.TrackedDownloads;
|
||||
@@ -369,5 +370,31 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
|
||||
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_same_quality_non_proper_in_queue_and_download_propers_is_do_not_upgrade()
|
||||
{
|
||||
_remoteBook.ParsedBookInfo.Quality = new QualityModel(Quality.FLAC, new Revision(2));
|
||||
_author.QualityProfile.Value.Cutoff = _remoteBook.ParsedBookInfo.Quality.Quality.Id;
|
||||
|
||||
Mocker.GetMock<IConfigService>()
|
||||
.Setup(s => s.DownloadPropersAndRepacks)
|
||||
.Returns(ProperDownloadTypes.DoNotUpgrade);
|
||||
|
||||
var remoteBook = Builder<RemoteBook>.CreateNew()
|
||||
.With(r => r.Author = _author)
|
||||
.With(r => r.Books = new List<Book> { _book })
|
||||
.With(r => r.ParsedBookInfo = new ParsedBookInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.FLAC)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.With(r => r.CustomFormats = new List<CustomFormat>())
|
||||
.Build();
|
||||
|
||||
GivenQueue(new List<RemoteBook> { remoteBook });
|
||||
|
||||
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@ namespace NzbDrone.Core.Test.ImportListTests
|
||||
|
||||
_importListReports = new List<ImportListItemInfo> { importListItem1 };
|
||||
|
||||
var mockImportList = new Mock<IImportList>();
|
||||
|
||||
Mocker.GetMock<IFetchAndParseImportList>()
|
||||
.Setup(v => v.Fetch())
|
||||
.Returns(_importListReports);
|
||||
@@ -53,6 +55,10 @@ namespace NzbDrone.Core.Test.ImportListTests
|
||||
.Setup(v => v.Get(It.IsAny<int>()))
|
||||
.Returns(new ImportListDefinition { ShouldMonitor = ImportListMonitorType.SpecificBook });
|
||||
|
||||
Mocker.GetMock<IImportListFactory>()
|
||||
.Setup(v => v.AutomaticAddEnabled(It.IsAny<bool>()))
|
||||
.Returns(new List<IImportList> { mockImportList.Object });
|
||||
|
||||
Mocker.GetMock<IFetchAndParseImportList>()
|
||||
.Setup(v => v.Fetch())
|
||||
.Returns(_importListReports);
|
||||
@@ -322,5 +328,31 @@ namespace NzbDrone.Core.Test.ImportListTests
|
||||
t.First().AddOptions.BooksToMonitor.Count == expectedBooksMonitored &&
|
||||
t.First().Monitored == expectedAuthorMonitored), false));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_fetch_if_no_lists_are_enabled()
|
||||
{
|
||||
Mocker.GetMock<IImportListFactory>()
|
||||
.Setup(v => v.AutomaticAddEnabled(It.IsAny<bool>()))
|
||||
.Returns(new List<IImportList>());
|
||||
|
||||
Subject.Execute(new ImportListSyncCommand());
|
||||
|
||||
Mocker.GetMock<IFetchAndParseImportList>()
|
||||
.Verify(v => v.Fetch(), Times.Never);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_process_if_no_items_are_returned()
|
||||
{
|
||||
Mocker.GetMock<IFetchAndParseImportList>()
|
||||
.Setup(v => v.Fetch())
|
||||
.Returns(new List<ImportListItemInfo>());
|
||||
|
||||
Subject.Execute(new ImportListSyncCommand());
|
||||
|
||||
Mocker.GetMock<IImportListExclusionService>()
|
||||
.Verify(v => v.All(), Times.Never);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,5 +68,16 @@ namespace NzbDrone.Core.Test.IndexerTests
|
||||
|
||||
VerifyNoUpdate();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_record_failure_for_unknown_provider()
|
||||
{
|
||||
Subject.RecordFailure(0);
|
||||
|
||||
Mocker.GetMock<IIndexerStatusRepository>()
|
||||
.Verify(v => v.FindByProviderId(1), Times.Never);
|
||||
|
||||
VerifyNoUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,12 +5,15 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Books;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.MediaFiles.Events;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Test.Common;
|
||||
using NzbDrone.Test.Common.AutoMoq;
|
||||
@@ -166,7 +169,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCaseSource(typeof(TestCaseFactory), "TestCases")]
|
||||
[TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))]
|
||||
public void should_read_duration(string filename, string[] ignored)
|
||||
{
|
||||
var path = Path.Combine(_testdir, filename);
|
||||
@@ -177,7 +180,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCaseSource(typeof(TestCaseFactory), "TestCases")]
|
||||
[TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))]
|
||||
public void should_read_write_tags(string filename, string[] skipProperties)
|
||||
{
|
||||
GivenFileCopy(filename);
|
||||
@@ -198,7 +201,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCaseSource(typeof(TestCaseFactory), "TestCases")]
|
||||
[TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))]
|
||||
public void should_read_audiotag_from_file_with_no_tags(string filename, string[] skipProperties)
|
||||
{
|
||||
GivenFileCopy(filename);
|
||||
@@ -220,7 +223,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCaseSource(typeof(TestCaseFactory), "TestCases")]
|
||||
[TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))]
|
||||
public void should_read_parsedtrackinfo_from_file_with_no_tags(string filename, string[] skipProperties)
|
||||
{
|
||||
GivenFileCopy(filename);
|
||||
@@ -235,7 +238,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCaseSource(typeof(TestCaseFactory), "TestCases")]
|
||||
[TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))]
|
||||
public void should_set_quality_and_mediainfo_for_corrupt_file(string filename, string[] skipProperties)
|
||||
{
|
||||
// use missing to simulate corrupt
|
||||
@@ -250,7 +253,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCaseSource(typeof(TestCaseFactory), "TestCases")]
|
||||
[TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))]
|
||||
public void should_read_file_with_only_title_tag(string filename, string[] ignored)
|
||||
{
|
||||
GivenFileCopy(filename);
|
||||
@@ -270,7 +273,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCaseSource(typeof(TestCaseFactory), "TestCases")]
|
||||
[TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))]
|
||||
public void should_remove_date_from_tags_when_not_in_metadata(string filename, string[] ignored)
|
||||
{
|
||||
GivenFileCopy(filename);
|
||||
@@ -365,6 +368,29 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
var fileInfo = _diskProvider.GetFileInfo(file.Path);
|
||||
file.Modified.Should().Be(fileInfo.LastWriteTimeUtc);
|
||||
file.Size.Should().Be(fileInfo.Length);
|
||||
|
||||
Mocker.GetMock<IEventAggregator>()
|
||||
.Verify(v => v.PublishEvent(It.IsAny<BookFileRetaggedEvent>()), Times.Once());
|
||||
}
|
||||
|
||||
[TestCase("nin.mp3")]
|
||||
public void write_tags_should_not_update_tags_if_already_updated(string filename)
|
||||
{
|
||||
Mocker.GetMock<IConfigService>()
|
||||
.Setup(x => x.ScrubAudioTags)
|
||||
.Returns(true);
|
||||
|
||||
GivenFileCopy(filename);
|
||||
|
||||
var file = GivenPopulatedTrackfile(0);
|
||||
|
||||
file.Path = _copiedFile;
|
||||
Subject.WriteTags(file, false, true);
|
||||
Subject.WriteTags(file, false, true);
|
||||
Subject.WriteTags(file, false, true);
|
||||
|
||||
Mocker.GetMock<IEventAggregator>()
|
||||
.Verify(v => v.PublishEvent(It.IsAny<BookFileRetaggedEvent>()), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -13,6 +13,7 @@ using NzbDrone.Core.Test.Framework;
|
||||
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2023-12-31 00:00:00Z")]
|
||||
public class BookInfoProxyFixture : CoreTest<BookInfoProxy>
|
||||
{
|
||||
private MetadataProfile _metadataProfile;
|
||||
|
||||
@@ -15,6 +15,7 @@ using NzbDrone.Test.Common;
|
||||
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2023-12-31 00:00:00Z")]
|
||||
public class BookInfoProxySearchFixture : CoreTest<BookInfoProxy>
|
||||
{
|
||||
[SetUp]
|
||||
|
||||
@@ -35,16 +35,13 @@ namespace NzbDrone.Core.Test.ParserTests
|
||||
[TestCase("or")]
|
||||
[TestCase("an")]
|
||||
[TestCase("of")]
|
||||
public void should_remove_common_words(string word)
|
||||
public void should_remove_common_words_from_middle_of_title(string word)
|
||||
{
|
||||
var dirtyFormat = new[]
|
||||
{
|
||||
"word.{0}.word",
|
||||
"word {0} word",
|
||||
"word-{0}-word",
|
||||
"word.word.{0}",
|
||||
"word-word-{0}",
|
||||
"word-word {0}",
|
||||
"word-{0}-word"
|
||||
};
|
||||
|
||||
foreach (var s in dirtyFormat)
|
||||
@@ -54,6 +51,27 @@ namespace NzbDrone.Core.Test.ParserTests
|
||||
}
|
||||
}
|
||||
|
||||
[TestCase("the")]
|
||||
[TestCase("and")]
|
||||
[TestCase("or")]
|
||||
[TestCase("an")]
|
||||
[TestCase("of")]
|
||||
public void should_not_remove_common_words_from_end_of_title(string word)
|
||||
{
|
||||
var dirtyFormat = new[]
|
||||
{
|
||||
"word.word.{0}",
|
||||
"word-word-{0}",
|
||||
"word-word {0}"
|
||||
};
|
||||
|
||||
foreach (var s in dirtyFormat)
|
||||
{
|
||||
var dirty = string.Format(s, word);
|
||||
dirty.CleanAuthorName().Should().Be("wordword" + word.ToLower());
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_remove_a_from_middle_of_title()
|
||||
{
|
||||
|
||||
@@ -8,6 +8,7 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using FluentValidation;
|
||||
using FluentValidation.Results;
|
||||
using Newtonsoft.Json;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Cache;
|
||||
using NzbDrone.Common.Disk;
|
||||
@@ -218,11 +219,11 @@ namespace NzbDrone.Core.Books.Calibre
|
||||
double? seriesIndex = null;
|
||||
if (double.TryParse(serieslink?.Position, out var index))
|
||||
{
|
||||
_logger.Trace($"Parsed {serieslink?.Position} as {index}");
|
||||
_logger.Trace("Parsed '{0}' as '{1}'", serieslink.Position, index);
|
||||
seriesIndex = index;
|
||||
}
|
||||
|
||||
_logger.Trace($"Book: {book} Series: {series?.Title}, Position: {seriesIndex}");
|
||||
_logger.Trace("Book: {0} Series: {1}, Position: {2}", book, series?.Title, seriesIndex);
|
||||
|
||||
var cover = edition.Images.FirstOrDefault(x => x.CoverType == MediaCoverTypes.Cover);
|
||||
string image = null;
|
||||
@@ -275,7 +276,9 @@ namespace NzbDrone.Core.Books.Calibre
|
||||
|
||||
var updatedPath = GetOriginalFormat(updated.Formats);
|
||||
|
||||
if (updatedPath != file.Path)
|
||||
_logger.Trace("File path from Calibre: '{0}'", updatedPath);
|
||||
|
||||
if (updatedPath.IsNotNullOrWhiteSpace() && updatedPath != file.Path)
|
||||
{
|
||||
_rootFolderWatchingService.ReportFileSystemChangeBeginning(updatedPath);
|
||||
file.Path = updatedPath;
|
||||
@@ -304,6 +307,7 @@ namespace NzbDrone.Core.Books.Calibre
|
||||
|
||||
var request = builder.Build();
|
||||
request.SetContent(payload.ToJson());
|
||||
request.ContentSummary = payload.ToJson(Formatting.None);
|
||||
|
||||
_httpClient.Execute(request);
|
||||
}
|
||||
|
||||
@@ -322,6 +322,20 @@ namespace NzbDrone.Core.Configuration
|
||||
}
|
||||
}
|
||||
|
||||
public void MigrateConfigFile()
|
||||
{
|
||||
if (!File.Exists(_configFile))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// If SSL is enabled and a cert hash is still in the config file disable SSL
|
||||
if (EnableSsl && GetValue("SslCertHash", null).IsNotNullOrWhiteSpace())
|
||||
{
|
||||
SetValue("EnableSsl", false);
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteOldValues()
|
||||
{
|
||||
var xDoc = LoadConfigFile();
|
||||
@@ -404,6 +418,7 @@ namespace NzbDrone.Core.Configuration
|
||||
|
||||
public void HandleAsync(ApplicationStartedEvent message)
|
||||
{
|
||||
MigrateConfigFile();
|
||||
EnsureDefaultConfigFile();
|
||||
DeleteOldValues();
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ namespace NzbDrone.Core.CustomFormats
|
||||
}
|
||||
}
|
||||
|
||||
return matches;
|
||||
return matches.OrderBy(x => x.Name).ToList();
|
||||
}
|
||||
|
||||
private static List<CustomFormat> ParseCustomFormat(BookFile bookFile, Author author, List<CustomFormat> allCustomFormats)
|
||||
|
||||
@@ -9,9 +9,9 @@ namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
public interface IConnectionStringFactory
|
||||
{
|
||||
string MainDbConnectionString { get; }
|
||||
string LogDbConnectionString { get; }
|
||||
string CacheDbConnectionString { get; }
|
||||
DatabaseConnectionInfo MainDbConnection { get; }
|
||||
DatabaseConnectionInfo LogDbConnection { get; }
|
||||
DatabaseConnectionInfo CacheDbConnection { get; }
|
||||
string GetDatabasePath(string connectionString);
|
||||
}
|
||||
|
||||
@@ -23,19 +23,19 @@ namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
_configFileProvider = configFileProvider;
|
||||
|
||||
MainDbConnectionString = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresMainDb) :
|
||||
MainDbConnection = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresMainDb) :
|
||||
GetConnectionString(appFolderInfo.GetDatabase());
|
||||
|
||||
LogDbConnectionString = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresLogDb) :
|
||||
LogDbConnection = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresLogDb) :
|
||||
GetConnectionString(appFolderInfo.GetLogDatabase());
|
||||
|
||||
CacheDbConnectionString = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresCacheDb) :
|
||||
CacheDbConnection = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresCacheDb) :
|
||||
GetConnectionString(appFolderInfo.GetCacheDatabase());
|
||||
}
|
||||
|
||||
public string MainDbConnectionString { get; private set; }
|
||||
public string LogDbConnectionString { get; private set; }
|
||||
public string CacheDbConnectionString { get; private set; }
|
||||
public DatabaseConnectionInfo MainDbConnection { get; private set; }
|
||||
public DatabaseConnectionInfo LogDbConnection { get; private set; }
|
||||
public DatabaseConnectionInfo CacheDbConnection { get; private set; }
|
||||
|
||||
public string GetDatabasePath(string connectionString)
|
||||
{
|
||||
@@ -44,37 +44,40 @@ namespace NzbDrone.Core.Datastore
|
||||
return connectionBuilder.DataSource;
|
||||
}
|
||||
|
||||
private static string GetConnectionString(string dbPath)
|
||||
private static DatabaseConnectionInfo GetConnectionString(string dbPath)
|
||||
{
|
||||
var connectionBuilder = new SQLiteConnectionStringBuilder();
|
||||
|
||||
connectionBuilder.DataSource = dbPath;
|
||||
connectionBuilder.CacheSize = -10000;
|
||||
connectionBuilder.DateTimeKind = DateTimeKind.Utc;
|
||||
connectionBuilder.JournalMode = OsInfo.IsOsx ? SQLiteJournalModeEnum.Truncate : SQLiteJournalModeEnum.Wal;
|
||||
connectionBuilder.Pooling = true;
|
||||
connectionBuilder.Version = 3;
|
||||
var connectionBuilder = new SQLiteConnectionStringBuilder
|
||||
{
|
||||
DataSource = dbPath,
|
||||
CacheSize = -20000,
|
||||
DateTimeKind = DateTimeKind.Utc,
|
||||
JournalMode = OsInfo.IsOsx ? SQLiteJournalModeEnum.Truncate : SQLiteJournalModeEnum.Wal,
|
||||
Pooling = true,
|
||||
Version = 3,
|
||||
BusyTimeout = 100
|
||||
};
|
||||
|
||||
if (OsInfo.IsOsx)
|
||||
{
|
||||
connectionBuilder.Add("Full FSync", true);
|
||||
}
|
||||
|
||||
return connectionBuilder.ConnectionString;
|
||||
return new DatabaseConnectionInfo(DatabaseType.SQLite, connectionBuilder.ConnectionString);
|
||||
}
|
||||
|
||||
private string GetPostgresConnectionString(string dbName)
|
||||
private DatabaseConnectionInfo GetPostgresConnectionString(string dbName)
|
||||
{
|
||||
var connectionBuilder = new NpgsqlConnectionStringBuilder();
|
||||
var connectionBuilder = new NpgsqlConnectionStringBuilder
|
||||
{
|
||||
Database = dbName,
|
||||
Host = _configFileProvider.PostgresHost,
|
||||
Username = _configFileProvider.PostgresUser,
|
||||
Password = _configFileProvider.PostgresPassword,
|
||||
Port = _configFileProvider.PostgresPort,
|
||||
Enlist = false
|
||||
};
|
||||
|
||||
connectionBuilder.Database = dbName;
|
||||
connectionBuilder.Host = _configFileProvider.PostgresHost;
|
||||
connectionBuilder.Username = _configFileProvider.PostgresUser;
|
||||
connectionBuilder.Password = _configFileProvider.PostgresPassword;
|
||||
connectionBuilder.Port = _configFileProvider.PostgresPort;
|
||||
connectionBuilder.Enlist = false;
|
||||
|
||||
return connectionBuilder.ConnectionString;
|
||||
return new DatabaseConnectionInfo(DatabaseType.PostgreSQL, connectionBuilder.ConnectionString);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
14
src/NzbDrone.Core/Datastore/DatabaseConnectionInfo.cs
Normal file
14
src/NzbDrone.Core/Datastore/DatabaseConnectionInfo.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
public class DatabaseConnectionInfo
|
||||
{
|
||||
public DatabaseConnectionInfo(DatabaseType databaseType, string connectionString)
|
||||
{
|
||||
DatabaseType = databaseType;
|
||||
ConnectionString = connectionString;
|
||||
}
|
||||
|
||||
public DatabaseType DatabaseType { get; internal set; }
|
||||
public string ConnectionString { get; internal set; }
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Data.Common;
|
||||
using System.Data.SQLite;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading;
|
||||
using NLog;
|
||||
using Npgsql;
|
||||
using NzbDrone.Common.Disk;
|
||||
@@ -59,30 +60,30 @@ namespace NzbDrone.Core.Datastore
|
||||
|
||||
public IDatabase Create(MigrationContext migrationContext)
|
||||
{
|
||||
string connectionString;
|
||||
DatabaseConnectionInfo connectionInfo;
|
||||
|
||||
switch (migrationContext.MigrationType)
|
||||
{
|
||||
case MigrationType.Main:
|
||||
{
|
||||
connectionString = _connectionStringFactory.MainDbConnectionString;
|
||||
CreateMain(connectionString, migrationContext);
|
||||
connectionInfo = _connectionStringFactory.MainDbConnection;
|
||||
CreateMain(connectionInfo.ConnectionString, migrationContext, connectionInfo.DatabaseType);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case MigrationType.Log:
|
||||
{
|
||||
connectionString = _connectionStringFactory.LogDbConnectionString;
|
||||
CreateLog(connectionString, migrationContext);
|
||||
connectionInfo = _connectionStringFactory.LogDbConnection;
|
||||
CreateLog(connectionInfo.ConnectionString, migrationContext, connectionInfo.DatabaseType);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case MigrationType.Cache:
|
||||
{
|
||||
connectionString = _connectionStringFactory.CacheDbConnectionString;
|
||||
CreateLog(connectionString, migrationContext);
|
||||
connectionInfo = _connectionStringFactory.CacheDbConnection;
|
||||
CreateLog(connectionInfo.ConnectionString, migrationContext, connectionInfo.DatabaseType);
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -97,14 +98,14 @@ namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
DbConnection conn;
|
||||
|
||||
if (connectionString.Contains(".db"))
|
||||
if (connectionInfo.DatabaseType == DatabaseType.SQLite)
|
||||
{
|
||||
conn = SQLiteFactory.Instance.CreateConnection();
|
||||
conn.ConnectionString = connectionString;
|
||||
conn.ConnectionString = connectionInfo.ConnectionString;
|
||||
}
|
||||
else
|
||||
{
|
||||
conn = new NpgsqlConnection(connectionString);
|
||||
conn = new NpgsqlConnection(connectionInfo.ConnectionString);
|
||||
}
|
||||
|
||||
conn.Open();
|
||||
@@ -114,12 +115,12 @@ namespace NzbDrone.Core.Datastore
|
||||
return db;
|
||||
}
|
||||
|
||||
private void CreateMain(string connectionString, MigrationContext migrationContext)
|
||||
private void CreateMain(string connectionString, MigrationContext migrationContext, DatabaseType databaseType)
|
||||
{
|
||||
try
|
||||
{
|
||||
_restoreDatabaseService.Restore();
|
||||
_migrationController.Migrate(connectionString, migrationContext);
|
||||
_migrationController.Migrate(connectionString, migrationContext, databaseType);
|
||||
}
|
||||
catch (SQLiteException e)
|
||||
{
|
||||
@@ -142,15 +143,17 @@ namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
Logger.Error(e, "Failure to connect to Postgres DB, {0} retries remaining", retryCount);
|
||||
|
||||
Thread.Sleep(5000);
|
||||
|
||||
try
|
||||
{
|
||||
_migrationController.Migrate(connectionString, migrationContext);
|
||||
_migrationController.Migrate(connectionString, migrationContext, databaseType);
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (--retryCount > 0)
|
||||
{
|
||||
System.Threading.Thread.Sleep(5000);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -169,11 +172,11 @@ namespace NzbDrone.Core.Datastore
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateLog(string connectionString, MigrationContext migrationContext)
|
||||
private void CreateLog(string connectionString, MigrationContext migrationContext, DatabaseType databaseType)
|
||||
{
|
||||
try
|
||||
{
|
||||
_migrationController.Migrate(connectionString, migrationContext);
|
||||
_migrationController.Migrate(connectionString, migrationContext, databaseType);
|
||||
}
|
||||
catch (SQLiteException e)
|
||||
{
|
||||
@@ -193,7 +196,7 @@ namespace NzbDrone.Core.Datastore
|
||||
Logger.Error("Unable to recreate logging database automatically. It will need to be removed manually.");
|
||||
}
|
||||
|
||||
_migrationController.Migrate(connectionString, migrationContext);
|
||||
_migrationController.Migrate(connectionString, migrationContext, databaseType);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
{
|
||||
public interface IMigrationController
|
||||
{
|
||||
void Migrate(string connectionString, MigrationContext migrationContext);
|
||||
void Migrate(string connectionString, MigrationContext migrationContext, DatabaseType databaseType);
|
||||
}
|
||||
|
||||
public class MigrationController : IMigrationController
|
||||
@@ -29,7 +29,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
_migrationLoggerProvider = migrationLoggerProvider;
|
||||
}
|
||||
|
||||
public void Migrate(string connectionString, MigrationContext migrationContext)
|
||||
public void Migrate(string connectionString, MigrationContext migrationContext, DatabaseType databaseType)
|
||||
{
|
||||
var sw = Stopwatch.StartNew();
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
|
||||
ServiceProvider serviceProvider;
|
||||
|
||||
var db = connectionString.Contains(".db") ? "sqlite" : "postgres";
|
||||
var db = databaseType == DatabaseType.SQLite ? "sqlite" : "postgres";
|
||||
|
||||
serviceProvider = new ServiceCollection()
|
||||
.AddLogging(b => b.AddNLog())
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.CustomFormats;
|
||||
using NzbDrone.Core.Download.TrackedDownloads;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
@@ -15,16 +16,19 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
private readonly IQueueService _queueService;
|
||||
private readonly UpgradableSpecification _upgradableSpecification;
|
||||
private readonly ICustomFormatCalculationService _formatService;
|
||||
private readonly IConfigService _configService;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public QueueSpecification(IQueueService queueService,
|
||||
UpgradableSpecification upgradableSpecification,
|
||||
ICustomFormatCalculationService formatService,
|
||||
IConfigService configService,
|
||||
Logger logger)
|
||||
{
|
||||
_queueService = queueService;
|
||||
_upgradableSpecification = upgradableSpecification;
|
||||
_formatService = formatService;
|
||||
_configService = configService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
@@ -85,6 +89,15 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
{
|
||||
return Decision.Reject("Another release is queued and the Quality profile does not allow upgrades");
|
||||
}
|
||||
|
||||
if (_upgradableSpecification.IsRevisionUpgrade(remoteBook.ParsedBookInfo.Quality, subject.ParsedBookInfo.Quality))
|
||||
{
|
||||
if (_configService.DownloadPropersAndRepacks == ProperDownloadTypes.DoNotUpgrade)
|
||||
{
|
||||
_logger.Debug("Auto downloading of propers is disabled");
|
||||
return Decision.Reject("Proper downloading is disabled");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Decision.Accept();
|
||||
|
||||
@@ -368,6 +368,10 @@ namespace NzbDrone.Core.Extras.Metadata
|
||||
_mediaFileAttributeService.SetFilePermissions(fullPath);
|
||||
}
|
||||
}
|
||||
catch (HttpException ex)
|
||||
{
|
||||
_logger.Warn(ex, "Couldn't download image {0} for {1}. {2}", image.Url, author, ex.Message);
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
_logger.Warn(ex, "Couldn't download image {0} for {1}. {2}", image.Url, author, ex.Message);
|
||||
|
||||
@@ -67,41 +67,51 @@ namespace NzbDrone.Core.ImportLists
|
||||
|
||||
private List<Book> SyncAll()
|
||||
{
|
||||
if (_importListFactory.AutomaticAddEnabled().Empty())
|
||||
{
|
||||
_logger.Debug("No import lists with automatic add enabled");
|
||||
|
||||
return new List<Book>();
|
||||
}
|
||||
|
||||
_logger.ProgressInfo("Starting Import List Sync");
|
||||
|
||||
var rssReleases = _listFetcherAndParser.Fetch();
|
||||
var listItems = _listFetcherAndParser.Fetch().ToList();
|
||||
|
||||
var reports = rssReleases.ToList();
|
||||
|
||||
return ProcessReports(reports);
|
||||
return ProcessListItems(listItems);
|
||||
}
|
||||
|
||||
private List<Book> SyncList(ImportListDefinition definition)
|
||||
{
|
||||
_logger.ProgressInfo(string.Format("Starting Import List Refresh for List {0}", definition.Name));
|
||||
_logger.ProgressInfo($"Starting Import List Refresh for List {definition.Name}");
|
||||
|
||||
var rssReleases = _listFetcherAndParser.FetchSingleList(definition);
|
||||
var listItems = _listFetcherAndParser.FetchSingleList(definition).ToList();
|
||||
|
||||
var reports = rssReleases.ToList();
|
||||
|
||||
return ProcessReports(reports);
|
||||
return ProcessListItems(listItems);
|
||||
}
|
||||
|
||||
private List<Book> ProcessReports(List<ImportListItemInfo> reports)
|
||||
private List<Book> ProcessListItems(List<ImportListItemInfo> items)
|
||||
{
|
||||
var processed = new List<Book>();
|
||||
var authorsToAdd = new List<Author>();
|
||||
var booksToAdd = new List<Book>();
|
||||
|
||||
_logger.ProgressInfo("Processing {0} list items", reports.Count);
|
||||
if (items.Count == 0)
|
||||
{
|
||||
_logger.ProgressInfo("No list items to process");
|
||||
|
||||
return new List<Book>();
|
||||
}
|
||||
|
||||
_logger.ProgressInfo("Processing {0} list items", items.Count);
|
||||
|
||||
var reportNumber = 1;
|
||||
|
||||
var listExclusions = _importListExclusionService.All();
|
||||
|
||||
foreach (var report in reports)
|
||||
foreach (var report in items)
|
||||
{
|
||||
_logger.ProgressTrace("Processing list item {0}/{1}", reportNumber, reports.Count);
|
||||
_logger.ProgressTrace("Processing list item {0}/{1}", reportNumber, items.Count);
|
||||
|
||||
reportNumber++;
|
||||
|
||||
@@ -130,7 +140,7 @@ namespace NzbDrone.Core.ImportLists
|
||||
var addedAuthors = _addAuthorService.AddAuthors(authorsToAdd, false);
|
||||
var addedBooks = _addBookService.AddBooks(booksToAdd, false);
|
||||
|
||||
var message = string.Format($"Import List Sync Completed. Items found: {reports.Count}, Authors added: {authorsToAdd.Count}, Books added: {booksToAdd.Count}");
|
||||
var message = string.Format($"Import List Sync Completed. Items found: {items.Count}, Authors added: {authorsToAdd.Count}, Books added: {booksToAdd.Count}");
|
||||
|
||||
_logger.ProgressInfo(message);
|
||||
|
||||
@@ -364,7 +374,7 @@ namespace NzbDrone.Core.ImportLists
|
||||
var existingAuthor = _authorService.FindById(report.AuthorGoodreadsId);
|
||||
|
||||
// Check to see if author excluded
|
||||
var excludedAuthor = listExclusions.Where(s => s.ForeignId == report.AuthorGoodreadsId).SingleOrDefault();
|
||||
var excludedAuthor = listExclusions.SingleOrDefault(s => s.ForeignId == report.AuthorGoodreadsId);
|
||||
|
||||
// Check to see if author in import
|
||||
var existingImportAuthor = authorsToAdd.Find(i => i.ForeignAuthorId == report.AuthorGoodreadsId);
|
||||
@@ -425,16 +435,7 @@ namespace NzbDrone.Core.ImportLists
|
||||
|
||||
public void Execute(ImportListSyncCommand message)
|
||||
{
|
||||
List<Book> processed;
|
||||
|
||||
if (message.DefinitionId.HasValue)
|
||||
{
|
||||
processed = SyncList(_importListFactory.Get(message.DefinitionId.Value));
|
||||
}
|
||||
else
|
||||
{
|
||||
processed = SyncAll();
|
||||
}
|
||||
var processed = message.DefinitionId.HasValue ? SyncList(_importListFactory.Get(message.DefinitionId.Value)) : SyncAll();
|
||||
|
||||
_eventAggregator.PublishEvent(new ImportListSyncCompleteEvent(processed));
|
||||
}
|
||||
|
||||
@@ -53,7 +53,6 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
yield return GetDefinition("NZBFinder.ws", GetSettings("https://nzbfinder.ws"));
|
||||
yield return GetDefinition("NZBgeek", GetSettings("https://api.nzbgeek.info"));
|
||||
yield return GetDefinition("nzbplanet.net", GetSettings("https://api.nzbplanet.net"));
|
||||
yield return GetDefinition("OZnzb.com", GetSettings("https://api.oznzb.com"));
|
||||
yield return GetDefinition("SimplyNZBs", GetSettings("https://simplynzbs.com"));
|
||||
yield return GetDefinition("Tabula Rasa", GetSettings("https://www.tabula-rasa.pw", apiPath: @"/api/v1/api"));
|
||||
yield return GetDefinition("Usenet Crawler", GetSettings("https://www.usenet-crawler.com"));
|
||||
|
||||
@@ -85,16 +85,15 @@ namespace NzbDrone.Core.Instrumentation
|
||||
|
||||
log.Level = logEvent.Level.Name;
|
||||
|
||||
var connectionString = _connectionStringFactory.LogDbConnectionString;
|
||||
var connectionInfo = _connectionStringFactory.LogDbConnection;
|
||||
|
||||
//TODO: Probably need more robust way to differentiate what's being used
|
||||
if (connectionString.Contains(".db"))
|
||||
if (connectionInfo.DatabaseType == DatabaseType.SQLite)
|
||||
{
|
||||
WriteSqliteLog(log, connectionString);
|
||||
WriteSqliteLog(log, connectionInfo.ConnectionString);
|
||||
}
|
||||
else
|
||||
{
|
||||
WritePostgresLog(log, connectionString);
|
||||
WritePostgresLog(log, connectionInfo.ConnectionString);
|
||||
}
|
||||
}
|
||||
catch (SQLiteException ex)
|
||||
|
||||
@@ -216,8 +216,6 @@
|
||||
"FileManagement": "إدارة الملفات",
|
||||
"FileDateHelpText": "تغيير تاريخ الملف عند الاستيراد / إعادة الفحص",
|
||||
"FailedDownloadHandling": "فشل معالجة التنزيل",
|
||||
"ExtraFileExtensionsHelpTexts2": "أمثلة: \".sub أو .nfo\" أو \"sub، nfo\"",
|
||||
"ExtraFileExtensionsHelpTexts1": "قائمة مفصولة بفواصل بالملفات الإضافية المراد استيرادها (سيتم استيراد .nfo كـ .nfo-Orig)",
|
||||
"Exception": "استثناء",
|
||||
"ErrorLoadingPreviews": "خطأ في تحميل المعاينات",
|
||||
"ErrorLoadingContents": "خطأ في تحميل المحتويات",
|
||||
@@ -628,5 +626,7 @@
|
||||
"AddNew": "اضف جديد",
|
||||
"System": "النظام",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "يتم إخفاء جميع النتائج بواسطة عامل التصفية المطبق",
|
||||
"Backup": "دعم"
|
||||
"Backup": "دعم",
|
||||
"ExtraFileExtensionsHelpText": "قائمة مفصولة بفواصل بالملفات الإضافية المراد استيرادها (سيتم استيراد .nfo كـ .nfo-Orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "أمثلة: \".sub أو .nfo\" أو \"sub، nfo\""
|
||||
}
|
||||
|
||||
@@ -122,8 +122,6 @@
|
||||
"ErrorLoadingContents": "Грешка при зареждането на съдържанието",
|
||||
"ErrorLoadingPreviews": "Грешка при зареждането на визуализациите",
|
||||
"Exception": "Изключение",
|
||||
"ExtraFileExtensionsHelpTexts1": "Списък с допълнителни файлове за импортиране, разделени със запетая (.nfo ще бъде импортиран като .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Примери: '.sub, .nfo' или 'sub, nfo'",
|
||||
"FailedDownloadHandling": "Неуспешно обработване на изтеглянето",
|
||||
"FileDateHelpText": "Променете датата на файла при импортиране / пресканиране",
|
||||
"FileManagement": "Управление на файлове",
|
||||
@@ -628,5 +626,7 @@
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Всички резултати са скрити от приложения филтър",
|
||||
"Backup": "Архивиране",
|
||||
"MetadataProfiles": "Добави профил на метадата",
|
||||
"MetadataProfile": "Добави профил на метадата"
|
||||
"MetadataProfile": "Добави профил на метадата",
|
||||
"ExtraFileExtensionsHelpText": "Списък с допълнителни файлове за импортиране, разделени със запетая (.nfo ще бъде импортиран като .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Примери: '.sub, .nfo' или 'sub, nfo'"
|
||||
}
|
||||
|
||||
@@ -326,7 +326,6 @@
|
||||
"DownloadClientStatusCheckAllClientMessage": "Tots els clients de descàrrega no estan disponibles a causa d'errors",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Baixa els clients no disponibles a causa d'errors: {0}",
|
||||
"Duration": "durada",
|
||||
"ExtraFileExtensionsHelpTexts1": "Llista separada per comes de fitxers addicionals per importar (.nfo s'importarà com a .nfo-orig)",
|
||||
"FileWasDeletedByViaUI": "El fitxer s'ha suprimit mitjançant la interfície d'usuari",
|
||||
"GeneralSettingsSummary": "Port, SSL, nom d'usuari/contrasenya, servidor intermediari, analítiques i actualitzacions",
|
||||
"GrabRelease": "Captura novetat",
|
||||
@@ -528,7 +527,6 @@
|
||||
"CutoffUnmet": "Tall no assolit",
|
||||
"DeleteDelayProfileMessageText": "Esteu segur que voleu suprimir aquest perfil de retard?",
|
||||
"DeleteImportListExclusionMessageText": "Esteu segur que voleu suprimir aquesta exclusió de la llista d'importació?",
|
||||
"ExtraFileExtensionsHelpTexts2": "Exemples: '.sub, .nfo' o 'sub,nfo'",
|
||||
"HasPendingChangesSaveChanges": "Desa els canvis",
|
||||
"ICalLink": "Enllaç iCal`",
|
||||
"IgnoredHelpText": "La publicació es rebutjarà si conté un o més dels termes (no distingeix entre majúscules i minúscules)",
|
||||
|
||||
@@ -80,19 +80,19 @@
|
||||
"DeleteDelayProfile": "Odstranění profilu zpoždění",
|
||||
"DeleteDelayProfileMessageText": "Opravdu chcete smazat tento profil zpoždění?",
|
||||
"DeleteDownloadClient": "Odstranění klienta pro stahování",
|
||||
"DeleteDownloadClientMessageText": "Opravdu chcete odstranit klienta pro stahování „{0}“?",
|
||||
"DeleteDownloadClientMessageText": "Opravdu chcete odstranit klienta pro stahování '{name}'?",
|
||||
"DeleteEmptyFolders": "Odstraňte prázdné složky",
|
||||
"DeleteEmptyFoldersHelpText": "Během skenování disku a při mazání filmových souborů odstraňte prázdné složky s filmy",
|
||||
"DeleteImportListExclusion": "Odstranit vyloučení seznamu importů",
|
||||
"DeleteImportListExclusionMessageText": "Opravdu chcete toto vyloučení importního seznamu smazat?",
|
||||
"DeleteImportListMessageText": "Opravdu chcete smazat seznam „{0}“?",
|
||||
"DeleteImportListMessageText": "Opravdu chcete smazat seznam '{name}'?",
|
||||
"DeleteIndexer": "Odstranit indexer",
|
||||
"DeleteIndexerMessageText": "Opravdu chcete odstranit indexer „{0}“?",
|
||||
"DeleteMetadataProfileMessageText": "Opravdu chcete smazat kvalitní profil {0}",
|
||||
"DeleteIndexerMessageText": "Opravdu chcete odstranit indexer '{name}'?",
|
||||
"DeleteMetadataProfileMessageText": "Opravdu chcete smazat profil metadat '{name}'?",
|
||||
"DeleteNotification": "Smazat oznámení",
|
||||
"DeleteNotificationMessageText": "Opravdu chcete smazat oznámení „{0}“?",
|
||||
"DeleteNotificationMessageText": "Opravdu chcete smazat oznámení '{name}'?",
|
||||
"DeleteQualityProfile": "Smažte profil kvality",
|
||||
"DeleteQualityProfileMessageText": "Opravdu chcete smazat kvalitní profil {0}",
|
||||
"DeleteQualityProfileMessageText": "Opravdu chcete smazat profil kvality '{name}'?",
|
||||
"DeleteReleaseProfile": "Smazat profil zpoždění",
|
||||
"DeleteReleaseProfileMessageText": "Opravdu chcete smazat tento profil zpoždění?",
|
||||
"DeleteSelectedBookFiles": "Odstranit vybrané filmové soubory",
|
||||
@@ -128,8 +128,6 @@
|
||||
"ErrorLoadingContents": "Chyba při načítání obsahu",
|
||||
"ErrorLoadingPreviews": "Chyba při načítání náhledů",
|
||||
"Exception": "Výjimka",
|
||||
"ExtraFileExtensionsHelpTexts1": "Seznam extra souborů k importu oddělených čárkami (.nfo bude importován jako .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Příklady: „.sub, .nfo“ nebo „sub, nfo“",
|
||||
"FailedDownloadHandling": "Zpracování stahování se nezdařilo",
|
||||
"FileDateHelpText": "Změnit datum souboru při importu / opětovném skenování",
|
||||
"FileManagement": "Správa souborů",
|
||||
@@ -588,23 +586,23 @@
|
||||
"Required": "Požadované",
|
||||
"NoEventsFound": "Nebyly nalezeny žádné události",
|
||||
"RedownloadFailed": "Stažení se nezdařilo",
|
||||
"DeleteSelectedImportListsMessageText": "Opravdu chcete odstranit indexer „{0}“?",
|
||||
"DeleteSelectedImportListsMessageText": "Opravdu chcete smazat {count} vybraných seznamů k importu?",
|
||||
"DeleteSelectedIndexers": "Odstranit indexer",
|
||||
"ExistingTag": "Stávající značka",
|
||||
"ApplyTagsHelpTextHowToApplyAuthors": "Jak použít značky na vybrané filmy",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Opravdu chcete odstranit indexer „{0}“?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Opravdu chcete smazat {count} vybraných klientů pro stahování?",
|
||||
"No": "Ne",
|
||||
"NoChange": "Žádná změna",
|
||||
"RemovingTag": "Odebírání značky",
|
||||
"SetTags": "Nastavit značky",
|
||||
"ApplyTagsHelpTextAdd": "Přidat: Přidá značky k již existujícímu seznamu",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Jak použít značky na vybrané klienty pro stahování",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Jak použít značky na vybrané importní seznamy",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Jak použít značky na vybrané indexátory",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Jak použít značky na vybrané seznamy k importu",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Jak použít značky na vybrané indexery",
|
||||
"ApplyTagsHelpTextRemove": "Odebrat: Odebrat zadané značky",
|
||||
"ApplyTagsHelpTextReplace": "Nahradit: Nahradit značky zadanými značkami (zadáním žádné značky vymažete všechny značky)",
|
||||
"DeleteSelectedDownloadClients": "Odstranit staženého klienta",
|
||||
"DeleteSelectedIndexersMessageText": "Opravdu chcete odstranit indexer „{0}“?",
|
||||
"ApplyTagsHelpTextReplace": "Nahradit: Nahradit značky zadanými značkami (prázdné pole vymaže všechny značky)",
|
||||
"DeleteSelectedDownloadClients": "Odstranit klienta pro stahování",
|
||||
"DeleteSelectedIndexersMessageText": "Opravdu chcete smazat {count} vybraný(ch) indexer(ů)?",
|
||||
"Yes": "Ano",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Všechny seznamy nejsou k dispozici z důvodu selhání",
|
||||
"Small": "Malý",
|
||||
@@ -624,7 +622,7 @@
|
||||
"TotalSpace": "Celkový prostor",
|
||||
"ConnectionLost": "Spojení ztraceno",
|
||||
"ConnectionLostReconnect": "{appName} se pokusí připojit automaticky, nebo můžete kliknout na tlačítko znovunačtení níže.",
|
||||
"ConnectionLostToBackend": "{appName} ztratila spojení s backendem a pro obnovení funkčnosti bude třeba ji znovu načíst.",
|
||||
"ConnectionLostToBackend": "{appName} ztratil spojení s backendem a pro obnovení funkčnosti bude třebaho znovu načíst.",
|
||||
"Large": "Velký",
|
||||
"LastDuration": "lastDuration",
|
||||
"Ui": "UI",
|
||||
@@ -645,8 +643,8 @@
|
||||
"CloneCondition": "Klonovat podmínku",
|
||||
"Clone": "Klonovat",
|
||||
"ApiKeyValidationHealthCheckMessage": "Aktualizujte svůj klíč API tak, aby měl alespoň {0} znaků. Můžete to provést prostřednictvím nastavení nebo konfiguračního souboru",
|
||||
"ChooseImportMethod": "Vyberte mód importu",
|
||||
"CatalogNumber": "katalogové číslo",
|
||||
"ChooseImportMethod": "Vyberte způsob importu",
|
||||
"CatalogNumber": "Katalogové číslo",
|
||||
"Publisher": "Vydavatel",
|
||||
"StatusEndedContinuing": "Pokračující",
|
||||
"MetadataProfiles": "profil metadat",
|
||||
@@ -655,7 +653,7 @@
|
||||
"Label": "Etiketa",
|
||||
"Library": "Knihovna",
|
||||
"BypassIfAboveCustomFormatScore": "Obejít, pokud je vyšší než skóre vlastního formátu",
|
||||
"AppUpdatedVersion": "{appName} byla aktualizována na verzi `{version}`, abyste získali nejnovější změny, musíte znovu načíst {appName}.",
|
||||
"AppUpdatedVersion": "{appName} byl aktualizován na verzi `{version}`, abyste získali nejnovější změny, musíte znovu načíst {appName}",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Povolit obcházení, pokud má vydání vyšší skóre, než je nakonfigurované minimální skóre vlastního formátu",
|
||||
"BypassIfHighestQuality": "Obejít v případě nejvyšší kvality",
|
||||
"Theme": "Motiv",
|
||||
@@ -663,5 +661,27 @@
|
||||
"Series": "Seriál",
|
||||
"DeleteCondition": "Odstranit podmínku",
|
||||
"Database": "Databáze",
|
||||
"CountDownloadClientsSelected": "{count} vybraných klientů ke stahování"
|
||||
"CountDownloadClientsSelected": "{count} vybraných klientů ke stahování",
|
||||
"ImportListMissingRoot": "Chybí kořenový adresář pro import seznamu: {0}",
|
||||
"IndexerDownloadClientHelpText": "Zvolte, který klient pro stahování bude použit pro zachytávání z toho indexeru",
|
||||
"ImportListMultipleMissingRoots": "Několik kořenových adresářů chybí pro seznamy importu: {0}",
|
||||
"EditSelectedDownloadClients": "Upravit vybrané klienty pro stahování",
|
||||
"EditSelectedIndexers": "Upravit vybrané indexery",
|
||||
"EnableProfile": "Povolit profil",
|
||||
"DeleteImportList": "Smazat seznam importovaných položek",
|
||||
"AddNewItem": "Přidat novou položku",
|
||||
"AddMissing": "Přidat chybějící",
|
||||
"EditSelectedImportLists": "Upravit vybrané seznamy k importu",
|
||||
"DeleteSelectedImportLists": "Smazat seznam k importu",
|
||||
"Duration": "Trvání",
|
||||
"DeleteRootFolder": "Smazat kořenový adresář",
|
||||
"DownloadClientTagHelpText": "Tohoto klienta pro stahování používat pouze pro filmy s alespoň jednou odpovídající značkou. Pro použití se všemi filmy ponechte prázdné pole.",
|
||||
"AddedAuthorSettings": "Nastavení umělce přidáno",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Klient stahování {downloadClientName} je nastaven na odstranění dokončených stahování. To může vést k tomu, že stahování budou z klienta odstraněna dříve, než je bude moci importovat {1}.",
|
||||
"IndexerTagsHelpText": "Tohoto klienta pro stahování používat pouze pro filmy s alespoň jednou odpovídající značkou. Pro použití se všemi filmy ponechte prázdné pole.",
|
||||
"BlocklistReleaseHelpText": "Zabránit {appName}u v opětovném sebrání tohoto vydání",
|
||||
"ListsSettingsSummary": "Seznam k importu",
|
||||
"ExtraFileExtensionsHelpText": "Seznam extra souborů k importu oddělených čárkami (.nfo bude importován jako .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Příklady: „.sub, .nfo“ nebo „sub, nfo“",
|
||||
"ImportLists": "Seznam k importu"
|
||||
}
|
||||
|
||||
@@ -123,8 +123,6 @@
|
||||
"ErrorLoadingContents": "Fejl ved indlæsning af indhold",
|
||||
"ErrorLoadingPreviews": "Fejl ved indlæsning af forhåndsvisning",
|
||||
"Exception": "Undtagelse",
|
||||
"ExtraFileExtensionsHelpTexts1": "Kommasepareret liste over ekstra filer, der skal importeres (.nfo importeres som .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Eksempler: '.sub, .nfo' eller 'sub, nfo'",
|
||||
"FailedDownloadHandling": "Fejlet Download Håndtering",
|
||||
"FileDateHelpText": "Skift fildato ved import / genscanning",
|
||||
"FileManagement": "Fil Håndtering",
|
||||
@@ -635,5 +633,7 @@
|
||||
"Large": "Stor",
|
||||
"Library": "Bibliotek",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Alle resultater skjules af det anvendte filter",
|
||||
"AddNewItem": "Tilføj Ny Genstand"
|
||||
"AddNewItem": "Tilføj Ny Genstand",
|
||||
"ExtraFileExtensionsHelpText": "Kommasepareret liste over ekstra filer, der skal importeres (.nfo importeres som .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Eksempler: '.sub, .nfo' eller 'sub, nfo'"
|
||||
}
|
||||
|
||||
@@ -122,8 +122,6 @@
|
||||
"ErrorLoadingContents": "Fehler beim laden der Inhalte",
|
||||
"ErrorLoadingPreviews": "Fehler beim laden der Vorschauen",
|
||||
"Exception": "Ausnahme",
|
||||
"ExtraFileExtensionsHelpTexts1": "Kommaseparierte Liste von Dateiendungen die als Extra Dateien importiert werden sollen ( .nfo wird in .nfo-orig umbenannt )",
|
||||
"ExtraFileExtensionsHelpTexts2": "Vorschläge: sub, nfo, srt, jpg",
|
||||
"FailedDownloadHandling": "Verarbeitung fehlgeschlagener Downloads",
|
||||
"FileDateHelpText": "Aktualisiere das Erstelldatum beim Import oder Re-Scan",
|
||||
"FileManagement": "Dateiverwaltung",
|
||||
@@ -240,32 +238,32 @@
|
||||
"PortNumber": "Port Nummer",
|
||||
"PosterSize": "Plakatgröße",
|
||||
"Profiles": "Profile",
|
||||
"Proper": "Proper",
|
||||
"Proper": "Korrekt",
|
||||
"PropersAndRepacks": "Propers und Repacks",
|
||||
"Protocol": "Protokoll",
|
||||
"ProtocolHelpText": "Wählen Sie, welche(s) Protokoll(e) verwendet werden soll(en) und welches Protokoll bei der Wahl zwischen ansonsten gleichwertigen Releases bevorzugt wird",
|
||||
"ProtocolHelpText": "Wählen Sie aus, welche(s) Protokoll(e) Sie verwenden möchten und welches Protokoll Sie bevorzugen, wenn Sie zwischen ansonsten gleichen Versionen wählen",
|
||||
"Proxy": "Proxy",
|
||||
"ProxyBypassFilterHelpText": "Verwende ',' als Trennzeichen und '*.' als Platzhalter für Subdomains",
|
||||
"ProxyPasswordHelpText": "Nur wenn ein Benutzername und Passwort erforderlich ist, muss es eingegeben werden. Ansonsten leer lassen.",
|
||||
"ProxyType": "Proxy Typ",
|
||||
"PublishedDate": "Veröffentlichungs Datum",
|
||||
"ProxyBypassFilterHelpText": "Verwenden Sie ',' als Trennzeichen und '*.' als Wildcard für Subdomains",
|
||||
"ProxyPasswordHelpText": "Sie müssen nur einen Benutzernamen und ein Passwort eingeben, wenn dies erforderlich ist. Andernfalls lassen Sie sie leer.",
|
||||
"ProxyType": "Proxy-Typ",
|
||||
"PublishedDate": "Veröffentlichungsdatum",
|
||||
"Quality": "Qualität",
|
||||
"QualityDefinitions": "Qualitätsdefinitionen",
|
||||
"QualityProfile": "Qualitätsprofil",
|
||||
"QualityProfiles": "Qualitätsprofile",
|
||||
"QualitySettings": "Qualitäts Einstellungen",
|
||||
"QualitySettings": "Qualitätseinstellungen",
|
||||
"Queue": "Warteschlange",
|
||||
"RSSSync": "RSS-Sync",
|
||||
"RSSSyncInterval": "RSS Synchronisierungs Intervall",
|
||||
"ReadTheWikiForMoreInformation": "Lese das Wiki für mehr Informationen",
|
||||
"ReadTheWikiForMoreInformation": "Lesen Sie das Wiki für weitere Informationen",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Jeder Indexer der den Newznab-Standard verwendet oder unten aufgelistet ist wird untertützt.",
|
||||
"ReadarrTags": "Radarr Tags",
|
||||
"Real": "Echt",
|
||||
"Reason": "Grund",
|
||||
"Real": "Real",
|
||||
"Reason": "Begründung",
|
||||
"RecycleBinCleanupDaysHelpText": "Auf 0 setzen um das automatische leeren des Papierkorbs zu deaktivieren",
|
||||
"RecycleBinCleanupDaysHelpTextWarning": "Datien im Papierkorb die älter sind als der gewählte Wert, werden endgültig gelöscht",
|
||||
"RecycleBinHelpText": "Gelöschte Filmdateien werden hierher verschoben anstatt sie direkt endgültig zu löschen",
|
||||
"RecyclingBinCleanup": "Papierkorb aufräumen",
|
||||
"RecyclingBinCleanup": "Papierkorb leeren",
|
||||
"Redownload": "Nochmal herunterladen",
|
||||
"Refresh": "Aktualisieren",
|
||||
"RefreshInformationAndScanDisk": "Metadaten aktualisieren und Festplatte scannen",
|
||||
@@ -435,7 +433,7 @@
|
||||
"YesCancel": "Ja, abbrechen",
|
||||
"BindAddressHelpTextWarning": "Erfordert einen Neustart",
|
||||
"LoadingBooksFailed": "Laden der Film-Dateien fehlgeschlagen",
|
||||
"ProxyUsernameHelpText": "Nur wenn ein Benutzername und Passwort erforderlich ist, muss es eingegeben werden. Ansonsten leer lassen.",
|
||||
"ProxyUsernameHelpText": "Sie müssen nur einen Benutzernamen und ein Passwort eingeben, wenn dies erforderlich ist. Andernfalls lassen Sie sie leer.",
|
||||
"SslPortHelpTextWarning": "Erfordert einen Neustart",
|
||||
"UnableToLoadMetadataProfiles": "Verzögerungsprofile konnten nicht geladen werden",
|
||||
"ApiKeyHelpTextWarning": "Erfordert einen Neustart",
|
||||
@@ -694,8 +692,8 @@
|
||||
"PathHelpText": "Stammordner für die Musikbibliothek",
|
||||
"ProxyCheckBadRequestMessage": "Proxy konnte nicht getestet werden. StatusCode: {0}",
|
||||
"ProxyCheckFailedToTestMessage": "Proxy konnte nicht getestet werden: {0}",
|
||||
"Queued": "In der Warteschlange",
|
||||
"RefreshAndScan": "Aktualisieren",
|
||||
"Queued": "In Warteschlange",
|
||||
"RefreshAndScan": "Aktualisieren und scannen",
|
||||
"SettingsRemotePathMappingRemotePathHelpText": "Root-Pfad zum Verzeichnis, auf das der Download-Client zugreift",
|
||||
"Yesterday": "Gestern",
|
||||
"UpdateAvailable": "Neue Version verfügbar",
|
||||
@@ -750,8 +748,8 @@
|
||||
"IfYouDontAddAnImportListExclusionAndTheAuthorHasAMetadataProfileOtherThanNoneThenThisBookMayBeReaddedDuringTheNextAuthorRefresh": "Wenn kein Ausschluss der Import Liste hinzugefügt wird und der Künstler ein anderes Metadaten Profil als 'Keine' hat, kann es passieren, dass dieses Album bei der nächsten Aktualisierung des Künstlers erneut hinzugefügt wird.",
|
||||
"MissingFromDisk": "Radarr konnte die Datei nicht auf der Festplatte finden, daher wurde die Verknüpfung auf die Datei aus der Datenbank entfernt",
|
||||
"ProxyCheckResolveIpMessage": "Fehler beim Auflösen der IP-Adresse für den konfigurierten Proxy-Host {0}",
|
||||
"QualitySettingsSummary": "Qualitätgrößen und Bennenung",
|
||||
"QueueIsEmpty": "Warteschlange ist leer",
|
||||
"QualitySettingsSummary": "Qualitätsgrößen und Namensgebung",
|
||||
"QueueIsEmpty": "Die Warteschlange ist leer",
|
||||
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "Lidarr unterstützt mehrere Listen für den Import von Alben und Künstlern in die Datenbank.",
|
||||
"TotalBookCountBooksTotalBookFileCountBooksWithFilesInterp": "{0} Titel insgesamt. {1} Titel mit Dateien.",
|
||||
"SearchFiltered": "Suche gefilterte",
|
||||
@@ -985,7 +983,7 @@
|
||||
"ConnectionLost": "Verbindung unterbrochen",
|
||||
"Events": "Events",
|
||||
"LastDuration": "Letzte Dauer",
|
||||
"RecentChanges": "Neuste Änderungen",
|
||||
"RecentChanges": "Kürzliche Änderungen",
|
||||
"System": "System",
|
||||
"WhatsNew": "Was gibt's Neues?",
|
||||
"NextExecution": "Nächste Ausführung",
|
||||
@@ -993,7 +991,9 @@
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Einige Ergebnisse werden wegen der aktiven Filter nicht angezeigt",
|
||||
"Medium": "Medium",
|
||||
"Activity": "Aktivität",
|
||||
"AddNew": "Hinzufügen",
|
||||
"AddNew": "Neue hinzufügen",
|
||||
"Backup": "Backups",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Keine Ergebnisse mit den ausgewählten Filtern"
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Keine Ergebnisse mit den ausgewählten Filtern",
|
||||
"AppUpdated": "{appName} aktualisiert",
|
||||
"AppUpdatedVersion": "{appName} wurde auf die Version `{version}` aktualisiert. Um die neusten Funktionen zu bekommen lade {appName} neu"
|
||||
}
|
||||
|
||||
@@ -124,8 +124,6 @@
|
||||
"ErrorLoadingContents": "Σφάλμα κατά τη φόρτωση περιεχομένων",
|
||||
"ErrorLoadingPreviews": "Σφάλμα κατά τη φόρτωση προεπισκοπήσεων",
|
||||
"Exception": "Εξαίρεση",
|
||||
"ExtraFileExtensionsHelpTexts1": "Λίστα πρόσθετων αρχείων που διαχωρίζονται με κόμμα για εισαγωγή (το .nfo θα εισαχθεί ως .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Παραδείγματα: «.sub, .nfo» ή «sub, nfo»",
|
||||
"FailedDownloadHandling": "Η Διαχείρηση Λήψης Απέτυχε",
|
||||
"FileDateHelpText": "Αλλαγή ημερομηνίας αρχείου κατά την εισαγωγή / επανασύνδεση",
|
||||
"FileManagement": "Διαχείρηση Αρχείων",
|
||||
@@ -996,5 +994,6 @@
|
||||
"Small": "Μικρό",
|
||||
"AppUpdated": "{appName} Ενημερώθηκε",
|
||||
"AppUpdatedVersion": "ξαναφορτωθεί",
|
||||
"AutoAdd": "Προσθήκη"
|
||||
"AutoAdd": "Προσθήκη",
|
||||
"ErrorLoadingContent": "Υπήρξε ένα σφάλμα κατά τη φόρτωση του αρχείου"
|
||||
}
|
||||
|
||||
@@ -242,6 +242,7 @@
|
||||
"DeleteRemotePathMappingMessageText": "Are you sure you want to delete this remote path mapping?",
|
||||
"DeleteRootFolder": "Delete Root Folder",
|
||||
"DeleteRootFolderMessageText": "Are you sure you want to delete the root folder '{name}'?",
|
||||
"DeleteSelected": "Delete Selected",
|
||||
"DeleteSelectedBookFiles": "Delete Selected Book Files",
|
||||
"DeleteSelectedBookFilesMessageText": "Are you sure you want to delete the selected book files?",
|
||||
"DeleteSelectedDownloadClients": "Delete Download Client(s)",
|
||||
@@ -317,8 +318,8 @@
|
||||
"ExistingTag": "Existing tag",
|
||||
"ExistingTagsScrubbed": "Existing tags scrubbed",
|
||||
"ExportCustomFormat": "Export Custom Format",
|
||||
"ExtraFileExtensionsHelpTexts1": "Comma separated list of extra files to import (.nfo will be imported as .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Examples: \".sub, .nfo\" or \"sub,nfo\"",
|
||||
"ExtraFileExtensionsHelpText": "Comma separated list of extra files to import (.nfo will be imported as .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Examples: '.sub, .nfo' or 'sub,nfo'",
|
||||
"FailedDownloadHandling": "Failed Download Handling",
|
||||
"FailedToLoadQueue": "Failed to load Queue",
|
||||
"FileDateHelpText": "Change file date on import/rescan",
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
"60MinutesSixty": "60 Minutos: {0}",
|
||||
"APIKey": "Clave API",
|
||||
"About": "Acerca de",
|
||||
"AddListExclusion": "Añadir Exclusión De Lista",
|
||||
"AddListExclusion": "Agregar Lista de Exclusión",
|
||||
"AddingTag": "Añadir etiqueta",
|
||||
"AgeWhenGrabbed": "Antigüedad (cuando se añadió)",
|
||||
"AlreadyInYourLibrary": "Ya en tu biblioteca",
|
||||
"AlternateTitles": "Título alternativo",
|
||||
"AlternateTitles": "Titulos alternativos",
|
||||
"Analytics": "Analíticas",
|
||||
"AnalyticsEnabledHelpText": "Envíe información anónima de uso y error a los servidores de Radarr. Esto incluye información sobre su navegador, qué páginas de Radarr WebUI utiliza, informes de errores, así como el sistema operativo y la versión en tiempo de ejecución. Usaremos esta información para priorizar funciones y correcciones de errores.",
|
||||
"AnalyticsEnabledHelpTextWarning": "Requiere reiniciar para que surta efecto",
|
||||
@@ -45,9 +45,9 @@
|
||||
"CalendarWeekColumnHeaderHelpText": "Mostrado sobre cada columna cuando la vista activa es semana",
|
||||
"Cancel": "Cancelar",
|
||||
"CancelMessageText": "Seguro que quieres cancelar esta tarea pendiente?",
|
||||
"CertificateValidation": "Validación del certificado",
|
||||
"CertificateValidationHelpText": "Cambiar la rigidez de la validación de la certificación HTTPS",
|
||||
"ChangeFileDate": "Cambiar Fecha de Archivo",
|
||||
"CertificateValidation": "Validacion de certificado",
|
||||
"CertificateValidationHelpText": "Cambiar como es la validacion de la certificacion estricta de HTTPS. No cambiar a menos que entiendas las consecuencias.",
|
||||
"ChangeFileDate": "Cambiar fecha de archivo",
|
||||
"ChangeHasNotBeenSavedYet": "El cambio aún no se ha guardado",
|
||||
"ChmodFolder": "Carpeta chmod",
|
||||
"ChmodFolderHelpText": "Octal, aplicado durante la importación / cambio de nombre a carpetas y archivos multimedia (sin bits de ejecución)",
|
||||
@@ -56,12 +56,7 @@
|
||||
"ChownGroupHelpTextWarning": "Esto solo funciona si el usuario que ejecuta Radarr es el propietario del archivo. Es mejor asegurarse de que el cliente de descarga use el mismo grupo que Radarr.",
|
||||
"Clear": "Borrar",
|
||||
"ClickToChangeQuality": "Clic para cambiar la calidad",
|
||||
"ClientPriority": "Prioridad de Cliente",
|
||||
"CloneIndexer": "Clonar Indexer",
|
||||
"CloneProfile": "Clonar Perfil",
|
||||
"Close": "Cerrar",
|
||||
"Columns": "Columnas",
|
||||
"CompletedDownloadHandling": "Manipulación de descargas completas",
|
||||
"ConnectSettings": "Conectar Ajustes",
|
||||
"Connections": "Conexiones",
|
||||
"CopyUsingHardlinksHelpText": "Usar Hardlinks al intentar copiar ficheros de los torrents que siguen seedeando",
|
||||
@@ -77,23 +72,23 @@
|
||||
"DelayingDownloadUntilInterp": "Retrasar descarga hasta {0} en {1}",
|
||||
"Delete": "Borrar",
|
||||
"DeleteBackup": "Borrar Backup",
|
||||
"DeleteBackupMessageText": "Seguro que quieres eliminar la copia de seguridad '{0}'?",
|
||||
"DeleteBackupMessageText": "Seguro que quieres eliminar la copia de seguridad '{name}'?",
|
||||
"DeleteDelayProfile": "Borrar Perfil de Retraso",
|
||||
"DeleteDelayProfileMessageText": "Está seguro que quieres borrar este perfil de retraso?",
|
||||
"DeleteDownloadClient": "Borrar Gestor de Descargas",
|
||||
"DeleteDownloadClientMessageText": "Seguro que quieres eliminar el gestor de descargas '{0}'?",
|
||||
"DeleteDownloadClientMessageText": "Seguro que quieres eliminar el gestor de descargas '{name}'?",
|
||||
"DeleteEmptyFolders": "Borrar carpetas vacías",
|
||||
"DeleteEmptyFoldersHelpText": "Borrar carpetas vacías durante la exploración del disco y cuando se eliminen archivos",
|
||||
"DeleteImportListExclusion": "Borrar exclusión de lista de importación",
|
||||
"DeleteImportListExclusionMessageText": "Estás seguro de que quieres borrar esta exclusión de lista de importación?",
|
||||
"DeleteImportListMessageText": "Seguro que quieres eliminar la lista '{0}'?",
|
||||
"DeleteImportListMessageText": "Seguro que quieres eliminar la lista '{name}'?",
|
||||
"DeleteIndexer": "Borrar Indexer",
|
||||
"DeleteIndexerMessageText": "Seguro que quieres eliminar el indexer '{0}'?",
|
||||
"DeleteMetadataProfileMessageText": "Seguro que quieres eliminar el perfil de calidad {0}",
|
||||
"DeleteIndexerMessageText": "Seguro que quieres eliminar el indexer '{name}'?",
|
||||
"DeleteMetadataProfileMessageText": "¿Seguro que quieres eliminar el perfil de metadatos '{name}'?",
|
||||
"DeleteNotification": "Borrar Notificación",
|
||||
"DeleteNotificationMessageText": "Seguro que quieres elminiar la notificación '{0}'?",
|
||||
"DeleteNotificationMessageText": "¿Seguro que quieres eliminar la notificación '{name}'?",
|
||||
"DeleteQualityProfile": "Borrar Perfil de Calidad",
|
||||
"DeleteQualityProfileMessageText": "Seguro que quieres eliminar el perfil de calidad {0}",
|
||||
"DeleteQualityProfileMessageText": "¿Seguro que quieres eliminar el perfil de calidad {name}?",
|
||||
"DeleteReleaseProfile": "Borrar Perfil de Retraso",
|
||||
"DeleteReleaseProfileMessageText": "Está seguro que quieres borrar este perfil de retraso?",
|
||||
"DeleteSelectedBookFiles": "Borrar Archivos Seleccionados",
|
||||
@@ -129,8 +124,6 @@
|
||||
"ErrorLoadingContents": "Error al cargar los contenidos",
|
||||
"ErrorLoadingPreviews": "Error al cargar las previsualizaciones",
|
||||
"Exception": "Excepción",
|
||||
"ExtraFileExtensionsHelpTexts1": "Separar con cons la lista de los archivos extra a importar (.nfo será impotado como .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Ejemplos : '.sub, .nfo' o 'sub,nfo'",
|
||||
"FailedDownloadHandling": "Manipulación de Descargas Fallidas",
|
||||
"FileDateHelpText": "Cambiar la fecha del archivo al importar/rescan",
|
||||
"FileManagement": "Administración de Archivos",
|
||||
@@ -154,7 +147,7 @@
|
||||
"GrabSelected": "Capturar Seleccionados",
|
||||
"HasPendingChangesNoChanges": "Sin Cambios",
|
||||
"HasPendingChangesSaveChanges": "Guardar Cambios",
|
||||
"History": "Historia",
|
||||
"History": "Historial",
|
||||
"Host": "Host",
|
||||
"Hostname": "Nombre del Host",
|
||||
"ICalFeed": "iCal Feed",
|
||||
@@ -210,7 +203,7 @@
|
||||
"MinimumLimits": "Límites Mínimos",
|
||||
"Missing": "Falta",
|
||||
"Mode": "Modo",
|
||||
"Monitored": "Monitoreada",
|
||||
"Monitored": "Monitorizado",
|
||||
"MoreInfo": "Más Información",
|
||||
"MustContain": "Debe Contener",
|
||||
"MustNotContain": "No Debe Contener",
|
||||
@@ -440,7 +433,7 @@
|
||||
"YesCancel": "Sí, Cancelar",
|
||||
"20MinutesTwenty": "20 Minutos: {0}",
|
||||
"DownloadClientCheckDownloadingToRoot": "El cliente de descargas {0} coloca las descargas en la carpeta raíz {1}. No debe descargar a una carpeta raíz.",
|
||||
"MaintenanceRelease": "Lanzamiento de mantenimiento",
|
||||
"MaintenanceRelease": "Lanzamiento de mantenimiento: Corrección de errores y otras mejoras. Ver historial de commits de Github para mas detalle",
|
||||
"ReplaceIllegalCharactersHelpText": "Reemplazar caracteres ilegales. Si está desactivado, Radarr los eliminará si no",
|
||||
"Actions": "Acciones",
|
||||
"Today": "Hoy",
|
||||
@@ -462,7 +455,7 @@
|
||||
"Level": "Nivel",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Las versión {0} no es una versión válida de Radarr, no recibirás actualizaciones",
|
||||
"Blocklist": "Bloqueadas",
|
||||
"BlocklistRelease": "Bloquear este Estreno",
|
||||
"BlocklistRelease": "Lista de lanzamientos bloqueados",
|
||||
"CreateEmptyAuthorFolders": "Crear carpetas de películas vacías",
|
||||
"SelectAll": "Seleccionar Todas",
|
||||
"SelectedCountBooksSelectedInterp": "{0} Película(s) Seleccionada(s)",
|
||||
@@ -599,7 +592,6 @@
|
||||
"BypassIfHighestQuality": "Pasar sí es la calidad más alta",
|
||||
"CustomFormatScore": "Puntuación de Formato personalizado",
|
||||
"MinimumCustomFormatScore": "Puntuación mínima de formato personalizado",
|
||||
"CloneCustomFormat": "Clonar Formato Personalizado",
|
||||
"Conditions": "Condiciones",
|
||||
"CopyToClipboard": "Copiar al portapapeles",
|
||||
"CustomFormat": "Formatos Personalizados",
|
||||
@@ -617,7 +609,7 @@
|
||||
"ThemeHelpText": "Cambia el tema de la interfaz de usuario de la aplicación. El tema \"automático\" utilizará el tema de tu sistema operativo para establecer el modo claro u oscuro. Inspirado por Theme.Park",
|
||||
"CustomFormatSettings": "Ajustes de Formatos Propios",
|
||||
"CutoffFormatScoreHelpText": "Una vez alcanzada esta puntuación del formato propio Radarr dejará de descargar películas",
|
||||
"DeleteCustomFormatMessageText": "Seguro que quieres eliminar el indexer '{0}'?",
|
||||
"DeleteCustomFormatMessageText": "Seguro que quieres eliminar el indexer '{name}'?",
|
||||
"ExportCustomFormat": "Exportar Formato Personalizado",
|
||||
"ResetTitles": "Restablecer títulos",
|
||||
"UpgradesAllowed": "Mejoras permitidas",
|
||||
@@ -630,12 +622,11 @@
|
||||
"HideAdvanced": "Ocultar Avanzado",
|
||||
"ShowAdvanced": "Mostrar Avanzado",
|
||||
"ShownClickToHide": "Mostrado, clic para ocultar",
|
||||
"ColonReplacement": "Reemplazo dos puntos",
|
||||
"ReplaceWithDash": "Reemplazar con Dash",
|
||||
"ReplaceWithSpaceDash": "Reemplazar con Space Dash",
|
||||
"ReplaceWithSpaceDashSpace": "Reemplazar con Space Dash Space",
|
||||
"DeleteRemotePathMapping": "Editar Mapeo de Ruta Remota",
|
||||
"BlocklistReleases": "Bloquear este Estreno",
|
||||
"BlocklistReleases": "Lista de lanzamientos bloqueados",
|
||||
"DeleteConditionMessageText": "Seguro que quieres eliminar la etiqueta '{0}'?",
|
||||
"Negated": "Negado",
|
||||
"RemoveSelectedItem": "Eliminar el elemento seleccionado",
|
||||
@@ -649,21 +640,21 @@
|
||||
"BlocklistReleaseHelpText": "Evita que Radarr vuelva a capturar esta película automáticamente",
|
||||
"NoEventsFound": "No se encontraron eventos",
|
||||
"ApplyTagsHelpTextHowToApplyAuthors": "Cómo añadir etiquetas a las películas seleccionadas",
|
||||
"DeleteSelectedIndexersMessageText": "Seguro que quieres eliminar el indexer '{0}'?",
|
||||
"DeleteSelectedIndexersMessageText": "¿Está seguro de querer eliminar {count} indexador(es) seleccionado(s)?",
|
||||
"Yes": "Sí",
|
||||
"RedownloadFailed": "La descarga ha fallado",
|
||||
"RemoveCompleted": "Eliminación completada",
|
||||
"RemoveDownloadsAlert": "Los ajustes de eliminación se han trasladado a los ajustes individuales del cliente de descarga en la tabla anterior.",
|
||||
"RemoveFailed": "La eliminación falló",
|
||||
"ApplyTagsHelpTextAdd": "Añadir: Añadir a las etiquetas la lista existente de etiquetas",
|
||||
"ApplyTagsHelpTextAdd": "Añadir: Añadir las etiquetas la lista existente de etiquetas",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Cómo añadir etiquetas a los clientes de descargas seleccionados",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Cómo añadir etiquetas a las listas de importación seleccionadas",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Cómo añadir etiquetas a los indexadores seleccionados",
|
||||
"ApplyTagsHelpTextRemove": "Eliminar: Eliminar las etiquetas introducidas",
|
||||
"ApplyTagsHelpTextReplace": "Reemplazar: Reemplazar las etiquetas con las etiquetas introducidas (no introducir etiquetas para eliminar todas las etiquetas)",
|
||||
"DeleteSelectedDownloadClients": "Borrar Gestor de Descargas",
|
||||
"DeleteSelectedDownloadClientsMessageText": "¿Está seguro de querer eliminar {0} cliente(s) de descarga seleccionado(s)?",
|
||||
"DeleteSelectedImportListsMessageText": "Seguro que quieres eliminar el indexer '{0}'?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "¿Está seguro de querer eliminar {count} cliente(s) de descarga seleccionado(s)?",
|
||||
"DeleteSelectedImportListsMessageText": "Seguro que quieres eliminar {count} lista(s) de importación seleccionada(s)?",
|
||||
"DeleteSelectedIndexers": "Borrar Indexer",
|
||||
"DownloadClientTagHelpText": "Solo utilizar este indexador para películas que coincidan con al menos una etiqueta. Déjelo en blanco para utilizarlo con todas las películas.",
|
||||
"ExistingTag": "Etiqueta existente",
|
||||
@@ -705,7 +696,7 @@
|
||||
"TotalSpace": "Espacio Total",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexadores con clientes de descarga inválidos: {0}.",
|
||||
"ManageImportLists": "Gestionar Listas de Importación",
|
||||
"ConnectionLostToBackend": "Radarr ha perdido su conexión con el backend y tendrá que ser recargado para recuperar su funcionalidad.",
|
||||
"ConnectionLostToBackend": "{appName} ha perdido su conexión con el backend y necesitará ser recargada para restaurar su funcionalidad.",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Listas no disponibles debido a errores: {0}",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Las listas no están disponibles debido a errores",
|
||||
"ReleaseProfiles": "perfil de lanzamiento",
|
||||
@@ -723,7 +714,7 @@
|
||||
"NextExecution": "Siguiente ejecución",
|
||||
"NoResultsFound": "No se han encontrado resultados",
|
||||
"RecentChanges": "Cambios recientes",
|
||||
"WhatsNew": "¿Qué hay de nuevo?",
|
||||
"WhatsNew": "Que es lo nuevo?",
|
||||
"Loading": "Cargando",
|
||||
"Events": "Eventos",
|
||||
"Medium": "Medio",
|
||||
@@ -746,7 +737,7 @@
|
||||
"ASIN": "ASIN",
|
||||
"AnyEditionOkHelpText": "Readarr cambiará automáticamente a la edición que mejor coincida con los archivos descargados",
|
||||
"AppUpdated": "{appName} Actualizada",
|
||||
"AppUpdatedVersion": "{appName} ha sido actualizado a la versión `{version}`, para obtener los cambios más recientes, necesitaras recargar {appName}",
|
||||
"AppUpdatedVersion": "{appName} ha sido actualizado a la versión `{version}`, para obtener los cambios más recientes necesitará recargar {appName}",
|
||||
"AuthorFolderFormat": "Formato de Carpeta de Autor",
|
||||
"AuthorNameHelpText": "El nombre del autor/libro a excluir (puede ser cualquier cosa significativa)",
|
||||
"BookMonitoring": "Monitoreo de libros",
|
||||
@@ -755,5 +746,25 @@
|
||||
"Book": "Libro",
|
||||
"AutomaticallySwitchEdition": "Cambiar edición automáticamente",
|
||||
"BookNaming": "Nombrado de libros",
|
||||
"Books": "Libro"
|
||||
"Books": "Libro",
|
||||
"NoHistoryBlocklist": "Sin lista de bloqueo de historial",
|
||||
"WouldYouLikeToRestoreBackup": "Te gustaria restaurar la copia de seguridad '{name}'?",
|
||||
"IsShowingMonitoredUnmonitorSelected": "Monitorizar Seleccionados",
|
||||
"CloneCustomFormat": "Clonar formato personalizado",
|
||||
"MinimumCustomFormatScoreHelpText": "Puntuación mínima de formato personalizado necesaria para evitar el retraso del protocolo preferido",
|
||||
"BypassIfAboveCustomFormatScore": "Omitir si está por encima de la puntuación del formato personalizado",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Habilitar ignorar cuando la versión tenga una puntuación superior a la puntuación mínima configurada para el formato personalizado",
|
||||
"IsShowingMonitoredMonitorSelected": "Monitorizar Seleccionados",
|
||||
"ClientPriority": "Prioridad del Cliente",
|
||||
"ColonReplacement": "Reemplazar dos puntos",
|
||||
"CloneProfile": "Clonar Perfil",
|
||||
"Close": "Cerrar",
|
||||
"CloneIndexer": "Clonar Indexer",
|
||||
"CompletedDownloadHandling": "Manipulación de descargas completas",
|
||||
"EnableProfile": "Habilitar perfil",
|
||||
"ListsSettingsSummary": "lista de importación",
|
||||
"ExtraFileExtensionsHelpText": "Separar con cons la lista de los archivos extra a importar (.nfo será impotado como .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Ejemplos : '.sub, .nfo' o 'sub,nfo'",
|
||||
"ImportLists": "lista de importación",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El cliente de descarga {downloadClientName} esta configurado para eliminar las descargas completadas. Esto puede causar que las descargas sean eliminadas del cliente antes que {1} las pueda importar."
|
||||
}
|
||||
|
||||
@@ -123,8 +123,6 @@
|
||||
"ErrorLoadingContents": "Sisällönlatauksen virhe",
|
||||
"ErrorLoadingPreviews": "Virhe ladattaessa esikatselua",
|
||||
"Exception": "Poikkeus",
|
||||
"ExtraFileExtensionsHelpTexts1": "Pilkulla eroteltu lista tuotavista oheistiedostoista (.nfo tuodaan nimellä .nfo-orig).",
|
||||
"ExtraFileExtensionsHelpTexts2": "Esimerkkejä: '.sub, .nfo' tai 'sub, nfo'.",
|
||||
"FailedDownloadHandling": "Latauksen käsittely epäonnistui",
|
||||
"FileDateHelpText": "Muuta tiedoston päiväys tuonnin ja uudelleentarkistuksen yhteydessä.",
|
||||
"FileManagement": "Tiedostojen hallinta",
|
||||
@@ -883,5 +881,7 @@
|
||||
"AutomaticUpdatesDisabledDocker": "Suoraa automaattista päivitystä ei tueta käytettäessä Dockerin päivitysmekanismia. Joko Docker-säiliö on päivitettävä {appName}in ulkopuolella tai päivitys on suoritettava skriptillä.",
|
||||
"AppUpdated": "{appName} on päivitetty",
|
||||
"AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on ladattava uudelleen.",
|
||||
"Iso639-3": "ISO 639-3 -kielikoodit tai \"null\" (pilkuin eroteltuna)"
|
||||
"Iso639-3": "ISO 639-3 -kielikoodit tai \"null\" (pilkuin eroteltuna)",
|
||||
"ExtraFileExtensionsHelpText": "Pilkulla eroteltu lista tuotavista oheistiedostoista (.nfo tuodaan nimellä .nfo-orig).",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Esimerkkejä: '.sub, .nfo' tai 'sub, nfo'."
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
"DiskSpace": "Espace disque",
|
||||
"DownloadClient": "Client de téléchargement",
|
||||
"DownloadClientSettings": "Télécharger les paramètres client",
|
||||
"DownloadClients": "Clients de téléchargements",
|
||||
"DownloadClients": "Clients de téléchargement",
|
||||
"DownloadFailedCheckDownloadClientForMoreDetails": "Téléchargement échoué : voir le client de téléchargement pour plus de détails",
|
||||
"DownloadFailedInterp": "Échec du téléchargement : {0}",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "S'il faut ou non mettre à niveau automatiquement vers Propres/Repacks",
|
||||
@@ -132,15 +132,13 @@
|
||||
"ErrorLoadingContents": "Erreur lors du chargement du contenu",
|
||||
"ErrorLoadingPreviews": "Erreur lors du chargement des aperçus",
|
||||
"Exception": "Exception",
|
||||
"ExtraFileExtensionsHelpTexts1": "Liste séparée par des virgules des fichiers supplémentaires à importer (.nfo sera importé en tant que .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Exemples : '.sub, .nfo' ou 'sub,nfo'",
|
||||
"FailedDownloadHandling": "Gestion des échecs de téléchargement",
|
||||
"FileDateHelpText": "Changer la date du fichier lors de l'import/re-scan",
|
||||
"FileNames": "Noms de fichier",
|
||||
"Filename": "Nom de fichier",
|
||||
"Files": "Fichiers",
|
||||
"FirstDayOfWeek": "Premier jour de la semaine",
|
||||
"Fixed": "Fixé",
|
||||
"Fixed": "Corrigés",
|
||||
"Folder": "Dossier",
|
||||
"Folders": "Dossiers",
|
||||
"ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Pour plus d'informations sur les clients de téléchargement individuels, cliquez sur les boutons d'information.",
|
||||
@@ -158,7 +156,7 @@
|
||||
"HasPendingChangesNoChanges": "Aucune modification",
|
||||
"HasPendingChangesSaveChanges": "Sauvegarder les modifications",
|
||||
"History": "Historique",
|
||||
"Hostname": "Hostname",
|
||||
"Hostname": "Nom d'hôte",
|
||||
"ICalFeed": "Flux iCal",
|
||||
"ICalHttpUrlHelpText": "Copiez cette URL dans votre/vos client(s) ou cliquez pour abonner si votre navigateur est compatible avec webcal",
|
||||
"ICalLink": "Lien iCal",
|
||||
@@ -246,7 +244,7 @@
|
||||
"PortNumber": "Numéro de port",
|
||||
"PosterSize": "Poster taille",
|
||||
"PreviewRename": "Aperçu Renommer",
|
||||
"Profiles": "Profiles",
|
||||
"Profiles": "Profils",
|
||||
"Proper": "Approprié",
|
||||
"PropersAndRepacks": "Propres et Repacks",
|
||||
"Protocol": "Protocole",
|
||||
@@ -398,7 +396,7 @@
|
||||
"UnableToLoadDownloadClientOptions": "Impossible de charger les options du client de téléchargement",
|
||||
"UnableToLoadDownloadClients": "Impossible de charger les clients de téléchargement",
|
||||
"UnableToLoadGeneralSettings": "Impossible de charger les paramètres généraux",
|
||||
"UnableToLoadHistory": "Impossible de charger l'historique",
|
||||
"UnableToLoadHistory": "Impossible de charger l'historique.",
|
||||
"UnableToLoadImportListExclusions": "Impossible de charger les exclusions de liste",
|
||||
"UnableToLoadIndexerOptions": "Impossible de charger les options de l'indexeur",
|
||||
"UnableToLoadIndexers": "Impossible de charger les indexeurs",
|
||||
@@ -502,7 +500,7 @@
|
||||
"Save": "Sauvegarder",
|
||||
"BackupIntervalHelpText": "Intervalle entre les sauvegardes automatiques",
|
||||
"CatalogNumber": "Numéro de catalogue",
|
||||
"Metadata": "Metadonnées",
|
||||
"Metadata": "Métadonnées",
|
||||
"Disabled": "Désactivé",
|
||||
"IndexersSettingsSummary": "Indexeurs et restrictions de version",
|
||||
"OnUpgrade": "Lors de la mise à niveau",
|
||||
@@ -525,7 +523,7 @@
|
||||
"ImportListStatusCheckAllClientMessage": "Toutes les listes ne sont pas disponibles en raison d'échecs",
|
||||
"ImportMechanismHealthCheckMessage": "Activer la gestion des téléchargements terminés",
|
||||
"IndexerRssHealthCheckNoIndexers": "Aucun indexeur disponible avec la synchronisation RSS activée, Readarr ne récupérera pas automatiquement les nouvelles versions",
|
||||
"CouldntFindAnyResultsForTerm": "Pas de résultats pour '{0}'",
|
||||
"CouldntFindAnyResultsForTerm": "Aucun résultat pour de résultats pour '{0}'",
|
||||
"ReadarrSupportsAnyDownloadClient": "Readarr prend en charge de nombreux clients de téléchargement torrent et usenet.",
|
||||
"RefreshAndScan": "Actualiser et analyser",
|
||||
"RemotePathMappingCheckFileRemoved": "Le fichier {0} a été supprimé pendant le processus.",
|
||||
@@ -685,10 +683,10 @@
|
||||
"CopyToClipboard": "Copier dans le presse-papier",
|
||||
"CustomFormat": "Format personnalisé",
|
||||
"CustomFormatSettings": "Réglages Formats Personnalisés",
|
||||
"CustomFormats": "Formats perso.",
|
||||
"CustomFormats": "Formats personnalisés",
|
||||
"DeleteCustomFormat": "Supprimer le format personnalisé",
|
||||
"DeleteCustomFormatMessageText": "Voulez-vous vraiment supprimer le format personnalisé « {name} » ?",
|
||||
"DeleteFormatMessageText": "Êtes-vous sûr de vouloir supprimer le tag {0} ?",
|
||||
"DeleteFormatMessageText": "Êtes-vous sûr de vouloir supprimer le tag « {0} » ?",
|
||||
"ExportCustomFormat": "Exporter un format personnalisé",
|
||||
"Formats": "Formats",
|
||||
"IncludeCustomFormatWhenRenamingHelpText": "Inclus dans {Custom Formats} renommer le format",
|
||||
@@ -713,7 +711,7 @@
|
||||
"ApiKeyValidationHealthCheckMessage": "Veuillez mettre à jour votre clé API pour qu'elle contienne au moins {0} caractères. Vous pouvez le faire via les paramètres ou le fichier de configuration",
|
||||
"DeleteBookFile": "Effacer le fichier du livre",
|
||||
"HiddenClickToShow": "Masqué, cliquez pour afficher",
|
||||
"HideAdvanced": "Masquer param. av.",
|
||||
"HideAdvanced": "Masquer les Options Avancées",
|
||||
"ShowAdvanced": "Afficher les paramètres avancés",
|
||||
"ShownClickToHide": "Affiché, cliquez pour masquer",
|
||||
"ColonReplacement": "Remplacement pour le « deux-points »",
|
||||
@@ -831,7 +829,6 @@
|
||||
"DiscCount": "Nombre de disques",
|
||||
"IsExpandedHideFileInfo": "Masquer les informations sur le fichier",
|
||||
"OnReleaseImport": "Lors de l'importation de la version",
|
||||
"EnableProfile": "Activer le profil",
|
||||
"MetadataConsumers": "Consommateurs de métadonnées",
|
||||
"MusicBrainzRecordingID": "Identifiant d'enregistrement MusicBrainz",
|
||||
"OnDownloadFailureHelpText": "En cas d'échec de téléchargement",
|
||||
@@ -886,8 +883,48 @@
|
||||
"IndexerIdHelpText": "Spécifiez à quel indexeur le profil s'applique",
|
||||
"Monitoring": "Surveillance",
|
||||
"UnmappedFiles": "Fichiers non mappés",
|
||||
"Bookshelf": "Étagère à livres",
|
||||
"Bookshelf": "Bibliothèque",
|
||||
"ErrorLoadingContent": "Une erreur s'est produite lors du chargement de ce contenu",
|
||||
"OnReleaseImportHelpText": "Lors de l'importation de la version",
|
||||
"UnableToLoadMetadataProviderSettings": "Impossible de charger les paramètres du fournisseur de métadonnées"
|
||||
"UnableToLoadMetadataProviderSettings": "Impossible de charger les paramètres du fournisseur de métadonnées",
|
||||
"SearchForNewItems": "Rechercher de nouveaux éléments",
|
||||
"MonitorBookExistingOnlyWarning": "Il s’agit d’un ajustement unique du paramètre surveillé pour chaque album. Utilisez l'option sous Artiste/Modifier pour contrôler ce qui se passe pour les albums nouvellement ajoutés",
|
||||
"SearchForMonitoredBooks": "Rechercher des albums surveillés",
|
||||
"WriteAudioTagsScrub": "Effacer les balises existantes",
|
||||
"ShouldMonitorExistingHelpText": "Surveiller automatiquement les albums de cette liste qui sont déjà dans Lidarr",
|
||||
"IfYouDontAddAnImportListExclusionAndTheAuthorHasAMetadataProfileOtherThanNoneThenThisBookMayBeReaddedDuringTheNextAuthorRefresh": "Si vous n'ajoutez pas d'exclusion de liste d'importation et que l'artiste a un profil de métadonnées autre que « Aucun », cet album pourra être ajouté à nouveau lors de la prochaine actualisation de l'artiste.",
|
||||
"MetadataSettingsSummary": "Créez des fichiers de métadonnées lorsque les épisodes sont importés ou que les sites sont actualisés",
|
||||
"MonitoringOptionsHelpText": "Quels albums doivent être surveillés après l'ajout de l'artiste (ajustement unique)",
|
||||
"EnableAutomaticAddHelpText": "Ajoutez des artistes/albums à Lidarr lorsque les synchronisations sont effectuées via l'interface utilisateur ou par Lidarr",
|
||||
"IsInUseCantDeleteAMetadataProfileThatIsAttachedToAnAuthorOrImportList": "Impossible de supprimer un profil de métadonnées associé à un artiste ou à une liste d'importation",
|
||||
"ListsSettingsSummary": "Importer des listes",
|
||||
"ProfilesSettingsSummary": "Profils de qualité, de langue, de délai et de release",
|
||||
"SkipRedownloadHelpText": "Empêche Lidarr d'essayer de télécharger des versions alternatives pour les éléments supprimés",
|
||||
"CountAuthorsSelected": "{selectedCount} artiste(s) sélectionné(s)",
|
||||
"SearchForAllCutoffUnmetBooks": "Rechercher tous les albums de Cutoff Unmet",
|
||||
"WriteAudioTagsScrubHelp": "Supprimez les balises existantes des fichiers, en ne laissant que celles ajoutées par Lidarr.",
|
||||
"EndedAllBooksDownloaded": "Terminé (Toutes les pistes téléchargées)",
|
||||
"ForeignId": "ID étranger",
|
||||
"GoToAuthorListing": "Aller à la liste des artistes",
|
||||
"WriteAudioTags": "Baliser les fichiers audio avec des métadonnées",
|
||||
"TheBooksFilesWillBeDeleted": "Les fichiers de l'album seront supprimés.",
|
||||
"MonitorNewItemsHelpText": "Quels nouveaux albums doivent être surveillés",
|
||||
"MusicBrainzAuthorID": "Identifiant d'artiste MusicBrainz",
|
||||
"MusicBrainzBookID": "Identifiant de la piste MusicBrainz",
|
||||
"DeleteFilesHelpText": "Supprimez les fichiers de piste et le dossier de l'artiste",
|
||||
"ShowTitleHelpText": "Afficher le nom de l'artiste sous l'affiche",
|
||||
"WriteBookTagsHelpTextWarning": "La sélection de « Tous les fichiers » modifiera les fichiers existants lors de leur importation.",
|
||||
"IsInUseCantDeleteAQualityProfileThatIsAttachedToAnAuthorOrImportList": "Impossible de supprimer un profil de qualité associé à un artiste ou à une liste d'importation",
|
||||
"PathHelpText": "Dossier racine contenant votre bibliothèque musicale",
|
||||
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "Lidarr prend en charge plusieurs listes pour importer des albums et des artistes dans la base de données.",
|
||||
"TotalBookCountBooksTotalBookFileCountBooksWithFilesInterp": "{0} pistes au total. {1} pistes avec fichiers.",
|
||||
"SearchForAllMissingBooks": "Rechercher tous les albums manquants",
|
||||
"ForeignIdHelpText": "L'identifiant Musicbrainz de l'artiste/album à exclure",
|
||||
"EnableProfile": "Activer profil",
|
||||
"Development": "Développement",
|
||||
"FilesTotal": "Fichiers ({0})",
|
||||
"SearchBoxPlaceHolder": "Par ex. Guerre et Paix, goodreads:656, isbn:067003469X, asin:B00JCDK5ME",
|
||||
"ExtraFileExtensionsHelpText": "Liste de fichiers supplémentaires séparés par des virgules à importer (.nfo sera importé en tant que .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Exemples : '.sub, .nfo' ou 'sub,nfo'",
|
||||
"UseSSL": "Utiliser SSL"
|
||||
}
|
||||
|
||||
@@ -109,8 +109,6 @@
|
||||
"ErrorLoadingContents": "שגיאה בטעינת התוכן",
|
||||
"ErrorLoadingPreviews": "שגיאה בטעינת תצוגה מקדימה",
|
||||
"Exception": "יוצא מן הכלל",
|
||||
"ExtraFileExtensionsHelpTexts1": "רשימה מופרדת באמצעות פסיקים של קבצים נוספים לייבוא (.nfo יובא כ- nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "דוגמאות: '.sub, .nfo' או 'sub, nfo'",
|
||||
"FailedDownloadHandling": "הטיפול בהורדות נכשל",
|
||||
"FileDateHelpText": "שנה את תאריך הקובץ בעת הייבוא / סריקה מחדש",
|
||||
"FileManagement": "ניהול קבצים",
|
||||
@@ -657,5 +655,7 @@
|
||||
"System": "מערכת",
|
||||
"Theme": "ערכת נושא",
|
||||
"TotalSpace": "השטח הכולל",
|
||||
"Publisher": "מוציא לאור"
|
||||
"Publisher": "מוציא לאור",
|
||||
"ExtraFileExtensionsHelpText": "רשימה מופרדת באמצעות פסיקים של קבצים נוספים לייבוא (.nfo יובא כ- nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "דוגמאות: '.sub, .nfo' או 'sub, nfo'"
|
||||
}
|
||||
|
||||
@@ -114,8 +114,6 @@
|
||||
"ErrorLoadingContents": "सामग्री लोड करने में त्रुटि",
|
||||
"ErrorLoadingPreviews": "पूर्वावलोकन लोड करने में त्रुटि",
|
||||
"Exception": "अपवाद",
|
||||
"ExtraFileExtensionsHelpTexts1": "आयात करने के लिए कोमा ने अतिरिक्त फ़ाइलों की सूची अलग कर दी (.nfo को .nfo- मूल के रूप में आयात किया जाएगा)",
|
||||
"ExtraFileExtensionsHelpTexts2": "उदाहरण: '.sub, .nfo' या 'सब, nfo'",
|
||||
"FailedDownloadHandling": "डाउनलोड हैंडलिंग विफल",
|
||||
"FileDateHelpText": "आयात / रेस्क्यू पर फ़ाइल तिथि बदलें",
|
||||
"FileManagement": "फाइल प्रबंधन",
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"BackupFolderHelpText": "Az elérési útvonalak a Readarr AppData könyvtárában lesznek",
|
||||
"BackupNow": "Biztonsági Mentés Most",
|
||||
"BackupRetentionHelpText": "A megőrzési időnél régebbi automatikus biztonsági másolatok automatikusan törlésre kerülnek",
|
||||
"Backups": "Biztonsági Mentés",
|
||||
"Backups": "Biztonsági mentések",
|
||||
"BindAddress": "Kapcsolási Cím",
|
||||
"BindAddressHelpText": "Érvényes IPv4-cím, vagy „*” minden interfészhez",
|
||||
"BindAddressHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
|
||||
@@ -23,7 +23,7 @@
|
||||
"BypassProxyForLocalAddresses": "Proxy megkerülése a helyi hálózatos címekhez",
|
||||
"Calendar": "Naptár",
|
||||
"CalendarWeekColumnHeaderHelpText": "Minden oszlop felett jelenjen meg, hogy melyik hét az aktuális",
|
||||
"Cancel": "Vissza",
|
||||
"Cancel": "Mégse",
|
||||
"CancelMessageText": "Biztosan törlöd ezt a függőben lévő feladatot?",
|
||||
"CertificateValidation": "Tanúsítvány érvényesítése",
|
||||
"CertificateValidationHelpText": "Módosítsa a HTTPS-tanúsítvány-ellenőrzés szigorúságát. Ne változtasson, hacsak nem érti a kockázatokat.",
|
||||
@@ -109,8 +109,6 @@
|
||||
"ErrorLoadingContents": "Hiba történt a tartalom betöltésekor",
|
||||
"ErrorLoadingPreviews": "Hiba történt az előnézetek betöltése közben",
|
||||
"Exception": "Kivétel",
|
||||
"ExtraFileExtensionsHelpTexts1": "Az importálandó extra fájlok vesszővel lesznek elválasztva (.nfo .nfo-orig néven lesz importálva)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Például: '.sub, .nfo' vagy 'sub, nfo'",
|
||||
"FailedDownloadHandling": "Nem sikerült a letöltés kezelése",
|
||||
"FileDateHelpText": "A fájl dátumának módosítása az importáláskor / újrakereséskor",
|
||||
"FileManagement": "Fájlkezelő",
|
||||
@@ -857,7 +855,7 @@
|
||||
"LoadingEditionsFailed": "A kiadások betöltése nem sikerült",
|
||||
"ManualImportSelectEdition": "Kézi importálás – Válaszd ki a Kiadást",
|
||||
"Database": "Adatbázis",
|
||||
"ApplicationURL": "Alkalmazás URL-je",
|
||||
"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",
|
||||
"ChooseImportMethod": "Importálási mód kiválasztása",
|
||||
"ClickToChangeReleaseGroup": "Kiadási csoport módosítása",
|
||||
@@ -976,5 +974,8 @@
|
||||
"Activity": "Aktivitás",
|
||||
"AddNew": "Új hozzáadása",
|
||||
"Backup": "Biztonsági Mentés",
|
||||
"Medium": "Közepes"
|
||||
"Medium": "Közepes",
|
||||
"AutoAdd": "Automatikus hozzáadás",
|
||||
"ExtraFileExtensionsHelpText": "Az importálandó extra fájlok vesszővel lesznek elválasztva (.nfo .nfo-orig néven lesz importálva)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Például: '.sub, .nfo' vagy 'sub, nfo'"
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"Actions": "Tindakan",
|
||||
"AgeWhenGrabbed": "Usia (saat diperoleh)",
|
||||
"All": "Semua",
|
||||
"AlreadyInYourLibrary": "Sudah ada di pustaka kamu",
|
||||
"AlreadyInYourLibrary": "Sudah di pustakamu",
|
||||
"Analytics": "Analitik",
|
||||
"AnalyticsEnabledHelpText": "Kirimkan informasi penggunaan secara anonim ke server Radarr. Informasi tersebut mengandung browser kamu, halaman WebUI Radarr yang kamu gunakan, pelaporan masalah serta OS dan versi runtime. Kami akan memanfaatkan informasi ini untuk memprioritaskan fitur dan perbaikan bug.",
|
||||
"ApplicationURL": "URL Aplikasi",
|
||||
@@ -28,7 +28,7 @@
|
||||
"ClickToChangeQuality": "Klik untuk mengubah kualitas",
|
||||
"AlternateTitles": "Judul Lain",
|
||||
"AppDataDirectory": "Direktori AppData",
|
||||
"Connections": "Koleksi",
|
||||
"Connections": "Koneksi",
|
||||
"ExportCustomFormat": "Tambahkan Format Khusus",
|
||||
"AuthorClickToChangeBook": "Klik untuk mengubah film",
|
||||
"Automatic": "Otomatis",
|
||||
@@ -38,7 +38,7 @@
|
||||
"EnableRSS": "Aktifkan RSS",
|
||||
"MetadataSource": "Sumber Metadata",
|
||||
"Language": "Bahasa",
|
||||
"LogFiles": "Berkas Log",
|
||||
"LogFiles": "File Log",
|
||||
"MediaManagement": "Pengelolaan Media",
|
||||
"Metadata": "Metadata",
|
||||
"Queue": "Antrean",
|
||||
@@ -63,5 +63,27 @@
|
||||
"ProxyCheckFailedToTestMessage": "Gagal menguji proxy: {0}",
|
||||
"QualityProfiles": "Profil Kualitas",
|
||||
"StatusEndedEnded": "Berakhir",
|
||||
"UILanguageHelpText": "Bahasa yang digunakan UI Sonarr"
|
||||
"UILanguageHelpText": "Bahasa yang digunakan UI Sonarr",
|
||||
"Activity": "Aktivitas",
|
||||
"Backup": "Cadangan",
|
||||
"ConnectionLost": "Koneksi Terputus",
|
||||
"ConnectionLostReconnect": "{appName} akan mencoba untuk menghubungkan secara otomatis, atau silakan klik muat ulang di bawah.",
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Seluruh hasil disembunyikan karena penyaringan yang diterapkan",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Seluruh hasil disembunyikan karena penyaringan yang diterapkan",
|
||||
"Today": "Hari Ini",
|
||||
"TotalFileSize": "Jumlah Ukuran File",
|
||||
"Unmonitored": "Tidak Dimonitor",
|
||||
"ConnectSettings": "Pengaturan Koneksi",
|
||||
"Yesterday": "Kemarin",
|
||||
"ClickToChangeReleaseGroup": "Klik untuk mengubah rilis grup",
|
||||
"Connect": "Koneksi",
|
||||
"Continuing": "Berlanjut",
|
||||
"Edit": "Edit",
|
||||
"Files": "File",
|
||||
"AddNew": "Tambah",
|
||||
"Search": "Cari",
|
||||
"Refresh": "Muat Ulang",
|
||||
"ConnectionLostToBackend": "Koneksi {appName} telah terputus dari backend dan perlu dimuat ulang untuk dipulihkan.",
|
||||
"ApplyChanges": "Terapkan Perubahan",
|
||||
"History": "Riwayat"
|
||||
}
|
||||
|
||||
@@ -129,8 +129,6 @@
|
||||
"ErrorLoadingContents": "Villa við að hlaða innihald",
|
||||
"ErrorLoadingPreviews": "Villa við að hlaða forskoðun",
|
||||
"Exception": "Undantekning",
|
||||
"ExtraFileExtensionsHelpTexts1": "Komma aðskilinn listi yfir auka skrár til að flytja inn (.nfo verður fluttur inn sem .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Dæmi: '.sub, .nfo' eða 'sub, nfo'",
|
||||
"FailedDownloadHandling": "Mistókst niðurhalshöndlun",
|
||||
"FileDateHelpText": "Breyttu dagsetningu skráar við innflutning / endurskoðun",
|
||||
"FileManagement": "Skráastjórnun",
|
||||
|
||||
@@ -134,8 +134,6 @@
|
||||
"ErrorLoadingContents": "Errore nel caricare i contenuti",
|
||||
"ErrorLoadingPreviews": "Errore nel caricare le anteprime",
|
||||
"Exception": "Eccezione",
|
||||
"ExtraFileExtensionsHelpTexts1": "Liste di file Extra da importare separate da virgola (.nfo saranno importate come .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Esempi: '.sub, .nfo' or 'sub,nfo'",
|
||||
"FailedDownloadHandling": "Gestione dei Download Falliti",
|
||||
"FileDateHelpText": "Modifica la data dei file in importazione/rescan",
|
||||
"FileManagement": "Gestione dei File",
|
||||
|
||||
@@ -71,8 +71,6 @@
|
||||
"ErrorLoadingContents": "コンテンツの読み込み中にエラーが発生しました",
|
||||
"ErrorLoadingPreviews": "プレビューの読み込みエラー",
|
||||
"Exception": "例外",
|
||||
"ExtraFileExtensionsHelpTexts1": "インポートする追加ファイルのコンマ区切りリスト(.nfoは.nfo-origとしてインポートされます)",
|
||||
"ExtraFileExtensionsHelpTexts2": "例: '。sub、.nfo'または 'sub、nfo'",
|
||||
"FailedDownloadHandling": "ダウンロード処理の失敗",
|
||||
"FileDateHelpText": "インポート/再スキャン時にファイルの日付を変更する",
|
||||
"FileManagement": "ファイル管理",
|
||||
@@ -626,5 +624,7 @@
|
||||
"Medium": "中",
|
||||
"NoResultsFound": "結果が見つかりません",
|
||||
"Activity": "アクティビティ",
|
||||
"AddNew": "新しく追加する"
|
||||
"AddNew": "新しく追加する",
|
||||
"ExtraFileExtensionsHelpText": "インポートする追加ファイルのコンマ区切りリスト(.nfoは.nfo-origとしてインポートされます)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "例: '。sub、.nfo'または 'sub、nfo'"
|
||||
}
|
||||
|
||||
@@ -155,8 +155,6 @@
|
||||
"ErrorLoadingContents": "콘텐츠로드 오류",
|
||||
"ErrorLoadingPreviews": "미리보기를로드하는 중에 오류가 발생했습니다.",
|
||||
"Exception": "예외",
|
||||
"ExtraFileExtensionsHelpTexts1": "가져올 추가 파일의 쉼표로 구분 된 목록 (.nfo는 .nfo-orig로 가져옴)",
|
||||
"ExtraFileExtensionsHelpTexts2": "예 : '.sub, .nfo'또는 'sub, nfo'",
|
||||
"FailedDownloadHandling": "실패한 다운로드 처리",
|
||||
"FileDateHelpText": "가져 오기 / 재검색시 파일 날짜 변경",
|
||||
"FileManagement": "파일 관리",
|
||||
@@ -617,5 +615,7 @@
|
||||
"LastExecution": "마지막 실행",
|
||||
"Activity": "활동",
|
||||
"AddNew": "새로 추가하기",
|
||||
"Backup": "백업"
|
||||
"Backup": "백업",
|
||||
"ExtraFileExtensionsHelpText": "가져올 추가 파일의 쉼표로 구분 된 목록 (.nfo는 .nfo-orig로 가져옴)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "예 : '.sub, .nfo'또는 'sub, nfo'"
|
||||
}
|
||||
|
||||
@@ -1 +1,7 @@
|
||||
{}
|
||||
{
|
||||
"Actions": "Darbības",
|
||||
"About": "Par",
|
||||
"Activity": "Aktivitāte",
|
||||
"New": "Jauns",
|
||||
"ExportCustomFormat": "Pievienot Pielāgotu Formātu"
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"60MinutesSixty": "60 Minuten: {0}",
|
||||
"APIKey": "API-sleutel",
|
||||
"About": "Over",
|
||||
"AddListExclusion": "Toevoegen aan Uitzonderingenlijst",
|
||||
"AddListExclusion": "Lijst uitzondering toevoegen",
|
||||
"AddingTag": "Tag wordt toegevoegd",
|
||||
"AgeWhenGrabbed": "Leeftijd (op moment van ophalen)",
|
||||
"AlreadyInYourLibrary": "Reeds in uw bibliotheek",
|
||||
@@ -78,18 +78,18 @@
|
||||
"DelayingDownloadUntilInterp": "Vertraag download tot {0} op {1}",
|
||||
"Delete": "Verwijder",
|
||||
"DeleteBackup": "Verwijder Backup",
|
||||
"DeleteBackupMessageText": "Bent u zeker dat u de veiligheidskopie '{0}' wilt verwijderen?",
|
||||
"DeleteBackupMessageText": "Bent u zeker dat u de veiligheidskopie '{name}' wilt verwijderen?",
|
||||
"DeleteDelayProfile": "Verwijder Vertragingsprofiel",
|
||||
"DeleteDelayProfileMessageText": "Weet u zeker dat u dit vertragingsprofiel wilt verwijderen?",
|
||||
"DeleteDownloadClient": "Verwijder Downloader",
|
||||
"DeleteDownloadClientMessageText": "Bent u zeker dat u de downloader '{0}' wilt verwijderen?",
|
||||
"DeleteDownloadClientMessageText": "Bent u zeker dat u de downloader '{name}' wilt verwijderen?",
|
||||
"DeleteEmptyFolders": "Verwijder lege mappen",
|
||||
"DeleteEmptyFoldersHelpText": "Lege mappen verwijderen, tijdens de schijfscan en wanneer filmbestanden worden verwijderd",
|
||||
"DeleteImportListExclusion": "Verwijder van Uitzonderingenlijst",
|
||||
"DeleteImportListExclusionMessageText": "Bent u zeker dat u dit van de uitzonderingenlijst wilt verwijderen?",
|
||||
"DeleteImportListMessageText": "Bent u zeker dat u de lijst '{0}' wilt verwijderen?",
|
||||
"DeleteIndexer": "Verwijder Indexeerder",
|
||||
"DeleteIndexerMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
|
||||
"DeleteIndexerMessageText": "Bent u zeker dat u de indexeerder '{name}' wilt verwijderen?",
|
||||
"DeleteMetadataProfileMessageText": "Bent u zeker dat u het kwaliteitsprofiel {name} wilt verwijderen?",
|
||||
"DeleteNotification": "Verwijder Notificatie",
|
||||
"DeleteNotificationMessageText": "Bent u zeker dat u de notificatie '{0}' wilt verwijderen?",
|
||||
@@ -130,8 +130,6 @@
|
||||
"ErrorLoadingContents": "Fout bij laden van inhoud",
|
||||
"ErrorLoadingPreviews": "Fout bij laden van voorvertoningen",
|
||||
"Exception": "Uitzondering",
|
||||
"ExtraFileExtensionsHelpTexts1": "Komma gescheiden lijst met extra bestanden om te importeren (.nfo zal als .nfo-orig worden geïmporteerd)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Voorbeelden: '.sub, .nfo' of 'sub,nfo'",
|
||||
"FailedDownloadHandling": "Mislukte Download Afhandeling",
|
||||
"FileDateHelpText": "Pas bestandsdatum aan tijdens het importeren/herscannen",
|
||||
"FileManagement": "Bestandsbeheer",
|
||||
@@ -648,5 +646,7 @@
|
||||
"ApplyTagsHelpTextReplace": "Vervangen: Vervang de tags met de ingevoerde tags (vul geen tags in om alle tags te wissen)",
|
||||
"AutoAdd": "Automatisch Toevoegen",
|
||||
"Activity": "Activiteit",
|
||||
"AddNew": "Voeg Nieuwe Toe"
|
||||
"AddNew": "Voeg Nieuwe Toe",
|
||||
"AppUpdated": "{appName} is geüpdatet",
|
||||
"AppUpdatedVersion": "{appName} is geüpdatet naar versie '{version}', om de laatste wijzigingen door te voeren moet je mogelijk {appName} herstarten"
|
||||
}
|
||||
|
||||
@@ -149,8 +149,6 @@
|
||||
"ErrorLoadingContents": "Błąd podczas ładowania treści",
|
||||
"ErrorLoadingPreviews": "Błąd podczas ładowania podglądów",
|
||||
"Exception": "Wyjątek",
|
||||
"ExtraFileExtensionsHelpTexts1": "Rozdzielana przecinkami lista dodatkowych plików do zaimportowania (.nfo zostanie zaimportowane jako .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Przykłady: „.sub, .nfo” lub „sub, nfo”",
|
||||
"FailedDownloadHandling": "Nieudana obsługa pobierania",
|
||||
"FileDateHelpText": "Zmień datę pliku przy imporcie / ponownym skanowaniu",
|
||||
"FileManagement": "Zarządzanie plikami",
|
||||
@@ -676,5 +674,7 @@
|
||||
"Activity": "Aktywność",
|
||||
"AddNew": "Dodaj nowy",
|
||||
"Backup": "Kopia zapasowa",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Wszystkie wyniki są ukrywane przez zastosowany filtr"
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Wszystkie wyniki są ukrywane przez zastosowany filtr",
|
||||
"ExtraFileExtensionsHelpText": "Rozdzielana przecinkami lista dodatkowych plików do zaimportowania (.nfo zostanie zaimportowane jako .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Przykłady: „.sub, .nfo” lub „sub, nfo”"
|
||||
}
|
||||
|
||||
@@ -193,23 +193,23 @@
|
||||
"CutoffUnmet": "Limite não-correspondido",
|
||||
"DBMigration": "Migração da base de dados",
|
||||
"DeleteBackup": "Eliminar cópia de segurança",
|
||||
"DeleteBackupMessageText": "Tem a certeza que quer eliminar a cópia de segurança \"{0}\"?",
|
||||
"DeleteBackupMessageText": "Tem a certeza que quer eliminar a cópia de segurança \"{name}\"?",
|
||||
"DeleteDelayProfile": "Eliminar perfil de atraso",
|
||||
"DeleteDelayProfileMessageText": "Tem a certeza que quer eliminar este perfil de atraso?",
|
||||
"DeleteDownloadClient": "Eliminar cliente de transferências",
|
||||
"DeleteDownloadClientMessageText": "Tem a certeza que quer eliminar o cliente de transferências \"{0}\"?",
|
||||
"DeleteDownloadClientMessageText": "Tem a certeza que quer eliminar o cliente de transferências \"{name}\"?",
|
||||
"DeleteEmptyFolders": "Eliminar pastas vazias",
|
||||
"DeleteEmptyFoldersHelpText": "Eliminar pastas de filmes vazias durante a análise do disco e quando ficheiros de filmes forem eliminados",
|
||||
"DeleteImportListExclusion": "Eliminar exclusão da lista de importação",
|
||||
"DeleteImportListExclusionMessageText": "Tem a certeza que quer eliminar esta exclusão da lista de importação?",
|
||||
"DeleteImportListMessageText": "Tem a certeza que quer eliminar a lista \"{0}\"?",
|
||||
"DeleteImportListMessageText": "Tem a certeza de que pretende eliminar a lista '{name}'?",
|
||||
"DeleteIndexer": "Eliminar indexador",
|
||||
"DeleteIndexerMessageText": "Tem a certeza que quer eliminar o indexador \"{0}\"?",
|
||||
"DeleteIndexerMessageText": "Tem a certeza de que pretende eliminar o indexador '{name}'?",
|
||||
"DeleteMetadataProfileMessageText": "Tem a certeza que quer eliminar o perfil de qualidade \"{0}\"?",
|
||||
"DeleteNotification": "Eliminar notificação",
|
||||
"DeleteNotificationMessageText": "Tem a certeza que quer eliminar a notificação \"{0}\"?",
|
||||
"DeleteNotificationMessageText": "Tem a certeza que quer eliminar a notificação \"{name}\"?",
|
||||
"DeleteQualityProfile": "Eliminar perfil de qualidade",
|
||||
"DeleteQualityProfileMessageText": "Tem a certeza que quer eliminar o perfil de qualidade \"{0}\"?",
|
||||
"DeleteQualityProfileMessageText": "Tem a certeza de que pretende eliminar o perfil de qualidade '{name}'?",
|
||||
"DeleteReleaseProfile": "Eliminar perfil de versão",
|
||||
"DeleteReleaseProfileMessageText": "Tem a certeza que quer eliminar este perfil de versão?",
|
||||
"DeleteSelectedBookFiles": "Eliminar ficheiros de livro selecionados",
|
||||
@@ -246,8 +246,6 @@
|
||||
"ErrorLoadingContents": "Erro ao carregar conteúdo",
|
||||
"ErrorLoadingPreviews": "Erro ao carregar pré-visualizações",
|
||||
"Exception": "Exceção",
|
||||
"ExtraFileExtensionsHelpTexts1": "Lista separada por vírgulas de ficheiros adicionais a importar (.nfo será importado como .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Exemplos: \".sub, .nfo\" ou \"sub,nfo\"",
|
||||
"FailedDownloadHandling": "Falha no processamento de transferências",
|
||||
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Para obter mais informações sobre cada indexador, clique nos botões de informação.",
|
||||
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Para obter mais informações sobre cada lista, clique nos botões de informação.",
|
||||
@@ -457,7 +455,7 @@
|
||||
"IsCalibreLibraryHelpText": "Usar o servidor de conteúdo do Calibre para gerir a biblioteca",
|
||||
"IsInUseCantDeleteAMetadataProfileThatIsAttachedToAnAuthorOrImportList": "Não é possível eliminar um perfil de metadados anexado a um autor ou lista de importação",
|
||||
"LogRotation": "Rotação de logs",
|
||||
"MaintenanceRelease": "Versão de manutenção",
|
||||
"MaintenanceRelease": "Versão de manutenção: reparações de erros e outras melhorias. Consulte o Histórico de Commits do Github para saber mais",
|
||||
"MetadataSourceHelpText": "Origem alternativa de metadados (deixe em branco para usar o padrão)",
|
||||
"MinimumPages": "Mínimo de páginas",
|
||||
"MissingBooksAuthorNotMonitored": "Livros ausentes (autor não monitorado)",
|
||||
@@ -548,9 +546,9 @@
|
||||
"DeleteBookFileMessageText": "Tem a certeza que quer eliminar {0}?",
|
||||
"EndedAllBooksDownloaded": "Terminado (todos os livros transferidos)",
|
||||
"DeleteFilesHelpText": "Eliminar os ficheiros do livro e a pasta do autor",
|
||||
"DeleteImportList": "Eliminar lista de importação",
|
||||
"DeleteImportList": "Eliminar Lista de Importação",
|
||||
"DeleteMetadataProfile": "Eliminar perfil de metadados",
|
||||
"DeleteRootFolder": "Eliminar pasta raiz",
|
||||
"DeleteRootFolder": "Eliminar a Pasta Raiz",
|
||||
"EnableProfile": "Ativar perfil",
|
||||
"EnabledHelpText": "Marque para ativar o perfil de versão",
|
||||
"FilterPlaceHolder": "Filtrar livro",
|
||||
@@ -690,7 +688,7 @@
|
||||
"IndexerJackettAll": "Indexadores que usam o ponto de extremidade não suportado do Jackett 'all (tudo)' : {0}",
|
||||
"Duration": "Duração",
|
||||
"Filters": "Filtros",
|
||||
"AppDataLocationHealthCheckMessage": "Não foi possível atualizar para prevenir apagar a AppData durante a atualização",
|
||||
"AppDataLocationHealthCheckMessage": "Não foi possível actualizar para prevenir apagar a AppData durante a actualização",
|
||||
"FileWasDeletedByViaUI": "O ficheiro foi eliminado por meio da IU",
|
||||
"SizeLimit": "Tamanho Limite",
|
||||
"Started": "Começado",
|
||||
@@ -815,7 +813,7 @@
|
||||
"UnableToLoadCustomFormats": "Não foi possível carregar os formatos personalizados",
|
||||
"CutoffFormatScoreHelpText": "Quando esta pontuação de formato personalizado for alcançada, o Radarr não transferirá mais filmes",
|
||||
"DeleteCustomFormat": "Eliminar formato personalizado",
|
||||
"DeleteCustomFormatMessageText": "Tem a certeza que quer eliminar a pasta raiz \"{0}\"?",
|
||||
"DeleteCustomFormatMessageText": "Tem a certeza de que pretende eliminar o formato personalizado '{name}'?",
|
||||
"Formats": "Formatos",
|
||||
"ResetDefinitionTitlesHelpText": "Redefinir títulos de definição, bem como valores",
|
||||
"ResetDefinitions": "Redefinir Definições",
|
||||
@@ -845,5 +843,19 @@
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Como aplicar etiquetas aos clientes de download selecionados",
|
||||
"Activity": "Atividade",
|
||||
"AddNew": "Adicionar Novo",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Como aplicar etiquetas às listas de importação selecionadas"
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Como aplicar etiquetas às listas de importação selecionadas",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Tem a certeza de que pretende eliminar o(s) cliente(s) de transferência selecionado(s)?",
|
||||
"DeleteSelectedIndexersMessageText": "Tem a certeza de que pretende eliminar {count} indexador(es) selecionado(s)?",
|
||||
"DeleteSelectedImportListsMessageText": "Tem a certeza de que pretende eliminar a(s) lista(s) de importação selecionada(s)?",
|
||||
"CloneCondition": "Clonar Condição",
|
||||
"ConnectionLostReconnect": "O Radarr tentará ligar-se automaticamente, ou você pode clicar em Recarregar abaixo.",
|
||||
"ConnectionLostToBackend": "O Radarr perdeu a ligação com o back-end e precisará ser recarregado para restaurar a funcionalidade.",
|
||||
"EditSelectedImportLists": "Editar Listas de Importação Selecionadas",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "O cliente de descarregamento {0} está definido para remover descarregamentos concluídos. Isto pode fazer com que as transferências sejam removidas do seu cliente antes de {1} as poder importar.",
|
||||
"DeleteCondition": "Eliminar Condição",
|
||||
"AppUpdatedVersion": "{appName} foi atualizado para a versão `{version}`, para obter as alterações mais recentes, você precisará recarregar {appName}",
|
||||
"AutomaticUpdatesDisabledDocker": "As actualizações automáticas não são diretamente suportadas quando se utiliza o mecanismo de atualização do Docker. Terá de atualizar a imagem do contentor fora de {appName} ou utilizar um script",
|
||||
"EditSelectedDownloadClients": "Editar Clientes de Transferência Selecionados",
|
||||
"ApplyChanges": "Aplicar alterações",
|
||||
"Backup": "Backup"
|
||||
}
|
||||
|
||||
@@ -2,70 +2,70 @@
|
||||
"About": "Sobre",
|
||||
"Monitored": "Monitorado",
|
||||
"URLBase": "URL base",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Não foi possível adicionar um novo cliente de download, tente novamente.",
|
||||
"UnableToAddANewImportListExclusionPleaseTryAgain": "Não foi possível adicionar uma nova exclusão da lista de importação, tente novamente.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Não foi possível adicionar um novo indexador, tente novamente.",
|
||||
"UnableToAddANewListPleaseTryAgain": "Não foi possível adicionar uma nova lista, tente novamente.",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Não foi possível adicionar um novo cliente de download. Tente novamente.",
|
||||
"UnableToAddANewImportListExclusionPleaseTryAgain": "Não foi possível adicionar uma nova exclusão da lista de importação. Tente novamente.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Não foi possível adicionar um novo indexador. Tente novamente.",
|
||||
"UnableToAddANewListPleaseTryAgain": "Não foi possível adicionar uma nova lista. Tente novamente.",
|
||||
"UnableToAddANewMetadataProfilePleaseTryAgain": "Não foi possível adicionar um novo perfil de metadados, tente novamente.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Não foi possível adicionar uma nova notificação, tente novamente.",
|
||||
"UnableToAddANewQualityProfilePleaseTryAgain": "Não foi possível adicionar um novo perfil de qualidade, tente novamente.",
|
||||
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Não foi possível adicionar um novo mapeamento de caminho remoto, tente novamente.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Não foi possível adicionar uma nova notificação. Tente novamente.",
|
||||
"UnableToAddANewQualityProfilePleaseTryAgain": "Não foi possível adicionar um novo perfil de qualidade. Tente novamente.",
|
||||
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Não foi possível adicionar um novo mapeamento de caminho remoto. Tente novamente.",
|
||||
"20MinutesTwenty": "20 Minutos: {0}",
|
||||
"45MinutesFourtyFive": "45 Minutos: {0}",
|
||||
"60MinutesSixty": "60 Minutos: {0}",
|
||||
"APIKey": "Chave API",
|
||||
"AgeWhenGrabbed": "Idade (quando baixado)",
|
||||
"AgeWhenGrabbed": "Tempo de vida (quando obtido)",
|
||||
"ApiKeyHelpTextWarning": "Requer reinício para ter efeito",
|
||||
"LoadingBooksFailed": "Falha ao carregar livros",
|
||||
"Logs": "Registros",
|
||||
"MustContain": "Deve Conter",
|
||||
"MustContain": "Deve conter",
|
||||
"ProxyPasswordHelpText": "Você só precisa digitar um nome de usuário e senha se for necessário. Caso contrário, deixe-os em branco.",
|
||||
"SslCertPathHelpTextWarning": "Requer reinício para ter efeito",
|
||||
"UnableToLoadMetadataProfiles": "Não foi possível carregar os perfis de metadados",
|
||||
"AddListExclusion": "Adicionar à Lista de Exclusão",
|
||||
"AddListExclusion": "Adicionar exclusão à lista",
|
||||
"AddingTag": "Adicionar tag",
|
||||
"AlreadyInYourLibrary": "Já está na sua biblioteca",
|
||||
"AlternateTitles": "Títulos Alternativos",
|
||||
"Analytics": "Analítica",
|
||||
"AlternateTitles": "Títulos alternativos",
|
||||
"Analytics": "Análises",
|
||||
"AnalyticsEnabledHelpText": "Envie informações anônimas de uso e erro para os servidores do Readarr. Isso inclui informações sobre seu navegador, quais páginas da interface Web do Readarr você usa, relatórios de erros, e a versão do sistema operacional e do tempo de execução. Usaremos essas informações para priorizar recursos e correções de bugs.",
|
||||
"AppDataDirectory": "Diretório AppData",
|
||||
"ApplyTags": "Aplicar Tags",
|
||||
"Authentication": "Autenticação",
|
||||
"AuthenticationMethodHelpText": "Exigir nome de usuário e senha para acessar o Readarr",
|
||||
"AuthorClickToChangeBook": "Clique para alterar o livro",
|
||||
"AutoRedownloadFailedHelpText": "Procurar automaticamente e tente baixar uma versão diferente",
|
||||
"AutoRedownloadFailedHelpText": "Procurar e tentar baixar automaticamente uma versão diferente",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Livros excluídos do disco deixam de ser monitorados no Readarr automaticamente",
|
||||
"Automatic": "Automático",
|
||||
"BackupFolderHelpText": "Os caminhos relativos estarão no diretório AppData do Readarr",
|
||||
"BackupNow": "Fazer backup agora",
|
||||
"BackupRetentionHelpText": "Backups automáticos anteriores ao período de retenção serão limpos automaticamente",
|
||||
"Backups": "Backups",
|
||||
"BindAddress": "Fixar Endereço",
|
||||
"BindAddress": "Fixar endereço",
|
||||
"BindAddressHelpText": "Endereço IP válido, localhost ou '*' para todas as interfaces",
|
||||
"BindAddressHelpTextWarning": "Requer reiniciar para ter efeito",
|
||||
"BookIsDownloading": "O livro está baixando",
|
||||
"DiskSpace": "Espaço em disco",
|
||||
"Docker": "Docker",
|
||||
"DownloadClient": "Cliente de Download",
|
||||
"DownloadClientSettings": "Configurações do Cliente de Download",
|
||||
"DownloadClient": "Cliente de download",
|
||||
"DownloadClientSettings": "Configurações do cliente de download",
|
||||
"DownloadClients": "Clientes de download",
|
||||
"DownloadFailedCheckDownloadClientForMoreDetails": "Falha no download: verifique o cliente de download para saber mais",
|
||||
"DownloadFailedInterp": "Falha no download: {0}",
|
||||
"DetailedProgressBar": "Barra de progresso detalhada",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "Se deve ou não atualizar automaticamente para Propers/Repacks",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "Se deve ou não atualizar automaticamente para propers/repacks",
|
||||
"DownloadWarningCheckDownloadClientForMoreDetails": "Aviso de download: verifique o cliente de download para saber mais",
|
||||
"Edit": "Editar",
|
||||
"Edition": "Edição",
|
||||
"Enable": "Habilitar",
|
||||
"GrabRelease": "Obter Lançamento",
|
||||
"GrabReleaseMessageText": "O Readarr não conseguiu determinar a qual autor e livro esse lançamento está relacionado. O Readarr pode não conseguir importar automaticamente este lançamento. Quer obter \"{0}\"?",
|
||||
"GrabSelected": "Obter Selecionado",
|
||||
"GrabRelease": "Obter lançamento",
|
||||
"GrabReleaseMessageText": "O Readarr não conseguiu determinar para qual autor e livro é este lançamento. O Readarr pode não conseguir importar automaticamente este lançamento. Deseja obter \"{0}\"?",
|
||||
"GrabSelected": "Obter selecionado",
|
||||
"Group": "Grupo",
|
||||
"HasPendingChangesNoChanges": "Sem alterações",
|
||||
"HasPendingChangesSaveChanges": "Salvar alterações",
|
||||
"History": "Histórico",
|
||||
"Host": "Host",
|
||||
"Hostname": "Hostname",
|
||||
"Hostname": "Nome do host",
|
||||
"ICalFeed": "Feed do iCal",
|
||||
"ICalHttpUrlHelpText": "Copie este URL em seu(s) cliente(s) ou clique para se inscrever se o seu navegador é compatível com webcal",
|
||||
"ICalLink": "Link do iCal",
|
||||
@@ -76,26 +76,26 @@
|
||||
"CalendarWeekColumnHeaderHelpText": "Mostrar acima de cada coluna quando a semana está na exibição ativa",
|
||||
"Cancel": "Cancelar",
|
||||
"CancelMessageText": "Tem certeza que deseja cancelar esta tarefa pendente?",
|
||||
"CertificateValidation": "Validação de Certificado",
|
||||
"CertificateValidation": "Validação de certificado",
|
||||
"CertificateValidationHelpText": "Altere a rigidez da validação da certificação HTTPS. Não mude a menos que você entenda os riscos.",
|
||||
"ChangeFileDate": "Alterar Data do Arquivo",
|
||||
"ChangeFileDate": "Alterar data do arquivo",
|
||||
"ChangeHasNotBeenSavedYet": "Mudar o que não foi salvo ainda",
|
||||
"ChmodFolder": "chmod Pasta",
|
||||
"ChmodFolder": "Fazer chmod de pasta",
|
||||
"ChmodFolderHelpText": "Octal, aplicado durante a importação/renomeação de pastas e arquivos de mídia (sem bits de execução)",
|
||||
"ChmodFolderHelpTextWarning": "Isso só funciona se o usuário que está executando o Readarr for o proprietário do arquivo. É melhor garantir que o cliente de download defina as permissões corretamente.",
|
||||
"ChownGroupHelpText": "Nome do grupo ou gid. Use gid para sistemas de arquivos remotos.",
|
||||
"ChownGroupHelpTextWarning": "Isso só funciona se o usuário que está executando o Readarr for o proprietário do arquivo. É melhor garantir que o cliente de download use o mesmo grupo que o Readarr.",
|
||||
"Clear": "Limpar",
|
||||
"ClickToChangeQuality": "Clique para alterar a qualidade",
|
||||
"ClientPriority": "Prioridade do Cliente",
|
||||
"CloneIndexer": "Clonar Indexador",
|
||||
"CloneProfile": "Clonar Perfil",
|
||||
"ClientPriority": "Prioridade do cliente",
|
||||
"CloneIndexer": "Clonar indexador",
|
||||
"CloneProfile": "Clonar perfil",
|
||||
"Close": "Fechar",
|
||||
"Columns": "Colunas",
|
||||
"CompletedDownloadHandling": "Gerenciamento de Downloads Completos",
|
||||
"ConnectSettings": "Configurações de Conexão",
|
||||
"CompletedDownloadHandling": "Gerenciamento de downloads concluídos",
|
||||
"ConnectSettings": "Configurações de conexão",
|
||||
"Connections": "Conexões",
|
||||
"CopyUsingHardlinksHelpText": "Os hardlinks permitem que o Readarr importe torrents para a pasta da série sem ocupar espaço extra em disco ou copiar todo o conteúdo do arquivo. Os hardlinks só funcionarão se a origem e o destino estiverem no mesmo volume",
|
||||
"CopyUsingHardlinksHelpText": "Os hardlinks permitem que o Readarr importe torrents de propagação para a pasta da série sem ocupar espaço adicional em disco ou copiar todo o conteúdo do arquivo. Hardlinks só funcionarão se a origem e o destino estiverem no mesmo volume",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Ocasionalmente, os bloqueios de arquivo podem impedir a renomeação de arquivos que estão sendo semeados. Você pode desabilitar temporariamente a semeadura e usar a função de renomeação do Readarr como uma solução alternativa.",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Criar pastas de autor ausente durante a verificação do disco",
|
||||
"CreateGroup": "Criar grupo",
|
||||
@@ -103,41 +103,41 @@
|
||||
"CutoffUnmet": "Corte não atendido",
|
||||
"DBMigration": "Migração de banco de dados",
|
||||
"Dates": "Datas",
|
||||
"DelayProfile": "Perfil de Atraso",
|
||||
"DelayProfiles": "Perfis de Atraso",
|
||||
"DelayProfile": "Perfil de atraso",
|
||||
"DelayProfiles": "Perfis de atraso",
|
||||
"DelayingDownloadUntilInterp": "Atrasando o download até {0} às {1}",
|
||||
"Delete": "Excluir",
|
||||
"DeleteBackup": "Excluir Backup",
|
||||
"DeleteBackupMessageText": "Tem certeza de que deseja excluir o backup '{name}'?",
|
||||
"DeleteDelayProfile": "Excluir Perfil de Atraso",
|
||||
"DeleteDelayProfile": "Excluir perfil de atraso",
|
||||
"DeleteDelayProfileMessageText": "Tem certeza de que deseja excluir este perfil de atraso?",
|
||||
"DeleteDownloadClient": "Excluir Cliente de Download",
|
||||
"DeleteDownloadClient": "Excluir cliente de download",
|
||||
"DeleteDownloadClientMessageText": "Tem certeza de que deseja excluir o cliente de download '{name}'?",
|
||||
"DeleteEmptyFolders": "Excluir pastas vazias",
|
||||
"DeleteEmptyFoldersHelpText": "Excluir pastas de autor vazias durante a verificação do disco e quando os arquivos de livros forem excluídos",
|
||||
"DeleteImportListExclusion": "Excluir Exclusão da Lista de Importação",
|
||||
"DeleteEmptyFoldersHelpText": "Excluir as pastas de autor vazias durante a verificação do disco e quando os arquivos de livros forem excluídos",
|
||||
"DeleteImportListExclusion": "Excluir exclusão da lista de importação",
|
||||
"DeleteImportListExclusionMessageText": "Tem certeza de que deseja excluir esta exclusão da lista de importação?",
|
||||
"DeleteImportListMessageText": "Tem certeza de que deseja excluir a lista '{name}'?",
|
||||
"DeleteIndexer": "Excluir Indexador",
|
||||
"DeleteIndexer": "Excluir indexador",
|
||||
"DeleteIndexerMessageText": "Tem certeza de que deseja excluir o indexador '{name}'?",
|
||||
"DeleteMetadataProfileMessageText": "Tem certeza de que deseja excluir o perfil de metadados '{name}'?",
|
||||
"DeleteNotification": "Excluir Notificação",
|
||||
"DeleteNotification": "Excluir notificação",
|
||||
"DeleteNotificationMessageText": "Tem certeza de que deseja excluir a notificação '{name}'?",
|
||||
"DeleteQualityProfile": "Excluir Perfil de Qualidade",
|
||||
"DeleteQualityProfile": "Excluir perfil de qualidade",
|
||||
"DeleteQualityProfileMessageText": "Tem certeza de que deseja excluir o perfil de qualidade '{name}'?",
|
||||
"DeleteReleaseProfile": "Excluir Perfil de Lançamento",
|
||||
"DeleteReleaseProfile": "Excluir perfil de lançamento",
|
||||
"DeleteReleaseProfileMessageText": "Tem certeza de que deseja excluir este Perfil de Lançamento?",
|
||||
"DeleteRootFolderMessageText": "Tem certeza de que deseja excluir a pasta raiz '{name}'?",
|
||||
"DeleteSelectedBookFiles": "Excluir arquivos do livro selecionado",
|
||||
"DeleteSelectedBookFilesMessageText": "Tem certeza de que deseja excluir os arquivos do livro selecionado?",
|
||||
"DeleteTag": "Excluir tag",
|
||||
"DeleteTagMessageText": "Tem certeza de que deseja excluir a tag \"{0}\"?",
|
||||
"DestinationPath": "Caminho de Destino",
|
||||
"DestinationPath": "Caminho de destino",
|
||||
"DetailedProgressBarHelpText": "Mostrar texto na barra de progresso",
|
||||
"EnableAutomaticAdd": "Habilitar Adição Automática",
|
||||
"EnableAutomaticAdd": "Habilitar adição automática",
|
||||
"EnableAutomaticSearch": "Ativar a pesquisa automática",
|
||||
"EnableColorImpairedMode": "Habilitar Modo para Deficientes Visuais",
|
||||
"EnableColorImpairedModeHelpText": "Estilo alterado para permitir que usuários com deficiência de cor distingam melhor as informações codificadas por cores",
|
||||
"EnableColorImpairedMode": "Habilitar modo para daltonismo",
|
||||
"EnableColorImpairedModeHelpText": "Estilo alterado para permitir que usuários com daltonismo distingam melhor as informações codificadas por cores",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Importar automaticamente downloads concluídos do cliente de download",
|
||||
"EnableHelpText": "Habilitar criação de arquivo de metadados para este tipo de metadados",
|
||||
"EnableInteractiveSearch": "Ativar pesquisa interativa",
|
||||
@@ -148,15 +148,13 @@
|
||||
"ErrorLoadingContents": "Erro ao carregar o conteúdo",
|
||||
"ErrorLoadingPreviews": "Erro ao carregar as visualizações",
|
||||
"Exception": "Exceção",
|
||||
"ExtraFileExtensionsHelpTexts1": "Lista separada por vírgulas de arquivos adicionais a importar (.nfo será importado como .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Exemplos: \".sub, .nfo\" ou \"sub,nfo\"",
|
||||
"FailedDownloadHandling": "Falha no gerenciamento de download",
|
||||
"FileDateHelpText": "Alterar a data do arquivo ao importar/verificar novamente",
|
||||
"FileManagement": "Gerenciamento de Arquivo",
|
||||
"FileNames": "Nomes de Arquivo",
|
||||
"FileManagement": "Gerenciamento de arquivo",
|
||||
"FileNames": "Nomes de arquivo",
|
||||
"Filename": "Nome do arquivo",
|
||||
"Files": "Arquivos",
|
||||
"FirstDayOfWeek": "Primeiro Dia da Semana",
|
||||
"FirstDayOfWeek": "Primeiro dia da semana",
|
||||
"Fixed": "Corrigido",
|
||||
"Folder": "Pasta",
|
||||
"Folders": "Pastas",
|
||||
@@ -168,25 +166,25 @@
|
||||
"GoToInterp": "Ir para {0}",
|
||||
"Grab": "Obter",
|
||||
"GrabID": "Obter ID",
|
||||
"IconForCutoffUnmet": "Ícone para Corte Não Atendido",
|
||||
"IconForCutoffUnmet": "Ícone para limite não atendido",
|
||||
"IconTooltip": "Agendado",
|
||||
"IgnoredAddresses": "Endereços Ignorados",
|
||||
"IgnoredHelpText": "O lançamento será rejeitado se contiver um ou mais desses termos (não diferencia maiúsculas de minúsculas)",
|
||||
"IgnoredAddresses": "Endereços ignorados",
|
||||
"IgnoredHelpText": "O lançamento será rejeitado se contiver um ou mais destes termos (sem distinção entre maiúsculas e minúsculas)",
|
||||
"IgnoredPlaceHolder": "Adicionar nova restrição",
|
||||
"IllRestartLater": "Reiniciarei mais tarde",
|
||||
"ImportExtraFiles": "Importar Arquivos Extras",
|
||||
"ImportExtraFiles": "Importar arquivos adicionais",
|
||||
"Missing": "Ausente",
|
||||
"Mode": "Modo",
|
||||
"ImportExtraFilesHelpText": "Importar arquivos adicionais correspondentes (legendas, nfo, etc.) após importar um arquivo de livro",
|
||||
"ImportFailedInterp": "Falha na importação: {0}",
|
||||
"ImportedTo": "Importado Para",
|
||||
"ImportedTo": "Importado para",
|
||||
"Importing": "Importando",
|
||||
"IncludeHealthWarningsHelpText": "Incluir avisos de integridade",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Mostrar itens sem autor na fila, isso pode incluir autores removidos, livros ou qualquer outra coisa na categoria de Readarr",
|
||||
"IncludeUnmonitored": "Incluir não monitorado",
|
||||
"IncludeUnmonitored": "Incluir não monitorados",
|
||||
"Indexer": "Indexador",
|
||||
"IndexerPriority": "Prioridade do Indexador",
|
||||
"IndexerSettings": "Configurações do Indexador",
|
||||
"IndexerPriority": "Prioridade do indexador",
|
||||
"IndexerSettings": "Configurações do indexador",
|
||||
"Indexers": "Indexadores",
|
||||
"Interval": "Intervalo",
|
||||
"IsCutoffCutoff": "Limite",
|
||||
@@ -197,40 +195,40 @@
|
||||
"LoadingBookFilesFailed": "Falha ao carregar arquivos do livro",
|
||||
"Local": "Local",
|
||||
"LogFiles": "Arquivos de registro",
|
||||
"LogLevel": "Nível de Registro",
|
||||
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "O registro de rastreamento deve ser ativado apenas temporariamente",
|
||||
"Logging": "Registrando",
|
||||
"LongDateFormat": "Formato de Data Longa",
|
||||
"LogLevel": "Nível de registro",
|
||||
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "O registro em log deve ser habilitado apenas temporariamente",
|
||||
"Logging": "Registro em log",
|
||||
"LongDateFormat": "Formato longo de data",
|
||||
"MIA": "Desaparecidos",
|
||||
"ManualImport": "Importação Manual",
|
||||
"MarkAsFailed": "Marcar como Falha",
|
||||
"ManualImport": "Importação manual",
|
||||
"MarkAsFailed": "Marcar como falha",
|
||||
"MarkAsFailedMessageText": "Tem certeza que deseja marcar \"{0}\" como falhado?",
|
||||
"MaximumLimits": "Limites Máximos",
|
||||
"MaximumSize": "Tamanho Máximo",
|
||||
"MaximumSizeHelpText": "Tamanho máximo para um lançamento a ser obtido, em MB. Digite zero para definir como Ilimitado.",
|
||||
"MaximumLimits": "Limites máximos",
|
||||
"MaximumSize": "Tamanho máximo",
|
||||
"MaximumSizeHelpText": "Tamanho máximo para um lançamento ser baixado, em MB. Defina como zero para definir como ilimitado.",
|
||||
"Mechanism": "Mecanismo",
|
||||
"MediaInfo": "Informações da mídia",
|
||||
"MediaManagementSettings": "Configurações de Gerenciamento de Mídia",
|
||||
"MediaManagementSettings": "Configurações de gerenciamento de mídia",
|
||||
"Message": "Mensagem",
|
||||
"MetadataSettings": "Configurações de Metadados",
|
||||
"MinimumAge": "Idade Miníma",
|
||||
"MinimumAgeHelpText": "Somente Usenet: Idade mínima em minutos dos NZBs antes de serem capturados. Use isso para dar aos novos lançamentos tempo para se propagar para seu provedor usenet.",
|
||||
"MinimumFreeSpace": "Espaço Livre Mínimo",
|
||||
"MetadataSettings": "Configurações de metadados",
|
||||
"MinimumAge": "Idade miníma",
|
||||
"MinimumAgeHelpText": "Somente Usenet: idade mínima, em minutos, dos NZBs antes de serem capturados. Use isso para dar aos novos lançamentos tempo para se propagar para seu provedor de Usenet.",
|
||||
"MinimumFreeSpace": "Mínimo de espaço livre",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Impedir a importação se deixar menos do que esta quantidade de espaço em disco disponível",
|
||||
"MinimumLimits": "Limites Mínimos",
|
||||
"MinimumLimits": "Limites mínimos",
|
||||
"MoreInfo": "Mais informações",
|
||||
"MustNotContain": "Não Deve Conter",
|
||||
"MustNotContain": "Não deve conter",
|
||||
"Name": "Nome",
|
||||
"NamingSettings": "Configurações de Nomes",
|
||||
"NamingSettings": "Configurações de nomenclatura",
|
||||
"New": "Novo",
|
||||
"NoBackupsAreAvailable": "Não há backups disponíveis",
|
||||
"NoHistory": "Sem histórico.",
|
||||
"NoHistory": "Não há histórico.",
|
||||
"NoLeaveIt": "Não, deixe",
|
||||
"NoLimitForAnyRuntime": "Sem limite para qualquer tempo de execução",
|
||||
"NoLimitForAnyRuntime": "Sem limite para qualquer duração",
|
||||
"NoLogFiles": "Nenhum arquivo de registro",
|
||||
"NoMinimumForAnyRuntime": "Sem mínimo para qualquer tempo de execução",
|
||||
"NoMinimumForAnyRuntime": "Sem mínimo para qualquer duração",
|
||||
"NoUpdatesAreAvailable": "Não há atualizações disponíveis",
|
||||
"None": "Vazio",
|
||||
"None": "Nenhum",
|
||||
"NotificationTriggers": "Gatilhos de Notificação",
|
||||
"OnGrabHelpText": "Ao obter",
|
||||
"OnHealthIssueHelpText": "Ao ter problema de integridade",
|
||||
@@ -239,7 +237,7 @@
|
||||
"OpenBrowserOnStart": "Abrir navegador ao iniciar",
|
||||
"Options": "Opções",
|
||||
"Original": "Original",
|
||||
"Overview": "Visão Geral",
|
||||
"Overview": "Visão geral",
|
||||
"PackageVersion": "Versão do pacote",
|
||||
"PageSize": "Tamanho da página",
|
||||
"PageSizeHelpText": "Quantidade de itens a exibir em cada página",
|
||||
@@ -302,7 +300,7 @@
|
||||
"RenameBooksHelpText": "O Readarr usará o nome de arquivo existente se a renomeação estiver desativada",
|
||||
"Reorder": "Reordenar",
|
||||
"ReplaceIllegalCharacters": "Substituir Caracteres Ilegais",
|
||||
"RequiredHelpText": "Essa condição {0} deve corresponder para que o formato personalizado seja aplicado. Caso contrário, uma única partida {0} é suficiente.",
|
||||
"RequiredHelpText": "Essa condição {0} deve corresponder para que o formato personalizado seja aplicado. Caso contrário, uma correspondência {0} é suficiente.",
|
||||
"RequiredPlaceHolder": "Adicionar nova restrição",
|
||||
"RescanAfterRefreshHelpTextWarning": "O Readarr não detectará automaticamente as alterações nos arquivos se não estiver definido como \"Sempre\"",
|
||||
"RescanAuthorFolderAfterRefresh": "Reescanear a pasta do autor após a atualização",
|
||||
@@ -391,14 +389,14 @@
|
||||
"UILanguageHelpTextWarning": "É necessário recarregar o navegador",
|
||||
"UISettings": "Configurações da interface",
|
||||
"UnableToAddANewRootFolderPleaseTryAgain": "Não foi possível adicionar uma nova pasta raiz, tente novamente.",
|
||||
"UnableToLoadBackups": "Não é possível carregar backups",
|
||||
"UnableToLoadBackups": "Não foi possível carregar os backups",
|
||||
"UnableToLoadDelayProfiles": "Não foi possível carregar os perfis de atraso",
|
||||
"UnableToLoadDownloadClientOptions": "Não foi possível carregar as opções do cliente de download",
|
||||
"UnableToLoadDownloadClients": "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.",
|
||||
"UnableToLoadImportListExclusions": "Não foi possível carregar as exclusões de listas de importação",
|
||||
"UnableToLoadIndexerOptions": "Não foi possível carregar as opções de indexador",
|
||||
"UnableToLoadImportListExclusions": "Não foi possível carregar Importar exclusões de lista",
|
||||
"UnableToLoadIndexerOptions": "Não foi possível carregar as opções do indexador",
|
||||
"UnableToLoadIndexers": "Não foi possível carregar os indexadores",
|
||||
"UnableToLoadLists": "Não foi possível carregar as listas",
|
||||
"UnableToLoadMediaManagementSettings": "Não foi possível carregar as configurações de gerenciamento de mídia",
|
||||
@@ -419,7 +417,7 @@
|
||||
"UnmonitoredHelpText": "Incluir livros não monitorados no feed do iCal",
|
||||
"UpdateAll": "Atualizar tudo",
|
||||
"UpdateAutomaticallyHelpText": "Baixe e instale atualizações automaticamente. Você ainda poderá instalar a partir do Sistema: Atualizações",
|
||||
"UpdateMechanismHelpText": "Use o atualizador integrado do Readarr ou um script",
|
||||
"UpdateMechanismHelpText": "Usar o atualizador integrado do Readarr ou um script",
|
||||
"UpdateScriptPathHelpText": "Caminho para um script personalizado que usa um pacote de atualização extraído e lida com o restante do processo de atualização",
|
||||
"Updates": "Atualizações",
|
||||
"UpgradeAllowedHelpText": "Se desabilitada, as qualidades não serão atualizadas",
|
||||
@@ -515,7 +513,7 @@
|
||||
"MusicBrainzRecordingID": "ID da gravação no MusicBrainz",
|
||||
"MusicBrainzBookID": "ID do livro no MusicBrainz",
|
||||
"MusicBrainzAuthorID": "ID do autor no MusicBrainz",
|
||||
"MonitoringOptions": "Opções de Monitoramento",
|
||||
"MonitoringOptions": "Opções de monitoramento",
|
||||
"MonitoredHelpText": "O Readarr pesquisará e baixará o livro",
|
||||
"MonitoredAuthorIsUnmonitored": "O autor não está sendo monitorado",
|
||||
"MonitoredAuthorIsMonitored": "O autor está sendo monitorado",
|
||||
@@ -553,8 +551,8 @@
|
||||
"IsCalibreLibraryHelpText": "Usar o Servidor de Conteúdo do Calibre para gerenciar a biblioteca",
|
||||
"IndexerIdHelpText": "Especificar a qual indexador o perfil se aplica",
|
||||
"ImportLists": "Listas de importação",
|
||||
"ImportListSettings": "Configurações Gerais da Lista de Importação",
|
||||
"ImportListExclusions": "Importar Lista de Exclusões",
|
||||
"ImportListSettings": "Configurações gerais de Importar listas",
|
||||
"ImportListExclusions": "Importar exclusões de lista",
|
||||
"ImportFailures": "Falhas na importação",
|
||||
"IgnoreDeletedBooks": "Ignorar livros excluídos",
|
||||
"IfYouDontAddAnImportListExclusionAndTheAuthorHasAMetadataProfileOtherThanNoneThenThisBookMayBeReaddedDuringTheNextAuthorRefresh": "Se você não adicionar uma exclusão à lista de importação e o autor tiver um perfil de metadados diferente de \"Nenhum\", este livro poderá ser adicionado novamente durante a próxima atualização do autor.",
|
||||
@@ -588,9 +586,9 @@
|
||||
"DiscNumber": "Número do disco",
|
||||
"DiscCount": "Contagem de disco",
|
||||
"Development": "Desenvolvimento",
|
||||
"DeleteRootFolder": "Excluir Pasta Raiz",
|
||||
"DeleteRootFolder": "Excluir pasta raiz",
|
||||
"DeleteMetadataProfile": "Excluir perfil de metadados",
|
||||
"DeleteImportList": "Excluir Lista de Importação",
|
||||
"DeleteImportList": "Excluir lista de importação",
|
||||
"DeleteFilesHelpText": "Excluir arquivos do livro e pasta do autor",
|
||||
"DeleteBookFileMessageText": "Tem certeza que deseja excluir {0}?",
|
||||
"DeleteBookFile": "Excluir arquivo de livro",
|
||||
@@ -608,7 +606,7 @@
|
||||
"ConsoleLogLevel": "Nível de log do console",
|
||||
"CollapseMultipleBooksHelpText": "Recolher vários livros lançados no mesmo dia",
|
||||
"CollapseMultipleBooks": "Recolher vários livros",
|
||||
"ChownGroup": "chown Grupo",
|
||||
"ChownGroup": "Fazer chown de grupo",
|
||||
"CatalogNumber": "Número do Catálogo",
|
||||
"CalibreUsername": "Nome de usuário do Calibre",
|
||||
"CalibreUrlBase": "URL base do Calibre",
|
||||
@@ -687,7 +685,7 @@
|
||||
"SeriesTotal": "Séries ({0})",
|
||||
"TooManyBooks": "Livros ausentes ou muitos? Modifique ou crie um novo",
|
||||
"BlocklistRelease": "Lançamento na lista de bloqueio",
|
||||
"NoHistoryBlocklist": "Sem histórico na lista de bloqueio",
|
||||
"NoHistoryBlocklist": "Não há lista de bloqueio no histórico",
|
||||
"Blocklist": "Lista de Bloqueio",
|
||||
"RemoveFromBlocklist": "Remover da lista de bloqueio",
|
||||
"UnableToLoadBlocklist": "Incapaz de carregar a lista de bloqueio",
|
||||
@@ -734,20 +732,20 @@
|
||||
"OnBookFileDeleteHelpText": "Ao Excluir um Arquivo de Livro",
|
||||
"OnBookTagUpdate": "Ao Atualizar Etiqueta de um Livro",
|
||||
"OnDownloadFailure": "Na Falha do Download",
|
||||
"OnGrab": "Ao Baixar",
|
||||
"OnGrab": "Ao obter",
|
||||
"OnHealthIssue": "Ao Problema de Saúde",
|
||||
"OnImportFailure": "Em uma Falha de Importação",
|
||||
"OnReleaseImport": "Ao Importar Lançamento",
|
||||
"OnRename": "Ao Renomear",
|
||||
"OnUpgrade": "Ao Atualizar",
|
||||
"AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData na atualização",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, o Readarr não fornecerá nenhum resultado de pesquisa interativa",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa interativa habilitada, o Readarr não fornecerá nenhum resultado de pesquisa interativa",
|
||||
"ConnectSettingsSummary": "Notificações, conexões com servidores/tocadores de mídia e scripts personalizados",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Todos os clientes de download estão indisponíveis devido a falhas",
|
||||
"DownloadClientsSettingsSummary": "Clientes de download, gerenciamento de download e mapeamentos de caminhos remotos",
|
||||
"Yesterday": "Ontem",
|
||||
"Connect": "Conectar",
|
||||
"CouldntFindAnyResultsForTerm": "Não foi possível encontrar nenhum resultado para '{0}'",
|
||||
"CouldntFindAnyResultsForTerm": "Não foi possível encontrar resultados para \"{0}\"",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Nenhum cliente de download está disponível",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Não é possível se comunicar com {0}.",
|
||||
"Duration": "Duração",
|
||||
@@ -759,9 +757,9 @@
|
||||
"FailedToLoadQueue": "Falha ao carregar a fila",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Clientes de download indisponíveis devido a falhas: {0}",
|
||||
"EditBook": "Editar Livro",
|
||||
"FileWasDeletedByUpgrade": "Arquivo foi excluído para importar uma atualização",
|
||||
"FileWasDeletedByUpgrade": "O arquivo foi excluído para importar uma atualização",
|
||||
"Filters": "Filtros",
|
||||
"ForeignId": "ID Estrangeiro",
|
||||
"ForeignId": "ID estrangeiro",
|
||||
"General": "Geral",
|
||||
"GeneralSettingsSummary": "Porta, SSL, nome de usuário/senha, proxy, análises e atualizações",
|
||||
"HealthNoIssues": "Nenhum problema com sua configuração",
|
||||
@@ -769,7 +767,7 @@
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Todos os indexadores compatíveis com rss estão temporariamente indisponíveis devido a erros recentes do indexador",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Todos os indexadores com capacidade de pesquisa estão temporariamente indisponíveis devido a erros recentes do indexador",
|
||||
"ItsEasyToAddANewAuthorOrBookJustStartTypingTheNameOfTheItemYouWantToAdd": "É fácil adicionar um novo autor ou livro, basta começar a digitar o nome do item que deseja adicionar",
|
||||
"MetadataSettingsSummary": "Criar arquivos de metadados quando os livros forem importados ou o autor for atualizado",
|
||||
"MetadataSettingsSummary": "Criar arquivos de metadados ao importar livros ou atualizar o autor",
|
||||
"ListsSettingsSummary": "Importar Listas",
|
||||
"ImportListStatusCheckSingleClientMessage": "Listas indisponíveis devido a falhas: {0}",
|
||||
"ImportMechanismHealthCheckMessage": "Habilitar Gerenciamento de Download Concluído",
|
||||
@@ -831,7 +829,7 @@
|
||||
"UpdateCheckStartupTranslocationMessage": "Não é possível instalar a atualização porque a pasta de inicialização '{0}' está em uma pasta de translocação de aplicativo.",
|
||||
"TagsSettingsSummary": "Gerenciar tags de autor, perfil, restrição e notificação",
|
||||
"InstanceNameHelpText": "Nome da instância na aba e para o nome do aplicativo Syslog",
|
||||
"AddList": "Adicionar Lista",
|
||||
"AddList": "Adicionar lista",
|
||||
"DataExistingBooks": "Monitorar livros que você tem arquivos ou que não foram lançados ainda",
|
||||
"DataListMonitorAll": "Monitorar autores e todos os livros para cada autor incluído na lista de importação",
|
||||
"DataListMonitorNone": "Não monitorar autores ou livros",
|
||||
@@ -842,7 +840,7 @@
|
||||
"Test": "Teste",
|
||||
"WriteMetadataTags": "Salvar tags de metadados",
|
||||
"RestartRequiredHelpTextWarning": "Requer reinicialização para entrar em vigor",
|
||||
"InstanceName": "Nome da Instância",
|
||||
"InstanceName": "Nome da instância",
|
||||
"ConvertToFormat": "Converter para o Formato",
|
||||
"DataAllBooks": "Monitorar todos os livros",
|
||||
"DataFirstBook": "Monitorar o primeiro livro. Todos os outros livros serão ignorados",
|
||||
@@ -857,38 +855,38 @@
|
||||
"Database": "Banco de dados",
|
||||
"LoadingEditionsFailed": "Falha ao carregar edições",
|
||||
"ManualImportSelectEdition": "Importação Manual - Selecionar Edição",
|
||||
"ApplicationURL": "URL do Aplicativo",
|
||||
"ApplicationUrlHelpText": "A URL externa deste aplicativo, incluindo http(s)://, porta e base da URL",
|
||||
"ApplicationURL": "URL do aplicativo",
|
||||
"ApplicationUrlHelpText": "A URL externa deste aplicativo, incluindo http(s)://, porta e URL base",
|
||||
"Theme": "Tema",
|
||||
"ThemeHelpText": "Alterar o tema da interface do usuário do aplicativo, o tema 'Auto' usará o tema do sistema operacional para definir o modo Claro ou Escuro. Inspirado por Theme.Park",
|
||||
"EnableRssHelpText": "Será usado quando o Readarr procurar periodicamente lançamentos via RSS Sync",
|
||||
"HardlinkCopyFiles": "Hardlink/Copiar Arquivos",
|
||||
"MoveFiles": "Mover Arquivos",
|
||||
"HardlinkCopyFiles": "Criar hardlink/Copiar arquivos",
|
||||
"MoveFiles": "Mover arquivos",
|
||||
"OnApplicationUpdate": "Na Atualização do Aplicativo",
|
||||
"OnApplicationUpdateHelpText": "Ao atualizar o aplicativo",
|
||||
"ChooseImportMethod": "Escolha o método de importação",
|
||||
"ClickToChangeReleaseGroup": "Clique para alterar o grupo de lançamento",
|
||||
"BypassIfAboveCustomFormatScore": "Ignorar se estiver acima da pontuação do formato personalizado",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Ativar ignorar quando a versão tiver uma pontuação maior que a pontuação mínima configurada do formato personalizado",
|
||||
"BypassIfHighestQuality": "Ignorar se a qualidade mais alta",
|
||||
"BypassIfHighestQuality": "Ignorar se a qualidade é mais alta",
|
||||
"BypassIfHighestQualityHelpText": "Ignorar o atraso quando o lançamento tiver a qualidade habilitada mais alta no perfil de qualidade",
|
||||
"CustomFormatScore": "Pontuação do formato personalizado",
|
||||
"MinimumCustomFormatScore": "Pontuação Mínima de Formato Personalizado",
|
||||
"MinimumCustomFormatScore": "Pontuação mínima de formato personalizado",
|
||||
"MinimumCustomFormatScoreHelpText": "Pontuação mínima de formato personalizado necessária para ignorar o atraso do protocolo preferido",
|
||||
"ApiKeyValidationHealthCheckMessage": "Atualize sua chave de API para ter pelo menos {0} caracteres. Você pode fazer isso através das configurações ou do arquivo de configuração",
|
||||
"DeleteFormat": "Excluir Formato",
|
||||
"DataFutureBooks": "Monitorar livros que ainda não foram lançados",
|
||||
"DeleteFormatMessageText": "Tem certeza de que deseja excluir a tag de formato '{0}'?",
|
||||
"IncludeCustomFormatWhenRenamingHelpText": "'Incluir em {Formatos Personalizados} formato de renomeação'",
|
||||
"IncludeCustomFormatWhenRenamingHelpText": "\"Incluir no formato de renomeação {Custom Formats}\"",
|
||||
"IndexerTagsHelpText": "Use este indexador apenas para autores com pelo menos uma tag correspondente. Deixe em branco para usar com todos os autores.",
|
||||
"MinFormatScoreHelpText": "Pontuação mínima de formato personalizado permitida para download",
|
||||
"RecycleBinUnableToWriteHealthCheck": "Não é possível gravar na pasta da lixeira configurada: {0}. Certifique-se de que este caminho exista e seja gravável pelo usuário executando o Readarr",
|
||||
"Clone": "Clonar",
|
||||
"CloneCustomFormat": "Clonar formato personalizado",
|
||||
"Conditions": "'Condições'",
|
||||
"CopyToClipboard": "Copiar para área de transferência",
|
||||
"CustomFormat": "Formato Personalizado",
|
||||
"CustomFormatSettings": "Configurações do Formato Personalizado",
|
||||
"CopyToClipboard": "Copiar para a área de transferência",
|
||||
"CustomFormat": "Formato personalizado",
|
||||
"CustomFormatSettings": "Configurações de formato personalizado",
|
||||
"CustomFormats": "Formatos personalizados",
|
||||
"CutoffFormatScoreHelpText": "Depois que essa pontuação de formato personalizado for alcançada, Readarr não obterá mais lançamentos de livros",
|
||||
"DeleteCustomFormat": "Excluir formato personalizado",
|
||||
@@ -906,20 +904,20 @@
|
||||
"ListRefreshInterval": "Intervalo de atualização da lista",
|
||||
"ListWillRefreshEveryInterp": "A lista será atualizada a cada {0}",
|
||||
"ResetDefinitionTitlesHelpText": "Redefinir títulos de definição e valores",
|
||||
"ResetDefinitions": "Redefinir Definições",
|
||||
"ResetDefinitions": "Redefinir definições",
|
||||
"ResetTitles": "Redefinir títulos",
|
||||
"UnableToLoadCustomFormats": "Não foi possível carregar formatos personalizados",
|
||||
"UnableToLoadCustomFormats": "Não foi possível carregar os formatos personalizados",
|
||||
"HiddenClickToShow": "Oculto, clique para mostrar",
|
||||
"HideAdvanced": "Ocultar Avançado",
|
||||
"ShowAdvanced": "Mostrar Avançado",
|
||||
"HideAdvanced": "Ocultar opções avançadas",
|
||||
"ShowAdvanced": "Mostrar opções avançadas",
|
||||
"ShownClickToHide": "Mostrado, clique para ocultar",
|
||||
"ColonReplacement": "Substituto para dois-pontos",
|
||||
"DashOrSpaceDashDependingOnName": "Traço ou Traço e Espaço dependendo do nome",
|
||||
"DashOrSpaceDashDependingOnName": "Traço ou Espaço e Traço, dependendo do nome",
|
||||
"ReplaceWithDash": "Substituir por Traço",
|
||||
"ReplaceWithSpaceDash": "Substituir por Espaço e Traço",
|
||||
"SmartReplace": "Substituição Inteligente",
|
||||
"SmartReplace": "Substituição inteligente",
|
||||
"ReplaceWithSpaceDashSpace": "Substituir com Espaço, Traço e Espaço",
|
||||
"DeleteRemotePathMapping": "Excluir Mapeamento de Caminho Remoto",
|
||||
"DeleteRemotePathMapping": "Excluir mapeamento de caminho remoto",
|
||||
"BlocklistReleases": "Lançamentos na lista de bloqueio",
|
||||
"CloneCondition": "Clonar Condição",
|
||||
"DeleteConditionMessageText": "Tem certeza de que deseja excluir a condição '{name}'?",
|
||||
@@ -934,10 +932,10 @@
|
||||
"Required": "Necessário",
|
||||
"ResetQualityDefinitions": "Redefinir definições de qualidade",
|
||||
"ResetQualityDefinitionsMessageText": "Tem certeza de que deseja redefinir as definições de qualidade?",
|
||||
"BlocklistReleaseHelpText": "Evita que o Readarr pegue automaticamente esses arquivos novamente",
|
||||
"NoCutoffUnmetItems": "Nenhum item de corte não atendido",
|
||||
"BlocklistReleaseHelpText": "Impede que o Readarr obtenha automaticamente esses arquivos novamente",
|
||||
"NoCutoffUnmetItems": "Nenhum item com limite não atendido",
|
||||
"NoEventsFound": "Não foram encontrados eventos",
|
||||
"NoMissingItems": "Nenhum item faltando",
|
||||
"NoMissingItems": "Nenhum item ausente",
|
||||
"CountImportListsSelected": "{selectedCount} lista(s) de importação selecionada(s)",
|
||||
"CountIndexersSelected": "{selectedCount} indexador(es) selecionado(s)",
|
||||
"EditSelectedDownloadClients": "Editar clientes de download selecionados",
|
||||
@@ -964,7 +962,7 @@
|
||||
"AutoAdd": "Adicionar automaticamente",
|
||||
"AutomaticAdd": "Adição Automática",
|
||||
"ApplyChanges": "Aplicar Mudanças",
|
||||
"ApplyTagsHelpTextAdd": "Adicionar: adicione as tags à lista existente de tags",
|
||||
"ApplyTagsHelpTextAdd": "Adicionar: Adicione as tags à lista existente de tags",
|
||||
"ApplyTagsHelpTextRemove": "Remover: Remove as tags inseridas",
|
||||
"ApplyTagsHelpTextReplace": "Substituir: Substitua as tags pelas tags inseridas (não digite nenhuma tag para limpar todas as tags)",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Como aplicar tags aos clientes de download selecionados",
|
||||
@@ -981,7 +979,7 @@
|
||||
"ExistingTag": "Tag existente",
|
||||
"No": "Não",
|
||||
"RemoveCompletedDownloads": "Remover downloads concluídos",
|
||||
"RemovingTag": "Removendo tag",
|
||||
"RemovingTag": "Removendo a tag",
|
||||
"SkipRedownloadHelpText": "Impede Readarr de tentar baixar versões alternativas para os itens removidos",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexadores com clientes de download inválidos: {0}.",
|
||||
"Activity": "Atividade",
|
||||
@@ -1004,15 +1002,15 @@
|
||||
"Ui": "IU",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Todas as notificações estão indisponíveis devido a falhas",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Notificações indisponíveis devido a falhas: {0}",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Todos os resultados são ocultados pelo filtro aplicado",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Todos os resultados estão ocultos pelo filtro aplicado",
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Alguns resultados estão ocultos pelo filtro aplicado",
|
||||
"NoResultsFound": "Nenhum resultado encontrado",
|
||||
"ConnectionLostReconnect": "{appName} tentará se conectar automaticamente ou você pode clicar em recarregar abaixo.",
|
||||
"AutomaticUpdatesDisabledDocker": "As atualizações automáticas não têm suporte direto ao usar o mecanismo de atualização do Docker. Você precisará atualizar a imagem do contêiner fora de {appName} ou usar um script",
|
||||
"WouldYouLikeToRestoreBackup": "Gostaria de restaurar o backup '{name}'?",
|
||||
"AppUpdated": "{appName} Atualizado",
|
||||
"AppUpdated": "{appName} atualizado",
|
||||
"AppUpdatedVersion": "{appName} foi atualizado para a versão `{version}`. Para obter as alterações mais recentes, você precisará recarregar {appName}",
|
||||
"ConnectionLost": "Conexão Perdida",
|
||||
"ConnectionLost": "Conexão perdida",
|
||||
"ConnectionLostToBackend": "{appName} perdeu a conexão com o backend e precisará ser recarregado para restaurar a funcionalidade.",
|
||||
"CountAuthorsSelected": "{selectedCount} autor(es) selecionado(s)",
|
||||
"RecentChanges": "Mudanças Recentes",
|
||||
@@ -1021,5 +1019,7 @@
|
||||
"ErrorLoadingContent": "Ocorreu um erro ao carregar este conteúdo",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "O cliente de download {0} está configurado para remover downloads concluídos. Isso pode resultar na remoção dos downloads do seu cliente antes que {1} possa importá-los.",
|
||||
"OnAuthorAdded": "Sobre o Autor Adicionado",
|
||||
"OnAuthorAddedHelpText": "Sobre o Autor Adicionado"
|
||||
"OnAuthorAddedHelpText": "Sobre o Autor Adicionado",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Exemplos: '.sub, .nfo' or 'sub,nfo'",
|
||||
"ExtraFileExtensionsHelpText": "Lista separada por vírgulas de arquivos extras para importar (.nfo será importado como .nfo-orig)"
|
||||
}
|
||||
|
||||
@@ -185,8 +185,6 @@
|
||||
"ErrorLoadingContents": "Eroare la încărcarea conținutului",
|
||||
"ErrorLoadingPreviews": "Eroare la încărcarea previzualizărilor",
|
||||
"Exception": "Excepție",
|
||||
"ExtraFileExtensionsHelpTexts1": "Lista separată prin virgulă a fișierelor suplimentare de importat (.nfo va fi importat ca .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Exemple: „.sub, .nfo” sau „sub, nfo”",
|
||||
"FailedDownloadHandling": "Procesarea descărcării a eșuat",
|
||||
"FileDateHelpText": "Schimbați data fișierului la import / rescanare",
|
||||
"FileManagement": "Administrarea de fișiere",
|
||||
@@ -372,7 +370,7 @@
|
||||
"TestAllIndexers": "Testați toate indexatoarele",
|
||||
"TestAllLists": "Testați toate listele",
|
||||
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Acest lucru se va aplica tuturor indexatorilor, vă rugăm să urmați regulile stabilite de aceștia",
|
||||
"TimeFormat": "Format de timp",
|
||||
"TimeFormat": "Format ora",
|
||||
"Title": "Titlu",
|
||||
"TorrentDelay": "Întârziere Torrent",
|
||||
"TorrentDelayHelpText": "Întârziați în câteva minute pentru a aștepta înainte de a apuca un torent",
|
||||
@@ -642,5 +640,9 @@
|
||||
"AddNew": "Adaugă nou",
|
||||
"Medium": "Mediu",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Toate rezultatele sunt ascunse de filtrul aplicat",
|
||||
"Backup": "Copie de rezervă"
|
||||
"Backup": "Copie de rezervă",
|
||||
"AppUpdated": "{appName} actualizat",
|
||||
"BlocklistReleaseHelpText": "Împiedică Radarr să apuce automat această versiune din nou",
|
||||
"ExtraFileExtensionsHelpText": "Lista separată prin virgulă a fișierelor suplimentare de importat (.nfo va fi importat ca .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Exemple: „.sub, .nfo” sau „sub, nfo”"
|
||||
}
|
||||
|
||||
@@ -132,8 +132,6 @@
|
||||
"ErrorLoadingContents": "Ошибка при загрузке содержимого",
|
||||
"ErrorLoadingPreviews": "Ошибка при загрузке предпросмотра",
|
||||
"Exception": "Исключение",
|
||||
"ExtraFileExtensionsHelpTexts1": "Список экстра файлов для импорта разделенных двоеточием(.info будет заменено на .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Например: '.sub, .nfo' или 'sub,nfo'",
|
||||
"FailedDownloadHandling": "Неудачные обработки скачиваний",
|
||||
"FileDateHelpText": "Заменить дату файла при импорте/сканировании",
|
||||
"FileManagement": "Управление файлами",
|
||||
|
||||
@@ -135,8 +135,6 @@
|
||||
"ErrorLoadingContents": "Fel vid inläsning av innehåll",
|
||||
"ErrorLoadingPreviews": "Fel vid inläsning av förhandsgranskningar",
|
||||
"Exception": "Undantag",
|
||||
"ExtraFileExtensionsHelpTexts1": "Kommaseparerad lista med extra filer som ska importeras (.nfo importeras som .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Exempel: '.sub, .nfo' eller 'sub,nfo'",
|
||||
"FailedDownloadHandling": "Misslyckad nedladdningshantering",
|
||||
"FileDateHelpText": "Ändra fildatum vid import/omskanning",
|
||||
"FileManagement": "Filhantering",
|
||||
|
||||
@@ -136,8 +136,6 @@
|
||||
"ErrorLoadingContents": "เกิดข้อผิดพลาดในการโหลดเนื้อหา",
|
||||
"ErrorLoadingPreviews": "เกิดข้อผิดพลาดในการโหลดตัวอย่าง",
|
||||
"Exception": "ข้อยกเว้น",
|
||||
"ExtraFileExtensionsHelpTexts1": "รายการไฟล์พิเศษที่คั่นด้วยจุลภาคที่จะนำเข้า (.nfo จะนำเข้าเป็น. nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "ตัวอย่าง: \".sub, .nfo\" หรือ \"sub, nfo\"",
|
||||
"FailedDownloadHandling": "การจัดการการดาวน์โหลดล้มเหลว",
|
||||
"FileDateHelpText": "เปลี่ยนวันที่ของไฟล์ในการนำเข้า / สแกนใหม่",
|
||||
"FileManagement": "การจัดการไฟล์",
|
||||
@@ -628,5 +626,7 @@
|
||||
"Large": "ใหญ่",
|
||||
"NextExecution": "การดำเนินการถัดไป",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "ผลลัพธ์ทั้งหมดถูกซ่อนโดยตัวกรองที่ใช้",
|
||||
"Medium": "ปานกลาง"
|
||||
"Medium": "ปานกลาง",
|
||||
"ExtraFileExtensionsHelpText": "รายการไฟล์พิเศษที่คั่นด้วยจุลภาคที่จะนำเข้า (.nfo จะนำเข้าเป็น. nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "ตัวอย่าง: \".sub, .nfo\" หรือ \"sub, nfo\""
|
||||
}
|
||||
|
||||
@@ -129,8 +129,6 @@
|
||||
"ErrorLoadingContents": "İçerik yüklenirken hata oluştu",
|
||||
"ErrorLoadingPreviews": "Önizlemeler yüklenirken hata oluştu",
|
||||
"Exception": "İstisna",
|
||||
"ExtraFileExtensionsHelpTexts1": "İçe aktarılacak ekstra dosyaların virgülle ayrılmış listesi (.nfo, .nfo-orig olarak içe aktarılacaktır)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Örnekler: \".sub, .nfo\" veya \"sub, nfo\"",
|
||||
"FailedDownloadHandling": "Başarısız İndirme İşlemi",
|
||||
"FileDateHelpText": "İçe aktarmada / yeniden taramada dosya tarihini değiştirin",
|
||||
"FileManagement": "Dosya idare",
|
||||
@@ -631,5 +629,7 @@
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Tüm sonuçlar, uygulanan filtre tarafından gizlenir",
|
||||
"Library": "kütüphane",
|
||||
"MetadataProfile": "üstveri profili",
|
||||
"MetadataProfiles": "üstveri profili"
|
||||
"MetadataProfiles": "üstveri profili",
|
||||
"ExtraFileExtensionsHelpText": "İçe aktarılacak ekstra dosyaların virgülle ayrılmış listesi (.nfo, .nfo-orig olarak içe aktarılacaktır)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Örnekler: \".sub, .nfo\" veya \"sub, nfo\""
|
||||
}
|
||||
|
||||
@@ -134,7 +134,6 @@
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Заборонити імпорт, якщо він залишить менше, ніж цей обсяг доступного дискового простору",
|
||||
"EnableInteractiveSearch": "Увімкнути інтерактивний пошук",
|
||||
"ErrorLoadingContents": "Помилка завантаження вмісту",
|
||||
"ExtraFileExtensionsHelpTexts1": "Розділений комами список додаткових файлів для імпорту (.nfo буде імпортовано як .nfo-orig)",
|
||||
"FileWasDeletedByUpgrade": "Файл видалено, щоб імпортувати оновлення",
|
||||
"FirstDayOfWeek": "Перший день тижня",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Усі індексатори з можливістю пошуку тимчасово недоступні через нещодавні помилки індексатора",
|
||||
@@ -466,7 +465,6 @@
|
||||
"UnmonitoredHelpText": "Включайте неконтрольовані фільми в канал iCal",
|
||||
"Database": "База даних",
|
||||
"DeleteSelectedBookFiles": "Видалити вибрані файли фільмів",
|
||||
"ExtraFileExtensionsHelpTexts2": "Приклади: '.sub, .nfo' або 'sub,nfo'",
|
||||
"ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Щоб отримати додаткові відомості про окремі клієнти для завантаження, натисніть кнопки додаткових відомостей.",
|
||||
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Щоб отримати додаткову інформацію про окремих індексаторів, натисніть кнопки інформації.",
|
||||
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Щоб отримати додаткову інформацію про окремі списки імпорту, натисніть інформаційні кнопки.",
|
||||
|
||||
@@ -132,8 +132,6 @@
|
||||
"ErrorLoadingContents": "Lỗi khi tải nội dung",
|
||||
"ErrorLoadingPreviews": "Lỗi khi tải bản xem trước",
|
||||
"Exception": "ngoại lệ",
|
||||
"ExtraFileExtensionsHelpTexts1": "Danh sách các tệp bổ sung cần nhập được phân tách bằng dấu phẩy (.nfo sẽ được nhập dưới dạng .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTexts2": "Ví dụ: '.sub, .nfo' hoặc 'sub, nfo'",
|
||||
"FailedDownloadHandling": "Xử lý tải xuống không thành công",
|
||||
"FileDateHelpText": "Thay đổi ngày tệp khi nhập / quét lại",
|
||||
"FileManagement": "Quản lý tệp",
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
"History": "历史记录",
|
||||
"Host": "主机",
|
||||
"PortNumber": "端口号",
|
||||
"PosterSize": "海报尺寸",
|
||||
"PosterSize": "海报大小",
|
||||
"AddingTag": "添加标签",
|
||||
"AgeWhenGrabbed": "年龄(在被抓取后)",
|
||||
"AlreadyInYourLibrary": "已经在你的库中",
|
||||
"AlternateTitles": "备选标题",
|
||||
"AlternateTitles": "别名",
|
||||
"Analytics": "分析",
|
||||
"AnalyticsEnabledHelpText": "发送匿名使用和错误信息到Readarr的服务器。这包括有关浏览器的信息、您使用的Readarr web页面、错误报告以及操作系统和运行时版本。我们将使用这些信息来确定功能和bug修复的优先级。",
|
||||
"AnalyticsEnabledHelpTextWarning": "需要重启生效",
|
||||
@@ -42,7 +42,7 @@
|
||||
"ChownGroupHelpText": "组名称或GID。对于远程文件系统请使用GID。",
|
||||
"ChownGroupHelpTextWarning": "这只在运行Radarr的用户是文件所有者的情况下才有效。最好确保下载客户端使用与Radarr相同的组。",
|
||||
"Clear": "清除",
|
||||
"ClickToChangeQuality": "点击修改质量",
|
||||
"ClickToChangeQuality": "点击更改质量",
|
||||
"ClientPriority": "客户端优先级",
|
||||
"CloneIndexer": "复制索引器",
|
||||
"CloneProfile": "复制配置",
|
||||
@@ -75,19 +75,19 @@
|
||||
"DeleteImportListExclusionMessageText": "你确定要删除这个导入排除列表吗?",
|
||||
"DeleteImportListMessageText": "您确定要删除列表 “{name}” 吗?",
|
||||
"DeleteIndexer": "删除索引器",
|
||||
"DeleteIndexerMessageText": "您确定要删除索引器 “{name}” 吗?",
|
||||
"DeleteIndexerMessageText": "您确定要删除索引器“{name}”吗?",
|
||||
"DeleteMetadataProfileMessageText": "您确定要删除元数据配置文件“{name}”吗?",
|
||||
"DeleteNotification": "删除消息推送",
|
||||
"DeleteNotificationMessageText": "您确定要删除消息推送 “{name}” 吗?",
|
||||
"DeleteNotificationMessageText": "您确定要删除通知“{name}”吗?",
|
||||
"DeleteQualityProfile": "删除质量配置",
|
||||
"DeleteQualityProfileMessageText": "你确定要删除质量配置 “{name}” 吗?",
|
||||
"DeleteQualityProfileMessageText": "您确定要删除质量配置“{name}”吗?",
|
||||
"DeleteReleaseProfile": "删除发布组配置",
|
||||
"DeleteReleaseProfileMessageText": "您确定要删除这个发行配置?",
|
||||
"DeleteSelectedBookFiles": "删除选择的电影文件",
|
||||
"DeleteSelectedBookFilesMessageText": "您确定要删除选择的电影文件吗?",
|
||||
"DeleteTagMessageText": "您确定要删除标签 '{0}' 吗?",
|
||||
"DestinationPath": "目的路径",
|
||||
"DetailedProgressBar": "详细的进度条",
|
||||
"DestinationPath": "目标路径",
|
||||
"DetailedProgressBar": "详细进度条",
|
||||
"DetailedProgressBarHelpText": "在进度条上显示文本",
|
||||
"DiskSpace": "硬盘空间",
|
||||
"Docker": "Docker",
|
||||
@@ -108,15 +108,13 @@
|
||||
"EnableCompletedDownloadHandlingHelpText": "自动从下载客户端导入已完成的下载内容",
|
||||
"EnableHelpText": "启用此元数据类型的元数据文件创建",
|
||||
"EnableInteractiveSearch": "启用手动搜索",
|
||||
"EnableRSS": "启用RSS",
|
||||
"EnableSSL": "启用SSL",
|
||||
"EnableRSS": "启用 RSS",
|
||||
"EnableSSL": "启用 SSL",
|
||||
"EnableSslHelpText": " 重启生效",
|
||||
"Ended": "已完结",
|
||||
"ErrorLoadingContents": "读取内容错误",
|
||||
"ErrorLoadingContents": "加载内容出错",
|
||||
"ErrorLoadingPreviews": "读取预告片错误",
|
||||
"Exception": "例外",
|
||||
"ExtraFileExtensionsHelpTexts1": "导入逗号分隔其他文件(.nfo将做为.nfo-orig被导入)",
|
||||
"ExtraFileExtensionsHelpTexts2": "例:'.sub, .nfo' 或者 'sub,nfo'",
|
||||
"FailedDownloadHandling": "下载失败处理",
|
||||
"FileDateHelpText": "导入和重新扫描时修改文件日期",
|
||||
"FileManagement": "文件管理",
|
||||
@@ -194,7 +192,7 @@
|
||||
"MinimumFreeSpace": "最小剩余空间",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "如果导入的磁盘空间不足,则禁止导入",
|
||||
"MinimumLimits": "最小限制",
|
||||
"Missing": "缺少",
|
||||
"Missing": "缺失",
|
||||
"Mode": "模式",
|
||||
"Monitored": "监控中",
|
||||
"MoreInfo": "更多信息",
|
||||
@@ -219,7 +217,7 @@
|
||||
"OpenBrowserOnStart": "启动时打开浏览器",
|
||||
"Options": "选项",
|
||||
"Original": "原始的",
|
||||
"Overview": "概述",
|
||||
"Overview": "概览",
|
||||
"PackageVersion": "Package版本",
|
||||
"PageSize": "页面大小",
|
||||
"PageSizeHelpText": "每页显示的项目数",
|
||||
@@ -228,7 +226,7 @@
|
||||
"Permissions": "权限",
|
||||
"Port": "端口",
|
||||
"PortHelpTextWarning": "重启生效",
|
||||
"PreviewRename": "预览重命名",
|
||||
"PreviewRename": "重命名预览",
|
||||
"Profiles": "配置",
|
||||
"Proper": "合适的",
|
||||
"PropersAndRepacks": "适合的和重封装的Propers and Repacks",
|
||||
@@ -262,14 +260,14 @@
|
||||
"RefreshInformationAndScanDisk": "刷新信息并扫描磁盘",
|
||||
"ReleaseDate": "发布日期",
|
||||
"ReleaseGroup": "发布组",
|
||||
"ReleaseRejected": "版本被拒绝",
|
||||
"ReleaseRejected": "发布被拒绝",
|
||||
"ReleaseWillBeProcessedInterp": "发布将被处理{0}",
|
||||
"Reload": "重新加载",
|
||||
"RemotePathMappings": "远程路径映射",
|
||||
"Remove": "移除",
|
||||
"RemoveCompletedDownloadsHelpText": "从下载客户端记录中移除已导入的下载",
|
||||
"RemoveFailedDownloadsHelpText": "从下载客户端中删除已失败的下载",
|
||||
"RemoveFilter": "移除过滤条件",
|
||||
"RemoveFilter": "移除过滤器",
|
||||
"RemoveFromDownloadClient": "从下载客户端中移除",
|
||||
"RemoveFromQueue": "从队列中移除",
|
||||
"RemoveHelpTextWarning": "移除操作会从下载客户端中删除任务和已下载文件。",
|
||||
@@ -316,17 +314,17 @@
|
||||
"Settings": "设置",
|
||||
"ShortDateFormat": "短日期格式",
|
||||
"ShowCutoffUnmetIconHelpText": "终止监控条件未满足前为文件显示图标",
|
||||
"ShowDateAdded": "显示添加日期",
|
||||
"ShowDateAdded": "显示加入时间",
|
||||
"ShowMonitored": "显示监控中的",
|
||||
"ShowMonitoredHelpText": "在海报下显示监控状态",
|
||||
"ShowPath": "显示路径",
|
||||
"ShowQualityProfile": "显示媒体质量配置",
|
||||
"ShowQualityProfile": "显示质量配置文件",
|
||||
"ShowQualityProfileHelpText": "在海报下方显示媒体质量配置",
|
||||
"ShowRelativeDates": "显示相对日期",
|
||||
"ShowRelativeDatesHelpText": "显示相对日期(今天昨天等)或绝对日期",
|
||||
"ShowSearch": "显示搜索按钮",
|
||||
"ShowSearch": "显示搜索",
|
||||
"ShowSearchActionHelpText": "在选项中显示搜索框",
|
||||
"ShowSizeOnDisk": "显示占用磁盘体积",
|
||||
"ShowSizeOnDisk": "显示占用空间",
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "当使用周视图时显示上面的每一列",
|
||||
"Size": " 文件大小",
|
||||
"SkipFreeSpaceCheck": "跳过剩余空间检查",
|
||||
@@ -363,7 +361,7 @@
|
||||
"TorrentDelay": "Torrent延时",
|
||||
"TorrentDelayHelpText": "延迟几分钟等待获取torrent",
|
||||
"Torrents": "种子",
|
||||
"TotalFileSize": "总文件体积",
|
||||
"TotalFileSize": "文件总大小",
|
||||
"UILanguage": "UI界面语言",
|
||||
"UILanguageHelpText": "Radarr使用的UI界面语言",
|
||||
"UILanguageHelpTextWarning": "浏览器需重新加载",
|
||||
@@ -428,7 +426,7 @@
|
||||
"60MinutesSixty": "60分钟: {0}",
|
||||
"APIKey": "API Key",
|
||||
"About": "关于",
|
||||
"AddListExclusion": "添加排除列表",
|
||||
"AddListExclusion": "添加列表例外",
|
||||
"DeleteTag": "删除标签",
|
||||
"UnableToLoadTags": "无法加载标签",
|
||||
"DownloadClientCheckDownloadingToRoot": "下载客户端{0}将下载内容放在根文件夹{1}中。您不应该下载到根文件夹。",
|
||||
@@ -473,9 +471,9 @@
|
||||
"ThisCannotBeCancelled": "在不禁用所有索引器的情况下,一旦启动就无法取消。",
|
||||
"Time": "时间",
|
||||
"UnableToLoadBlocklist": "无法加载黑名单",
|
||||
"UnselectAll": "全不选",
|
||||
"UnselectAll": "取消选择全部",
|
||||
"UpdateSelected": "更新已选",
|
||||
"Wanted": "想要的",
|
||||
"Wanted": "已追踪",
|
||||
"All": "全部",
|
||||
"Level": "等级",
|
||||
"RemoveFromBlocklist": "从黑名单中移除",
|
||||
@@ -525,7 +523,7 @@
|
||||
"Queued": "队列中",
|
||||
"QueueIsEmpty": "空队列",
|
||||
"ReadarrSupportsAnyDownloadClient": "Radarr支持许多常用的的torrent和usenet下载客户端。",
|
||||
"RefreshAndScan": "刷新&扫描",
|
||||
"RefreshAndScan": "刷新并扫描",
|
||||
"RemotePathMappingCheckBadDockerPath": "您正在使用docker;下载客户端 {0} 的下载目录为 {1} ,但是该地址 {2} 不合法。请检查您的远程地址映射和下载客户端设置。",
|
||||
"RemotePathMappingCheckDockerFolderMissing": "您正在使用docker;下载客户端 {0} 报告文件在 {1} 中,但是该目录似乎不存在docker容器中。请检查您的远程地址映射和容器的卷设置。",
|
||||
"RemotePathMappingCheckDownloadPermissions": "Radarr可以找到但无法访问已下载的电影 {0} ,可能是权限错误。",
|
||||
@@ -779,7 +777,6 @@
|
||||
"CalibreUsername": "Calibre用户名",
|
||||
"ChownGroup": "修改组权限",
|
||||
"ContinuingAllBooksDownloaded": "仍在继续(所有书籍已下载)",
|
||||
"EnableProfile": "启用配置文件",
|
||||
"IfYouDontAddAnImportListExclusionAndTheAuthorHasAMetadataProfileOtherThanNoneThenThisBookMayBeReaddedDuringTheNextAuthorRefresh": "如果您不添加导入列表排除,并且作者有除“无”之外的元数据配置文件,那么这本书可能会在下一次作者刷新期间重新添加。",
|
||||
"IndexerIdHelpTextWarning": "使用带有首字母的特定索引器可能会导致复制版本被抓取",
|
||||
"MassBookSearchWarning": "您确定要对{0}本书进行批量书籍搜索吗?",
|
||||
@@ -859,7 +856,7 @@
|
||||
"BindAddressHelpText": "有效的 IP 地址、localhost、或以'*'代表所有接口",
|
||||
"ApplicationURL": "应用程序 URL",
|
||||
"ApplicationUrlHelpText": "此应用的外部URL,包含 http(s)://、端口和基本URL",
|
||||
"ClickToChangeReleaseGroup": "点击修改发布组",
|
||||
"ClickToChangeReleaseGroup": "单击更改发布组",
|
||||
"MoveFiles": "移动文件",
|
||||
"OnApplicationUpdate": "程序更新时",
|
||||
"OnApplicationUpdateHelpText": "程序更新时",
|
||||
@@ -951,7 +948,7 @@
|
||||
"AutomaticUpdatesDisabledDocker": "不支持在使用 Docker 容器时直接升级。你需要升级 {appName} 容器镜像或使用脚本(script)",
|
||||
"ColonReplacement": "替换冒号",
|
||||
"Clone": "复制",
|
||||
"ErrorLoadingContent": "加载此内容时出错",
|
||||
"ErrorLoadingContent": "加载此内容时出现错误",
|
||||
"ReplaceWithSpaceDash": "替换为空格破折号",
|
||||
"ReplaceWithDash": "替换为破折号",
|
||||
"ReplaceWithSpaceDashSpace": "替换为空格破折号空格",
|
||||
@@ -1019,7 +1016,8 @@
|
||||
"LastWriteTime": "最后写入时间",
|
||||
"LastExecution": "上一次执行",
|
||||
"Library": "库",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "下载客户端{0}设置为删除已完成的下载。这可能导致在{1}可以导入下载之前从您的客户端删除下载。",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "下载客户端 {0} 已被设置为删除已完成的下载。这可能导致在 {1} 导入之前,已下载的文件会被从您的客户端中移除。",
|
||||
"OnAuthorAddedHelpText": "作者添加时",
|
||||
"OnAuthorAdded": "作者添加时"
|
||||
"OnAuthorAdded": "作者添加时",
|
||||
"EnableProfile": "启用配置"
|
||||
}
|
||||
|
||||
@@ -143,6 +143,10 @@ namespace NzbDrone.Core.MediaCover
|
||||
DownloadCover(author, cover, serverFileHeaders.LastModified ?? DateTime.Now);
|
||||
}
|
||||
}
|
||||
catch (HttpException e)
|
||||
{
|
||||
_logger.Warn("Couldn't download media cover for {0}. {1}", author, e.Message);
|
||||
}
|
||||
catch (WebException e)
|
||||
{
|
||||
_logger.Warn("Couldn't download media cover for {0}. {1}", author, e.Message);
|
||||
@@ -193,6 +197,10 @@ namespace NzbDrone.Core.MediaCover
|
||||
DownloadBookCover(book, cover, serverFileHeaders.LastModified ?? DateTime.Now);
|
||||
}
|
||||
}
|
||||
catch (HttpException e)
|
||||
{
|
||||
_logger.Warn("Couldn't download media cover for {0}. {1}", book, e.Message);
|
||||
}
|
||||
catch (WebException e)
|
||||
{
|
||||
_logger.Warn("Couldn't download media cover for {0}. {1}", book, e.Message);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user