mirror of
https://github.com/Readarr/Readarr.git
synced 2026-03-20 16:44:14 -04:00
Compare commits
20 Commits
v0.3.19.24
...
v0.3.20.24
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3407cc9a7a | ||
|
|
4829916f0a | ||
|
|
c505eafd30 | ||
|
|
07f218f294 | ||
|
|
42751b598b | ||
|
|
5e7e0eb50b | ||
|
|
d6c631457c | ||
|
|
12ee76d222 | ||
|
|
3ea80038d3 | ||
|
|
55404cdf24 | ||
|
|
83a9cd4f3e | ||
|
|
3572d7330d | ||
|
|
a9b652a280 | ||
|
|
8efb2eb71a | ||
|
|
17094f1998 | ||
|
|
ddf5dc25a1 | ||
|
|
fa2614954b | ||
|
|
2e2894b3d3 | ||
|
|
59ff407e76 | ||
|
|
bbd7b9f92e |
@@ -9,14 +9,14 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '0.3.19'
|
||||
majorVersion: '0.3.20'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
readarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
|
||||
sentryOrg: 'servarr'
|
||||
sentryUrl: 'https://sentry.servarr.com'
|
||||
dotnetVersion: '6.0.417'
|
||||
nodeVersion: '16.X'
|
||||
nodeVersion: '20.X'
|
||||
innoVersion: '6.2.0'
|
||||
windowsImage: 'windows-2022'
|
||||
linuxImage: 'ubuntu-20.04'
|
||||
|
||||
@@ -218,10 +218,12 @@ class HistoryRow extends Component {
|
||||
key={name}
|
||||
className={styles.details}
|
||||
>
|
||||
<IconButton
|
||||
name={icons.INFO}
|
||||
onPress={this.onDetailsPress}
|
||||
/>
|
||||
<div className={styles.actionContents}>
|
||||
<IconButton
|
||||
name={icons.INFO}
|
||||
onPress={this.onDetailsPress}
|
||||
/>
|
||||
</div>
|
||||
</TableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ class BookRow extends Component {
|
||||
releaseDate,
|
||||
title,
|
||||
seriesTitle,
|
||||
authorName,
|
||||
position,
|
||||
pageCount,
|
||||
ratings,
|
||||
@@ -211,6 +212,7 @@ class BookRow extends Component {
|
||||
bookId={id}
|
||||
authorId={authorId}
|
||||
bookTitle={title}
|
||||
authorName={authorName}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -229,6 +231,7 @@ BookRow.propTypes = {
|
||||
releaseDate: PropTypes.string,
|
||||
title: PropTypes.string.isRequired,
|
||||
seriesTitle: PropTypes.string.isRequired,
|
||||
authorName: PropTypes.string.isRequired,
|
||||
position: PropTypes.string,
|
||||
pageCount: PropTypes.number,
|
||||
ratings: PropTypes.object.isRequired,
|
||||
|
||||
@@ -33,6 +33,7 @@ function createMapStateToProps() {
|
||||
(author = {}, bookFiles, bookId) => {
|
||||
return {
|
||||
authorMonitored: author.monitored,
|
||||
authorName: author.authorName,
|
||||
bookFiles: bookFiles[bookId] ?? []
|
||||
};
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ class BookSearchCell extends Component {
|
||||
const {
|
||||
bookId,
|
||||
bookTitle,
|
||||
authorName,
|
||||
isSearching,
|
||||
onSearchPress,
|
||||
...otherProps
|
||||
@@ -60,6 +61,7 @@ class BookSearchCell extends Component {
|
||||
isOpen={this.state.isDetailsModalOpen}
|
||||
bookId={bookId}
|
||||
bookTitle={bookTitle}
|
||||
authorName={authorName}
|
||||
onModalClose={this.onDetailsModalClose}
|
||||
{...otherProps}
|
||||
/>
|
||||
@@ -73,6 +75,7 @@ BookSearchCell.propTypes = {
|
||||
bookId: PropTypes.number.isRequired,
|
||||
authorId: PropTypes.number.isRequired,
|
||||
bookTitle: PropTypes.string.isRequired,
|
||||
authorName: PropTypes.string.isRequired,
|
||||
isSearching: PropTypes.bool.isRequired,
|
||||
onSearchPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
@@ -9,19 +9,21 @@ function BookInteractiveSearchModal(props) {
|
||||
isOpen,
|
||||
bookId,
|
||||
bookTitle,
|
||||
authorName,
|
||||
onModalClose
|
||||
} = props;
|
||||
|
||||
return (
|
||||
<Modal
|
||||
isOpen={isOpen}
|
||||
size={sizes.EXTRA_LARGE}
|
||||
size={sizes.EXTRA_EXTRA_LARGE}
|
||||
closeOnBackgroundClick={false}
|
||||
onModalClose={onModalClose}
|
||||
>
|
||||
<BookInteractiveSearchModalContent
|
||||
bookId={bookId}
|
||||
bookTitle={bookTitle}
|
||||
authorName={authorName}
|
||||
onModalClose={onModalClose}
|
||||
/>
|
||||
</Modal>
|
||||
@@ -32,6 +34,7 @@ BookInteractiveSearchModal.propTypes = {
|
||||
isOpen: PropTypes.bool.isRequired,
|
||||
bookId: PropTypes.number.isRequired,
|
||||
bookTitle: PropTypes.string.isRequired,
|
||||
authorName: PropTypes.string.isRequired,
|
||||
onModalClose: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
||||
@@ -7,18 +7,23 @@ import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import { scrollDirections } from 'Helpers/Props';
|
||||
import InteractiveSearchConnector from 'InteractiveSearch/InteractiveSearchConnector';
|
||||
import translate from 'Utilities/String/translate';
|
||||
|
||||
function BookInteractiveSearchModalContent(props) {
|
||||
const {
|
||||
bookId,
|
||||
bookTitle,
|
||||
authorName,
|
||||
onModalClose
|
||||
} = props;
|
||||
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Interactive Search {bookId != null && `- ${bookTitle}`}
|
||||
{bookId === null ?
|
||||
translate('InteractiveSearchModalHeader') :
|
||||
translate('InteractiveSearchModalHeaderBookAuthor', { bookTitle, authorName })
|
||||
}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody scrollDirection={scrollDirections.BOTH}>
|
||||
@@ -32,7 +37,7 @@ function BookInteractiveSearchModalContent(props) {
|
||||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Close
|
||||
{translate('Close')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
@@ -42,6 +47,7 @@ function BookInteractiveSearchModalContent(props) {
|
||||
BookInteractiveSearchModalContent.propTypes = {
|
||||
bookId: PropTypes.number.isRequired,
|
||||
bookTitle: PropTypes.string.isRequired,
|
||||
authorName: PropTypes.string.isRequired,
|
||||
onModalClose: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { maxBy } from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import FormInputGroup from 'Components/Form/FormInputGroup';
|
||||
@@ -50,7 +51,7 @@ class FilterBuilderModalContent extends Component {
|
||||
if (id) {
|
||||
dispatchSetFilter({ selectedFilterKey: id });
|
||||
} else {
|
||||
const last = customFilters[customFilters.length -1];
|
||||
const last = maxBy(customFilters, 'id');
|
||||
dispatchSetFilter({ selectedFilterKey: last.id });
|
||||
}
|
||||
|
||||
@@ -108,7 +109,7 @@ class FilterBuilderModalContent extends Component {
|
||||
this.setState({
|
||||
labelErrors: [
|
||||
{
|
||||
message: 'Label is required'
|
||||
message: translate('LabelIsRequired')
|
||||
}
|
||||
]
|
||||
});
|
||||
@@ -146,13 +147,13 @@ class FilterBuilderModalContent extends Component {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Custom Filter
|
||||
{translate('CustomFilter')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
<div className={styles.labelContainer}>
|
||||
<div className={styles.label}>
|
||||
Label
|
||||
{translate('Label')}
|
||||
</div>
|
||||
|
||||
<div className={styles.labelInputContainer}>
|
||||
@@ -195,7 +196,7 @@ class FilterBuilderModalContent extends Component {
|
||||
|
||||
<ModalFooter>
|
||||
<Button onPress={onCancelPress}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
@@ -203,7 +204,7 @@ class FilterBuilderModalContent extends Component {
|
||||
error={saveError}
|
||||
onPress={this.onSaveFilterPress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
||||
@@ -37,8 +37,8 @@ class CustomFilter extends Component {
|
||||
dispatchSetFilter
|
||||
} = this.props;
|
||||
|
||||
// Assume that delete and then unmounting means the delete was successful.
|
||||
// Moving this check to a ancestor would be more accurate, but would have
|
||||
// Assume that delete and then unmounting means the deletion was successful.
|
||||
// Moving this check to an ancestor would be more accurate, but would have
|
||||
// more boilerplate.
|
||||
if (this.state.isDeleting && id === selectedFilterKey) {
|
||||
dispatchSetFilter({ selectedFilterKey: 'all' });
|
||||
|
||||
@@ -91,6 +91,7 @@ class TextTagInputConnector extends Component {
|
||||
render() {
|
||||
return (
|
||||
<TagInput
|
||||
delimiters={['Tab', 'Enter', ',']}
|
||||
tagList={[]}
|
||||
onTagAdd={this.onTagAdd}
|
||||
onTagDelete={this.onTagDelete}
|
||||
|
||||
@@ -63,6 +63,13 @@
|
||||
width: 1280px;
|
||||
}
|
||||
|
||||
|
||||
.extraExtraLarge {
|
||||
composes: modal;
|
||||
|
||||
width: 1600px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $breakpointExtraLarge) {
|
||||
.modal.extraLarge {
|
||||
width: 90%;
|
||||
@@ -90,7 +97,8 @@
|
||||
.modal.small,
|
||||
.modal.medium,
|
||||
.modal.large,
|
||||
.modal.extraLarge {
|
||||
.modal.extraLarge,
|
||||
.modal.extraExtraLarge {
|
||||
max-height: 100%;
|
||||
width: 100%;
|
||||
height: 100% !important;
|
||||
|
||||
1
frontend/src/Components/Modal/Modal.css.d.ts
vendored
1
frontend/src/Components/Modal/Modal.css.d.ts
vendored
@@ -1,6 +1,7 @@
|
||||
// This file is automatically generated.
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'extraExtraLarge': string;
|
||||
'extraLarge': string;
|
||||
'large': string;
|
||||
'medium': string;
|
||||
|
||||
@@ -3,5 +3,5 @@ export const SMALL = 'small';
|
||||
export const MEDIUM = 'medium';
|
||||
export const LARGE = 'large';
|
||||
export const EXTRA_LARGE = 'extraLarge';
|
||||
|
||||
export const all = [EXTRA_SMALL, SMALL, MEDIUM, LARGE, EXTRA_LARGE];
|
||||
export const EXTRA_EXTRA_LARGE = 'extraExtraLarge';
|
||||
export const all = [EXTRA_SMALL, SMALL, MEDIUM, LARGE, EXTRA_LARGE, EXTRA_EXTRA_LARGE];
|
||||
|
||||
@@ -48,7 +48,7 @@ class InteractiveImportModal extends Component {
|
||||
return (
|
||||
<Modal
|
||||
isOpen={isOpen}
|
||||
size={sizes.EXTRA_LARGE}
|
||||
size={sizes.EXTRA_EXTRA_LARGE}
|
||||
closeOnBackgroundClick={false}
|
||||
onModalClose={onModalClose}
|
||||
>
|
||||
|
||||
@@ -8,12 +8,11 @@
|
||||
width: 80px;
|
||||
}
|
||||
|
||||
.title {
|
||||
composes: cell;
|
||||
}
|
||||
|
||||
.title div {
|
||||
overflow-wrap: break-word;
|
||||
.titleContent {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.indexer {
|
||||
|
||||
@@ -11,7 +11,7 @@ interface CssExports {
|
||||
'quality': string;
|
||||
'rejected': string;
|
||||
'size': string;
|
||||
'title': string;
|
||||
'titleContent': string;
|
||||
}
|
||||
export const cssExports: CssExports;
|
||||
export default cssExports;
|
||||
|
||||
@@ -153,10 +153,12 @@ class InteractiveSearchRow extends Component {
|
||||
{formatAge(age, ageHours, ageMinutes)}
|
||||
</TableRowCell>
|
||||
|
||||
<TableRowCell className={styles.title}>
|
||||
<Link to={infoUrl}>
|
||||
{title}
|
||||
</Link>
|
||||
<TableRowCell>
|
||||
<div className={styles.titleContent}>
|
||||
<Link to={infoUrl}>
|
||||
{title}
|
||||
</Link>
|
||||
</div>
|
||||
</TableRowCell>
|
||||
|
||||
<TableRowCell className={styles.indexer}>
|
||||
|
||||
@@ -12,6 +12,7 @@ import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
||||
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
|
||||
import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
|
||||
import TablePager from 'Components/Table/TablePager';
|
||||
import { align, icons, kinds } from 'Helpers/Props';
|
||||
import getFilterValue from 'Utilities/Filter/getFilterValue';
|
||||
@@ -173,6 +174,16 @@ class CutoffUnmet extends Component {
|
||||
</PageToolbarSection>
|
||||
|
||||
<PageToolbarSection alignContent={align.RIGHT}>
|
||||
<TableOptionsModalWrapper
|
||||
{...otherProps}
|
||||
columns={columns}
|
||||
>
|
||||
<PageToolbarButton
|
||||
label={translate('Options')}
|
||||
iconName={icons.TABLE}
|
||||
/>
|
||||
</TableOptionsModalWrapper>
|
||||
|
||||
<FilterMenu
|
||||
alignMenu={align.RIGHT}
|
||||
selectedFilterKey={selectedFilterKey}
|
||||
|
||||
@@ -84,6 +84,7 @@ function CutoffUnmetRow(props) {
|
||||
bookId={id}
|
||||
authorId={author.id}
|
||||
bookTitle={title}
|
||||
authorName={author.authorName}
|
||||
bookEntity={bookEntities.WANTED_CUTOFF_UNMET}
|
||||
showOpenAuthorButton={true}
|
||||
/>
|
||||
|
||||
@@ -12,6 +12,7 @@ import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
||||
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
|
||||
import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
|
||||
import TablePager from 'Components/Table/TablePager';
|
||||
import { align, icons, kinds } from 'Helpers/Props';
|
||||
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
|
||||
@@ -190,6 +191,16 @@ class Missing extends Component {
|
||||
</PageToolbarSection>
|
||||
|
||||
<PageToolbarSection alignContent={align.RIGHT}>
|
||||
<TableOptionsModalWrapper
|
||||
{...otherProps}
|
||||
columns={columns}
|
||||
>
|
||||
<PageToolbarButton
|
||||
label={translate('Options')}
|
||||
iconName={icons.TABLE}
|
||||
/>
|
||||
</TableOptionsModalWrapper>
|
||||
|
||||
<FilterMenu
|
||||
alignMenu={align.RIGHT}
|
||||
selectedFilterKey={selectedFilterKey}
|
||||
|
||||
@@ -84,6 +84,7 @@ function MissingRow(props) {
|
||||
bookId={id}
|
||||
authorId={author.id}
|
||||
bookTitle={title}
|
||||
authorName={author.authorName}
|
||||
bookEntity={bookEntities.WANTED_MISSING}
|
||||
showOpenAuthorButton={true}
|
||||
/>
|
||||
|
||||
@@ -3,13 +3,16 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
|
||||
<!-- Chrome, Opera, and Firefox OS -->
|
||||
<meta name="theme-color" content="#3a3f51" />
|
||||
<!-- Windows Phone -->
|
||||
<meta name="msapplication-navbutton-color" content="#3a3f51" />
|
||||
<!-- Android/Apple Phone -->
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
|
||||
<meta name="description" content="Readarr">
|
||||
|
||||
|
||||
@@ -3,13 +3,16 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
|
||||
<!-- Chrome, Opera, and Firefox OS -->
|
||||
<meta name="theme-color" content="#3a3f51" />
|
||||
<!-- Windows Phone -->
|
||||
<meta name="msapplication-navbutton-color" content="#3a3f51" />
|
||||
<!-- Android/Apple Phone -->
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
|
||||
<meta name="description" content="Readarr" />
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Security;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
@@ -249,6 +251,18 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
return _credentialCache.Get("credentialCache", () => new CredentialCache());
|
||||
}
|
||||
|
||||
private static bool HasRoutableIPv4Address()
|
||||
{
|
||||
// Get all IPv4 addresses from all interfaces and return true if there are any with non-loopback addresses
|
||||
var networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
|
||||
|
||||
return networkInterfaces.Any(ni =>
|
||||
ni.OperationalStatus == OperationalStatus.Up &&
|
||||
ni.GetIPProperties().UnicastAddresses.Any(ip =>
|
||||
ip.Address.AddressFamily == AddressFamily.InterNetwork &&
|
||||
!IPAddress.IsLoopback(ip.Address)));
|
||||
}
|
||||
|
||||
private static async ValueTask<Stream> onConnect(SocketsHttpConnectionContext context, CancellationToken cancellationToken)
|
||||
{
|
||||
// Until .NET supports an implementation of Happy Eyeballs (https://tools.ietf.org/html/rfc8305#section-2), let's make IPv4 fallback work in a simple way.
|
||||
@@ -272,10 +286,8 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
}
|
||||
catch
|
||||
{
|
||||
// very naively fallback to ipv4 permanently for this execution based on the response of the first connection attempt.
|
||||
// note that this may cause users to eventually get switched to ipv4 (on a random failure when they are switching networks, for instance)
|
||||
// but in the interest of keeping this implementation simple, this is acceptable.
|
||||
useIPv6 = false;
|
||||
// Do not retry IPv6 if a routable IPv4 address is available, otherwise continue to attempt IPv6 connections.
|
||||
useIPv6 = !HasRoutableIPv4Address();
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
ExceptionVerification.IgnoreWarns();
|
||||
}
|
||||
|
||||
[TestCase("Harry Potter and the sorcerer's stone a summary of the novel", 23314781)]
|
||||
[TestCase("Harry Potter and the sorcerer's stone a detailed summary", 61800696)]
|
||||
[TestCase("B0192CTMYG", 61209488)]
|
||||
[TestCase("9780439554930", 48517161)]
|
||||
public void successful_book_search(string title, int expected)
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
.Configure<ProcessorOptions>(opt =>
|
||||
{
|
||||
opt.PreviewOnly = false;
|
||||
opt.Timeout = TimeSpan.FromSeconds(60);
|
||||
opt.Timeout = TimeSpan.FromMinutes(5);
|
||||
})
|
||||
.Configure<SelectingProcessorAccessorOptions>(cfg =>
|
||||
{
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Dynamic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Cache;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
|
||||
@@ -101,11 +103,21 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||
|
||||
public string AddTorrentFromMagnet(string magnetLink, DelugeSettings settings)
|
||||
{
|
||||
var options = new
|
||||
dynamic options = new ExpandoObject();
|
||||
|
||||
options.add_paused = settings.AddPaused;
|
||||
options.remove_at_ratio = false;
|
||||
|
||||
if (settings.DownloadDirectory.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
add_paused = settings.AddPaused,
|
||||
remove_at_ratio = false
|
||||
};
|
||||
options.download_location = settings.DownloadDirectory;
|
||||
}
|
||||
|
||||
if (settings.CompletedDirectory.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
options.move_completed_path = settings.CompletedDirectory;
|
||||
options.move_completed = true;
|
||||
}
|
||||
|
||||
var response = ProcessRequest<string>(settings, "core.add_torrent_magnet", magnetLink, options);
|
||||
|
||||
@@ -114,11 +126,21 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||
|
||||
public string AddTorrentFromFile(string filename, byte[] fileContent, DelugeSettings settings)
|
||||
{
|
||||
var options = new
|
||||
dynamic options = new ExpandoObject();
|
||||
|
||||
options.add_paused = settings.AddPaused;
|
||||
options.remove_at_ratio = false;
|
||||
|
||||
if (settings.DownloadDirectory.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
add_paused = settings.AddPaused,
|
||||
remove_at_ratio = false
|
||||
};
|
||||
options.download_location = settings.DownloadDirectory;
|
||||
}
|
||||
|
||||
if (settings.CompletedDirectory.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
options.move_completed_path = settings.CompletedDirectory;
|
||||
options.move_completed = true;
|
||||
}
|
||||
|
||||
var response = ProcessRequest<string>(settings, "core.add_torrent_file", filename, fileContent, options);
|
||||
return response;
|
||||
|
||||
@@ -59,6 +59,12 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||
[FieldDefinition(9, Label = "Add Paused", Type = FieldType.Checkbox)]
|
||||
public bool AddPaused { get; set; }
|
||||
|
||||
[FieldDefinition(10, Label = "DownloadClientDelugeSettingsDirectory", Type = FieldType.Textbox, Advanced = true, HelpText = "DownloadClientDelugeSettingsDirectoryHelpText")]
|
||||
public string DownloadDirectory { get; set; }
|
||||
|
||||
[FieldDefinition(11, Label = "DownloadClientDelugeSettingsDirectoryCompleted", Type = FieldType.Textbox, Advanced = true, HelpText = "DownloadClientDelugeSettingsDirectoryCompletedHelpText")]
|
||||
public string CompletedDirectory { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
{
|
||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||
|
||||
@@ -203,11 +203,11 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
DeleteItemData(item);
|
||||
}
|
||||
|
||||
_proxy.RemoveFrom("history", item.DownloadId, deleteData, Settings);
|
||||
_proxy.RemoveFromHistory(item.DownloadId, deleteData, item.Status == DownloadItemStatus.Failed, Settings);
|
||||
}
|
||||
else
|
||||
{
|
||||
_proxy.RemoveFrom("queue", item.DownloadId, deleteData, Settings);
|
||||
_proxy.RemoveFromQueue(item.DownloadId, deleteData, Settings);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,8 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
{
|
||||
string GetBaseUrl(SabnzbdSettings settings, string relativePath = null);
|
||||
SabnzbdAddResponse DownloadNzb(byte[] nzbData, string filename, string category, int priority, SabnzbdSettings settings);
|
||||
void RemoveFrom(string source, string id, bool deleteData, SabnzbdSettings settings);
|
||||
void RemoveFromQueue(string id, bool deleteData, SabnzbdSettings settings);
|
||||
void RemoveFromHistory(string id, bool deleteData, bool deletePermanently, SabnzbdSettings settings);
|
||||
string GetVersion(SabnzbdSettings settings);
|
||||
SabnzbdConfig GetConfig(SabnzbdSettings settings);
|
||||
SabnzbdFullStatus GetFullStatus(SabnzbdSettings settings);
|
||||
@@ -60,9 +61,9 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
return response;
|
||||
}
|
||||
|
||||
public void RemoveFrom(string source, string id, bool deleteData, SabnzbdSettings settings)
|
||||
public void RemoveFromQueue(string id, bool deleteData, SabnzbdSettings settings)
|
||||
{
|
||||
var request = BuildRequest(source, settings);
|
||||
var request = BuildRequest("queue", settings);
|
||||
request.AddQueryParam("name", "delete");
|
||||
request.AddQueryParam("del_files", deleteData ? 1 : 0);
|
||||
request.AddQueryParam("value", id);
|
||||
@@ -70,6 +71,17 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public void RemoveFromHistory(string id, bool deleteData, bool deletePermanently, SabnzbdSettings settings)
|
||||
{
|
||||
var request = BuildRequest("history", settings);
|
||||
request.AddQueryParam("name", "delete");
|
||||
request.AddQueryParam("del_files", deleteData ? 1 : 0);
|
||||
request.AddQueryParam("value", id);
|
||||
request.AddQueryParam("archive", deletePermanently ? 0 : 1);
|
||||
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public string GetVersion(SabnzbdSettings settings)
|
||||
{
|
||||
var request = BuildRequest("version", settings);
|
||||
|
||||
@@ -167,6 +167,7 @@
|
||||
"ConnectionLost": "Connection Lost",
|
||||
"ConnectionLostReconnect": "{appName} will try to connect automatically, or you can click reload below.",
|
||||
"ConnectionLostToBackend": "{appName} has lost its connection to the backend and will need to be reloaded to restore functionality.",
|
||||
"ConnectionSettingsUrlBaseHelpText": "Adds a prefix to the {connectionName} url, such as {url}",
|
||||
"Connections": "Connections",
|
||||
"ConsoleLogLevel": "Console Log Level",
|
||||
"Continuing": "Continuing",
|
||||
@@ -186,6 +187,7 @@
|
||||
"CreateEmptyAuthorFolders": "Create empty author folders",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Create missing author folders during disk scan",
|
||||
"CreateGroup": "Create group",
|
||||
"CustomFilter": "Custom Filter",
|
||||
"CustomFormat": "Custom Format",
|
||||
"CustomFormatScore": "Custom Format Score",
|
||||
"CustomFormatSettings": "Custom Format Settings",
|
||||
@@ -282,6 +284,10 @@
|
||||
"DownloadClientCheckDownloadingToRoot": "Download client {0} places downloads in the root folder {1}. You should not download to a root folder.",
|
||||
"DownloadClientCheckNoneAvailableMessage": "No download client is available",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Unable to communicate with {0}.",
|
||||
"DownloadClientDelugeSettingsDirectory": "Download Directory",
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Move When Completed Directory",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Optional location to move completed downloads to, leave blank to use the default Deluge location",
|
||||
"DownloadClientDelugeSettingsDirectoryHelpText": "Optional location to put downloads in, leave blank to use the default Deluge location",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Content Layout",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Whether to use qBittorrent's configured content layout, the original layout from the torrent or always create a subfolder (qBittorrent 4.3.2+)",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Download client {0} is set to remove completed downloads. This can result in downloads being removed from your client before {1} can import them.",
|
||||
@@ -453,6 +459,8 @@
|
||||
"IndexersSettingsSummary": "Indexers and release restrictions",
|
||||
"InstanceName": "Instance Name",
|
||||
"InstanceNameHelpText": "Instance name in tab and for Syslog app name",
|
||||
"InteractiveSearchModalHeader": "Interactive Search",
|
||||
"InteractiveSearchModalHeaderBookAuthor": "Interactive Search - {bookTitle} by {authorName}",
|
||||
"Interval": "Interval",
|
||||
"InvalidUILanguage": "Your UI is set to an invalid language, correct it and save your settings",
|
||||
"IsCalibreLibraryHelpText": "Use Calibre Content Server to manipulate library",
|
||||
@@ -470,6 +478,7 @@
|
||||
"Iso639-3": "ISO 639-3 language codes, or 'null', comma separated",
|
||||
"ItsEasyToAddANewAuthorOrBookJustStartTypingTheNameOfTheItemYouWantToAdd": "It's easy to add a New Author or Book just start typing the name of the item you want to add",
|
||||
"Label": "Label",
|
||||
"LabelIsRequired": "Label is required",
|
||||
"Language": "Language",
|
||||
"Large": "Large",
|
||||
"LastDuration": "Last Duration",
|
||||
@@ -614,6 +623,14 @@
|
||||
"NotificationStatusAllClientHealthCheckMessage": "All notifications are unavailable due to failures",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Notifications unavailable due to failures: {0}",
|
||||
"NotificationTriggers": "Notification Triggers",
|
||||
"NotificationsPlexSettingsAuthToken": "Auth Token",
|
||||
"NotificationsPlexSettingsAuthenticateWithPlexTv": "Authenticate with Plex.tv",
|
||||
"NotificationsSettingsUpdateLibrary": "Update Library",
|
||||
"NotificationsSettingsUpdateMapPathsFrom": "Map Paths From",
|
||||
"NotificationsSettingsUpdateMapPathsFromHelpText": "{appName} path, used to modify series paths when {serviceName} sees library path location differently from {appName} (Requires 'Update Library')",
|
||||
"NotificationsSettingsUpdateMapPathsTo": "Map Paths To",
|
||||
"NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName} path, used to modify series paths when {serviceName} sees library path location differently from {appName} (Requires 'Update Library')",
|
||||
"NotificationsSettingsUseSslHelpText": "Connect to {serviceName} over HTTPS instead of HTTP",
|
||||
"OnApplicationUpdate": "On Application Update",
|
||||
"OnApplicationUpdateHelpText": "On Application Update",
|
||||
"OnAuthorAdded": "On Author Added",
|
||||
|
||||
@@ -185,40 +185,40 @@
|
||||
"Logging": "Registro de eventos",
|
||||
"Logs": "Registros",
|
||||
"LongDateFormat": "Formato de Fecha Larga",
|
||||
"ManualImport": "Importar Manualmente",
|
||||
"MarkAsFailed": "Marcar como Fallida",
|
||||
"ManualImport": "Importación manual",
|
||||
"MarkAsFailed": "Marcar como Fallido",
|
||||
"MarkAsFailedMessageText": "Seguro que quieres marcar '{0}' como fallida?",
|
||||
"MaximumLimits": "Límites Máximos",
|
||||
"MaximumSize": "Tamaño Máximo",
|
||||
"MaximumLimits": "Límites máximos",
|
||||
"MaximumSize": "Tamaño máximo",
|
||||
"MaximumSizeHelpText": "Tamaño máximo de un lanzamiento para ser importado en MB. Ajustar a cero para ilimitado",
|
||||
"Mechanism": "Mecanismo",
|
||||
"MediaInfo": "Información Multimedia",
|
||||
"MediaManagementSettings": "Ajustes Multimedia",
|
||||
"MediaInfo": "Información de medios",
|
||||
"MediaManagementSettings": "Opciones de gestión de medios",
|
||||
"Message": "Mensaje",
|
||||
"MetadataSettings": "Ajustes de Metadatos",
|
||||
"MinimumAge": "Edad Mínima",
|
||||
"MinimumAgeHelpText": "Sólo Usenet: Edad mínima en minutos de los NZB para ser descargados. Usa esto para dar a los nuevos lanzamientos tiempo de propagarse en tu proveedor de usenet.",
|
||||
"MinimumFreeSpace": "Espacio Libre Mínimo",
|
||||
"MetadataSettings": "Opciones de metadatos",
|
||||
"MinimumAge": "Edad mínima",
|
||||
"MinimumAgeHelpText": "Solo Usenet: Edad mínima en minutos de NZBs antes de que sean capturados. Usa esto para dar tiempo a los nuevos lanzamientos para propagarse a tu proveedor usenet.",
|
||||
"MinimumFreeSpace": "Espacio libre mínimo",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Evitar importación si dejase menos de esta cantidad en disco disponible",
|
||||
"MinimumLimits": "Límites Mínimos",
|
||||
"MinimumLimits": "Límites mínimos",
|
||||
"Missing": "Faltantes",
|
||||
"Mode": "Modo",
|
||||
"Monitored": "Monitorizado",
|
||||
"MoreInfo": "Más Información",
|
||||
"MustContain": "Debe Contener",
|
||||
"MustNotContain": "No Debe Contener",
|
||||
"MoreInfo": "Más información",
|
||||
"MustContain": "Debe contener",
|
||||
"MustNotContain": "No debe contener",
|
||||
"Name": "Nombre",
|
||||
"NamingSettings": "Ajustes de Renombrado",
|
||||
"NamingSettings": "Opciones de nombrado",
|
||||
"New": "Nuevo",
|
||||
"NoBackupsAreAvailable": "No hay copias de seguridad disponibles",
|
||||
"NoHistory": "Sin historia",
|
||||
"NoLeaveIt": "No, Déjalo",
|
||||
"NoLimitForAnyRuntime": "SIn límite para el tiempo de ejecución",
|
||||
"NoLogFiles": "Sin archivos de registro",
|
||||
"NoMinimumForAnyRuntime": "Sin mínimo para el tiempo de ejecución",
|
||||
"NoLeaveIt": "No, déjalo",
|
||||
"NoLimitForAnyRuntime": "No hay límites para ningún tiempo de ejecución",
|
||||
"NoLogFiles": "No hay archivos de registro",
|
||||
"NoMinimumForAnyRuntime": "No hay mínimo para ningún tiempo de ejecución",
|
||||
"NoUpdatesAreAvailable": "No hay actualizaciones disponibles",
|
||||
"None": "Ninguna",
|
||||
"NotificationTriggers": "Desencadenantes de Notificaciones",
|
||||
"None": "Ninguno",
|
||||
"NotificationTriggers": "Disparadores de notificación",
|
||||
"OnGrabHelpText": "Al Capturar",
|
||||
"OnHealthIssueHelpText": "En Problema de Salud",
|
||||
"OnRenameHelpText": "Al Renombrar",
|
||||
@@ -503,7 +503,7 @@
|
||||
"HealthNoIssues": "No hay problemas con tu configuración",
|
||||
"ImportListStatusCheckAllClientMessage": "Las listas no están disponibles debido a errores",
|
||||
"ImportListStatusCheckSingleClientMessage": "Listas no disponibles debido a errores: {0}",
|
||||
"MediaManagement": "Multimedia",
|
||||
"MediaManagement": "Gestión de medios",
|
||||
"Metadata": "Metadatos",
|
||||
"MetadataProfile": "perfil de metadatos",
|
||||
"MetadataProfiles": "perfil de metadatos",
|
||||
@@ -519,7 +519,7 @@
|
||||
"TimeLeft": "Tiempo restante",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Incapaz de comunicarse con {0}.",
|
||||
"IndexerPriorityHelpText": "Prioridad del Indexador de 1 (la más alta) a 50 (la más baja). Por defecto: 25. Usada para desempatar lanzamientos iguales cuando se capturan, Readarr seguirá usando todos los indexadores habilitados para Sincronización de RSS y Búsqueda.",
|
||||
"Monitor": "Monitorear",
|
||||
"Monitor": "Monitorizar",
|
||||
"MountCheckMessage": "El punto de montaje que contiene la ruta de una película es de read-only: ",
|
||||
"OnBookFileDelete": "Al eliminar archivo de película",
|
||||
"SystemTimeCheckMessage": "El reloj del sistema está retrasado más de un día. Las tareas de mantenimiento no se ejecutarán correctamente hasta que se haya corregido",
|
||||
@@ -586,7 +586,7 @@
|
||||
"ChooseImportMethod": "Elegir Modo de Importación",
|
||||
"ClickToChangeReleaseGroup": "Clic para cambiar el grupo de lanzamiento",
|
||||
"HardlinkCopyFiles": "Enlace permanente/Copiar archivos",
|
||||
"MoveFiles": "Mover Archivos",
|
||||
"MoveFiles": "Mover archivos",
|
||||
"OnApplicationUpdate": "Al Actualizar La Aplicación",
|
||||
"OnApplicationUpdateHelpText": "Al Actualizar La Aplicación",
|
||||
"BypassIfHighestQuality": "Pasar sí es la calidad más alta",
|
||||
@@ -628,7 +628,7 @@
|
||||
"DeleteRemotePathMapping": "Borrar mapeo de ruta remota",
|
||||
"BlocklistReleases": "Lista de bloqueos de lanzamientos",
|
||||
"DeleteConditionMessageText": "Seguro que quieres eliminar la etiqueta '{0}'?",
|
||||
"Negated": "Negado",
|
||||
"Negated": "Anulado",
|
||||
"RemoveSelectedItem": "Eliminar el elemento seleccionado",
|
||||
"RemoveSelectedItemBlocklistMessageText": "¿Está seguro de que desea eliminar los elementos seleccionados de la lista negra?",
|
||||
"RemoveSelectedItemQueueMessageText": "¿Está seguro de que desea eliminar el {0} elemento {1} de la cola?",
|
||||
@@ -638,7 +638,7 @@
|
||||
"ResetQualityDefinitions": "Restablecer definiciones de calidad",
|
||||
"ResetQualityDefinitionsMessageText": "¿Está seguro de que desea restablecer las definiciones de calidad?",
|
||||
"BlocklistReleaseHelpText": "Evita que Radarr vuelva a capturar esta película automáticamente",
|
||||
"NoEventsFound": "No se encontraron eventos",
|
||||
"NoEventsFound": "Ningún evento encontrado",
|
||||
"ApplyTagsHelpTextHowToApplyAuthors": "Cómo añadir etiquetas a las películas seleccionadas",
|
||||
"DeleteSelectedIndexersMessageText": "¿Está seguro de querer eliminar {count} indexador(es) seleccionado(s)?",
|
||||
"Yes": "Sí",
|
||||
@@ -659,7 +659,7 @@
|
||||
"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": "Etiquetas existentes",
|
||||
"No": "No",
|
||||
"NoChange": "Sin Cambio",
|
||||
"NoChange": "Sin cambio",
|
||||
"RemovingTag": "Eliminando etiqueta",
|
||||
"SetTags": "Poner Etiquetas",
|
||||
"DeleteRemotePathMappingMessageText": "¿Está seguro de querer eliminar esta asignación de ruta remota?",
|
||||
@@ -698,7 +698,7 @@
|
||||
"ManageImportLists": "Gestionar Listas de Importación",
|
||||
"ConnectionLostToBackend": "{appName} ha perdido su conexión con el backend y tendrá que ser recargado para recuperar su funcionalidad.",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Listas no disponibles debido a errores: {0}",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Las listas no están disponibles debido a errores",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Las notificaciones no están disponibles debido a fallos",
|
||||
"ReleaseProfiles": "perfil de lanzamiento",
|
||||
"Small": "Pequeña",
|
||||
"DeleteImportList": "Eliminar Lista(s) de Importación",
|
||||
@@ -712,12 +712,12 @@
|
||||
"ConnectionLost": "Conexión perdida",
|
||||
"ConnectionLostReconnect": "{appName} intentará conectarse automáticamente, o puede hacer clic en recargar abajo.",
|
||||
"NextExecution": "Siguiente ejecución",
|
||||
"NoResultsFound": "No se han encontrado resultados",
|
||||
"NoResultsFound": "Ningún resultado encontrado",
|
||||
"RecentChanges": "Cambios recientes",
|
||||
"WhatsNew": "Que es lo nuevo?",
|
||||
"Loading": "Cargando",
|
||||
"Events": "Eventos",
|
||||
"Medium": "Medio",
|
||||
"Medium": "Mediano",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Todos los resultados están ocultos por el filtro aplicado",
|
||||
"CatalogNumber": "número de catálogo",
|
||||
"Authors": "Autores",
|
||||
@@ -796,5 +796,10 @@
|
||||
"IgnoreDownloadHint": "Detiene {appName} de procesar esta descarga más adelante",
|
||||
"IgnoreDownloadsHint": "Detiene {appName} de procesar estas descargas más adelante",
|
||||
"NoDownloadClientsFound": "No se han encontrado clientes de descarga",
|
||||
"NoIndexersFound": "No se han encontrado indexadores"
|
||||
"NoIndexersFound": "No se han encontrado indexadores",
|
||||
"MetadataSource": "Fuente de metadatos",
|
||||
"MediaManagementSettingsSummary": "Nombrado, opciones de gestión de archivos y carpetas raíz",
|
||||
"MonitoringOptions": "Opciones de monitorización",
|
||||
"NoImportListsFound": "Ninguna lista de importación encontrada",
|
||||
"Monitoring": "Monitorizando"
|
||||
}
|
||||
|
||||
@@ -148,11 +148,11 @@
|
||||
"ImportExtraFiles": "Extra fájlok importálása",
|
||||
"ImportExtraFilesHelpText": "A megfelelő extra fájlok importálása (feliratok, nfo stb.) a filmfájl importálása után",
|
||||
"ImportFailedInterp": "Importálás sikertelen: {0}",
|
||||
"ImportedTo": "Importálva Ide",
|
||||
"ImportedTo": "Importált ide",
|
||||
"Importing": "Importálás",
|
||||
"IncludeHealthWarningsHelpText": "Tartalmazza a Állapot Figyelmeztetéseket",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Mutasson tételeket film nélkül a sorban. Ez tartalmazhat eltávolított filmeket vagy bármi mást a Radarr kategóriájából",
|
||||
"IncludeUnmonitored": "Figyelmen Kívül hagyottakat is tartalmazza",
|
||||
"IncludeUnmonitored": "Tartalmazza a Nem felügyeltet",
|
||||
"Indexer": "Indexelő",
|
||||
"IndexerPriority": "Indexer Prioritása",
|
||||
"IndexerSettings": "Indexer Beállítások",
|
||||
@@ -184,7 +184,7 @@
|
||||
"Message": "Üzenet",
|
||||
"MetadataSettings": "Metaadat-beállítások",
|
||||
"MinimumAge": "Minimális kor",
|
||||
"MinimumAgeHelpText": "Usenet: Az NZB-k minimális életkora percekben, mielőtt megragadnák őket. Használja ezt arra, hogy időt biztosítson az új kiadásoknak az usenet-szolgáltatóhoz történő továbbterjesztésre.",
|
||||
"MinimumAgeHelpText": "Csak Usenet: Az NZB-k minimális életkora percekben, mielőtt elkapnák őket. Használja ezt, hogy időt adjon az új kiadásoknak, hogy eljuthassanak a usenet szolgáltatóhoz.",
|
||||
"MinimumFreeSpace": "Minimális szabad hely",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Akadályozza meg az importálást, ha ennél kevesebb lemezterület maradna",
|
||||
"MinimumLimits": "Minimális korlátok",
|
||||
@@ -222,23 +222,23 @@
|
||||
"Port": "Port",
|
||||
"PortHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
|
||||
"PortNumber": "Port száma",
|
||||
"PosterSize": "Poszter mérete",
|
||||
"PreviewRename": "Előnézet átnevezése",
|
||||
"PosterSize": "Poszter méret",
|
||||
"PreviewRename": "Előnézet Átnevezés",
|
||||
"Profiles": "Profilok",
|
||||
"Proper": "Megfelelő",
|
||||
"PropersAndRepacks": "Properek és Repackok",
|
||||
"Protocol": "Protokoll",
|
||||
"ProtocolHelpText": "Válasszd ki a használni kívánt protokoll(oka)t és melyiket részesíted előnyben, ha az egyébként egyforma kiadások közül választasz",
|
||||
"Proxy": "Proxy",
|
||||
"ProxyBypassFilterHelpText": "Használja elválasztóként a ',' és a '*' karaktereket, az aldomainek helyettesítőjeként",
|
||||
"ProxyType": "Proxy Típusa",
|
||||
"ProxyUsernameHelpText": "Csak akkor kell megadnod felhasználónevet és jelszót, ha szükséges. Egyébként hagyd üresen.",
|
||||
"ProxyBypassFilterHelpText": "Használja a ',' jelet elválasztóként és a '*' jelet. helyettesítő karakterként az aldomainekhez",
|
||||
"ProxyType": "Proxy típus",
|
||||
"ProxyUsernameHelpText": "Csak akkor kell megadnia egy felhasználónevet és jelszót, ha szükséges. Ellenkező esetben hagyja üresen.",
|
||||
"PublishedDate": "Közzététel dátuma",
|
||||
"Quality": "Minőség",
|
||||
"QualityDefinitions": "Minőségi meghatározások",
|
||||
"QualityProfile": "Minőségi profil",
|
||||
"QualityProfiles": "Minőségi profilok",
|
||||
"QualitySettings": "Minőségi beállítások",
|
||||
"QualitySettings": "Minőség Beállítások",
|
||||
"Queue": "Várakozási sor",
|
||||
"RSSSync": "RSS Szinkronizálás",
|
||||
"RSSSyncInterval": "RSS Szikronizálás Intervalluma",
|
||||
@@ -262,38 +262,38 @@
|
||||
"Reload": "Újratölt",
|
||||
"RemotePathMappings": "Távoli útvonal-leképezések",
|
||||
"Remove": "Eltávolítás",
|
||||
"RemoveCompletedDownloadsHelpText": "Távolítsa el az importált letöltéseket a letöltési kliens előzményeiből",
|
||||
"RemoveFailedDownloadsHelpText": "Távolítsa el a sikertelen letöltéseket a letöltési kliens előzményeiből",
|
||||
"RemoveFilter": "Szűrő törlése",
|
||||
"RemoveCompletedDownloadsHelpText": "Távolítsa el az importált letöltéseket a letöltési ügyfélelőzményekből",
|
||||
"RemoveFailedDownloadsHelpText": "A sikertelen letöltések eltávolítása a letöltési ügyfélelőzményekből",
|
||||
"RemoveFilter": "Szűrő Eltávolítás",
|
||||
"RemoveFromDownloadClient": "Eltávolítás a Letöltési kliensből",
|
||||
"RemoveFromQueue": "Eltávolítás a sorból",
|
||||
"RemoveHelpTextWarning": "Az eltávolítás eltávolítja a letöltést és a fájl(oka)t a letöltési kliensből.",
|
||||
"RemoveSelected": "Kiválaszottak törlése",
|
||||
"RemoveSelected": "A kiválasztott eltávolítása",
|
||||
"RemoveTagExistingTag": "Meglévő Címke",
|
||||
"RemoveTagRemovingTag": "Címke eltávolítása",
|
||||
"RemovedFromTaskQueue": "Eltávolítva a feladatsorról",
|
||||
"RemovedFromTaskQueue": "Eltávolítva a feladatsorból",
|
||||
"RenameBooksHelpText": "A Radarr a meglévő fájlnevet fogja használni, ha az átnevezés le van tiltva",
|
||||
"Reorder": "Átrendezés",
|
||||
"ReplaceIllegalCharacters": "Az illegális karakterek cseréje",
|
||||
"Reorder": "Újrarendelés",
|
||||
"ReplaceIllegalCharacters": "Cserélje ki az illegális karaktereket",
|
||||
"RequiredHelpText": "Ennek a {0} feltételnek meg kell egyeznie az egyéni formátum alkalmazásához. Ellenkező esetben egyetlen {0} egyezés elegendő.",
|
||||
"RequiredPlaceHolder": "Új korlátozás hozzáadása",
|
||||
"RescanAfterRefreshHelpTextWarning": "A Radarr nem érzékeli automatikusan a fájlok változását, ha nincs beállítva „Always”-re",
|
||||
"RescanAuthorFolderAfterRefresh": "Film mappa újraszkennelése a frissítés után",
|
||||
"Reset": "Visszaállítás",
|
||||
"ResetAPIKey": "API Kulcs visszaállítása",
|
||||
"ResetAPIKeyMessageText": "Biztos hogy vissza szeretnéd állítani az API-Kulcsod?",
|
||||
"ResetAPIKey": "API Kulcs Visszaállítása",
|
||||
"ResetAPIKeyMessageText": "Biztosan visszaállítja API-kulcsát?",
|
||||
"Restart": "Újrakezd",
|
||||
"RestartNow": "Újraindítás Most",
|
||||
"RestartNow": "Újraindítás most",
|
||||
"RestartReadarr": "Radarr Újraindítása",
|
||||
"Restore": "Visszaállít",
|
||||
"RestoreBackup": "Biztonsági mentés visszaállítása",
|
||||
"Result": "Eredmény",
|
||||
"Retention": "Visszatartás",
|
||||
"RetentionHelpText": "Usenet: Állítsa nullára a korlátlan megőrzés beállításához",
|
||||
"RetentionHelpText": "Csak Usenet: Állítsa nullára a korlátlan megőrzéshez",
|
||||
"RetryingDownloadInterp": "A letöltés újrapróbálása {0} itt {1}",
|
||||
"RootFolder": "Gyökérmappa",
|
||||
"RootFolders": "Gyökérmappák",
|
||||
"RssSyncIntervalHelpText": "Intervallum percekben. A letiltáshoz állítsa nullára (ez megállítja az összes automatikus keresést)",
|
||||
"RootFolders": "Gyökér mappák",
|
||||
"RssSyncIntervalHelpText": "Intervallum percekben. A letiltáshoz állítsa nullára (ez leállítja az összes automatikus feloldást)",
|
||||
"SSLCertPassword": "SSL Tanúsítvány jelszava",
|
||||
"SSLCertPath": "Az SSL tanúsítvány elérési útvonala",
|
||||
"SSLPort": "SSL Port",
|
||||
@@ -306,7 +306,7 @@
|
||||
"Security": "Biztonság",
|
||||
"SendAnonymousUsageData": "Névtelen használati adatok küldése",
|
||||
"SetPermissions": "Állítsa be az engedélyeket",
|
||||
"SetPermissionsLinuxHelpText": "Futtatni kell a chmod-ot fájlok importálásakor / átnevezésekor?",
|
||||
"SetPermissionsLinuxHelpText": "Futtatandó a chmod a fájlok importálásakor",
|
||||
"SetPermissionsLinuxHelpTextWarning": "Ha nem biztos abban, hogy ezek a beállítások mit csinálnak, ne módosítsa őket.",
|
||||
"Settings": "Beállítások",
|
||||
"ShortDateFormat": "Rövid dátumformátum",
|
||||
@@ -568,7 +568,7 @@
|
||||
"AnalyticsEnabledHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
|
||||
"DeleteRootFolderMessageText": "Biztosan törli a(z) \"{name}\" gyökérmappát?",
|
||||
"LoadingBooksFailed": "A film fájljainak betöltése sikertelen",
|
||||
"ProxyPasswordHelpText": "Csak akkor kell megadnod felhasználónevet és jelszót, ha szükséges. Egyébként hagyd üresen.",
|
||||
"ProxyPasswordHelpText": "Csak akkor kell megadnia egy felhasználónevet és jelszót, ha szükséges. Ellenkező esetben hagyja üresen.",
|
||||
"SslCertPathHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
|
||||
"SslCertPasswordHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
|
||||
"UnableToLoadMetadataProfiles": "Nem sikerült betölteni a metaadat-profilokat",
|
||||
@@ -655,7 +655,7 @@
|
||||
"AudioFileMetadata": "Metaadatok írása az Audió fájl(ok)ba",
|
||||
"Tomorrow": "Holnap",
|
||||
"Today": "Ma",
|
||||
"ReleaseTitle": "Kiadás címe",
|
||||
"ReleaseTitle": "Release kiadás",
|
||||
"Progress": "Folyamat",
|
||||
"OutputPath": "Kimeneti út",
|
||||
"BookTitle": "Könyv Címe",
|
||||
@@ -750,8 +750,8 @@
|
||||
"ItsEasyToAddANewAuthorOrBookJustStartTypingTheNameOfTheItemYouWantToAdd": "Könnyen hozzáadhat új szerzőt vagy könyvet, csak kezdje el beírni a hozzáadni kívánt elem nevét",
|
||||
"ListsSettingsSummary": "Listák importálása",
|
||||
"MetadataSettingsSummary": "Hozzon létre metaadatfájlokat a könyvek importálásakor vagy a szerző frissítésekor",
|
||||
"QualitySettingsSummary": "Minőségi méretek és elnevezés",
|
||||
"QueueIsEmpty": "A várakozási sor üres",
|
||||
"QualitySettingsSummary": "Minőségi méretek és elnevezések",
|
||||
"QueueIsEmpty": "A sor üres",
|
||||
"RefreshBook": "Könyv frissítése",
|
||||
"SearchFiltered": "Keresés szűrve",
|
||||
"TagsSettingsSummary": "Tekintse meg az összes címkét és azok használatát. A használatlan címkék eltávolíthatók",
|
||||
@@ -830,7 +830,7 @@
|
||||
"ConvertToFormat": "Konvertálás Formátumba",
|
||||
"DataAllBooks": "Összes könyv monitorozása",
|
||||
"InstanceName": "Példány Neve",
|
||||
"RestartRequiredHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
|
||||
"RestartRequiredHelpTextWarning": "Újraindítás szükséges az életbe lépéshez",
|
||||
"DataExistingBooks": "Könyvek monitorozása, ha van fájl, vagy ha még meg sem jelent",
|
||||
"DataFirstBook": "Az első könyvet monitorozása. Az összes többi könyvet figyelmen kívül hagyja",
|
||||
"DataLatestBook": "Legutolsó, és jövendőbeli könyvek monitorozása",
|
||||
@@ -848,7 +848,7 @@
|
||||
"WriteMetadataTags": "Írjon metaadat-címkéket",
|
||||
"EditList": "Lista szerkesztése",
|
||||
"MonitorExistingBooks": "Meglévő könyvek monitorozása",
|
||||
"RenameFiles": "Fájl(ok) átnevezése",
|
||||
"RenameFiles": "Fájlok átnevezése",
|
||||
"InstanceNameHelpText": "Példánynév a böngésző lapon és a syslog alkalmazás neve",
|
||||
"LoadingEditionsFailed": "A kiadások betöltése nem sikerült",
|
||||
"ManualImportSelectEdition": "Kézi importálás – Válaszd ki a Kiadást",
|
||||
@@ -887,7 +887,7 @@
|
||||
"UpgradesAllowed": "Frissítések Engedélyezve",
|
||||
"CutoffFormatScoreHelpText": "Amint eléri ezt az egyéni minőséget, a Radarr többé nem fogja tovább keresni a filmet",
|
||||
"ResetDefinitionTitlesHelpText": "A definíciócímek és értékek visszaállítása",
|
||||
"ResetTitles": "Címek visszaállítása",
|
||||
"ResetTitles": "Címek Visszaállítása",
|
||||
"ImportListMissingRoot": "Hiányzó gyökérmappa az importálási listá(k)hoz: {0}",
|
||||
"ImportListMultipleMissingRoots": "Több gyökérmappa hiányzik az importálási listákhoz: {0}",
|
||||
"IndexerDownloadClientHelpText": "Adja meg, hogy melyik letöltési kliens használja az indexelőből történő megfogásokat",
|
||||
@@ -909,7 +909,7 @@
|
||||
"Required": "Kötelező",
|
||||
"ApiKeyValidationHealthCheckMessage": "Kérlek frissítsd az API kulcsot, ami legalább {0} karakter hosszú. Ezt megteheted a Beállításokban, vagy a config file-ban",
|
||||
"NoEventsFound": "Nem található események",
|
||||
"ResetQualityDefinitions": "Állítsd vissza a minőségi meghatározásokat",
|
||||
"ResetQualityDefinitions": "Minőségi meghatározások Visszaállítása",
|
||||
"DeleteRemotePathMapping": "Távoli Elérési Útvonal Módosítása",
|
||||
"BlocklistReleaseHelpText": "Megakadályozza, hogy a Lidarr automatikusan letöltse újra",
|
||||
"ApplyTagsHelpTextHowToApplyAuthors": "Hogyan adjunk hozzá címkéket a kiválasztott filmhez",
|
||||
@@ -924,7 +924,7 @@
|
||||
"RecycleBinUnableToWriteHealthCheck": "Nem lehet írni a konfigurált lomtár mappába {0}. Győződjön meg arról, hogy ez az elérési útvonal létezik, és az a felhasználó, aki a Sonarr-t futtatja, írási jogosultsággal rendelkezik",
|
||||
"RedownloadFailed": "Letöltés Sikertelen",
|
||||
"RemoveCompleted": "Eltávolítás kész",
|
||||
"RemoveDownloadsAlert": "Az eltávolításhoz szükséges beállítások átkerültek a fenti táblázatban található egyéni letöltő beállítások közé.",
|
||||
"RemoveDownloadsAlert": "Az Eltávolítási beállítások átkerültek a fenti táblázatban a Letöltési kliens egyéni beállításaiba.",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Címkék alkalmazása a kiválasztott letöltési kliensekre",
|
||||
"ApplyChanges": "Változások alkalmazása",
|
||||
"ApplyTagsHelpTextAdd": "Hozzáadás: Adja hozzá a címkéket a meglévő címkék listájához",
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"60MinutesSixty": "60 Minuti: {0}",
|
||||
"APIKey": "Chiave API",
|
||||
"About": "Info",
|
||||
"AddListExclusion": "Aggiungi Lista Esclusioni",
|
||||
"AddingTag": "Aggiungendo etichetta",
|
||||
"Fixed": "Fissato",
|
||||
"Local": "Locale",
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"BackupRetentionHelpText": "Automatische veiligheidskopieën ouder dan de retentie periode zullen worden opgeruimd",
|
||||
"Backups": "Veiligheidskopieën",
|
||||
"BindAddress": "Gebonden Adres",
|
||||
"BindAddressHelpText": "Geldig IPv4-adres of '*' voor alle interfaces",
|
||||
"BindAddressHelpText": "Geldig IP-adres, localhost of '*' voor alle interfaces",
|
||||
"BindAddressHelpTextWarning": "Herstarten vereist om in werking te treden",
|
||||
"BookIsDownloading": "Film is aan het downloaden",
|
||||
"BookIsDownloadingInterp": "Film is aan het downloaden - {0}% {1}",
|
||||
@@ -649,5 +649,6 @@
|
||||
"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",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Alle resultaten zijn verborgen door het toegepaste filter"
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Alle resultaten zijn verborgen door het toegepaste filter",
|
||||
"Backup": "Veiligheidskopie"
|
||||
}
|
||||
|
||||
@@ -485,7 +485,7 @@
|
||||
"AllAuthorBooks": "Todos os livros do autor",
|
||||
"AllBooks": "Todos os livros",
|
||||
"AllExpandedCollapseAll": "Fechar tudo",
|
||||
"AllExpandedExpandAll": "Expandir tudo",
|
||||
"AllExpandedExpandAll": "Expandir Tudo",
|
||||
"AllowAuthorChangeClickToChangeAuthor": "Clique para mudar o autor",
|
||||
"AllowFingerprinting": "Permitir impressão digital",
|
||||
"AllowFingerprintingHelpText": "Usar a impressão digital para melhorar a precisão da correspondência de livros",
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"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 exclusão à lista",
|
||||
"AddListExclusion": "Adicionar Exclusão de Lista",
|
||||
"AddingTag": "Adicionar tag",
|
||||
"AlreadyInYourLibrary": "Já está na sua biblioteca",
|
||||
"AlternateTitles": "Títulos alternativos",
|
||||
@@ -1051,5 +1051,14 @@
|
||||
"DoNotBlocklistHint": "Remover sem colocar na lista de bloqueio",
|
||||
"RemoveFromDownloadClientHint": "Remove download e arquivo(s) do cliente de download",
|
||||
"RemoveMultipleFromDownloadClientHint": "Remove downloads e arquivos do cliente de download",
|
||||
"RemoveQueueItemRemovalMethodHelpTextWarning": "'Remover do cliente de download' removerá o download e os arquivos do cliente de download."
|
||||
"RemoveQueueItemRemovalMethodHelpTextWarning": "'Remover do cliente de download' removerá o download e os arquivos do cliente de download.",
|
||||
"AuthorProgressBarText": "{availableBookCount} / {bookCount} (Total: {totalBookCount}, Arquivos: {bookFileCount})",
|
||||
"BookProgressBarText": "{bookCount} / {totalBookCount} (Arquivos: {bookFileCount})",
|
||||
"SelectBook": "Selecionar o Livro",
|
||||
"SelectDropdown": "Selecionar...",
|
||||
"SelectEdition": "Selecionar a Edição",
|
||||
"SelectReleaseGroup": "Selecionar um Grupo de Lançamento",
|
||||
"SelectQuality": "Selecionar uma Qualidade",
|
||||
"CustomFilter": "Filtro Personalizado",
|
||||
"LabelIsRequired": "Rótulo é requerido"
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"60MinutesSixty": "60 Dakika: {0}",
|
||||
"APIKey": "API Anahtarı",
|
||||
"About": "Hakkında",
|
||||
"AddListExclusion": "Liste Hariç Tutma Ekle",
|
||||
"AddListExclusion": "Hariç Tutma Listesine Ekle",
|
||||
"AddingTag": "Etiket ekleniyor",
|
||||
"ApiKeyHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"AnalyticsEnabledHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
@@ -25,7 +25,7 @@
|
||||
"AlternateTitles": "Alternatif Başlık",
|
||||
"Analytics": "Analitik",
|
||||
"AnalyticsEnabledHelpText": "Anonim kullanım ve hata bilgilerini Radarr sunucularına gönderin. Bu, tarayıcınızla ilgili bilgileri, kullandığınız Radarr WebUI sayfalarını, hata raporlamasının yanı sıra işletim sistemi ve çalışma zamanı sürümünü içerir. Bu bilgileri, özellikleri ve hata düzeltmelerini önceliklendirmek için kullanacağız.",
|
||||
"AppDataDirectory": "AppData dizini",
|
||||
"AppDataDirectory": "Uygulama Veri Dizini",
|
||||
"ApplyTags": "Etiketleri Uygula",
|
||||
"Authentication": "Doğrulama",
|
||||
"AuthenticationMethodHelpText": "Radarr'a erişmek için Kullanıcı Adı ve Şifre gerektir",
|
||||
@@ -38,7 +38,7 @@
|
||||
"BackupRetentionHelpText": "Saklama süresinden daha eski olan otomatik yedeklemeler otomatik olarak temizlenecektir",
|
||||
"Backups": "Yedeklemeler",
|
||||
"BindAddress": "Bağlama Adresi",
|
||||
"BindAddressHelpText": "Tüm arayüzler için geçerli IP4 adresi veya '*'",
|
||||
"BindAddressHelpText": "Tüm arayüzler için geçerli IP adresi, localhost veya '*'",
|
||||
"BindAddressHelpTextWarning": "Etkili olması için yeniden başlatma gerektirir",
|
||||
"BookIsDownloading": "Film indiriliyor",
|
||||
"BookIsDownloadingInterp": "Film indiriliyor - {0}% {1}",
|
||||
@@ -46,10 +46,10 @@
|
||||
"BypassProxyForLocalAddresses": "Yerel Adresler için Proxy'yi Atla",
|
||||
"Calendar": "Takvim",
|
||||
"CalendarWeekColumnHeaderHelpText": "Aktif görünüm hafta olduğunda her bir sütunun üzerinde gösterilir",
|
||||
"Cancel": "İptal etmek",
|
||||
"Cancel": "Vazgeç",
|
||||
"CancelMessageText": "Bu bekleyen görevi iptal etmek istediğinizden emin misiniz?",
|
||||
"CertificateValidation": "Sertifika Doğrulama",
|
||||
"CertificateValidationHelpText": "HTTPS sertifika doğrulamasının ne kadar katı olduğunu değiştirin",
|
||||
"CertificateValidationHelpText": "HTTPS sertifika doğrulamasının sıkılığını değiştirin. Riskleri anlamadığınız sürece değişmeyin.",
|
||||
"ChangeFileDate": "Dosya Tarihini Değiştir",
|
||||
"ChangeHasNotBeenSavedYet": "Değişiklik henüz kaydedilmedi",
|
||||
"ChmodFolder": "chmod Klasörü",
|
||||
@@ -591,11 +591,11 @@
|
||||
"Yes": "Evet",
|
||||
"RedownloadFailed": "Yükleme başarısız",
|
||||
"ApplyTagsHelpTextAdd": "Ekle: Etiketleri mevcut etiket listesine ekleyin",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Seçilen filmlere etiketler nasıl uygulanır",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Seçilen filmlere etiketler nasıl uygulanır",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Seçilen filmlere etiketler nasıl uygulanır",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Seçilen indirme istemcilerine etiketler nasıl uygulanır?",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Seçilen içe aktarma listelerine etiketler nasıl uygulanır?",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Seçilen indeksleyicilere etiketler nasıl uygulanır?",
|
||||
"ApplyTagsHelpTextRemove": "Kaldır: Girilen etiketleri kaldırın",
|
||||
"ApplyTagsHelpTextReplace": "Değiştir: Etiketleri girilen etiketlerle değiştirin (tüm etiketleri temizlemek için hiçbir etiket girmeyin)",
|
||||
"ApplyTagsHelpTextReplace": "Değiştir: Etiketleri girilen etiketlerle değiştirin (tüm etiketleri kaldırmak için etiket girmeyin)",
|
||||
"DeleteSelectedDownloadClients": "İndirme İstemcisini Sil",
|
||||
"DeleteSelectedIndexers": "Dizinleyiciyi Sil",
|
||||
"ExistingTag": "Mevcut etiket",
|
||||
@@ -603,7 +603,7 @@
|
||||
"NoChange": "Değişiklik yok",
|
||||
"SetTags": "Etiketleri Ayarla",
|
||||
"ConnectionLost": "Bağlantı koptu",
|
||||
"ConnectionLostReconnect": "Radarr otomatik olarak bağlanmayı deneyecek veya aşağıdan yeniden yükle'yi tıklayabilirsiniz.",
|
||||
"ConnectionLostReconnect": "{appName} otomatik bağlanmayı deneyecek veya aşağıda yeniden yükle seçeneğini işaretleyebilirsiniz.",
|
||||
"LastExecution": "Son Yürütme",
|
||||
"LastWriteTime": "Son Yazma Zamanı",
|
||||
"Location": "yer",
|
||||
@@ -631,5 +631,32 @@
|
||||
"MetadataProfile": "ü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\""
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Örnekler: \".sub, .nfo\" veya \"sub, nfo\"",
|
||||
"AppUpdated": "{appName} Güncellendi",
|
||||
"AppUpdatedVersion": "{appName}, `{version}` sürümüne güncellendi; en son değişikliklerin etkin olabilmesi için {appName} uygulamasını yeniden başlatmanız gerekli",
|
||||
"Clone": "Klon",
|
||||
"ConnectionLostToBackend": "{appName}'ın arka uçla bağlantısı kesildi ve işlevselliğin geri kazanılması için yeniden yüklenmesi gerekecek.",
|
||||
"AutomaticUpdatesDisabledDocker": "Docker güncelleme mekanizması kullanıldığında otomatik güncellemeler doğrudan desteklenmez. Kapsayıcı görüntüsünü {appName} dışında güncellemeniz veya bir komut dosyası kullanmanız gerekecek",
|
||||
"ChownGroup": "Chown Grubu",
|
||||
"ApplicationURL": "Uygulama URL'si",
|
||||
"ApplicationUrlHelpText": "Bu uygulamanın http(s)://, bağlantı noktası ve URL tabanını içeren harici URL'si",
|
||||
"ApplyChanges": "Değişiklikleri Uygula",
|
||||
"CustomFormatsSpecificationRegularExpressionHelpText": "Özel Format RegEx Büyük/Küçük Harfe Duyarsızdır",
|
||||
"CustomFormatsSpecificationRegularExpression": "Düzenli ifade",
|
||||
"BlocklistOnlyHint": "Yenisini aramadan engelleme listesi",
|
||||
"BlocklistAndSearch": "Engellenenler Listesi ve Arama",
|
||||
"BlocklistAndSearchHint": "Engellenenler listesine ekledikten sonra yenisini aramaya başlayın",
|
||||
"BlocklistAndSearchMultipleHint": "Engellenenler listesine ekledikten sonra yedekleri aramaya başlayın",
|
||||
"BlocklistMultipleOnlyHint": "Yedekleri aramadan engelleme listesi",
|
||||
"BlocklistOnly": "Yalnızca Engellenenler Listesi",
|
||||
"ChangeCategory": "Kategoriyi Değiştir",
|
||||
"ChangeCategoryMultipleHint": "İndirme istemcisinden indirmeleri 'İçe Aktarma Sonrası Kategorisi' olarak değiştirir",
|
||||
"ClickToChangeReleaseGroup": "Sürüm grubunu değiştirmek için tıklayın",
|
||||
"CloneCondition": "Klon Durumu",
|
||||
"CustomFilter": "Özel Filtre",
|
||||
"AutoRedownloadFailed": "Yeniden İndirme Başarısız",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Başarısız indirmeler, etkileşimli aramada bulunduğunda otomatik olarak farklı bir versiyonu arayın ve indirmeyi deneyin",
|
||||
"ChangeCategoryHint": "İndirme İstemcisi'nden indirme işlemini 'İçe Aktarma Sonrası Kategorisi' olarak değiştirir",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Etkileşimli Aramadan Yeniden İndirme Başarısız Oldu",
|
||||
"AutomaticAdd": "Otomatik Ekle"
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
"Indexers": "索引器",
|
||||
"Interval": "间隔",
|
||||
"IsCutoffCutoff": "截止",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "升级直到歌曲质量超出或者满足",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "升级直至达到或超过此质量",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "使用中无法删除",
|
||||
"Language": "语言",
|
||||
"LaunchBrowserHelpText": " 启动浏览器时导航到Radarr主页。",
|
||||
@@ -426,7 +426,7 @@
|
||||
"60MinutesSixty": "60分钟: {0}",
|
||||
"APIKey": "API Key",
|
||||
"About": "关于",
|
||||
"AddListExclusion": "添加列表例外",
|
||||
"AddListExclusion": "新增 列表",
|
||||
"DeleteTag": "删除标签",
|
||||
"UnableToLoadTags": "无法加载标签",
|
||||
"DownloadClientCheckDownloadingToRoot": "下载客户端{0}将下载内容放在根文件夹{1}中。您不应该下载到根文件夹。",
|
||||
@@ -1024,5 +1024,39 @@
|
||||
"ExtraFileExtensionsHelpTextsExamples": "示例:’.sub,.nfo‘ 或 ’sub,nfo‘",
|
||||
"InvalidUILanguage": "您的UI设置为无效语言,请纠正并保存设置",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "是否使用 qBittorrent 配置的内容布局,使用种子的原始布局或始终创建子文件夹(qBittorrent 4.3.2+)",
|
||||
"ChangeCategory": "改变分类"
|
||||
"ChangeCategory": "改变分类",
|
||||
"CustomFormatsSpecificationRegularExpressionHelpText": "自定义格式正则表达式不区分大小写",
|
||||
"CustomFormatsSpecificationRegularExpression": "正则表达式",
|
||||
"AuthorProgressBarText": "{availableBookCount} / {bookCount} (总共: {totalBookCount}, 文件: {bookFileCount})",
|
||||
"BookProgressBarText": "{bookCount} / {totalBookCount} (文件:{bookFileCount})",
|
||||
"SelectBook": "选择书籍",
|
||||
"SelectDropdown": "选择…",
|
||||
"SelectEdition": "选择版本",
|
||||
"SelectQuality": "选择质量",
|
||||
"SelectReleaseGroup": "选择发布组",
|
||||
"BlocklistAndSearch": "黑名单和搜索",
|
||||
"BlocklistAndSearchMultipleHint": "列入黑名单后开始搜索替代版本",
|
||||
"BlocklistMultipleOnlyHint": "无需搜索替换的黑名单",
|
||||
"BlocklistOnly": "仅限黑名单",
|
||||
"BlocklistOnlyHint": "无需寻找替代版本的黑名单",
|
||||
"BlocklistAndSearchHint": "列入黑名单后开始寻找一个替代版本",
|
||||
"ChangeCategoryHint": "将下载从下载客户端更改为“导入后类别”",
|
||||
"ChangeCategoryMultipleHint": "将下载从下载客户端更改为“导入后类别”",
|
||||
"DoNotBlocklist": "不要列入黑名单",
|
||||
"DoNotBlocklistHint": "删除而不列入黑名单",
|
||||
"IgnoreDownload": "忽略下载",
|
||||
"IgnoreDownloadHint": "阻止 {appName} 进一步处理此下载",
|
||||
"IgnoreDownloads": "忽略下载",
|
||||
"IgnoreDownloadsHint": "阻止 {appName} 进一步处理这些下载",
|
||||
"RemoveFromDownloadClientHint": "从下载客户端删除下载和文件",
|
||||
"RemoveMultipleFromDownloadClientHint": "从下载客户端删除下载和文件",
|
||||
"RemoveQueueItemRemovalMethod": "删除方法",
|
||||
"RemoveQueueItemsRemovalMethodHelpTextWarning": "“从下载客户端移除”将从下载客户端移除下载内容和文件。",
|
||||
"RemoveQueueItem": "移除 - {sourceTitle}",
|
||||
"RemoveQueueItemConfirmation": "您确定要从队列中移除“{sourceTitle}”吗?",
|
||||
"SourceTitle": "来源标题",
|
||||
"AutoRedownloadFailed": "重新下载失败",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "手动搜索重新下载失败",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "当从手动搜索中获取失败的发行版时,自动搜索并尝试下载不同的发行版",
|
||||
"RemoveQueueItemRemovalMethodHelpTextWarning": "“从下载客户端移除”将从下载客户端移除下载内容和文件。"
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace NzbDrone.Core.Notifications.Plex.Server
|
||||
{
|
||||
var scheme = settings.UseSsl ? "https" : "http";
|
||||
|
||||
var requestBuilder = new HttpRequestBuilder($"{scheme}://{settings.Host.ToUrlHost()}:{settings.Port}")
|
||||
var requestBuilder = new HttpRequestBuilder($"{scheme}://{settings.Host.ToUrlHost()}:{settings.Port}{settings.UrlBase}")
|
||||
.Accept(HttpAccept.Json)
|
||||
.AddQueryParam("X-Plex-Client-Identifier", _configService.PlexClientIdentifier)
|
||||
.AddQueryParam("X-Plex-Product", BuildInfo.AppName)
|
||||
|
||||
@@ -34,22 +34,30 @@ namespace NzbDrone.Core.Notifications.Plex.Server
|
||||
[FieldDefinition(1, Label = "Port")]
|
||||
public int Port { get; set; }
|
||||
|
||||
[FieldDefinition(2, Label = "Use SSL", Type = FieldType.Checkbox, HelpText = "Connect to Plex over HTTPS instead of HTTP")]
|
||||
[FieldDefinition(2, Label = "UseSsl", Type = FieldType.Checkbox, HelpText = "NotificationsSettingsUseSslHelpText")]
|
||||
[FieldToken(TokenField.HelpText, "UseSsl", "serviceName", "Plex")]
|
||||
public bool UseSsl { get; set; }
|
||||
|
||||
[FieldDefinition(3, Label = "Auth Token", Type = FieldType.Textbox, Privacy = PrivacyLevel.ApiKey, Advanced = true)]
|
||||
[FieldDefinition(3, Label = "UrlBase", Type = FieldType.Textbox, Advanced = true, HelpText = "ConnectionSettingsUrlBaseHelpText")]
|
||||
[FieldToken(TokenField.HelpText, "UrlBase", "connectionName", "Plex")]
|
||||
[FieldToken(TokenField.HelpText, "UrlBase", "url", "http://[host]:[port]/[urlBase]/plex")]
|
||||
public string UrlBase { get; set; }
|
||||
|
||||
[FieldDefinition(4, Label = "NotificationsPlexSettingsAuthToken", Type = FieldType.Textbox, Privacy = PrivacyLevel.ApiKey, Advanced = true)]
|
||||
public string AuthToken { get; set; }
|
||||
|
||||
[FieldDefinition(4, Label = "Authenticate with Plex.tv", Type = FieldType.OAuth)]
|
||||
[FieldDefinition(5, Label = "NotificationsPlexSettingsAuthenticateWithPlexTv", Type = FieldType.OAuth)]
|
||||
public string SignIn { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "Update Library", Type = FieldType.Checkbox)]
|
||||
[FieldDefinition(6, Label = "NotificationsSettingsUpdateLibrary", Type = FieldType.Checkbox)]
|
||||
public bool UpdateLibrary { get; set; }
|
||||
|
||||
[FieldDefinition(6, Label = "Map Paths From", Type = FieldType.Textbox, Advanced = true, HelpText = "Readarr path, used to modify author paths when Plex sees library path location differently from Readarr")]
|
||||
[FieldDefinition(7, Label = "NotificationsSettingsUpdateMapPathsFrom", Type = FieldType.Textbox, Advanced = true, HelpText = "NotificationsSettingsUpdateMapPathsFromHelpText")]
|
||||
[FieldToken(TokenField.HelpText, "NotificationsSettingsUpdateMapPathsFrom", "serviceName", "Plex")]
|
||||
public string MapFrom { get; set; }
|
||||
|
||||
[FieldDefinition(7, Label = "Map Paths To", Type = FieldType.Textbox, Advanced = true, HelpText = "Plex path, used to modify author paths when Plex sees library path location differently from Readarr")]
|
||||
[FieldDefinition(8, Label = "NotificationsSettingsUpdateMapPathsTo", Type = FieldType.Textbox, Advanced = true, HelpText = "NotificationsSettingsUpdateMapPathsToHelpText")]
|
||||
[FieldToken(TokenField.HelpText, "NotificationsSettingsUpdateMapPathsTo", "serviceName", "Plex")]
|
||||
public string MapTo { get; set; }
|
||||
|
||||
public bool IsValid => !string.IsNullOrWhiteSpace(Host);
|
||||
|
||||
@@ -7,6 +7,7 @@ using NzbDrone.Common.Composition;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Common.TPL;
|
||||
using NzbDrone.Core.Datastore.Events;
|
||||
using NzbDrone.Core.MediaFiles.BookImport.Manual;
|
||||
using NzbDrone.Core.Messaging.Commands;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.ProgressMessaging;
|
||||
@@ -58,6 +59,9 @@ namespace Readarr.Api.V1.Commands
|
||||
Request.Body.Seek(0, SeekOrigin.Begin);
|
||||
using var reader = new StreamReader(Request.Body);
|
||||
var body = reader.ReadToEnd();
|
||||
var priority = commandType == typeof(ManualImportCommand)
|
||||
? CommandPriority.High
|
||||
: CommandPriority.Normal;
|
||||
|
||||
dynamic command = STJson.Deserialize(body, commandType);
|
||||
|
||||
@@ -66,7 +70,8 @@ namespace Readarr.Api.V1.Commands
|
||||
command.SendUpdatesToClient = true;
|
||||
command.ClientUserAgent = Request.Headers["User-Agent"];
|
||||
|
||||
var trackedCommand = _commandQueueManager.Push(command, CommandPriority.Normal, CommandTrigger.Manual);
|
||||
var trackedCommand = _commandQueueManager.Push(command, priority, CommandTrigger.Manual);
|
||||
|
||||
return Created(trackedCommand.Id);
|
||||
}
|
||||
|
||||
|
||||
@@ -2277,9 +2277,9 @@ camelcase@^6.3.0:
|
||||
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
|
||||
|
||||
caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001517:
|
||||
version "1.0.30001525"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz#d2e8fdec6116ffa36284ca2c33ef6d53612fe1c8"
|
||||
integrity sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==
|
||||
version "1.0.30001591"
|
||||
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz"
|
||||
integrity sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==
|
||||
|
||||
chalk@^1.1.3:
|
||||
version "1.1.3"
|
||||
|
||||
Reference in New Issue
Block a user