Compare commits

..

20 Commits

Author SHA1 Message Date
Bogdan
3407cc9a7a New: XXL modal size 2024-03-08 12:46:56 +02:00
Helvio Pedreschi
4829916f0a Fixed: WebApp functionality on Apple devices
(cherry picked from commit c7dd7abf892eead7796fcc482aa2f2aabaf88712)
2024-03-08 12:43:45 +02:00
Bogdan
c505eafd30 Fixed: Append author name to Interactive Search header in Wanted/Missing 2024-03-06 16:27:52 +02:00
Bogdan
07f218f294 Fix proxy search test 2024-03-06 08:15:13 +02:00
Mark McDowall
42751b598b Fixed: Misaligned table border
Closes #2232

(cherry picked from commit aa938d911b61b08185dc57a0887f3f33e3c6e1f2)
2024-03-06 08:05:15 +02:00
Bogdan
5e7e0eb50b New: Append author name to Interactive Search header
Closes #3343
2024-03-06 07:56:40 +02:00
Mark McDowall
d6c631457c New: URL Base setting for Plex Server connections
Plus some translations

(cherry picked from commit 9fd193d2a82d5c2cdc0f36c1f984e4b6b68aaa8d)
2024-03-06 07:34:55 +02:00
Mark McDowall
12ee76d222 Queue Manual Import commands at high priority
(cherry picked from commit 64c6a8879beb1b17122c8f6f74bf7b3cf4dd1570)
2024-03-06 07:28:12 +02:00
Louis R
3ea80038d3 Fixed: Don't disable IPv6 in IPv6-only Environment
(cherry picked from commit 13af6f57796e54c3949cf340e03f020e6f8575c4)
2024-03-06 07:26:12 +02:00
nopoz
55404cdf24 New: Add download directory & move completed for Deluge
(cherry picked from commit 07bd159436935a7adb87ae1b6924a4d42d719b0f)
2024-03-06 07:25:18 +02:00
Weblate
83a9cd4f3e Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: GkhnGRBZ <gkhn.gurbuz@hotmail.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Nicolò Castagnola <nipica@outlook.it>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/tr/
Translation: Servarr/Readarr
2024-03-03 02:35:06 +02:00
Weblate
3572d7330d Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Chaoshuai Lü <lcs@meta.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Magyar <kochnorbert@icloud.com>
Co-authored-by: Sadi A. Nogueira <contato@sadi.eti.br>
Co-authored-by: Steve Hansen <steve@hansenconsultancy.be>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: fordas <fordas15@gmail.com>
Co-authored-by: 闫锦彪 <yanjinbiaohere@163.com>
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/readarr/zh_CN/
Translation: Servarr/Readarr
2024-03-02 09:29:37 +02:00
Mark McDowall
a9b652a280 Fixed: Multi-word genres in Auto Tags
Fixed #6488

(cherry picked from commit 5c4f82999368edfedd038a0a27d323e04b81a400)
2024-03-02 09:28:10 +02:00
Bogdan
8efb2eb71a Fixed: Selection of last added custom filter
Plus some translations and typos

(cherry picked from commit 1f97679868012b70beecc553557e96e6c8bc80e3)
2024-03-02 09:25:15 +02:00
Bogdan
17094f1998 New: Options button for Missing/Cutoff Unmet
(cherry picked from commit 2773f77e1c4e3a8c8d01bcbea67333801c7840df)
2024-03-02 09:21:42 +02:00
Bogdan
ddf5dc25a1 Update caniuse-lite
(cherry picked from commit 64f4365fe98b569efdf436710d5f56684f2aab66)
2024-03-02 09:21:34 +02:00
Mark McDowall
fa2614954b Increase migration timeout to 5 minutes
(cherry picked from commit 086d3b5afaa7680d22835ca66da2afcb6dd5865e)
2024-03-02 09:21:23 +02:00
Mark McDowall
2e2894b3d3 New: Bypass archived history for failed downloads in SABnzbd
(cherry picked from commit c99d81e79ba5e6ecec01ddd942440d8a48a1c23b)
2024-03-02 09:21:11 +02:00
Bogdan
59ff407e76 Bump node to v20.x on builder 2024-02-23 20:19:37 +02:00
Bogdan
bbd7b9f92e Bump version to 0.3.20 2024-02-18 20:32:32 +02:00
43 changed files with 366 additions and 149 deletions

View File

@@ -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'

View File

@@ -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>
);
}

View File

@@ -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,

View File

@@ -33,6 +33,7 @@ function createMapStateToProps() {
(author = {}, bookFiles, bookId) => {
return {
authorMonitored: author.monitored,
authorName: author.authorName,
bookFiles: bookFiles[bookId] ?? []
};
}

View File

@@ -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
};

View File

@@ -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
};

View File

@@ -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
};

View File

@@ -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>

View File

@@ -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' });

View File

@@ -91,6 +91,7 @@ class TextTagInputConnector extends Component {
render() {
return (
<TagInput
delimiters={['Tab', 'Enter', ',']}
tagList={[]}
onTagAdd={this.onTagAdd}
onTagDelete={this.onTagDelete}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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];

View File

@@ -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}
>

View File

@@ -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 {

View File

@@ -11,7 +11,7 @@ interface CssExports {
'quality': string;
'rejected': string;
'size': string;
'title': string;
'titleContent': string;
}
export const cssExports: CssExports;
export default cssExports;

View File

@@ -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}>

View File

@@ -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}

View File

@@ -84,6 +84,7 @@ function CutoffUnmetRow(props) {
bookId={id}
authorId={author.id}
bookTitle={title}
authorName={author.authorName}
bookEntity={bookEntities.WANTED_CUTOFF_UNMET}
showOpenAuthorButton={true}
/>

View File

@@ -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}

View File

@@ -84,6 +84,7 @@ function MissingRow(props) {
bookId={id}
authorId={author.id}
bookTitle={title}
authorName={author.authorName}
bookEntity={bookEntities.WANTED_MISSING}
showOpenAuthorButton={true}
/>

View File

@@ -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">

View File

@@ -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" />

View File

@@ -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
{

View File

@@ -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)

View File

@@ -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 =>
{

View File

@@ -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;

View File

@@ -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));

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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",

View File

@@ -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"
}

View File

@@ -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",

View File

@@ -5,7 +5,6 @@
"60MinutesSixty": "60 Minuti: {0}",
"APIKey": "Chiave API",
"About": "Info",
"AddListExclusion": "Aggiungi Lista Esclusioni",
"AddingTag": "Aggiungendo etichetta",
"Fixed": "Fissato",
"Local": "Locale",

View File

@@ -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"
}

View File

@@ -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",

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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,.nfosub,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": "“从下载客户端移除”将从下载客户端移除下载内容和文件。"
}

View File

@@ -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)

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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"