mirror of
https://github.com/Radarr/Radarr.git
synced 2026-03-11 15:20:34 -04:00
Compare commits
1 Commits
ipv6
...
move-rpm-i
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12ae4fba88 |
@@ -7,13 +7,13 @@ variables:
|
||||
outputFolder: './_output'
|
||||
artifactsFolder: './_artifacts'
|
||||
testsFolder: './_tests'
|
||||
majorVersion: '4.0.4'
|
||||
majorVersion: '4.0.0'
|
||||
minorVersion: $[counter('minorVersion', 2000)]
|
||||
radarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(radarrVersion)'
|
||||
sentryOrg: 'servarr'
|
||||
sentryUrl: 'https://sentry.servarr.com'
|
||||
dotnetVersion: '6.0.101'
|
||||
dotnetVersion: '6.0.100'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
|
||||
trigger:
|
||||
|
||||
@@ -25,7 +25,6 @@ function HistoryDetails(props) {
|
||||
releaseGroup,
|
||||
nzbInfoUrl,
|
||||
downloadClient,
|
||||
downloadClientName,
|
||||
downloadId,
|
||||
age,
|
||||
ageHours,
|
||||
@@ -33,8 +32,6 @@ function HistoryDetails(props) {
|
||||
publishedDate
|
||||
} = data;
|
||||
|
||||
const downloadClientNameInfo = downloadClientName ?? downloadClient;
|
||||
|
||||
return (
|
||||
<DescriptionList>
|
||||
<DescriptionListItem
|
||||
@@ -74,12 +71,11 @@ function HistoryDetails(props) {
|
||||
}
|
||||
|
||||
{
|
||||
downloadClientNameInfo ?
|
||||
!!downloadClient &&
|
||||
<DescriptionListItem
|
||||
title={translate('DownloadClient')}
|
||||
data={downloadClientNameInfo}
|
||||
/> :
|
||||
null
|
||||
data={downloadClient}
|
||||
/>
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -86,13 +86,6 @@ class AddNewMovieSearchResult extends Component {
|
||||
} = this.state;
|
||||
|
||||
const linkProps = isExistingMovie ? { to: `/movie/${titleSlug}` } : { onPress: this.onPress };
|
||||
const posterWidth = 167;
|
||||
const posterHeight = 250;
|
||||
|
||||
const elementStyle = {
|
||||
width: `${posterWidth}px`,
|
||||
height: `${posterHeight}px`
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={styles.searchResult}>
|
||||
@@ -109,7 +102,6 @@ class AddNewMovieSearchResult extends Component {
|
||||
<div className={styles.posterContainer}>
|
||||
<MoviePoster
|
||||
className={styles.poster}
|
||||
style={elementStyle}
|
||||
images={images}
|
||||
size={250}
|
||||
overflow={true}
|
||||
@@ -122,7 +114,7 @@ class AddNewMovieSearchResult extends Component {
|
||||
monitored={monitored}
|
||||
hasFile={hasFile}
|
||||
status={status}
|
||||
posterWidth={posterWidth}
|
||||
posterWidth={167}
|
||||
detailedProgressBar={true}
|
||||
queueStatus={queueStatus}
|
||||
queueState={queueState}
|
||||
@@ -191,7 +183,7 @@ class AddNewMovieSearchResult extends Component {
|
||||
<div>
|
||||
<Label size={sizes.LARGE}>
|
||||
<HeartRating
|
||||
ratings={ratings}
|
||||
rating={ratings.value}
|
||||
iconSize={13}
|
||||
/>
|
||||
</Label>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
.image {
|
||||
align-content: center;
|
||||
.heart {
|
||||
margin-right: 5px;
|
||||
vertical-align: -0.125em;
|
||||
color: $themeRed;
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +0,0 @@
|
||||
.image {
|
||||
align-content: center;
|
||||
margin-right: 5px;
|
||||
vertical-align: -0.125em;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -81,7 +81,7 @@ class PageHeader extends Component {
|
||||
<IconButton
|
||||
className={styles.donate}
|
||||
name={icons.HEART}
|
||||
to="https://radarr.video/donate"
|
||||
to="https://opencollective.com/radarr"
|
||||
size={14}
|
||||
/>
|
||||
<IconButton
|
||||
|
||||
@@ -100,9 +100,7 @@ class PageJumpBar extends Component {
|
||||
// Listeners
|
||||
|
||||
onMeasure = ({ height }) => {
|
||||
if (height > 0) {
|
||||
this.setState({ height });
|
||||
}
|
||||
this.setState({ height });
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
.image {
|
||||
align-content: center;
|
||||
margin-right: 5px;
|
||||
vertical-align: -0.125em;
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { PureComponent } from 'react';
|
||||
import styles from './RottenTomatoRating.css';
|
||||
|
||||
class RottenTomatoRating extends PureComponent {
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
|
||||
const {
|
||||
ratings,
|
||||
hideIcon,
|
||||
iconSize
|
||||
} = this.props;
|
||||
|
||||
const rtRotten = 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTYwIDU2MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNDQ1LjE4NSA0NDQuNjg0Yy03OS4zNjkgNC4xNjctOTUuNTg3LTg2LjY1Mi0xMjYuNzI2LTg2LjAwNi0xMy4yNjguMjc5LTIzLjcyNiAxNC4xNTEtMTkuMTMzIDMwLjMyIDIuNTI1IDguODg4IDkuNTMgMjEuOTIzIDEzLjk0NCAzMC4wMTEgMTUuNTcgMjguNTQ0LTcuNDQ3IDYwLjg0NS0zNC4zODMgNjMuNTc3LTQ0Ljc2IDQuNTQtNjMuNDMzLTIxLjQyNi02Mi4yNzgtNDguMDA3IDEuMy0yOS44NCAyNi42LTYwLjMzMS42NS03My4zMDUtMjcuMTk0LTEzLjU5Ny00OS4zMDEgMzkuNTcyLTc1LjMyNSA1MS40MzktMjMuNTUzIDEwLjc0MS01Ni4yNDggMi40MTMtNjcuODcyLTIzLjc0MS04LjE2NC0xOC4zNzktNi42OC01My43NjggMjkuNjctNjcuMjcgMjIuNzA2LTguNDMzIDczLjMwNSAxMS4wMjkgNzUuOS0xMy42MjMgMi45OTItMjguNDE2LTUzLjE1NS0zMC44MTItNzAuMDYtMzcuNjI2LTI5LjkxMi0xMi4wNTUtNDcuNTY3LTM3Ljg1LTMzLjczNC02NS41MjIgMTAuMzc4LTIwLjc1NyA0MC45MTUtMjkuMjAzIDY0LjIyMy0yMC4xMSAyNy45MjIgMTAuODkyIDMyLjQwNCAzOS44NTMgNDYuNzEgNTEuODk3IDEyLjMyNCAxMC4zOCAyOS4xOSAxMS42OCA0MC4yMiA0LjU0MyA4LjEzNS01LjI2NSAxMC44NDMtMTYuODI4IDcuNzc0LTI3LjM5LTQuMDctMTQuMDIzLTE0Ljg3NS0yMi43NzMtMjUuNDE1LTMxLjM0Ni0xOC43NTgtMTUuMjQ5LTQ1LjI0LTI4LjM2LTI5LjIyMi02OS45ODMgMTMuMTMtMzQuMTEgNTEuNjQyLTM1LjM0IDUxLjY0Mi0zNS4zNCAxNS4zLTEuNzIgMjkuMDAyIDIuOSA0MC4xNjcgMTIuODc1IDE0LjkyNyAxMy4zMzUgMTcuODM0IDMxLjE2IDE1LjMzNiA1MC4xNzYtMi4yODMgMTcuMzU4LTguNDI2IDMyLjU2LTExLjYzIDQ5Ljc1OS0zLjcxNyAxOS45NjYgNi45NTQgNDAuMDg2IDI3LjI0OSA0MC44NjkgMjYuNjk0IDEuMDMxIDM0LjY5OC0xOS40ODYgMzcuOTY0LTMyLjQ5MiA0Ljc4Mi0xOS4wMjggMTEuMDU4LTM2LjY5NCAyOC43MTgtNDcuODIgMjUuMzQ2LTE1Ljk3IDYwLjU1Mi0xMi40NyA3Ni44ODYgMTguMjIyIDEyLjkyIDI0LjI4NCA4Ljc3MiA1Ny43MTUtMTEuMDQ3IDc1Ljk3LTguODkyIDguMTg4LTE5LjU4NCAxMS4wNzUtMzEuMTQ4IDExLjE1Ni0xNi41ODUuMTE3LTMzLjE2Mi0uMjktNDguNTU2IDcuNDcxLTEwLjQ4IDUuMjgxLTE1LjA0NyAxMy44ODgtMTUuMDQ1IDI1LjQyMyAwIDExLjI0MiA1Ljg1MyAxOC41ODUgMTUuMzM2IDIzLjM2MyAxNy44NiA5LjAwMyAzNy41NzcgMTAuODQzIDU2Ljg3MSAxNC4yMjIgMjcuOTggNC45IDUyLjU4MSAxNC43NTUgNjguMzc1IDQwLjcyLjE0Mi4yMjguMjguNDU4LjQxNS42OSAxOC4xMzkgMzAuNzQxLS44MzEgNzUuMDA1LTM2LjQ3NiA3Ni44NzgiIGZpbGw9IiMwQUM4NTUiLz48L3N2Zz4=';
|
||||
const rtFresh = 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTYwIDU2MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNDc4LjI5IDI5Ni45OGMtMy45OS02My45NjYtMzYuNTItMTExLjgyLTg1LjQ2OC0xMzguNTggMC4yNzggMS41Ni0xLjEwOSAzLjUwOC0yLjY4OCAyLjgxOC0zMi4wMTYtMTQuMDA2LTg2LjMyOCAzMS4zMi0xMjQuMjggNy41ODQgMC4yODUgOC41MTktMS4zNzggNTAuMDcyLTU5LjkxNCA1Mi40ODMtMS4zODIgMC4wNTYtMi4xNDItMS4zNTUtMS4yNjgtMi4zNTQgNy44MjgtOC45MjkgMTUuNzMyLTMxLjUzNSA0LjM2Ny00My41ODYtMjQuMzM4IDIxLjgxLTM4LjQ3MiAzMC4wMTctODUuMTM4IDE5LjE4Ni0yOS44NzggMzEuMjQxLTQ2LjgwOSA3NC00My40ODUgMTI3LjI2IDYuNzggMTA4Ljc0IDEwOC42MyAxNzAuODkgMjExLjE5IDE2NC40OSAxMDIuNTYtNi4zOTUgMTkzLjQ3LTgwLjU3MiAxODYuNjgtMTg5LjMxIiBmaWxsPSIjRkEzMjBBIi8+PHBhdGggZD0iTTI5MS4zNzUgMTMyLjI5M2MyMS4wNzUtNS4wMjMgODEuNjkzLS40OSAxMDEuMTE0IDI1LjI3NCAxLjE2NiAxLjU0NS0uNDc1IDQuNDY4LTIuMzU1IDMuNjQ4LTMyLjAxNi0xNC4wMDYtODYuMzI4IDMxLjMyLTEyNC4yODIgNy41ODQuMjg1IDguNTE5LTEuMzc4IDUwLjA3Mi01OS45MTQgNTIuNDgzLTEuMzgyLjA1Ni0yLjE0Mi0xLjM1NS0xLjI2OC0yLjM1NCA3LjgyOC04LjkyOSAxNS43My0zMS41MzUgNC4zNjctNDMuNTg2LTI2LjUxMiAyMy43NTgtNDAuODg0IDMxLjM5Mi05OC40MjYgMTUuODM4LTEuODgzLS41MDgtMS4yNDEtMy41MzUuNzYyLTQuMjk4IDEwLjg3Ni00LjE1NyAzNS41MTUtMjIuMzYxIDU4LjgyNC0zMC4zODUgNC40MzgtMS41MjYgOC44NjItMi43MSAxMy4xOC0zLjQtMjUuNjY1LTIuMjkzLTM3LjIzNS01Ljg2Mi01My41NTktMy40LTEuNzg5LjI3LTMuMDA0LTEuODEzLTEuODk1LTMuMjQxIDIxLjk5NS0yOC4zMzIgNjIuNTEzLTM2Ljg4OCA4Ny41MTItMjEuODM3LTE1LjQxLTE5LjA5NC0yNy40OC0zNC4zMjEtMjcuNDgtMzQuMzIxbDI4LjYwMS0xNi4yNDZzMTEuODE3IDI2LjQgMjAuNDE0IDQ1LjYxNGMyMS4yNzUtMzEuNDM1IDYwLjg2LTM0LjMzNiA3Ny41ODUtMTIuMDMzLjk5MiAxLjMyNi0uMDQ1IDMuMjEtMS43MDIgMy4xNzEtMTMuNjEyLS4zMzEtMjEuMTA3IDEyLjA1LTIxLjY3NSAyMS40NjZsLjE5Ny4wMjMiIGZpbGw9IiMwMDkxMkQiLz48L3N2Zz4=';
|
||||
|
||||
const rating = ratings.rottenTomatoes;
|
||||
|
||||
let ratingString = '0%';
|
||||
|
||||
if (rating) {
|
||||
ratingString = `${rating.value}%`;
|
||||
}
|
||||
|
||||
return (
|
||||
<span>
|
||||
{
|
||||
!hideIcon &&
|
||||
<img
|
||||
className={styles.image}
|
||||
src={rating.value > 50 ? rtFresh : rtRotten}
|
||||
style={{
|
||||
height: `${iconSize}px`
|
||||
}}
|
||||
/>
|
||||
}
|
||||
|
||||
{ratingString}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
RottenTomatoRating.propTypes = {
|
||||
ratings: PropTypes.object.isRequired,
|
||||
iconSize: PropTypes.number.isRequired,
|
||||
hideIcon: PropTypes.bool
|
||||
};
|
||||
|
||||
RottenTomatoRating.defaultProps = {
|
||||
iconSize: 14
|
||||
};
|
||||
|
||||
export default RottenTomatoRating;
|
||||
@@ -1,5 +0,0 @@
|
||||
.image {
|
||||
align-content: center;
|
||||
margin-right: 5px;
|
||||
vertical-align: -0.125em;
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { PureComponent } from 'react';
|
||||
import styles from './TmdbRating.css';
|
||||
|
||||
class TmdbRating extends PureComponent {
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
|
||||
const {
|
||||
ratings,
|
||||
hideIcon,
|
||||
iconSize
|
||||
} = this.props;
|
||||
|
||||
const tmdbImage = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOTAuMjQgODEuNTIiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeTE9IjQwLjc2IiB4Mj0iMTkwLjI0IiB5Mj0iNDAuNzYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MGNlYTEiLz48c3RvcCBvZmZzZXQ9Ii41NiIgc3RvcC1jb2xvcj0iIzNjYmVjOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAwYjNlNSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9Ik0xMDUuNjcgMzYuMDZoNjYuOWExNy42NyAxNy42NyAwIDAwMTcuNjctMTcuNjZBMTcuNjcgMTcuNjcgMCAwMDE3Mi41Ny43M2gtNjYuOUExNy42NyAxNy42NyAwIDAwODggMTguNGExNy42NyAxNy42NyAwIDAwMTcuNjcgMTcuNjZ6bS04OCA0NWg3Ni45YTE3LjY3IDE3LjY3IDAgMDAxNy42Ny0xNy42NiAxNy42NyAxNy42NyAwIDAwLTE3LjY3LTE3LjY3aC03Ni45QTE3LjY3IDE3LjY3IDAgMDAwIDYzLjRhMTcuNjcgMTcuNjcgMCAwMDE3LjY3IDE3LjY2em0tNy4yNi00NS42NGg3LjhWNi45MmgxMC4xVjBoLTI4djYuOWgxMC4xem0yOC4xIDBoNy44VjguMjVoLjFsOSAyNy4xNWg2bDkuMy0yNy4xNWguMVYzNS40aDcuOFYwSDY2Ljc2bC04LjIgMjMuMWgtLjFMNTAuMzEgMGgtMTEuOHptMTEzLjkyIDIwLjI1YTE1LjA3IDE1LjA3IDAgMDAtNC41Mi01LjUyIDE4LjU3IDE4LjU3IDAgMDAtNi42OC0zLjA4IDMzLjU0IDMzLjU0IDAgMDAtOC4wNy0xaC0xMS43djM1LjRoMTIuNzVhMjQuNTggMjQuNTggMCAwMDcuNTUtMS4xNSAxOS4zNCAxOS4zNCAwIDAwNi4zNS0zLjMyIDE2LjI3IDE2LjI3IDAgMDA0LjM3LTUuNSAxNi45MSAxNi45MSAwIDAwMS42My03LjU4IDE4LjUgMTguNSAwIDAwLTEuNjgtOC4yNXpNMTQ1IDY4LjZhOC44IDguOCAwIDAxLTIuNjQgMy40IDEwLjcgMTAuNyAwIDAxLTQgMS44MiAyMS41NyAyMS41NyAwIDAxLTUgLjU1aC00LjA1di0yMWg0LjZhMTcgMTcgMCAwMTQuNjcuNjMgMTEuNjYgMTEuNjYgMCAwMTMuODggMS44N0E5LjE0IDkuMTQgMCAwMTE0NSA1OWE5Ljg3IDkuODcgMCAwMTEgNC41MiAxMS44OSAxMS44OSAwIDAxLTEgNS4wOHptNDQuNjMtLjEzYTggOCAwIDAwLTEuNTgtMi42MiA4LjM4IDguMzggMCAwMC0yLjQyLTEuODUgMTAuMzEgMTAuMzEgMCAwMC0zLjE3LTF2LS4xYTkuMjIgOS4yMiAwIDAwNC40Mi0yLjgyIDcuNDMgNy40MyAwIDAwMS42OC01IDguNDIgOC40MiAwIDAwLTEuMTUtNC42NSA4LjA5IDguMDkgMCAwMC0zLTIuNzIgMTIuNTYgMTIuNTYgMCAwMC00LjE4LTEuMyAzMi44NCAzMi44NCAwIDAwLTQuNjItLjMzaC0xMy4ydjM1LjRoMTQuNWEyMi40MSAyMi40MSAwIDAwNC43Mi0uNSAxMy41MyAxMy41MyAwIDAwNC4yOC0xLjY1IDkuNDIgOS40MiAwIDAwMy4xLTMgOC41MiA4LjUyIDAgMDAxLjItNC42OCA5LjM5IDkuMzkgMCAwMC0uNTUtMy4xOHptLTE5LjQyLTE1Ljc1aDUuM2ExMCAxMCAwIDAxMS44NS4xOCA2LjE4IDYuMTggMCAwMTEuNy41NyAzLjM5IDMuMzkgMCAwMTEuMjIgMS4xMyAzLjIyIDMuMjIgMCAwMS40OCAxLjgyIDMuNjMgMy42MyAwIDAxLS40MyAxLjggMy40IDMuNCAwIDAxLTEuMTIgMS4yIDQuOTIgNC45MiAwIDAxLTEuNTguNjUgNy41MSA3LjUxIDAgMDEtMS43Ny4yaC01LjY1em0xMS43MiAyMGEzLjkgMy45IDAgMDEtMS4yMiAxLjMgNC42NCA0LjY0IDAgMDEtMS42OC43IDguMTggOC4xOCAwIDAxLTEuODIuMmgtN3YtOGg1LjlhMTUuMzUgMTUuMzUgMCAwMTIgLjE1IDguNDcgOC40NyAwIDAxMi4wNS41NSA0IDQgMCAwMTEuNTcgMS4xOCAzLjExIDMuMTEgMCAwMS42MyAyIDMuNzEgMy43MSAwIDAxLS40MyAxLjkyeiIgZmlsbD0idXJsKCNhKSIvPjwvc3ZnPg==';
|
||||
|
||||
const rating = ratings.tmdb;
|
||||
|
||||
let ratingString = '0%';
|
||||
|
||||
if (rating) {
|
||||
ratingString = `${rating.value * 10}%`;
|
||||
}
|
||||
|
||||
return (
|
||||
<span title={`${rating.votes} votes`}>
|
||||
{
|
||||
!hideIcon &&
|
||||
<img
|
||||
className={styles.image}
|
||||
src={tmdbImage}
|
||||
style={{
|
||||
height: `${iconSize}px`
|
||||
}}
|
||||
/>
|
||||
}
|
||||
|
||||
{ratingString}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
TmdbRating.propTypes = {
|
||||
ratings: PropTypes.object.isRequired,
|
||||
iconSize: PropTypes.number.isRequired,
|
||||
hideIcon: PropTypes.bool
|
||||
};
|
||||
|
||||
TmdbRating.defaultProps = {
|
||||
iconSize: 14
|
||||
};
|
||||
|
||||
export default TmdbRating;
|
||||
@@ -73,7 +73,7 @@ function getInfoRowProps(row, props) {
|
||||
return {
|
||||
title: translate('Ratings'),
|
||||
iconName: icons.HEART,
|
||||
label: `${props.ratings.tmdb.value * 10}%`
|
||||
label: `${props.ratings.value * 10}%`
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ function DiscoverMoviePosterInfo(props) {
|
||||
return (
|
||||
<div className={styles.info}>
|
||||
<HeartRating
|
||||
ratings={ratings}
|
||||
rating={ratings.value}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
@@ -129,7 +129,7 @@ DiscoverMoviePosterInfo.propTypes = {
|
||||
digitalRelease: PropTypes.string,
|
||||
physicalRelease: PropTypes.string,
|
||||
runtime: PropTypes.number,
|
||||
ratings: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
ratings: PropTypes.object,
|
||||
sortKey: PropTypes.string.isRequired,
|
||||
showRelativeDates: PropTypes.bool.isRequired,
|
||||
shortDateFormat: PropTypes.string.isRequired,
|
||||
|
||||
@@ -246,7 +246,7 @@ class DiscoverMovieRow extends Component {
|
||||
className={styles[name]}
|
||||
>
|
||||
<HeartRating
|
||||
ratings={ratings}
|
||||
rating={ratings.value}
|
||||
/>
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
@@ -373,7 +373,7 @@ DiscoverMovieRow.propTypes = {
|
||||
digitalRelease: PropTypes.string,
|
||||
runtime: PropTypes.number,
|
||||
genres: PropTypes.arrayOf(PropTypes.string).isRequired,
|
||||
ratings: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
ratings: PropTypes.object.isRequired,
|
||||
certification: PropTypes.string,
|
||||
collection: PropTypes.object,
|
||||
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
.header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 375px;
|
||||
height: 350px;
|
||||
}
|
||||
|
||||
.errorMessage {
|
||||
@@ -41,8 +41,8 @@
|
||||
.poster {
|
||||
flex-shrink: 0;
|
||||
margin-right: 35px;
|
||||
width: 217px;
|
||||
height: 319px;
|
||||
width: 200px;
|
||||
height: 294px;
|
||||
}
|
||||
|
||||
.info {
|
||||
|
||||
@@ -3,8 +3,8 @@ import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import { Tab, TabList, TabPanel, Tabs } from 'react-tabs';
|
||||
import TextTruncate from 'react-text-truncate';
|
||||
import HeartRating from 'Components/HeartRating';
|
||||
import Icon from 'Components/Icon';
|
||||
import ImdbRating from 'Components/ImdbRating';
|
||||
import InfoLabel from 'Components/InfoLabel';
|
||||
import IconButton from 'Components/Link/IconButton';
|
||||
import Marquee from 'Components/Marquee';
|
||||
@@ -16,8 +16,6 @@ import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
|
||||
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
|
||||
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
||||
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
|
||||
import RottenTomatoRating from 'Components/RottenTomatoRating';
|
||||
import TmdbRating from 'Components/TmdbRating';
|
||||
import Popover from 'Components/Tooltip/Popover';
|
||||
import Tooltip from 'Components/Tooltip/Tooltip';
|
||||
import { icons, kinds, sizes, tooltipPositions } from 'Helpers/Props';
|
||||
@@ -451,6 +449,17 @@ class MovieDetails extends Component {
|
||||
</span>
|
||||
}
|
||||
|
||||
{
|
||||
!!ratings &&
|
||||
<span className={styles.rating}>
|
||||
<HeartRating
|
||||
rating={ratings.value}
|
||||
iconSize={20}
|
||||
hideHeart={isSmallScreen}
|
||||
/>
|
||||
</span>
|
||||
}
|
||||
|
||||
{
|
||||
<span className={styles.links}>
|
||||
<Tooltip
|
||||
@@ -492,36 +501,6 @@ class MovieDetails extends Component {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.details}>
|
||||
{
|
||||
!!ratings.tmdb &&
|
||||
<span className={styles.rating}>
|
||||
<TmdbRating
|
||||
ratings={ratings}
|
||||
iconSize={20}
|
||||
/>
|
||||
</span>
|
||||
}
|
||||
{
|
||||
!!ratings.imdb &&
|
||||
<span className={styles.rating}>
|
||||
<ImdbRating
|
||||
ratings={ratings}
|
||||
iconSize={20}
|
||||
/>
|
||||
</span>
|
||||
}
|
||||
{
|
||||
!!ratings.rottenTomatoes &&
|
||||
<span className={styles.rating}>
|
||||
<RottenTomatoRating
|
||||
ratings={ratings}
|
||||
iconSize={20}
|
||||
/>
|
||||
</span>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div className={styles.detailsLabels}>
|
||||
<InfoLabel
|
||||
className={styles.detailsInfoLabel}
|
||||
|
||||
@@ -67,7 +67,8 @@ class MovieHistoryRow extends Component {
|
||||
data,
|
||||
isMarkingAsFailed,
|
||||
shortDateFormat,
|
||||
timeFormat
|
||||
timeFormat,
|
||||
onMarkAsFailedPress
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
@@ -142,7 +143,7 @@ class MovieHistoryRow extends Component {
|
||||
isMarkingAsFailed={isMarkingAsFailed}
|
||||
shortDateFormat={shortDateFormat}
|
||||
timeFormat={timeFormat}
|
||||
onMarkAsFailedPress={this.onMarkAsFailedPress}
|
||||
onMarkAsFailedPress={onMarkAsFailedPress}
|
||||
onModalClose={this.onDetailsModalClose}
|
||||
/>
|
||||
</TableRow>
|
||||
|
||||
@@ -332,7 +332,7 @@ class MovieIndexRow extends Component {
|
||||
className={styles[name]}
|
||||
>
|
||||
<HeartRating
|
||||
ratings={ratings}
|
||||
rating={ratings.value}
|
||||
/>
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
|
||||
@@ -1,23 +1,20 @@
|
||||
.remotePathMapping {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
align-items: left;
|
||||
margin-bottom: 10px;
|
||||
height: 30px;
|
||||
border-bottom: 1px solid $borderColor;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.actions {
|
||||
flex: 0 0 25px;
|
||||
}
|
||||
|
||||
.host {
|
||||
flex: 0 0 300px;
|
||||
flex: 1 0 300px;
|
||||
}
|
||||
|
||||
.path {
|
||||
flex: 0 0 400px;
|
||||
}
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex: 1 0 auto;
|
||||
padding-right: 10px;
|
||||
flex: 1 0 400px;
|
||||
}
|
||||
|
||||
@@ -66,9 +66,6 @@ class RemotePathMapping extends Component {
|
||||
styles.remotePathMapping
|
||||
)}
|
||||
>
|
||||
<div className={styles.host}>{host}</div>
|
||||
<div className={styles.path}>{remotePath}</div>
|
||||
<div className={styles.path}>{localPath}</div>
|
||||
|
||||
<div className={styles.actions}>
|
||||
<Link
|
||||
@@ -78,6 +75,10 @@ class RemotePathMapping extends Component {
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<div className={styles.host}>{host}</div>
|
||||
<div className={styles.path}>{remotePath}</div>
|
||||
<div className={styles.path}>{localPath}</div>
|
||||
|
||||
<EditRemotePathMappingModalConnector
|
||||
id={id}
|
||||
isOpen={this.state.isEditRemotePathMappingModalOpen}
|
||||
|
||||
@@ -4,17 +4,19 @@
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.actions {
|
||||
flex: 0 0 25px;
|
||||
}
|
||||
|
||||
.host {
|
||||
flex: 0 0 300px;
|
||||
flex: 1 0 300px;
|
||||
}
|
||||
|
||||
.path {
|
||||
flex: 0 0 400px;
|
||||
flex: 1 0 400px;
|
||||
}
|
||||
|
||||
.addRemotePathMapping {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ class ImportListExclusions extends Component {
|
||||
errorMessage={translate('UnableToLoadListExclusions')}
|
||||
{...otherProps}
|
||||
>
|
||||
<div className={styles.importListExclusionsHeader}>
|
||||
<div className={styles.importExclusionsHeader}>
|
||||
<div className={styles.tmdbId}>
|
||||
TMDb Id
|
||||
</div>
|
||||
|
||||
@@ -85,7 +85,7 @@ function IndexerOptions(props) {
|
||||
type={inputTypes.CHECK}
|
||||
name="preferIndexerFlags"
|
||||
helpText={translate('PreferIndexerFlagsHelpText')}
|
||||
helpLink="https://wiki.servarr.com/radarr/settings#indexer-flags"
|
||||
helpLink="https://wiki.servarr.com/Definitions#Indexer_Flags"
|
||||
onChange={onInputChange}
|
||||
{...settings.preferIndexerFlags}
|
||||
/>
|
||||
|
||||
@@ -147,8 +147,7 @@ class NamingModal extends Component {
|
||||
|
||||
{ token: '{MediaInfo VideoCodec}', example: 'x264' },
|
||||
{ token: '{MediaInfo VideoBitDepth}', example: '10' },
|
||||
{ token: '{MediaInfo VideoDynamicRange}', example: 'HDR' },
|
||||
{ token: '{MediaInfo VideoDynamicRangeType}', example: 'DV HDR10' }
|
||||
{ token: '{MediaInfo VideoDynamicRange}', example: 'HDR' }
|
||||
];
|
||||
|
||||
const releaseGroupTokens = [
|
||||
|
||||
@@ -200,7 +200,7 @@ export const defaultState = {
|
||||
ratings: function(item) {
|
||||
const { ratings = {} } = item;
|
||||
|
||||
return ratings.tmdb? ratings.tmdb.value : 0;
|
||||
return ratings.value;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -330,23 +330,8 @@ export const defaultState = {
|
||||
valueType: filterBuilderValueTypes.MINIMUM_AVAILABILITY
|
||||
},
|
||||
{
|
||||
name: 'tmdbRating',
|
||||
label: translate('TmdbRating'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'tmdbVotes',
|
||||
label: translate('TmdbVotes'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'imdbRating',
|
||||
label: translate('ImdbRating'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'imdbVotes',
|
||||
label: translate('ImdbVotes'),
|
||||
name: 'ratings',
|
||||
label: 'Rating',
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
|
||||
@@ -131,38 +131,10 @@ export const filterPredicates = {
|
||||
return dateFilterPredicate(item.digitalRelease, filterValue, type);
|
||||
},
|
||||
|
||||
tmdbRating: function(item, filterValue, type) {
|
||||
ratings: function(item, filterValue, type) {
|
||||
const predicate = filterTypePredicates[type];
|
||||
|
||||
const rating = item.ratings.tmdb ? item.ratings.tmdb.value : 0;
|
||||
|
||||
return predicate(rating * 10, filterValue);
|
||||
},
|
||||
|
||||
tmdbVotes: function(item, filterValue, type) {
|
||||
const predicate = filterTypePredicates[type];
|
||||
|
||||
const rating = item.ratings.tmdb ? item.ratings.tmdb.votes : 0;
|
||||
|
||||
return predicate(rating, filterValue);
|
||||
},
|
||||
|
||||
imdbRating: function(item, filterValue, type) {
|
||||
const predicate = filterTypePredicates[type];
|
||||
|
||||
console.log(item.ratings);
|
||||
|
||||
const rating = item.ratings.imdb ? item.ratings.imdb.value : 0;
|
||||
|
||||
return predicate(rating, filterValue);
|
||||
},
|
||||
|
||||
imdbVotes: function(item, filterValue, type) {
|
||||
const predicate = filterTypePredicates[type];
|
||||
|
||||
const rating = item.ratings.imdb ? item.ratings.imdb.votes : 0;
|
||||
|
||||
return predicate(rating, filterValue);
|
||||
return predicate(item.ratings.value * 10, filterValue);
|
||||
},
|
||||
|
||||
qualityCutoffNotMet: function(item) {
|
||||
|
||||
@@ -209,7 +209,7 @@ export const defaultState = {
|
||||
ratings: function(item) {
|
||||
const { ratings = {} } = item;
|
||||
|
||||
return ratings.tmdb? ratings.tmdb.value : 0;
|
||||
return ratings.value;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -357,23 +357,8 @@ export const defaultState = {
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'tmdbRating',
|
||||
label: translate('TmdbRating'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'tmdbVotes',
|
||||
label: translate('TmdbVotes'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'imdbRating',
|
||||
label: translate('ImdbRating'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'imdbVotes',
|
||||
label: translate('ImdbVotes'),
|
||||
name: 'ratings',
|
||||
label: translate('Ratings'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
|
||||
@@ -100,7 +100,7 @@ export default function createSentryMiddleware() {
|
||||
return;
|
||||
}
|
||||
|
||||
const dsn = isProduction ? 'https://7794f2858478485ea337fb5535624fbd@sentry.servarr.com/12' :
|
||||
const dsn = isProduction ? 'https://b0fb75c38ef4487dbf742f79c4ba62d2@sentry.servarr.com/12' :
|
||||
'https://da610619280249f891ec3ee306906793@sentry.servarr.com/13';
|
||||
|
||||
sentry.init({
|
||||
|
||||
@@ -13,7 +13,7 @@ class Donations extends Component {
|
||||
return (
|
||||
<FieldSet legend={translate('Donations')}>
|
||||
<div className={styles.logoContainer} title="Radarr">
|
||||
<Link to="https://radarr.video/donate">
|
||||
<Link to="https://opencollective.com/radarr">
|
||||
<img
|
||||
className={styles.logo}
|
||||
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-radarr.png`}
|
||||
@@ -21,7 +21,7 @@ class Donations extends Component {
|
||||
</Link>
|
||||
</div>
|
||||
<div className={styles.logoContainer} title="Lidarr">
|
||||
<Link to="https://lidarr.audio/donate">
|
||||
<Link to="https://opencollective.com/lidarr">
|
||||
<img
|
||||
className={styles.logo}
|
||||
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-lidarr.png`}
|
||||
@@ -29,7 +29,7 @@ class Donations extends Component {
|
||||
</Link>
|
||||
</div>
|
||||
<div className={styles.logoContainer} title="Readarr">
|
||||
<Link to="https://readarr.com/donate">
|
||||
<Link to="https://opencollective.com/readarr">
|
||||
<img
|
||||
className={styles.logo}
|
||||
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-readarr.png`}
|
||||
@@ -37,7 +37,7 @@ class Donations extends Component {
|
||||
</Link>
|
||||
</div>
|
||||
<div className={styles.logoContainer} title="Prowlarr">
|
||||
<Link to="https://prowlarr.com/donate">
|
||||
<Link to="https://opencollective.com/prowlarr">
|
||||
<img
|
||||
className={styles.logo}
|
||||
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-prowlarr.png`}
|
||||
@@ -45,7 +45,7 @@ class Donations extends Component {
|
||||
</Link>
|
||||
</div>
|
||||
<div className={styles.logoContainer} title="Sonarr">
|
||||
<Link to="https://sonarr.tv/donate">
|
||||
<Link to="https://opencollective.com/sonarr">
|
||||
<img
|
||||
className={styles.logo}
|
||||
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-sonarr.png`}
|
||||
|
||||
@@ -19,7 +19,6 @@ function getInternalLink(source) {
|
||||
case 'IndexerRssCheck':
|
||||
case 'IndexerSearchCheck':
|
||||
case 'IndexerStatusCheck':
|
||||
case 'IndexerJackettAllCheck':
|
||||
case 'IndexerLongTermStatusCheck':
|
||||
return (
|
||||
<IconButton
|
||||
|
||||
@@ -200,7 +200,7 @@ class QueuedTaskRow extends Component {
|
||||
{
|
||||
clientUserAgent ?
|
||||
<span className={styles.userAgent} title={translate('TaskUserAgentTooltip')}>
|
||||
{translate('From')}: {clientUserAgent}
|
||||
{translate('from')}: {clientUserAgent}
|
||||
</span> :
|
||||
null
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ import { kinds } from 'Helpers/Props';
|
||||
|
||||
function getStatusStyle(status, monitored, hasFile, isAvailable, returnType, queue = false) {
|
||||
if (queue) {
|
||||
return returnType === 'kinds' ? kinds.QUEUE : 'queue';
|
||||
return returnType === 'kinds' ? kinds.SUCCESS : 'queue';
|
||||
}
|
||||
|
||||
if (hasFile && monitored) {
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
"@fortawesome/free-regular-svg-icons": "5.15.3",
|
||||
"@fortawesome/free-solid-svg-icons": "5.15.3",
|
||||
"@fortawesome/react-fontawesome": "0.1.14",
|
||||
"@microsoft/signalr": "6.0.1",
|
||||
"@microsoft/signalr": "6.0.0",
|
||||
"@sentry/browser": "6.13.2",
|
||||
"@sentry/integrations": "6.13.2",
|
||||
"classnames": "2.3.1",
|
||||
|
||||
@@ -171,26 +171,5 @@ namespace NzbDrone.Common.Extensions
|
||||
{
|
||||
return source.Contains(value, StringComparer.InvariantCultureIgnoreCase);
|
||||
}
|
||||
|
||||
public static string EncodeRFC3986(this string value)
|
||||
{
|
||||
// From Twitterizer http://www.twitterizer.net/
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
var encoded = Uri.EscapeDataString(value);
|
||||
|
||||
return Regex
|
||||
.Replace(encoded, "(%[0-9a-f][0-9a-f])", c => c.Value.ToUpper())
|
||||
.Replace("(", "%28")
|
||||
.Replace(")", "%29")
|
||||
.Replace("$", "%24")
|
||||
.Replace("!", "%21")
|
||||
.Replace("*", "%2A")
|
||||
.Replace("'", "%27")
|
||||
.Replace("%7E", "~");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
using System.Net;
|
||||
|
||||
namespace NzbDrone.Common.Http
|
||||
{
|
||||
public class BasicNetworkCredential : NetworkCredential
|
||||
{
|
||||
public BasicNetworkCredential(string user, string pass)
|
||||
: base(user, pass)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,24 +4,20 @@ using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Security;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Cache;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http.Proxy;
|
||||
using NzbDrone.Common.Instrumentation;
|
||||
|
||||
namespace NzbDrone.Common.Http.Dispatchers
|
||||
{
|
||||
public class ManagedHttpDispatcher : IHttpDispatcher
|
||||
{
|
||||
private const string NO_PROXY_KEY = "no-proxy";
|
||||
|
||||
private const int connection_establish_timeout = 2000;
|
||||
|
||||
private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(ManagedHttpDispatcher));
|
||||
|
||||
private static bool useIPv6 = Socket.OSSupportsIPv6;
|
||||
private static bool hasResolvedIPv6Availability;
|
||||
|
||||
@@ -30,13 +26,12 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
private readonly ICertificateValidationService _certificateValidationService;
|
||||
private readonly IUserAgentBuilder _userAgentBuilder;
|
||||
private readonly ICached<System.Net.Http.HttpClient> _httpClientCache;
|
||||
private readonly ICached<CredentialCache> _credentialCache;
|
||||
|
||||
public ManagedHttpDispatcher(IHttpProxySettingsProvider proxySettingsProvider,
|
||||
ICreateManagedWebProxy createManagedWebProxy,
|
||||
ICertificateValidationService certificateValidationService,
|
||||
IUserAgentBuilder userAgentBuilder,
|
||||
ICacheManager cacheManager)
|
||||
ICreateManagedWebProxy createManagedWebProxy,
|
||||
ICertificateValidationService certificateValidationService,
|
||||
IUserAgentBuilder userAgentBuilder,
|
||||
ICacheManager cacheManager)
|
||||
{
|
||||
_proxySettingsProvider = proxySettingsProvider;
|
||||
_createManagedWebProxy = createManagedWebProxy;
|
||||
@@ -44,7 +39,6 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
_userAgentBuilder = userAgentBuilder;
|
||||
|
||||
_httpClientCache = cacheManager.GetCache<System.Net.Http.HttpClient>(typeof(ManagedHttpDispatcher));
|
||||
_credentialCache = cacheManager.GetCache<CredentialCache>(typeof(ManagedHttpDispatcher), "credentialcache");
|
||||
}
|
||||
|
||||
public HttpResponse GetResponse(HttpRequest request, CookieContainer cookies)
|
||||
@@ -70,26 +64,6 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
cts.CancelAfter(TimeSpan.FromSeconds(100));
|
||||
}
|
||||
|
||||
if (request.Credentials != null)
|
||||
{
|
||||
if (request.Credentials is BasicNetworkCredential bc)
|
||||
{
|
||||
// Manually set header to avoid initial challenge response
|
||||
var authInfo = bc.UserName + ":" + bc.Password;
|
||||
authInfo = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(authInfo));
|
||||
requestMessage.Headers.Add("Authorization", "Basic " + authInfo);
|
||||
}
|
||||
else if (request.Credentials is NetworkCredential nc)
|
||||
{
|
||||
var creds = GetCredentialCache();
|
||||
foreach (var authtype in new[] { "Basic", "Digest" })
|
||||
{
|
||||
creds.Remove((Uri)request.Url, authtype);
|
||||
creds.Add((Uri)request.Url, authtype, nc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (request.ContentData != null)
|
||||
{
|
||||
requestMessage.Content = new ByteArrayContent(request.ContentData);
|
||||
@@ -146,8 +120,6 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Brotli,
|
||||
UseCookies = false, // sic - we don't want to use a shared cookie container
|
||||
AllowAutoRedirect = false,
|
||||
Credentials = GetCredentialCache(),
|
||||
PreAuthenticate = true,
|
||||
MaxConnectionsPerServer = 12,
|
||||
ConnectCallback = onConnect,
|
||||
SslOptions = new SslClientAuthenticationOptions
|
||||
@@ -232,28 +204,18 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
headers.Add(header, value);
|
||||
}
|
||||
|
||||
private CredentialCache GetCredentialCache()
|
||||
{
|
||||
return _credentialCache.Get("credentialCache", () => new CredentialCache());
|
||||
}
|
||||
|
||||
private static async ValueTask<Stream> onConnect(SocketsHttpConnectionContext context, CancellationToken cancellationToken)
|
||||
{
|
||||
Logger.Trace($"useIPv6: {useIPv6} hasResolvedipv6availability: {hasResolvedIPv6Availability}");
|
||||
|
||||
// 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.
|
||||
// This issue is being tracked at https://github.com/dotnet/runtime/issues/26177 and expected to be fixed in .NET 6.
|
||||
if (useIPv6)
|
||||
{
|
||||
Logger.Trace("Trying Ipv6");
|
||||
try
|
||||
{
|
||||
var localToken = cancellationToken;
|
||||
|
||||
if (!hasResolvedIPv6Availability)
|
||||
{
|
||||
Logger.Trace($"Using fast timeout {connection_establish_timeout}");
|
||||
|
||||
// to make things move fast, use a very low timeout for the initial ipv6 attempt.
|
||||
var quickFailCts = new CancellationTokenSource(connection_establish_timeout);
|
||||
var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, quickFailCts.Token);
|
||||
@@ -263,10 +225,8 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
|
||||
return await attemptConnection(AddressFamily.InterNetworkV6, context, localToken);
|
||||
}
|
||||
catch (Exception e)
|
||||
catch
|
||||
{
|
||||
Logger.Trace(e, "Error in ipv6 attempt");
|
||||
|
||||
// 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.
|
||||
@@ -278,8 +238,6 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
}
|
||||
}
|
||||
|
||||
Logger.Trace("Falling back to ipv4");
|
||||
|
||||
// fallback to IPv4.
|
||||
return await attemptConnection(AddressFamily.InterNetwork, context, cancellationToken);
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@ namespace NzbDrone.Common.Http
|
||||
public HttpHeader Headers { get; set; }
|
||||
public byte[] ContentData { get; set; }
|
||||
public string ContentSummary { get; set; }
|
||||
public ICredentials Credentials { get; set; }
|
||||
public bool SuppressHttpError { get; set; }
|
||||
public IEnumerable<HttpStatusCode> SuppressHttpErrorStatusCodes { get; set; }
|
||||
public bool UseSimplifiedUserAgent { get; set; }
|
||||
@@ -90,5 +89,12 @@ namespace NzbDrone.Common.Http
|
||||
var encoding = HttpHeader.GetEncodingFromContentType(Headers.ContentType);
|
||||
ContentData = encoding.GetBytes(data);
|
||||
}
|
||||
|
||||
public void AddBasicAuthentication(string username, string password)
|
||||
{
|
||||
var authInfo = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes($"{username}:{password}"));
|
||||
|
||||
Headers.Set("Authorization", "Basic " + authInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,10 @@ namespace NzbDrone.Common.Http
|
||||
public bool ConnectionKeepAlive { get; set; }
|
||||
public TimeSpan RateLimit { get; set; }
|
||||
public bool LogResponseContent { get; set; }
|
||||
public ICredentials NetworkCredential { get; set; }
|
||||
public NetworkCredential NetworkCredential { get; set; }
|
||||
public Dictionary<string, string> Cookies { get; private set; }
|
||||
public List<HttpFormData> FormData { get; private set; }
|
||||
|
||||
public Action<HttpRequest> PostProcess { get; set; }
|
||||
|
||||
public HttpRequestBuilder(string baseUrl)
|
||||
@@ -108,7 +109,13 @@ namespace NzbDrone.Common.Http
|
||||
request.ConnectionKeepAlive = ConnectionKeepAlive;
|
||||
request.RateLimit = RateLimit;
|
||||
request.LogResponseContent = LogResponseContent;
|
||||
request.Credentials = NetworkCredential;
|
||||
|
||||
if (NetworkCredential != null)
|
||||
{
|
||||
var authInfo = NetworkCredential.UserName + ":" + NetworkCredential.Password;
|
||||
authInfo = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(authInfo));
|
||||
request.Headers.Set("Authorization", "Basic " + authInfo);
|
||||
}
|
||||
|
||||
foreach (var header in Headers)
|
||||
{
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Xml.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Instrumentation;
|
||||
|
||||
namespace NzbDrone.Common.Http
|
||||
{
|
||||
public class XmlRpcRequestBuilder : HttpRequestBuilder
|
||||
{
|
||||
public static string XmlRpcContentType = "text/xml";
|
||||
|
||||
private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(XmlRpcRequestBuilder));
|
||||
|
||||
public string XmlMethod { get; private set; }
|
||||
public List<object> XmlParameters { get; private set; }
|
||||
|
||||
public XmlRpcRequestBuilder(string baseUrl)
|
||||
: base(baseUrl)
|
||||
{
|
||||
Method = HttpMethod.Post;
|
||||
XmlParameters = new List<object>();
|
||||
}
|
||||
|
||||
public XmlRpcRequestBuilder(bool useHttps, string host, int port, string urlBase = null)
|
||||
: this(BuildBaseUrl(useHttps, host, port, urlBase))
|
||||
{
|
||||
}
|
||||
|
||||
public override HttpRequestBuilder Clone()
|
||||
{
|
||||
var clone = base.Clone() as XmlRpcRequestBuilder;
|
||||
clone.XmlParameters = new List<object>(XmlParameters);
|
||||
return clone;
|
||||
}
|
||||
|
||||
public XmlRpcRequestBuilder Call(string method, params object[] parameters)
|
||||
{
|
||||
var clone = Clone() as XmlRpcRequestBuilder;
|
||||
clone.XmlMethod = method;
|
||||
clone.XmlParameters = parameters.ToList();
|
||||
return clone;
|
||||
}
|
||||
|
||||
protected override void Apply(HttpRequest request)
|
||||
{
|
||||
base.Apply(request);
|
||||
|
||||
request.Headers.ContentType = XmlRpcContentType;
|
||||
|
||||
var methodCallElements = new List<XElement> { new XElement("methodName", XmlMethod) };
|
||||
|
||||
if (XmlParameters.Any())
|
||||
{
|
||||
var argElements = XmlParameters.Select(x => new XElement("param", ConvertParameter(x))).ToList();
|
||||
var paramsElement = new XElement("params", argElements);
|
||||
methodCallElements.Add(paramsElement);
|
||||
}
|
||||
|
||||
var message = new XDocument(
|
||||
new XDeclaration("1.0", "utf-8", "yes"),
|
||||
new XElement("methodCall", methodCallElements));
|
||||
|
||||
var body = message.ToString();
|
||||
|
||||
Logger.Debug($"Executing remote method: {XmlMethod}");
|
||||
|
||||
Logger.Trace($"methodCall {XmlMethod} body:\n{body}");
|
||||
|
||||
request.SetContent(body);
|
||||
}
|
||||
|
||||
private static XElement ConvertParameter(object value)
|
||||
{
|
||||
XElement data;
|
||||
|
||||
if (value is string s)
|
||||
{
|
||||
data = new XElement("string", s);
|
||||
}
|
||||
else if (value is List<string> l)
|
||||
{
|
||||
data = new XElement("array", new XElement("data", l.Select(x => new XElement("value", new XElement("string", x)))));
|
||||
}
|
||||
else if (value is int i)
|
||||
{
|
||||
data = new XElement("int", i);
|
||||
}
|
||||
else if (value is byte[] bytes)
|
||||
{
|
||||
data = new XElement("base64", Convert.ToBase64String(bytes));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException($"Unhandled argument type {value.GetType().Name}");
|
||||
}
|
||||
|
||||
return new XElement("value", data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -71,7 +71,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
else
|
||||
{
|
||||
dsn = RuntimeInfo.IsProduction
|
||||
? "https://26668106d708406b9ddf5a2bda34fcbb@sentry.servarr.com/9"
|
||||
? "https://39b572f7f3f04899b2c3254c7ac126d0@sentry.servarr.com/9"
|
||||
: "https://998b4673d4c849ccb5277b5966ed5bc2@sentry.servarr.com/10";
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="1.7.4" />
|
||||
<PackageReference Include="Sentry" Version="3.11.1" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.3.3" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.1" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.0" />
|
||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.HealthCheck.Checks;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Indexers.Torznab;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||
{
|
||||
[TestFixture]
|
||||
public class IndexerJackettAllCheckFixture : CoreTest<IndexerJackettAllCheck>
|
||||
{
|
||||
private List<IndexerDefinition> _indexers = new List<IndexerDefinition>();
|
||||
private IndexerDefinition _definition;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
Mocker.GetMock<IIndexerFactory>()
|
||||
.Setup(v => v.All())
|
||||
.Returns(_indexers);
|
||||
|
||||
Mocker.GetMock<ILocalizationService>()
|
||||
.Setup(s => s.GetLocalizedString(It.IsAny<string>()))
|
||||
.Returns("Some Warning Message");
|
||||
}
|
||||
|
||||
private void GivenIndexer(string baseUrl, string apiPath)
|
||||
{
|
||||
var torznabSettings = new TorznabSettings
|
||||
{
|
||||
BaseUrl = baseUrl,
|
||||
ApiPath = apiPath
|
||||
};
|
||||
|
||||
_definition = new IndexerDefinition
|
||||
{
|
||||
Name = "Indexer",
|
||||
ConfigContract = "TorznabSettings",
|
||||
Settings = torznabSettings
|
||||
};
|
||||
|
||||
_indexers.Add(_definition);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_return_error_when_no_indexers()
|
||||
{
|
||||
Subject.Check().ShouldBeOk();
|
||||
}
|
||||
|
||||
[TestCase("http://localhost:9117/", "api")]
|
||||
public void should_not_return_error_when_no_jackett_all_indexers(string baseUrl, string apiPath)
|
||||
{
|
||||
GivenIndexer(baseUrl, apiPath);
|
||||
|
||||
Subject.Check().ShouldBeOk();
|
||||
}
|
||||
|
||||
[TestCase("http://localhost:9117/torznab/all/api", "api")]
|
||||
[TestCase("http://localhost:9117/api/v2.0/indexers/all/results/torznab", "api")]
|
||||
[TestCase("http://localhost:9117/", "/torznab/all/api")]
|
||||
[TestCase("http://localhost:9117/", "/api/v2.0/indexers/all/results/torznab")]
|
||||
public void should_return_warning_if_any_jackett_all_indexer_exists(string baseUrl, string apiPath)
|
||||
{
|
||||
GivenIndexer(baseUrl, apiPath);
|
||||
|
||||
Subject.Check().ShouldBeWarning();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -176,7 +176,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||
public void should_return_ok_on_movie_imported_event()
|
||||
{
|
||||
GivenFolderExists(_downloadRootPath);
|
||||
var importEvent = new MovieImportedEvent(new LocalMovie(), new MovieFile(), new List<MovieFile>(), true, new DownloadClientItem());
|
||||
var importEvent = new MovieImportedEvent(new LocalMovie(), new MovieFile(), true, new DownloadClientItem(), _downloadItem.DownloadId);
|
||||
|
||||
Subject.Check(importEvent).ShouldBeOk();
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace NzbDrone.Core.Test.HistoryTests
|
||||
DownloadId = "abcd"
|
||||
};
|
||||
|
||||
Subject.Handle(new MovieImportedEvent(localMovie, movieFile, new List<MovieFile>(), true, downloadClientItem));
|
||||
Subject.Handle(new MovieImportedEvent(localMovie, movieFile, true, downloadClientItem, "abcd"));
|
||||
|
||||
Mocker.GetMock<IHistoryRepository>()
|
||||
.Verify(v => v.Insert(It.Is<MovieHistory>(h => h.SourceTitle == Path.GetFileNameWithoutExtension(localMovie.Path))));
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using FluentValidation.Results;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.Http;
|
||||
@@ -13,7 +10,6 @@ using NzbDrone.Core.Indexers.Newznab;
|
||||
using NzbDrone.Core.Indexers.Torznab;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
||||
{
|
||||
@@ -35,11 +31,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
||||
}
|
||||
};
|
||||
|
||||
_caps = new NewznabCapabilities
|
||||
{
|
||||
Categories = Builder<NewznabCategory>.CreateListOfSize(1).All().With(t => t.Id = 1).Build().ToList()
|
||||
};
|
||||
|
||||
_caps = new NewznabCapabilities();
|
||||
Mocker.GetMock<INewznabCapabilitiesProvider>()
|
||||
.Setup(v => v.GetCapabilities(It.IsAny<NewznabSettings>()))
|
||||
.Returns(_caps);
|
||||
@@ -142,50 +134,5 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
||||
|
||||
Subject.PageSize.Should().Be(25);
|
||||
}
|
||||
|
||||
[TestCase("http://localhost:9117/", "/api")]
|
||||
public void url_and_api_not_jackett_all(string baseUrl, string apiPath)
|
||||
{
|
||||
var setting = new TorznabSettings()
|
||||
{
|
||||
BaseUrl = baseUrl,
|
||||
ApiPath = apiPath
|
||||
};
|
||||
|
||||
setting.Validate().IsValid.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("http://localhost:9117/torznab/all/api")]
|
||||
[TestCase("http://localhost:9117/api/v2.0/indexers/all/results/torznab")]
|
||||
public void jackett_all_url_should_not_validate(string baseUrl)
|
||||
{
|
||||
var recentFeed = ReadAllText(@"Files/Indexers/Torznab/torznab_tpb.xml");
|
||||
(Subject.Definition.Settings as TorznabSettings).BaseUrl = baseUrl;
|
||||
|
||||
Mocker.GetMock<IHttpClient>()
|
||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get)))
|
||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||
|
||||
var result = new NzbDroneValidationResult(Subject.Test());
|
||||
result.IsValid.Should().BeTrue();
|
||||
result.HasWarnings.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("/torznab/all/api")]
|
||||
[TestCase("/api/v2.0/indexers/all/results/torznab")]
|
||||
public void jackett_all_api_should_not_validate(string apiPath)
|
||||
{
|
||||
var recentFeed = ReadAllText(@"Files/Indexers/Torznab/torznab_tpb.xml");
|
||||
|
||||
Mocker.GetMock<IHttpClient>()
|
||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get)))
|
||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||
|
||||
(Subject.Definition.Settings as TorznabSettings).ApiPath = apiPath;
|
||||
|
||||
var result = new NzbDroneValidationResult(Subject.Test());
|
||||
result.IsValid.Should().BeTrue();
|
||||
result.HasWarnings.Should().BeTrue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,8 +19,6 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaInfo.MediaInfoFormatterTests
|
||||
[TestCase("wmv1, WMV1", "Droned.wmv", "WMV")]
|
||||
[TestCase("wmv2, WMV2", "Droned.wmv", "WMV")]
|
||||
[TestCase("mpeg4, XVID", "", "XviD")]
|
||||
[TestCase("mpeg4, DIVX", "", "DivX")]
|
||||
[TestCase("mpeg4, divx", "", "DivX")]
|
||||
[TestCase("mpeg4, DIV3", "spsm.dvdrip.divx.avi'.", "DivX")]
|
||||
[TestCase("msmpeg4, DIV3", "Exit the Dragon, Enter the Tiger (1976) 360p MPEG Audio.avi", "DivX")]
|
||||
[TestCase("msmpeg4v2, DIV3", "Exit the Dragon, Enter the Tiger (1976) 360p MPEG Audio.avi", "DivX")]
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.MediaFiles.MediaInfo;
|
||||
using NzbDrone.Test.Common;
|
||||
|
||||
namespace NzbDrone.Core.Test.MediaFiles.MediaInfo.MediaInfoFormatterTests
|
||||
{
|
||||
[TestFixture]
|
||||
public class FormatVideoDynamicRangeTypeFixture : TestBase
|
||||
{
|
||||
[TestCase(HdrFormat.None, "")]
|
||||
[TestCase(HdrFormat.Hlg10, "HLG")]
|
||||
[TestCase(HdrFormat.Pq10, "PQ")]
|
||||
[TestCase(HdrFormat.Hdr10, "HDR10")]
|
||||
[TestCase(HdrFormat.Hdr10Plus, "HDR10Plus")]
|
||||
[TestCase(HdrFormat.DolbyVision, "DV")]
|
||||
[TestCase(HdrFormat.DolbyVisionHdr10, "DV HDR10")]
|
||||
[TestCase(HdrFormat.DolbyVisionHlg, "DV HLG")]
|
||||
[TestCase(HdrFormat.DolbyVisionSdr, "DV SDR")]
|
||||
public void should_format_video_dynamic_range_type(HdrFormat format, string expectedVideoDynamicRangeType)
|
||||
{
|
||||
var mediaInfo = new MediaInfoModel
|
||||
{
|
||||
VideoHdrFormat = format,
|
||||
SchemaRevision = 9
|
||||
};
|
||||
|
||||
MediaInfoFormatter.FormatVideoDynamicRangeType(mediaInfo).Should().Be(expectedVideoDynamicRangeType);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -102,38 +102,24 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaInfo
|
||||
info.VideoTransferCharacteristics.Should().Be("bt709");
|
||||
}
|
||||
|
||||
[TestCase(8, "", "", "", null, HdrFormat.None)]
|
||||
[TestCase(10, "", "", "", null, HdrFormat.None)]
|
||||
[TestCase(10, "bt709", "bt709", "", null, HdrFormat.None)]
|
||||
[TestCase(8, "bt2020", "smpte2084", "", null, HdrFormat.None)]
|
||||
[TestCase(10, "bt2020", "bt2020-10", "", null, HdrFormat.Hlg10)]
|
||||
[TestCase(10, "bt2020", "arib-std-b67", "", null, HdrFormat.Hlg10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "", null, HdrFormat.Pq10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.SideData", null, HdrFormat.Pq10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.MasteringDisplayMetadata", null, HdrFormat.Hdr10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.ContentLightLevelMetadata", null, HdrFormat.Hdr10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.HdrDynamicMetadataSpmte2094", null, HdrFormat.Hdr10Plus)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData", null, HdrFormat.DolbyVision)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData", 1, HdrFormat.DolbyVisionHdr10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData", 2, HdrFormat.DolbyVisionSdr)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData", 4, HdrFormat.DolbyVisionHlg)]
|
||||
public void should_detect_hdr_correctly(int bitDepth, string colourPrimaries, string transferFunction, string sideDataTypes, int? doviConfigId, HdrFormat expected)
|
||||
[TestCase(8, "", "", "", HdrFormat.None)]
|
||||
[TestCase(10, "", "", "", HdrFormat.None)]
|
||||
[TestCase(10, "bt709", "bt709", "", HdrFormat.None)]
|
||||
[TestCase(8, "bt2020", "smpte2084", "", HdrFormat.None)]
|
||||
[TestCase(10, "bt2020", "bt2020-10", "", HdrFormat.Hlg10)]
|
||||
[TestCase(10, "bt2020", "arib-std-b67", "", HdrFormat.Hlg10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "", HdrFormat.Pq10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.SideData", HdrFormat.Pq10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.MasteringDisplayMetadata", HdrFormat.Hdr10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.ContentLightLevelMetadata", HdrFormat.Hdr10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.HdrDynamicMetadataSpmte2094", HdrFormat.Hdr10Plus)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.DoviConfigurationRecordSideData", HdrFormat.DolbyVision)]
|
||||
public void should_detect_hdr_correctly(int bitDepth, string colourPrimaries, string transferFunction, string sideDataTypes, HdrFormat expected)
|
||||
{
|
||||
var assembly = Assembly.GetAssembly(typeof(FFProbe));
|
||||
var types = sideDataTypes.Split(",").Select(x => x.Trim()).ToList();
|
||||
var sideData = types.Where(x => x.IsNotNullOrWhiteSpace()).Select(x => assembly.CreateInstance(x)).Cast<SideData>().ToList();
|
||||
|
||||
if (doviConfigId.HasValue)
|
||||
{
|
||||
sideData.ForEach(x =>
|
||||
{
|
||||
if (x.GetType().Name == "DoviConfigurationRecordSideData")
|
||||
{
|
||||
((DoviConfigurationRecordSideData)x).DvBlSignalCompatibilityId = doviConfigId.Value;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var result = VideoFileInfoReader.GetHdrFormat(bitDepth, colourPrimaries, transferFunction, sideData);
|
||||
|
||||
result.Should().Be(expected);
|
||||
|
||||
@@ -259,7 +259,6 @@ namespace NzbDrone.Core.Test.ParserTests
|
||||
[TestCase("Movie.Name.2011.1080p.UHD.BluRay.DD5.1.HDR.x265-CtrlHD.mkv", false)]
|
||||
[TestCase("Movie.Name.2016.German.DTS.DL.1080p.UHDBD.x265-TDO.mkv", false)]
|
||||
[TestCase("Movie.Name.2021.1080p.BDLight.x265-AVCDVD", false)]
|
||||
[TestCase("Random.Title.2010.1080p.HD.DVD.AVC.DDP.5.1-GRouP", false)]
|
||||
public void should_parse_bluray1080p_quality(string title, bool proper)
|
||||
{
|
||||
ParseAndVerifyQuality(title, Source.BLURAY, proper, Resolution.R1080p);
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using Dapper;
|
||||
using FluentMigrator;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(206)]
|
||||
public class multiple_ratings_support : NzbDroneMigrationBase
|
||||
{
|
||||
private readonly JsonSerializerOptions _serializerSettings;
|
||||
|
||||
public multiple_ratings_support()
|
||||
{
|
||||
_serializerSettings = new JsonSerializerOptions
|
||||
{
|
||||
AllowTrailingCommas = true,
|
||||
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
|
||||
PropertyNameCaseInsensitive = true,
|
||||
DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
|
||||
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
||||
WriteIndented = true
|
||||
};
|
||||
}
|
||||
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Execute.Sql("UPDATE CustomFilters SET Filters = Replace(Filters, 'ratings', 'tmdbRating') WHERE Type = 'discoverMovie';");
|
||||
Execute.Sql("UPDATE CustomFilters SET Filters = Replace(Filters, 'ratings', 'tmdbRating') WHERE Type = 'movieIndex';");
|
||||
|
||||
Execute.WithConnection((conn, tran) => FixRatings(conn, tran, "Movies"));
|
||||
Execute.WithConnection((conn, tran) => FixRatings(conn, tran, "ImportListMovies"));
|
||||
}
|
||||
|
||||
private void FixRatings(IDbConnection conn, IDbTransaction tran, string table)
|
||||
{
|
||||
var rows = conn.Query<Movie205>($"SELECT Id, Ratings FROM {table}");
|
||||
|
||||
var corrected = new List<Movie206>();
|
||||
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var newRatings = new Ratings206
|
||||
{
|
||||
Tmdb = new RatingChild206
|
||||
{
|
||||
Votes = 0,
|
||||
Value = 0,
|
||||
Type = RatingType206.User
|
||||
}
|
||||
};
|
||||
|
||||
if (row.Ratings != null)
|
||||
{
|
||||
var oldRatings = JsonSerializer.Deserialize<Ratings205>(row.Ratings, _serializerSettings);
|
||||
|
||||
newRatings.Tmdb.Votes = oldRatings.Votes;
|
||||
newRatings.Tmdb.Value = oldRatings.Value;
|
||||
}
|
||||
|
||||
corrected.Add(new Movie206
|
||||
{
|
||||
Id = row.Id,
|
||||
Ratings = JsonSerializer.Serialize(newRatings, _serializerSettings)
|
||||
});
|
||||
}
|
||||
|
||||
var updateSql = $"UPDATE {table} SET Ratings = @Ratings WHERE Id = @Id";
|
||||
conn.Execute(updateSql, corrected, transaction: tran);
|
||||
}
|
||||
|
||||
private class Movie205
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Ratings { get; set; }
|
||||
}
|
||||
|
||||
private class Ratings205
|
||||
{
|
||||
public int Votes { get; set; }
|
||||
public decimal Value { get; set; }
|
||||
}
|
||||
|
||||
private class Movie206
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Ratings { get; set; }
|
||||
}
|
||||
|
||||
private class Ratings206
|
||||
{
|
||||
public RatingChild206 Tmdb { get; set; }
|
||||
public RatingChild206 Imdb { get; set; }
|
||||
public RatingChild206 Metacritic { get; set; }
|
||||
public RatingChild206 RottenTomatoes { get; set; }
|
||||
}
|
||||
|
||||
private class RatingChild206
|
||||
{
|
||||
public int Votes { get; set; }
|
||||
public decimal Value { get; set; }
|
||||
public RatingType206 Type { get; set; }
|
||||
}
|
||||
|
||||
private enum RatingType206
|
||||
{
|
||||
User
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -179,7 +179,6 @@ namespace NzbDrone.Core.Datastore
|
||||
SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<List<string>>());
|
||||
SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<ParsedMovieInfo>(new QualityIntConverter(), new LanguageIntConverter()));
|
||||
SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<ReleaseInfo>());
|
||||
SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<Ratings>());
|
||||
SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<List<MovieTranslation>>());
|
||||
SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<HashSet<int>>());
|
||||
SqlMapper.AddTypeHandler(new OsPathConverter());
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using CookComputing.XmlRpc;
|
||||
using FluentValidation.Results;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Disk;
|
||||
@@ -90,7 +91,12 @@ namespace NzbDrone.Core.Download.Clients.Aria2
|
||||
var downloadSpeed = long.Parse(torrent.DownloadSpeed);
|
||||
|
||||
var status = DownloadItemStatus.Failed;
|
||||
var title = torrent.Bittorrent?.Name ?? "";
|
||||
var title = "";
|
||||
|
||||
if (torrent.Bittorrent?.ContainsKey("info") == true && ((XmlRpcStruct)torrent.Bittorrent["info"]).ContainsKey("name"))
|
||||
{
|
||||
title = ((XmlRpcStruct)torrent.Bittorrent["info"])["name"].ToString();
|
||||
}
|
||||
|
||||
switch (torrent.Status)
|
||||
{
|
||||
|
||||
@@ -1,161 +1,111 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using System.Xml.XPath;
|
||||
using NzbDrone.Core.Download.Extensions;
|
||||
using CookComputing.XmlRpc;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.Aria2
|
||||
{
|
||||
public class Aria2Fault
|
||||
{
|
||||
public Aria2Fault(XElement element)
|
||||
{
|
||||
foreach (var e in element.XPathSelectElements("./value/struct/member"))
|
||||
{
|
||||
var name = e.ElementAsString("name");
|
||||
if (name == "faultCode")
|
||||
{
|
||||
FaultCode = e.Element("value").ElementAsInt("int");
|
||||
}
|
||||
else if (name == "faultString")
|
||||
{
|
||||
FaultString = e.Element("value").GetStringValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int FaultCode { get; set; }
|
||||
public string FaultString { get; set; }
|
||||
}
|
||||
|
||||
public class Aria2Version
|
||||
{
|
||||
public Aria2Version(XElement element)
|
||||
{
|
||||
foreach (var e in element.XPathSelectElements("./struct/member"))
|
||||
{
|
||||
if (e.ElementAsString("name") == "version")
|
||||
{
|
||||
Version = e.Element("value").GetStringValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
[XmlRpcMember("version")]
|
||||
public string Version;
|
||||
|
||||
public string Version { get; set; }
|
||||
[XmlRpcMember("enabledFeatures")]
|
||||
public string[] EnabledFeatures;
|
||||
}
|
||||
|
||||
public class Aria2Uri
|
||||
{
|
||||
[XmlRpcMember("status")]
|
||||
public string Status;
|
||||
|
||||
[XmlRpcMember("uri")]
|
||||
public string Uri;
|
||||
}
|
||||
|
||||
public class Aria2File
|
||||
{
|
||||
public Aria2File(XElement element)
|
||||
{
|
||||
foreach (var e in element.XPathSelectElements("./struct/member"))
|
||||
{
|
||||
var name = e.ElementAsString("name");
|
||||
[XmlRpcMember("index")]
|
||||
public string Index;
|
||||
|
||||
if (name == "path")
|
||||
{
|
||||
Path = e.Element("value").GetStringValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
[XmlRpcMember("length")]
|
||||
public string Length;
|
||||
|
||||
public string Path { get; set; }
|
||||
}
|
||||
[XmlRpcMember("completedLength")]
|
||||
public string CompletedLength;
|
||||
|
||||
public class Aria2Dict
|
||||
{
|
||||
public Aria2Dict(XElement element)
|
||||
{
|
||||
Dict = new Dictionary<string, string>();
|
||||
[XmlRpcMember("path")]
|
||||
public string Path;
|
||||
|
||||
foreach (var e in element.XPathSelectElements("./struct/member"))
|
||||
{
|
||||
Dict.Add(e.ElementAsString("name"), e.Element("value").GetStringValue());
|
||||
}
|
||||
}
|
||||
[XmlRpcMember("selected")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string Selected;
|
||||
|
||||
public Dictionary<string, string> Dict { get; set; }
|
||||
}
|
||||
|
||||
public class Aria2Bittorrent
|
||||
{
|
||||
public Aria2Bittorrent(XElement element)
|
||||
{
|
||||
foreach (var e in element.Descendants("member"))
|
||||
{
|
||||
if (e.ElementAsString("name") == "name")
|
||||
{
|
||||
Name = e.Element("value").GetStringValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string Name;
|
||||
[XmlRpcMember("uris")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public Aria2Uri[] Uris;
|
||||
}
|
||||
|
||||
public class Aria2Status
|
||||
{
|
||||
public Aria2Status(XElement element)
|
||||
{
|
||||
foreach (var e in element.XPathSelectElements("./struct/member"))
|
||||
{
|
||||
var name = e.ElementAsString("name");
|
||||
[XmlRpcMember("bittorrent")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public XmlRpcStruct Bittorrent;
|
||||
|
||||
if (name == "bittorrent")
|
||||
{
|
||||
Bittorrent = new Aria2Bittorrent(e.Element("value"));
|
||||
}
|
||||
else if (name == "infoHash")
|
||||
{
|
||||
InfoHash = e.Element("value").GetStringValue();
|
||||
}
|
||||
else if (name == "completedLength")
|
||||
{
|
||||
CompletedLength = e.Element("value").GetStringValue();
|
||||
}
|
||||
else if (name == "downloadSpeed")
|
||||
{
|
||||
DownloadSpeed = e.Element("value").GetStringValue();
|
||||
}
|
||||
else if (name == "files")
|
||||
{
|
||||
Files = e.XPathSelectElement("./value/array/data")
|
||||
.Elements()
|
||||
.Select(x => new Aria2File(x))
|
||||
.ToArray();
|
||||
}
|
||||
else if (name == "gid")
|
||||
{
|
||||
Gid = e.Element("value").GetStringValue();
|
||||
}
|
||||
else if (name == "status")
|
||||
{
|
||||
Status = e.Element("value").GetStringValue();
|
||||
}
|
||||
else if (name == "totalLength")
|
||||
{
|
||||
TotalLength = e.Element("value").GetStringValue();
|
||||
}
|
||||
else if (name == "uploadLength")
|
||||
{
|
||||
UploadLength = e.Element("value").GetStringValue();
|
||||
}
|
||||
else if (name == "errorMessage")
|
||||
{
|
||||
ErrorMessage = e.Element("value").GetStringValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
[XmlRpcMember("bitfield")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string Bitfield;
|
||||
|
||||
public Aria2Bittorrent Bittorrent { get; set; }
|
||||
public string InfoHash { get; set; }
|
||||
public string CompletedLength { get; set; }
|
||||
public string DownloadSpeed { get; set; }
|
||||
public Aria2File[] Files { get; set; }
|
||||
public string Gid { get; set; }
|
||||
public string Status { get; set; }
|
||||
public string TotalLength { get; set; }
|
||||
public string UploadLength { get; set; }
|
||||
public string ErrorMessage { get; set; }
|
||||
[XmlRpcMember("infoHash")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string InfoHash;
|
||||
|
||||
[XmlRpcMember("completedLength")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string CompletedLength;
|
||||
|
||||
[XmlRpcMember("connections")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string Connections;
|
||||
|
||||
[XmlRpcMember("dir")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string Dir;
|
||||
|
||||
[XmlRpcMember("downloadSpeed")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string DownloadSpeed;
|
||||
|
||||
[XmlRpcMember("files")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public Aria2File[] Files;
|
||||
|
||||
[XmlRpcMember("gid")]
|
||||
public string Gid;
|
||||
|
||||
[XmlRpcMember("numPieces")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string NumPieces;
|
||||
|
||||
[XmlRpcMember("pieceLength")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string PieceLength;
|
||||
|
||||
[XmlRpcMember("status")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string Status;
|
||||
|
||||
[XmlRpcMember("totalLength")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string TotalLength;
|
||||
|
||||
[XmlRpcMember("uploadLength")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string UploadLength;
|
||||
|
||||
[XmlRpcMember("uploadSpeed")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string UploadSpeed;
|
||||
|
||||
[XmlRpcMember("errorMessage")]
|
||||
[XmlRpcMissingMapping(MappingAction.Ignore)]
|
||||
public string ErrorMessage;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using System.Xml.XPath;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Download.Extensions;
|
||||
using System.Net;
|
||||
using CookComputing.XmlRpc;
|
||||
using NLog;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.Aria2
|
||||
{
|
||||
@@ -19,61 +19,103 @@ namespace NzbDrone.Core.Download.Clients.Aria2
|
||||
Aria2Status GetFromGID(Aria2Settings settings, string gid);
|
||||
}
|
||||
|
||||
public interface IAria2 : IXmlRpcProxy
|
||||
{
|
||||
[XmlRpcMethod("aria2.getVersion")]
|
||||
Aria2Version GetVersion(string token);
|
||||
|
||||
[XmlRpcMethod("aria2.addUri")]
|
||||
string AddUri(string token, string[] uri);
|
||||
|
||||
[XmlRpcMethod("aria2.addTorrent")]
|
||||
string AddTorrent(string token, byte[] torrent);
|
||||
|
||||
[XmlRpcMethod("aria2.forceRemove")]
|
||||
string Remove(string token, string gid);
|
||||
|
||||
[XmlRpcMethod("aria2.removeDownloadResult")]
|
||||
string RemoveResult(string token, string gid);
|
||||
|
||||
[XmlRpcMethod("aria2.tellStatus")]
|
||||
Aria2Status GetFromGid(string token, string gid);
|
||||
|
||||
[XmlRpcMethod("aria2.getGlobalOption")]
|
||||
XmlRpcStruct GetGlobalOption(string token);
|
||||
|
||||
[XmlRpcMethod("aria2.tellActive")]
|
||||
Aria2Status[] GetActive(string token);
|
||||
|
||||
[XmlRpcMethod("aria2.tellWaiting")]
|
||||
Aria2Status[] GetWaiting(string token, int offset, int num);
|
||||
|
||||
[XmlRpcMethod("aria2.tellStopped")]
|
||||
Aria2Status[] GetStopped(string token, int offset, int num);
|
||||
}
|
||||
|
||||
public class Aria2Proxy : IAria2Proxy
|
||||
{
|
||||
private readonly IHttpClient _httpClient;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public Aria2Proxy(IHttpClient httpClient)
|
||||
public Aria2Proxy(Logger logger)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
private string GetToken(Aria2Settings settings)
|
||||
{
|
||||
return $"token:{settings?.SecretToken}";
|
||||
}
|
||||
|
||||
private string GetURL(Aria2Settings settings)
|
||||
{
|
||||
return $"http{(settings.UseSsl ? "s" : "")}://{settings.Host}:{settings.Port}{settings.RpcPath}";
|
||||
}
|
||||
|
||||
public string GetVersion(Aria2Settings settings)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "aria2.getVersion", GetToken(settings));
|
||||
_logger.Trace("> aria2.getVersion");
|
||||
|
||||
var element = response.XPathSelectElement("./methodResponse/params/param/value");
|
||||
var client = BuildClient(settings);
|
||||
var version = ExecuteRequest(() => client.GetVersion(GetToken(settings)));
|
||||
|
||||
var version = new Aria2Version(element);
|
||||
_logger.Trace("< aria2.getVersion");
|
||||
|
||||
return version.Version;
|
||||
}
|
||||
|
||||
public Aria2Status GetFromGID(Aria2Settings settings, string gid)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "aria2.tellStatus", GetToken(settings), gid);
|
||||
_logger.Trace("> aria2.tellStatus");
|
||||
|
||||
var element = response.XPathSelectElement("./methodResponse/params/param/value");
|
||||
var client = BuildClient(settings);
|
||||
var found = ExecuteRequest(() => client.GetFromGid(GetToken(settings), gid));
|
||||
|
||||
return new Aria2Status(element);
|
||||
}
|
||||
_logger.Trace("< aria2.tellStatus");
|
||||
|
||||
private List<Aria2Status> GetTorrentsMethod(Aria2Settings settings, string method, params object[] args)
|
||||
{
|
||||
var allArgs = new List<object> { GetToken(settings) };
|
||||
if (args.Any())
|
||||
{
|
||||
allArgs.AddRange(args);
|
||||
}
|
||||
|
||||
var response = ExecuteRequest(settings, method, allArgs.ToArray());
|
||||
|
||||
var element = response.XPathSelectElement("./methodResponse/params/param/value/array/data");
|
||||
|
||||
var torrents = element?.Elements()
|
||||
.Select(x => new Aria2Status(x))
|
||||
.ToList()
|
||||
?? new List<Aria2Status>();
|
||||
return torrents;
|
||||
return found;
|
||||
}
|
||||
|
||||
public List<Aria2Status> GetTorrents(Aria2Settings settings)
|
||||
{
|
||||
var active = GetTorrentsMethod(settings, "aria2.tellActive");
|
||||
_logger.Trace("> aria2.tellActive");
|
||||
|
||||
var waiting = GetTorrentsMethod(settings, "aria2.tellWaiting", 0, 10 * 1024);
|
||||
var client = BuildClient(settings);
|
||||
|
||||
var stopped = GetTorrentsMethod(settings, "aria2.tellStopped", 0, 10 * 1024);
|
||||
var active = ExecuteRequest(() => client.GetActive(GetToken(settings)));
|
||||
|
||||
_logger.Trace("< aria2.tellActive");
|
||||
|
||||
_logger.Trace("> aria2.tellWaiting");
|
||||
|
||||
var waiting = ExecuteRequest(() => client.GetWaiting(GetToken(settings), 0, 10 * 1024));
|
||||
|
||||
_logger.Trace("< aria2.tellWaiting");
|
||||
|
||||
_logger.Trace("> aria2.tellStopped");
|
||||
|
||||
var stopped = ExecuteRequest(() => client.GetStopped(GetToken(settings), 0, 10 * 1024));
|
||||
|
||||
_logger.Trace("< aria2.tellStopped");
|
||||
|
||||
var items = new List<Aria2Status>();
|
||||
|
||||
@@ -86,79 +128,98 @@ namespace NzbDrone.Core.Download.Clients.Aria2
|
||||
|
||||
public Dictionary<string, string> GetGlobals(Aria2Settings settings)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "aria2.getGlobalOption", GetToken(settings));
|
||||
_logger.Trace("> aria2.getGlobalOption");
|
||||
|
||||
var element = response.XPathSelectElement("./methodResponse/params/param/value");
|
||||
var client = BuildClient(settings);
|
||||
var options = ExecuteRequest(() => client.GetGlobalOption(GetToken(settings)));
|
||||
|
||||
var result = new Aria2Dict(element);
|
||||
_logger.Trace("< aria2.getGlobalOption");
|
||||
|
||||
return result.Dict;
|
||||
var ret = new Dictionary<string, string>();
|
||||
|
||||
foreach (DictionaryEntry option in options)
|
||||
{
|
||||
ret.Add(option.Key.ToString(), option.Value?.ToString());
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public string AddMagnet(Aria2Settings settings, string magnet)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "aria2.addUri", GetToken(settings), new List<string> { magnet });
|
||||
_logger.Trace("> aria2.addUri");
|
||||
|
||||
var gid = response.GetStringResponse();
|
||||
var client = BuildClient(settings);
|
||||
var gid = ExecuteRequest(() => client.AddUri(GetToken(settings), new[] { magnet }));
|
||||
|
||||
_logger.Trace("< aria2.addUri");
|
||||
|
||||
return gid;
|
||||
}
|
||||
|
||||
public string AddTorrent(Aria2Settings settings, byte[] torrent)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "aria2.addTorrent", GetToken(settings), torrent);
|
||||
_logger.Trace("> aria2.addTorrent");
|
||||
|
||||
var gid = response.GetStringResponse();
|
||||
var client = BuildClient(settings);
|
||||
var gid = ExecuteRequest(() => client.AddTorrent(GetToken(settings), torrent));
|
||||
|
||||
_logger.Trace("< aria2.addTorrent");
|
||||
|
||||
return gid;
|
||||
}
|
||||
|
||||
public bool RemoveTorrent(Aria2Settings settings, string gid)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "aria2.forceRemove", GetToken(settings), gid);
|
||||
_logger.Trace("> aria2.forceRemove");
|
||||
|
||||
var gidres = response.GetStringResponse();
|
||||
var client = BuildClient(settings);
|
||||
var gidres = ExecuteRequest(() => client.Remove(GetToken(settings), gid));
|
||||
|
||||
_logger.Trace("< aria2.forceRemove");
|
||||
|
||||
return gid == gidres;
|
||||
}
|
||||
|
||||
public bool RemoveCompletedTorrent(Aria2Settings settings, string gid)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "aria2.removeDownloadResult", GetToken(settings), gid);
|
||||
_logger.Trace("> aria2.removeDownloadResult");
|
||||
|
||||
var result = response.GetStringResponse();
|
||||
var client = BuildClient(settings);
|
||||
var result = ExecuteRequest(() => client.RemoveResult(GetToken(settings), gid));
|
||||
|
||||
_logger.Trace("< aria2.removeDownloadResult");
|
||||
|
||||
return result == "OK";
|
||||
}
|
||||
|
||||
private string GetToken(Aria2Settings settings)
|
||||
private IAria2 BuildClient(Aria2Settings settings)
|
||||
{
|
||||
return $"token:{settings?.SecretToken}";
|
||||
var client = XmlRpcProxyGen.Create<IAria2>();
|
||||
client.Url = GetURL(settings);
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
private XDocument ExecuteRequest(Aria2Settings settings, string methodName, params object[] args)
|
||||
private T ExecuteRequest<T>(Func<T> task)
|
||||
{
|
||||
var requestBuilder = new XmlRpcRequestBuilder(settings.UseSsl, settings.Host, settings.Port, settings.RpcPath)
|
||||
try
|
||||
{
|
||||
LogResponseContent = true,
|
||||
};
|
||||
|
||||
var request = requestBuilder.Call(methodName, args).Build();
|
||||
|
||||
var response = _httpClient.Execute(request);
|
||||
|
||||
var doc = XDocument.Parse(response.Content);
|
||||
|
||||
var faultElement = doc.XPathSelectElement("./methodResponse/fault");
|
||||
|
||||
if (faultElement != null)
|
||||
{
|
||||
var fault = new Aria2Fault(faultElement);
|
||||
|
||||
throw new DownloadClientException($"Aria2 returned error code {fault.FaultCode}: {fault.FaultString}");
|
||||
return task();
|
||||
}
|
||||
catch (XmlRpcServerException ex)
|
||||
{
|
||||
throw new DownloadClientException("Unable to connect to aria2, please check your settings", ex);
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
if (ex.Status == WebExceptionStatus.TrustFailure)
|
||||
{
|
||||
throw new DownloadClientUnavailableException("Unable to connect to aria2, certificate validation failed.", ex);
|
||||
}
|
||||
|
||||
return doc;
|
||||
throw new DownloadClientUnavailableException("Unable to connect to aria2, please check your settings", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ using System.Linq;
|
||||
using FluentValidation.Results;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Download.Clients.Flood.Models;
|
||||
@@ -234,17 +233,10 @@ namespace NzbDrone.Core.Download.Clients.Flood
|
||||
|
||||
public override DownloadClientInfo GetStatus()
|
||||
{
|
||||
var destDir = _proxy.GetClientSettings(Settings).DirectoryDefault;
|
||||
|
||||
if (Settings.Destination.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
destDir = Settings.Destination;
|
||||
}
|
||||
|
||||
return new DownloadClientInfo
|
||||
{
|
||||
IsLocalhost = Settings.Host == "127.0.0.1" || Settings.Host == "::1" || Settings.Host == "localhost",
|
||||
OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, new OsPath(destDir)) }
|
||||
OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, new OsPath(Settings.Destination)) }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ namespace NzbDrone.Core.Download.Clients.Flood
|
||||
Dictionary<string, Torrent> GetTorrents(FloodSettings settings);
|
||||
List<string> GetTorrentContentPaths(string hash, FloodSettings settings);
|
||||
void SetTorrentsTags(string hash, IEnumerable<string> tags, FloodSettings settings);
|
||||
FloodClientSettings GetClientSettings(FloodSettings settings);
|
||||
}
|
||||
|
||||
public class FloodProxy : IFloodProxy
|
||||
@@ -211,14 +210,5 @@ namespace NzbDrone.Core.Download.Clients.Flood
|
||||
|
||||
HandleRequest(tagsRequest, settings);
|
||||
}
|
||||
|
||||
public FloodClientSettings GetClientSettings(FloodSettings settings)
|
||||
{
|
||||
var contentsRequest = BuildRequest(settings).Resource($"/client/settings").Build();
|
||||
|
||||
contentsRequest.Method = HttpMethod.Get;
|
||||
|
||||
return Json.Deserialize<FloodClientSettings>(HandleRequest(contentsRequest, settings).Content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
namespace NzbDrone.Core.Download.Clients.Flood.Types
|
||||
{
|
||||
public class FloodClientSettings
|
||||
{
|
||||
public string DirectoryDefault { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -73,7 +73,7 @@ namespace NzbDrone.Core.Download.Clients.Hadouken
|
||||
baseUrl = HttpUri.CombinePath(baseUrl, "api");
|
||||
var requestBuilder = new JsonRpcRequestBuilder(baseUrl, method, parameters);
|
||||
requestBuilder.LogResponseContent = true;
|
||||
requestBuilder.NetworkCredential = new BasicNetworkCredential(settings.Username, settings.Password);
|
||||
requestBuilder.NetworkCredential = new NetworkCredential(settings.Username, settings.Password);
|
||||
requestBuilder.Headers.Add("Accept-Encoding", "gzip,deflate");
|
||||
|
||||
var httpRequest = requestBuilder.Build();
|
||||
|
||||
@@ -229,7 +229,7 @@ namespace NzbDrone.Core.Download.Clients.Nzbget
|
||||
|
||||
var requestBuilder = new JsonRpcRequestBuilder(baseUrl, method, parameters);
|
||||
requestBuilder.LogResponseContent = true;
|
||||
requestBuilder.NetworkCredential = new BasicNetworkCredential(settings.Username, settings.Password);
|
||||
requestBuilder.NetworkCredential = new NetworkCredential(settings.Username, settings.Password);
|
||||
|
||||
var httpRequest = requestBuilder.Build();
|
||||
|
||||
|
||||
@@ -368,7 +368,9 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
|
||||
if (Settings.MovieCategory.IsNotNullOrWhiteSpace() && version >= Version.Parse("2.0"))
|
||||
{
|
||||
if (Proxy.GetLabels(Settings).TryGetValue(Settings.MovieCategory, out var label) && label.SavePath.IsNotNullOrWhiteSpace())
|
||||
var label = Proxy.GetLabels(Settings)[Settings.MovieCategory];
|
||||
|
||||
if (label.SavePath.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
var labelDir = new OsPath(label.SavePath);
|
||||
|
||||
|
||||
@@ -293,7 +293,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
var requestBuilder = new HttpRequestBuilder(settings.UseSsl, settings.Host, settings.Port, settings.UrlBase)
|
||||
{
|
||||
LogResponseContent = true,
|
||||
NetworkCredential = new BasicNetworkCredential(settings.Username, settings.Password)
|
||||
NetworkCredential = new NetworkCredential(settings.Username, settings.Password)
|
||||
};
|
||||
return requestBuilder;
|
||||
}
|
||||
|
||||
@@ -335,7 +335,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
var requestBuilder = new HttpRequestBuilder(settings.UseSsl, settings.Host, settings.Port, settings.UrlBase)
|
||||
{
|
||||
LogResponseContent = true,
|
||||
NetworkCredential = new BasicNetworkCredential(settings.Username, settings.Password)
|
||||
NetworkCredential = new NetworkCredential(settings.Username, settings.Password)
|
||||
};
|
||||
return requestBuilder;
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
.Accept(HttpAccept.Json);
|
||||
|
||||
requestBuilder.LogResponseContent = true;
|
||||
requestBuilder.NetworkCredential = new BasicNetworkCredential(settings.Username, settings.Password);
|
||||
requestBuilder.NetworkCredential = new NetworkCredential(settings.Username, settings.Password);
|
||||
requestBuilder.AllowAutoRedirect = false;
|
||||
|
||||
return requestBuilder;
|
||||
|
||||
@@ -127,12 +127,6 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ignore torrents with an empty path
|
||||
if (torrent.Path.IsNullOrWhiteSpace())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (torrent.Path.StartsWith("."))
|
||||
{
|
||||
throw new DownloadClientException("Download paths must be absolute. Please specify variable \"directory\" in rTorrent.");
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
using System.Xml.Linq;
|
||||
using System.Xml.XPath;
|
||||
using NzbDrone.Core.Download.Extensions;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
{
|
||||
public class RTorrentFault
|
||||
{
|
||||
public RTorrentFault(XElement element)
|
||||
{
|
||||
foreach (var e in element.XPathSelectElements("./value/struct/member"))
|
||||
{
|
||||
var name = e.ElementAsString("name");
|
||||
if (name == "faultCode")
|
||||
{
|
||||
FaultCode = e.Element("value").GetIntValue();
|
||||
}
|
||||
else if (name == "faultString")
|
||||
{
|
||||
FaultString = e.Element("value").GetStringValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int FaultCode { get; set; }
|
||||
public string FaultString { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Xml.Linq;
|
||||
using System.Xml.XPath;
|
||||
using CookComputing.XmlRpc;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Download.Extensions;
|
||||
using NzbDrone.Common.Serializer;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
{
|
||||
@@ -23,67 +21,125 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
void PushTorrentUniqueView(string hash, string view, RTorrentSettings settings);
|
||||
}
|
||||
|
||||
public interface IRTorrent : IXmlRpcProxy
|
||||
{
|
||||
[XmlRpcMethod("d.multicall2")]
|
||||
object[] TorrentMulticall(params string[] parameters);
|
||||
|
||||
[XmlRpcMethod("load.normal")]
|
||||
int LoadNormal(string target, string data, params string[] commands);
|
||||
|
||||
[XmlRpcMethod("load.start")]
|
||||
int LoadStart(string target, string data, params string[] commands);
|
||||
|
||||
[XmlRpcMethod("load.raw")]
|
||||
int LoadRaw(string target, byte[] data, params string[] commands);
|
||||
|
||||
[XmlRpcMethod("load.raw_start")]
|
||||
int LoadRawStart(string target, byte[] data, params string[] commands);
|
||||
|
||||
[XmlRpcMethod("d.erase")]
|
||||
int Remove(string hash);
|
||||
|
||||
[XmlRpcMethod("d.name")]
|
||||
string GetName(string hash);
|
||||
|
||||
[XmlRpcMethod("d.custom1.set")]
|
||||
string SetLabel(string hash, string label);
|
||||
|
||||
[XmlRpcMethod("d.views.push_back_unique")]
|
||||
int PushUniqueView(string hash, string view);
|
||||
|
||||
[XmlRpcMethod("system.client_version")]
|
||||
string GetVersion();
|
||||
}
|
||||
|
||||
public class RTorrentProxy : IRTorrentProxy
|
||||
{
|
||||
private readonly IHttpClient _httpClient;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public RTorrentProxy(IHttpClient httpClient)
|
||||
public RTorrentProxy(Logger logger)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public string GetVersion(RTorrentSettings settings)
|
||||
{
|
||||
var document = ExecuteRequest(settings, "system.client_version");
|
||||
_logger.Debug("Executing remote method: system.client_version");
|
||||
|
||||
return document.Descendants("string").FirstOrDefault()?.Value ?? "0.0.0";
|
||||
var client = BuildClient(settings);
|
||||
var version = ExecuteRequest(() => client.GetVersion());
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
public List<RTorrentTorrent> GetTorrents(RTorrentSettings settings)
|
||||
{
|
||||
var document = ExecuteRequest(settings,
|
||||
"d.multicall2",
|
||||
"",
|
||||
"",
|
||||
"d.name=", // string
|
||||
"d.hash=", // string
|
||||
"d.base_path=", // string
|
||||
"d.custom1=", // string (label)
|
||||
"d.size_bytes=", // long
|
||||
"d.left_bytes=", // long
|
||||
"d.down.rate=", // long (in bytes / s)
|
||||
"d.ratio=", // long
|
||||
"d.is_open=", // long
|
||||
"d.is_active=", // long
|
||||
"d.complete=", //long
|
||||
"d.timestamp.finished="); // long (unix timestamp)
|
||||
_logger.Debug("Executing remote method: d.multicall2");
|
||||
|
||||
var torrents = document.XPathSelectElement("./methodResponse/params/param/value/array/data")
|
||||
?.Elements()
|
||||
.Select(x => new RTorrentTorrent(x))
|
||||
.ToList()
|
||||
?? new List<RTorrentTorrent>();
|
||||
var client = BuildClient(settings);
|
||||
var ret = ExecuteRequest(() => client.TorrentMulticall(
|
||||
"",
|
||||
"",
|
||||
"d.name=", // string
|
||||
"d.hash=", // string
|
||||
"d.base_path=", // string
|
||||
"d.custom1=", // string (label)
|
||||
"d.size_bytes=", // long
|
||||
"d.left_bytes=", // long
|
||||
"d.down.rate=", // long (in bytes / s)
|
||||
"d.ratio=", // long
|
||||
"d.is_open=", // long
|
||||
"d.is_active=", // long
|
||||
"d.complete=", //long
|
||||
"d.timestamp.finished=")); // long (unix timestamp)
|
||||
|
||||
return torrents;
|
||||
_logger.Trace(ret.ToJson());
|
||||
|
||||
var items = new List<RTorrentTorrent>();
|
||||
|
||||
foreach (object[] torrent in ret)
|
||||
{
|
||||
var labelDecoded = System.Web.HttpUtility.UrlDecode((string)torrent[3]);
|
||||
|
||||
var item = new RTorrentTorrent();
|
||||
item.Name = (string)torrent[0];
|
||||
item.Hash = (string)torrent[1];
|
||||
item.Path = (string)torrent[2];
|
||||
item.Category = labelDecoded;
|
||||
item.TotalSize = (long)torrent[4];
|
||||
item.RemainingSize = (long)torrent[5];
|
||||
item.DownRate = (long)torrent[6];
|
||||
item.Ratio = (long)torrent[7];
|
||||
item.IsOpen = Convert.ToBoolean((long)torrent[8]);
|
||||
item.IsActive = Convert.ToBoolean((long)torrent[9]);
|
||||
item.IsFinished = Convert.ToBoolean((long)torrent[10]);
|
||||
item.FinishedTime = (long)torrent[11];
|
||||
|
||||
items.Add(item);
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
public void AddTorrentFromUrl(string torrentUrl, string label, RTorrentPriority priority, string directory, RTorrentSettings settings)
|
||||
{
|
||||
var args = new List<object> { "", torrentUrl };
|
||||
args.AddRange(GetCommands(label, priority, directory));
|
||||
|
||||
XDocument response;
|
||||
|
||||
if (settings.AddStopped)
|
||||
var client = BuildClient(settings);
|
||||
var response = ExecuteRequest(() =>
|
||||
{
|
||||
response = ExecuteRequest(settings, "load.normal", args.ToArray());
|
||||
}
|
||||
else
|
||||
{
|
||||
response = ExecuteRequest(settings, "load.start", args.ToArray());
|
||||
}
|
||||
if (settings.AddStopped)
|
||||
{
|
||||
_logger.Debug("Executing remote method: load.normal");
|
||||
return client.LoadNormal("", torrentUrl, GetCommands(label, priority, directory));
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Debug("Executing remote method: load.start");
|
||||
return client.LoadStart("", torrentUrl, GetCommands(label, priority, directory));
|
||||
}
|
||||
});
|
||||
|
||||
if (response.GetIntResponse() != 0)
|
||||
if (response != 0)
|
||||
{
|
||||
throw new DownloadClientException("Could not add torrent: {0}.", torrentUrl);
|
||||
}
|
||||
@@ -91,21 +147,22 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
|
||||
public void AddTorrentFromFile(string fileName, byte[] fileContent, string label, RTorrentPriority priority, string directory, RTorrentSettings settings)
|
||||
{
|
||||
var args = new List<object> { "", fileContent };
|
||||
args.AddRange(GetCommands(label, priority, directory));
|
||||
|
||||
XDocument response;
|
||||
|
||||
if (settings.AddStopped)
|
||||
var client = BuildClient(settings);
|
||||
var response = ExecuteRequest(() =>
|
||||
{
|
||||
response = ExecuteRequest(settings, "load.raw", args.ToArray());
|
||||
}
|
||||
else
|
||||
{
|
||||
response = ExecuteRequest(settings, "load.raw_start", args.ToArray());
|
||||
}
|
||||
if (settings.AddStopped)
|
||||
{
|
||||
_logger.Debug("Executing remote method: load.raw");
|
||||
return client.LoadRaw("", fileContent, GetCommands(label, priority, directory));
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Debug("Executing remote method: load.raw_start");
|
||||
return client.LoadRawStart("", fileContent, GetCommands(label, priority, directory));
|
||||
}
|
||||
});
|
||||
|
||||
if (response.GetIntResponse() != 0)
|
||||
if (response != 0)
|
||||
{
|
||||
throw new DownloadClientException("Could not add torrent: {0}.", fileName);
|
||||
}
|
||||
@@ -113,9 +170,12 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
|
||||
public void SetTorrentLabel(string hash, string label, RTorrentSettings settings)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "d.custom1.set", hash, label);
|
||||
_logger.Debug("Executing remote method: d.custom1.set");
|
||||
|
||||
if (response.GetStringResponse() != label)
|
||||
var client = BuildClient(settings);
|
||||
var response = ExecuteRequest(() => client.SetLabel(hash, label));
|
||||
|
||||
if (response != label)
|
||||
{
|
||||
throw new DownloadClientException("Could not set label to {1} for torrent: {0}.", hash, label);
|
||||
}
|
||||
@@ -123,9 +183,11 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
|
||||
public void PushTorrentUniqueView(string hash, string view, RTorrentSettings settings)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "d.views.push_back_unique", hash, view);
|
||||
_logger.Debug("Executing remote method: d.views.push_back_unique");
|
||||
|
||||
if (response.GetIntResponse() != 0)
|
||||
var client = BuildClient(settings);
|
||||
var response = ExecuteRequest(() => client.PushUniqueView(hash, view));
|
||||
if (response != 0)
|
||||
{
|
||||
throw new DownloadClientException("Could not push unique view {0} for torrent: {1}.", view, hash);
|
||||
}
|
||||
@@ -133,9 +195,12 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
|
||||
public void RemoveTorrent(string hash, RTorrentSettings settings)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "d.erase", hash);
|
||||
_logger.Debug("Executing remote method: d.erase");
|
||||
|
||||
if (response.GetIntResponse() != 0)
|
||||
var client = BuildClient(settings);
|
||||
var response = ExecuteRequest(() => client.Remove(hash));
|
||||
|
||||
if (response != 0)
|
||||
{
|
||||
throw new DownloadClientException("Could not remove torrent: {0}.", hash);
|
||||
}
|
||||
@@ -143,10 +208,13 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
|
||||
public bool HasHashTorrent(string hash, RTorrentSettings settings)
|
||||
{
|
||||
_logger.Debug("Executing remote method: d.name");
|
||||
|
||||
var client = BuildClient(settings);
|
||||
|
||||
try
|
||||
{
|
||||
var response = ExecuteRequest(settings, "d.name", hash);
|
||||
var name = response.GetStringResponse();
|
||||
var name = ExecuteRequest(() => client.GetName(hash));
|
||||
|
||||
if (name.IsNullOrWhiteSpace())
|
||||
{
|
||||
@@ -185,34 +253,45 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
return result.ToArray();
|
||||
}
|
||||
|
||||
private XDocument ExecuteRequest(RTorrentSettings settings, string methodName, params object[] args)
|
||||
private IRTorrent BuildClient(RTorrentSettings settings)
|
||||
{
|
||||
var requestBuilder = new XmlRpcRequestBuilder(settings.UseSsl, settings.Host, settings.Port, settings.UrlBase)
|
||||
{
|
||||
LogResponseContent = true,
|
||||
};
|
||||
var client = XmlRpcProxyGen.Create<IRTorrent>();
|
||||
|
||||
client.Url = string.Format(@"{0}://{1}:{2}/{3}",
|
||||
settings.UseSsl ? "https" : "http",
|
||||
settings.Host,
|
||||
settings.Port,
|
||||
settings.UrlBase);
|
||||
|
||||
client.EnableCompression = true;
|
||||
|
||||
if (!settings.Username.IsNullOrWhiteSpace())
|
||||
{
|
||||
requestBuilder.NetworkCredential = new NetworkCredential(settings.Username, settings.Password);
|
||||
client.Credentials = new NetworkCredential(settings.Username, settings.Password);
|
||||
}
|
||||
|
||||
var request = requestBuilder.Call(methodName, args).Build();
|
||||
return client;
|
||||
}
|
||||
|
||||
var response = _httpClient.Execute(request);
|
||||
|
||||
var doc = XDocument.Parse(response.Content);
|
||||
|
||||
var faultElement = doc.XPathSelectElement("./methodResponse/fault");
|
||||
|
||||
if (faultElement != null)
|
||||
private T ExecuteRequest<T>(Func<T> task)
|
||||
{
|
||||
try
|
||||
{
|
||||
var fault = new RTorrentFault(faultElement);
|
||||
|
||||
throw new DownloadClientException($"rTorrent returned error code {fault.FaultCode}: {fault.FaultString}");
|
||||
return task();
|
||||
}
|
||||
catch (XmlRpcServerException ex)
|
||||
{
|
||||
throw new DownloadClientException("Unable to connect to rTorrent, please check your settings", ex);
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
if (ex.Status == WebExceptionStatus.TrustFailure)
|
||||
{
|
||||
throw new DownloadClientUnavailableException("Unable to connect to rTorrent, certificate validation failed.", ex);
|
||||
}
|
||||
|
||||
return doc;
|
||||
throw new DownloadClientUnavailableException("Unable to connect to rTorrent, please check your settings", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,35 +1,7 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Xml.Linq;
|
||||
using NzbDrone.Core.Download.Extensions;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
{
|
||||
public class RTorrentTorrent
|
||||
{
|
||||
public RTorrentTorrent()
|
||||
{
|
||||
}
|
||||
|
||||
public RTorrentTorrent(XElement element)
|
||||
{
|
||||
var data = element.Descendants("value").ToList();
|
||||
|
||||
Name = data[0].GetStringValue();
|
||||
Hash = data[1].GetStringValue();
|
||||
Path = data[2].GetStringValue();
|
||||
Category = HttpUtility.UrlDecode(data[3].GetStringValue());
|
||||
TotalSize = data[4].GetLongValue();
|
||||
RemainingSize = data[5].GetLongValue();
|
||||
DownRate = data[6].GetLongValue();
|
||||
Ratio = data[7].GetLongValue();
|
||||
IsOpen = Convert.ToBoolean(data[8].GetLongValue());
|
||||
IsActive = Convert.ToBoolean(data[9].GetLongValue());
|
||||
IsFinished = Convert.ToBoolean(data[10].GetLongValue());
|
||||
FinishedTime = data[11].GetLongValue();
|
||||
}
|
||||
|
||||
public string Name { get; set; }
|
||||
public string Hash { get; set; }
|
||||
public string Path { get; set; }
|
||||
|
||||
@@ -196,7 +196,7 @@ namespace NzbDrone.Core.Download.Clients.UTorrent
|
||||
.Accept(HttpAccept.Json);
|
||||
|
||||
requestBuilder.LogResponseContent = true;
|
||||
requestBuilder.NetworkCredential = new BasicNetworkCredential(settings.Username, settings.Password);
|
||||
requestBuilder.NetworkCredential = new NetworkCredential(settings.Username, settings.Password);
|
||||
|
||||
return requestBuilder;
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace NzbDrone.Core.Download.Clients.UTorrent
|
||||
[FieldDefinition(6, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
||||
public string MovieCategory { get; set; }
|
||||
|
||||
[FieldDefinition(7, Label = "Post-Import Category", Type = FieldType.Textbox, Advanced = true, HelpText = "Category for Radarr to set after it has imported the download. Radarr will not remove the torrent if seeding has finished. Leave blank to keep same category.")]
|
||||
[FieldDefinition(7, Label = "Post-Import Category", Type = FieldType.Textbox, Advanced = true, HelpText = "Category for Radarr to set after it has imported the download. Sonarr will not remove the torrent if seeding has finished. Leave blank to keep same category.")]
|
||||
public string MovieImportedCategory { get; set; }
|
||||
|
||||
[FieldDefinition(8, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "Priority to use when grabbing movies that aired within the last 21 days")]
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using System.Xml.XPath;
|
||||
|
||||
namespace NzbDrone.Core.Download.Extensions
|
||||
{
|
||||
internal static class XmlExtensions
|
||||
{
|
||||
public static string GetStringValue(this XElement element)
|
||||
{
|
||||
return element.ElementAsString("string");
|
||||
}
|
||||
|
||||
public static long GetLongValue(this XElement element)
|
||||
{
|
||||
return element.ElementAsLong("i8");
|
||||
}
|
||||
|
||||
public static int GetIntValue(this XElement element)
|
||||
{
|
||||
return element.ElementAsInt("i4");
|
||||
}
|
||||
|
||||
public static string ElementAsString(this XElement element, XName name, bool trim = false)
|
||||
{
|
||||
var el = element.Element(name);
|
||||
|
||||
return string.IsNullOrWhiteSpace(el?.Value)
|
||||
? null
|
||||
: (trim ? el.Value.Trim() : el.Value);
|
||||
}
|
||||
|
||||
public static long ElementAsLong(this XElement element, XName name)
|
||||
{
|
||||
var el = element.Element(name);
|
||||
return long.TryParse(el?.Value, out long value) ? value : default;
|
||||
}
|
||||
|
||||
public static int ElementAsInt(this XElement element, XName name)
|
||||
{
|
||||
var el = element.Element(name);
|
||||
return int.TryParse(el?.Value, out int value) ? value : default(int);
|
||||
}
|
||||
|
||||
public static int GetIntResponse(this XDocument document)
|
||||
{
|
||||
return document.XPathSelectElement("./methodResponse/params/param/value").GetIntValue();
|
||||
}
|
||||
|
||||
public static string GetStringResponse(this XDocument document)
|
||||
{
|
||||
return document.XPathSelectElement("./methodResponse/params/param/value").GetStringValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -75,7 +75,7 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.MediaBrowser
|
||||
movieElement.Add(new XElement("Overview", movie.Overview));
|
||||
movieElement.Add(new XElement("LocalTitle", movie.Title));
|
||||
|
||||
movieElement.Add(new XElement("Rating", movie.Ratings.Tmdb?.Value ?? 0));
|
||||
movieElement.Add(new XElement("Rating", movie.Ratings.Value));
|
||||
movieElement.Add(new XElement("ProductionYear", movie.Year));
|
||||
movieElement.Add(new XElement("RunningTime", movie.Runtime));
|
||||
movieElement.Add(new XElement("IMDB", movie.ImdbId));
|
||||
|
||||
@@ -154,32 +154,19 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc
|
||||
|
||||
details.Add(new XElement("sorttitle", movie.SortTitle));
|
||||
|
||||
if (movie.Ratings.Tmdb?.Votes > 0 || movie.Ratings.Imdb?.Votes > 0)
|
||||
if (movie.Ratings != null && movie.Ratings.Votes > 0)
|
||||
{
|
||||
var setRating = new XElement("ratings");
|
||||
|
||||
if (movie.Ratings.Tmdb?.Votes > 0)
|
||||
{
|
||||
var setRatethemoviedb = new XElement("rating", new XAttribute("name", "themoviedb"), new XAttribute("max", "10"), new XAttribute("default", "true"));
|
||||
setRatethemoviedb.Add(new XElement("value", movie.Ratings.Tmdb.Value));
|
||||
setRatethemoviedb.Add(new XElement("votes", movie.Ratings.Tmdb.Votes));
|
||||
setRating.Add(setRatethemoviedb);
|
||||
}
|
||||
|
||||
if (movie.Ratings.Imdb?.Votes > 0)
|
||||
{
|
||||
var setRateImdb = new XElement("rating", new XAttribute("name", "imdb"), new XAttribute("max", "10"));
|
||||
setRateImdb.Add(new XElement("value", movie.Ratings.Imdb.Value));
|
||||
setRateImdb.Add(new XElement("votes", movie.Ratings.Imdb.Votes));
|
||||
setRating.Add(setRateImdb);
|
||||
}
|
||||
|
||||
var setRatethemoviedb = new XElement("rating", new XAttribute("name", "themoviedb"), new XAttribute("max", "10"), new XAttribute("default", "true"));
|
||||
setRatethemoviedb.Add(new XElement("value", movie.Ratings.Value));
|
||||
setRatethemoviedb.Add(new XElement("votes", movie.Ratings.Votes));
|
||||
setRating.Add(setRatethemoviedb);
|
||||
details.Add(setRating);
|
||||
}
|
||||
|
||||
if (movie.Ratings?.Tmdb?.Votes > 0)
|
||||
if (movie.Ratings != null && movie.Ratings.Votes > 0)
|
||||
{
|
||||
details.Add(new XElement("rating", movie.Ratings.Tmdb.Value));
|
||||
details.Add(new XElement("rating", movie.Ratings.Value));
|
||||
}
|
||||
|
||||
details.Add(new XElement("userrating"));
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Indexers.Torznab;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.ThingiProvider.Events;
|
||||
|
||||
namespace NzbDrone.Core.HealthCheck.Checks
|
||||
{
|
||||
[CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))]
|
||||
[CheckOn(typeof(ProviderDeletedEvent<IIndexer>))]
|
||||
[CheckOn(typeof(ProviderStatusChangedEvent<IIndexer>))]
|
||||
public class IndexerJackettAllCheck : HealthCheckBase
|
||||
{
|
||||
private readonly IIndexerFactory _providerFactory;
|
||||
|
||||
public IndexerJackettAllCheck(IIndexerFactory providerFactory, ILocalizationService localizationService)
|
||||
: base(localizationService)
|
||||
{
|
||||
_providerFactory = providerFactory;
|
||||
}
|
||||
|
||||
public override HealthCheck Check()
|
||||
{
|
||||
var jackettAllProviders = _providerFactory.All().Where(
|
||||
i => i.ConfigContract.Equals("TorznabSettings") &&
|
||||
((i.Settings as TorznabSettings).BaseUrl.Contains("/torznab/all/api", StringComparison.InvariantCultureIgnoreCase) ||
|
||||
(i.Settings as TorznabSettings).BaseUrl.Contains("/api/v2.0/indexers/all/results/torznab", StringComparison.InvariantCultureIgnoreCase) ||
|
||||
(i.Settings as TorznabSettings).ApiPath.Contains("/torznab/all/api", StringComparison.InvariantCultureIgnoreCase) ||
|
||||
(i.Settings as TorznabSettings).ApiPath.Contains("/api/v2.0/indexers/all/results/torznab", StringComparison.InvariantCultureIgnoreCase)));
|
||||
|
||||
if (jackettAllProviders.Empty())
|
||||
{
|
||||
return new HealthCheck(GetType());
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType(),
|
||||
HealthCheckResult.Warning,
|
||||
string.Format(_localizationService.GetLocalizedString("IndexerJackettAll"),
|
||||
string.Join(", ", jackettAllProviders.Select(i => i.Name))),
|
||||
"#jackett-all-endpoint-used");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,6 @@ namespace NzbDrone.Core.ImportLists.ImportListMovies
|
||||
Images = new List<MediaCover.MediaCover>();
|
||||
Genres = new List<string>();
|
||||
Translations = new List<MovieTranslation>();
|
||||
Ratings = new Ratings();
|
||||
}
|
||||
|
||||
public int TmdbId { get; set; }
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace NzbDrone.Core.Indexers.FileList
|
||||
[FieldDefinition(5, Type = FieldType.Number, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||
public int MinimumSeeders { get; set; }
|
||||
|
||||
[FieldDefinition(6, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#indexer-flags", Advanced = true)]
|
||||
[FieldDefinition(6, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#torrent-tracker-configuration", Advanced = true)]
|
||||
public IEnumerable<int> RequiredFlags { get; set; }
|
||||
|
||||
[FieldDefinition(7)]
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||
[FieldDefinition(7, Type = FieldType.Number, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||
public int MinimumSeeders { get; set; }
|
||||
|
||||
[FieldDefinition(8, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#indexer-flags", Advanced = true)]
|
||||
[FieldDefinition(8, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#torrent-tracker-configuration", Advanced = true)]
|
||||
public IEnumerable<int> RequiredFlags { get; set; }
|
||||
|
||||
[FieldDefinition(9)]
|
||||
|
||||
@@ -335,7 +335,7 @@ namespace NzbDrone.Core.Indexers
|
||||
|
||||
if (releases.Empty())
|
||||
{
|
||||
return new ValidationFailure(string.Empty, "Query successful, but no results in the configured categories were returned from your indexer. This may be an issue with the indexer or your indexer category settings.");
|
||||
return new ValidationFailure(string.Empty, "Query successful, but no results were returned from your indexer. This may be an issue with the indexer or your indexer category settings.");
|
||||
}
|
||||
}
|
||||
catch (ApiKeyException ex)
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace NzbDrone.Core.Indexers.IPTorrents
|
||||
[FieldDefinition(2, Type = FieldType.Number, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||
public int MinimumSeeders { get; set; }
|
||||
|
||||
[FieldDefinition(3, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#indexer-flags", Advanced = true)]
|
||||
[FieldDefinition(3, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#torrent-tracker-configuration", Advanced = true)]
|
||||
public IEnumerable<int> RequiredFlags { get; set; }
|
||||
|
||||
[FieldDefinition(4)]
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace NzbDrone.Core.Indexers.Nyaa
|
||||
[FieldDefinition(3, Type = FieldType.Number, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||
public int MinimumSeeders { get; set; }
|
||||
|
||||
[FieldDefinition(4, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#indexer-flags", Advanced = true)]
|
||||
[FieldDefinition(4, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#torrent-tracker-configuration", Advanced = true)]
|
||||
public IEnumerable<int> RequiredFlags { get; set; }
|
||||
|
||||
[FieldDefinition(5)]
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
[FieldDefinition(5)]
|
||||
public SeedCriteriaSettings SeedCriteria { get; set; } = new SeedCriteriaSettings();
|
||||
|
||||
[FieldDefinition(6, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#indexer-flags", Advanced = true)]
|
||||
[FieldDefinition(6, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#torrent-tracker-configuration", Advanced = true)]
|
||||
public IEnumerable<int> RequiredFlags { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace NzbDrone.Core.Indexers.Rarbg
|
||||
[FieldDefinition(4, Type = FieldType.Number, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||
public int MinimumSeeders { get; set; }
|
||||
|
||||
[FieldDefinition(5, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#indexer-flags", Advanced = true)]
|
||||
[FieldDefinition(5, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#torrent-tracker-configuration", Advanced = true)]
|
||||
public IEnumerable<int> RequiredFlags { get; set; }
|
||||
|
||||
[FieldDefinition(6, Type = FieldType.Select, Label = "Categories", SelectOptions = typeof(RarbgCategories), HelpText = "Categories for use in search and feeds. If unspecified, all options are used.")]
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace NzbDrone.Core.Indexers.TorrentRss
|
||||
[FieldDefinition(5)]
|
||||
public SeedCriteriaSettings SeedCriteria { get; set; } = new SeedCriteriaSettings();
|
||||
|
||||
[FieldDefinition(6, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#indexer-flags", Advanced = true)]
|
||||
[FieldDefinition(6, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#torrent-tracker-configuration", Advanced = true)]
|
||||
public IEnumerable<int> RequiredFlags { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
|
||||
@@ -92,7 +92,6 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
return;
|
||||
}
|
||||
|
||||
failures.AddIfNotNull(JackettAll());
|
||||
failures.AddIfNotNull(TestCapabilities());
|
||||
}
|
||||
|
||||
@@ -150,23 +149,6 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual ValidationFailure JackettAll()
|
||||
{
|
||||
if (Settings.ApiPath.Contains("/torznab/all", StringComparison.InvariantCultureIgnoreCase) ||
|
||||
Settings.ApiPath.Contains("/api/v2.0/indexers/all/results/torznab", StringComparison.InvariantCultureIgnoreCase) ||
|
||||
Settings.BaseUrl.Contains("/torznab/all", StringComparison.InvariantCultureIgnoreCase) ||
|
||||
Settings.BaseUrl.Contains("/api/v2.0/indexers/all/results/torznab", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new NzbDroneValidationFailure("ApiPath", "Jackett's all endpoint is not supported, please add indexers individually")
|
||||
{
|
||||
IsWarning = true,
|
||||
DetailedDescription = "Jackett's all endpoint is not supported, please add indexers individually"
|
||||
};
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public override object RequestAction(string action, IDictionary<string, string> query)
|
||||
{
|
||||
if (action == "newznabCategories")
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
[FieldDefinition(9)]
|
||||
public SeedCriteriaSettings SeedCriteria { get; set; } = new SeedCriteriaSettings();
|
||||
|
||||
[FieldDefinition(10, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#indexer-flags", Advanced = true)]
|
||||
[FieldDefinition(10, Type = FieldType.TagSelect, SelectOptions = typeof(IndexerFlags), Label = "Required Flags", HelpText = "What indexer flags are required?", HelpLink = "https://wiki.servarr.com/radarr/settings#torrent-tracker-configuration", Advanced = true)]
|
||||
public IEnumerable<int> RequiredFlags { get; set; }
|
||||
|
||||
public override NzbDroneValidationResult Validate()
|
||||
|
||||
@@ -102,7 +102,7 @@ namespace NzbDrone.Core.Languages
|
||||
public static Language Bulgarian => new Language(29, "Bulgarian");
|
||||
public static Language PortugueseBR => new Language(30, "Portuguese (Brazil)");
|
||||
public static Language Arabic => new Language(31, "Arabic");
|
||||
public static Language Ukrainian => new Language(32, "Ukrainian");
|
||||
public static Language Ukrainian => new Language(32, "Unkrainian");
|
||||
public static Language Persian => new Language(33, "Persian");
|
||||
public static Language Bengali => new Language(34, "Bengali");
|
||||
public static Language Any => new Language(-1, "Any");
|
||||
|
||||
@@ -147,6 +147,7 @@
|
||||
"ReleaseGroup": "مجموعة الإصدار",
|
||||
"ReleasedMsg": "صدر الفيلم",
|
||||
"ReleaseDates": "تواريخ الإصدار",
|
||||
"ReleaseDate": "يوم الاصدار",
|
||||
"Released": "صدر",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "الفرع {0} ليس فرع إصدار Radarr صالح ، لن تتلقى تحديثات",
|
||||
"RelativePath": "مسار نسبي",
|
||||
@@ -176,6 +177,7 @@
|
||||
"RadarrSupportsAnyIndexer": "يدعم Radarr أي مفهرس يستخدم معيار Newznab ، بالإضافة إلى مفهرسات أخرى مذكورة أدناه.",
|
||||
"RadarrSupportsAnyDownloadClient": "يدعم Radarr أي عميل تنزيل يستخدم معيار Newznab ، بالإضافة إلى عملاء التنزيل الآخرين المدرجة أدناه.",
|
||||
"RadarrCalendarFeed": "Radarr Calendar Feed. تغذية التقويم",
|
||||
"Radarr": "رادار",
|
||||
"QuickImport": "التحرك تلقائيا",
|
||||
"QueueIsEmpty": "قائمة الانتظار فارغة",
|
||||
"Queued": "في قائمة الانتظار",
|
||||
@@ -290,6 +292,7 @@
|
||||
"NoLeaveIt": "لا ، اتركها",
|
||||
"NoHistory": "لا تاريخ",
|
||||
"NoEventsFound": "لم يتم العثور على أحداث",
|
||||
"NoCinemaRelease": "لا يوجد إصدار سينمائي",
|
||||
"NoChanges": "لا تغيرات",
|
||||
"NoChange": "لا تغيير",
|
||||
"NoBackupsAreAvailable": "لا توجد نسخ احتياطية متاحة",
|
||||
@@ -308,6 +311,7 @@
|
||||
"MultiLanguage": "متعدد اللغات",
|
||||
"MovieYearHelpText": "عام الفيلم المطلوب استبعاده",
|
||||
"MovieYear": "سنة الفيلم",
|
||||
"MovieWasDownloadedAndSorted": "تم تنزيل الفيلم وفرزه",
|
||||
"MovieTitleHelpText": "عنوان الفيلم المراد استبعاده (يمكن أن يكون أي شيء ذي معنى)",
|
||||
"MovieTitle": "عنوان الفيلم",
|
||||
"MoviesSelectedInterp": "تم تحديد {0} فيلم (أفلام)",
|
||||
@@ -327,11 +331,13 @@
|
||||
"MovieIndexScrollBottom": "فهرس الفيلم: التمرير لأسفل",
|
||||
"MovieIndex": "فهرس الفيلم",
|
||||
"MovieID": "معرف الفيلم",
|
||||
"MovieHasntReleasedYet": "لم يصدر الفيلم بعد",
|
||||
"MovieFolderFormat": "تنسيق مجلد الفيلم",
|
||||
"MovieFilesTotaling": "مجموع ملفات الفيلم",
|
||||
"MovieFiles": "ملفات الأفلام",
|
||||
"MovieExcludedFromAutomaticAdd": "الفيلم مستبعد من الإضافة التلقائية",
|
||||
"MovieEditor": "محرر الفيلم",
|
||||
"LogFilesLocationMessage": "توجد ملفات السجل في:",
|
||||
"LogFiles": "ملفات الدخول",
|
||||
"Location": "موقعك",
|
||||
"Local": "محلي",
|
||||
@@ -472,6 +478,7 @@
|
||||
"Filter": "منقي",
|
||||
"FileWasDeletedByViaUI": "تم حذف الملف عبر واجهة المستخدم",
|
||||
"FileWasDeletedByUpgrade": "تم حذف الملف لاستيراد ترقية",
|
||||
"Filesize": "حجم الملف",
|
||||
"Files": "الملفات",
|
||||
"FileNameTokens": "رموز اسم الملف",
|
||||
"FileNames": "أسماء الملفات",
|
||||
@@ -496,6 +503,7 @@
|
||||
"ExcludeMovie": "استبعاد فيلم",
|
||||
"Excluded": "مستبعد",
|
||||
"Exception": "استثناء",
|
||||
"Example": "مثال",
|
||||
"EventType": "نوع الحدث",
|
||||
"Events": "الأحداث",
|
||||
"ErrorRestoringBackup": "خطأ في استعادة النسخة الاحتياطية",
|
||||
@@ -626,6 +634,7 @@
|
||||
"SendAnonymousUsageData": "إرسال بيانات الاستخدام المجهولة",
|
||||
"SelectQuality": "حدد الجودة",
|
||||
"SelectMovie": "حدد الفيلم",
|
||||
"SelectLanguges": "حدد اللغات",
|
||||
"SelectLanguage": "اختار اللغة",
|
||||
"SelectFolder": "اختر مجلد",
|
||||
"SelectDotDot": "'تحديد...",
|
||||
@@ -724,6 +733,8 @@
|
||||
"DownloadFailedCheckDownloadClientForMoreDetails": "فشل التنزيل: تحقق من عميل التنزيل لمزيد من التفاصيل",
|
||||
"DownloadFailed": "التحميل فشل",
|
||||
"DownloadClient": "تحميل العميل",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": ".Net Framework {0} المثبت حاليًا قديم وغير مدعوم. الرجاء ترقية .Net Framework إلى {1} على الأقل.",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "يتم دعم .Net Framework {0} المثبت حاليًا ولكننا نوصي بالترقية إلى {1} على الأقل.",
|
||||
"DoNotUpgradeAutomatically": "لا تقم بالترقية تلقائيًا",
|
||||
"DoNotPrefer": "لا تفضل",
|
||||
"DoneEditingGroups": "تم تحرير المجموعات",
|
||||
@@ -735,6 +746,7 @@
|
||||
"Discord": "الخلاف",
|
||||
"Disabled": "معاق",
|
||||
"DigitalRelease": "الإصدار الرقمي",
|
||||
"Digital": "رقمي",
|
||||
"Details": "تفاصيل",
|
||||
"DetailedProgressBarHelpText": "إظهار النص على شريط التقدم",
|
||||
"DetailedProgressBar": "شريط تقدم مفصل",
|
||||
@@ -904,9 +916,11 @@
|
||||
"AppDataDirectory": "دليل AppData",
|
||||
"ApiKey": "مفتاح API",
|
||||
"Announced": "أعلن",
|
||||
"AnnoucedMsg": "تم الإعلان عن الفيلم",
|
||||
"MovieDetailsPreviousMovie": "تفاصيل الفيلم: الفيلم السابق",
|
||||
"MovieDetailsNextMovie": "تفاصيل الفيلم: الفيلم القادم",
|
||||
"MovieChat": "دردشة الفيلم",
|
||||
"MovieAvailableButMissing": "الفيلم متاح ، لكنه مفقود",
|
||||
"MovieAlreadyExcluded": "الفيلم مستبعد بالفعل",
|
||||
"Movie": "فيلم",
|
||||
"MoveFolders2": "هل تريد نقل ملفات الأفلام من \"{0}\" إلى \"{1}\"؟",
|
||||
@@ -918,6 +932,12 @@
|
||||
"MoreControlCFText": "هل تريد المزيد من التحكم في التنزيلات المفضلة؟ أضف",
|
||||
"Months": "الشهور",
|
||||
"Month": "شهر",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "يتم دعم الإصدار Mono المثبت حاليًا {0} ولكن يوصى بالترقية إلى {1}.",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "الإصدار Mono المثبت حاليًا {0} قديم وغير مدعوم. الرجاء ترقية Mono إلى الإصدار {1}.",
|
||||
"MonoVersionCheckNotSupportedMessage": "الإصدار الأحادي المثبت حاليًا {0} لم يعد مدعومًا. الرجاء ترقية Mono إلى الإصدار {1}.",
|
||||
"MonoVersion": "نسخة أحادية",
|
||||
"MonoTlsCheckMessage": "لا يزال الحل البديل لـ Radarr Mono 4.x tls ممكّنًا ، فجرّب إزالة MONO_TLS_PROVIDER = خيار البيئة القديمة",
|
||||
"MonoNotNetCoreCheckMessage": "الرجاء الترقية إلى إصدار .NET Core من Radarr",
|
||||
"MonitorMovie": "مراقبة الفيلم",
|
||||
"MonitoredStatus": "مراقب / الحالة",
|
||||
"MonitoredOnly": "مراقب فقط",
|
||||
@@ -954,6 +974,7 @@
|
||||
"MediaManagementSettingsSummary": "إعدادات إدارة الملفات والتسمية",
|
||||
"MediaManagementSettings": "إعدادات إدارة الوسائط",
|
||||
"MediaManagement": "إدارة وسائل الإعلام",
|
||||
"MediaInfoDllCheckMessage": "تعذر تحميل مكتبة MediaInfo {0}",
|
||||
"MediaInfo": "معلومات الوسائط",
|
||||
"Mechanism": "آلية",
|
||||
"MaximumSizeHelpText": "الحد الأقصى لحجم الإصدار المراد الحصول عليه بالميجابايت. اضبط على الصفر للتعيين إلى غير محدود",
|
||||
@@ -985,6 +1006,7 @@
|
||||
"AlternativeTitle": "عنوان بديل",
|
||||
"AlreadyInYourLibrary": "بالفعل في مكتبتك",
|
||||
"AllResultsHiddenFilter": "يتم إخفاء جميع النتائج بواسطة عامل التصفية المطبق",
|
||||
"AllowMovieChangeClickToChangeMovie": "انقر لتغيير الفيلم",
|
||||
"AllowHardcodedSubsHelpText": "سيتم تنزيل الاشتراكات المشفرة التي تم اكتشافها تلقائيًا",
|
||||
"AllowHardcodedSubs": "السماح الغواصات hardcoded",
|
||||
"AllMoviesInPathHaveBeenImported": "تم استيراد كافة الأفلام الموجودة في {0}",
|
||||
|
||||
@@ -176,6 +176,7 @@
|
||||
"DestinationPath": "Път на дестинацията",
|
||||
"DetailedProgressBar": "Подробна лента за напредъка",
|
||||
"Details": "Подробности",
|
||||
"Digital": "Дигитален",
|
||||
"Discord": "Раздор",
|
||||
"Discover": "Открийте",
|
||||
"DiskSpace": "Дисково пространство",
|
||||
@@ -184,6 +185,8 @@
|
||||
"DoneEditingGroups": "Готово редактиране на групи",
|
||||
"DoNotPrefer": "Не предпочитайте",
|
||||
"DoNotUpgradeAutomatically": "Не надграждайте автоматично",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "Понастоящем е инсталирана .Net Framework {0}, но препоръчваме да надстроите до поне {1}.",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "Понастоящем инсталираната .Net Framework {0} е стара и не се поддържа. Моля, надстройте .Net Framework най-малко до {1}.",
|
||||
"DownloadClient": "Клиент за изтегляне",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Няма наличен клиент за изтегляне",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Не може да се комуникира с {0}.",
|
||||
@@ -235,6 +238,7 @@
|
||||
"ErrorLoadingPreviews": "Грешка при зареждането на визуализациите",
|
||||
"ErrorRestoringBackup": "Грешка при възстановяване на архивиране",
|
||||
"EventType": "Тип на събитието",
|
||||
"Example": "Пример",
|
||||
"Exception": "Изключение",
|
||||
"Excluded": "Изключени",
|
||||
"Existing": "Съществуващ",
|
||||
@@ -254,6 +258,7 @@
|
||||
"Filename": "Име на файл",
|
||||
"FileNames": "Имена на файлове",
|
||||
"Files": "Файлове",
|
||||
"Filesize": "Размер на файла",
|
||||
"FileWasDeletedByUpgrade": "Файлът беше изтрит за импортиране на надстройка",
|
||||
"FilterPlaceHolder": "Търсене на филми",
|
||||
"FirstDayOfWeek": "Първи ден от седмицата",
|
||||
@@ -345,6 +350,7 @@
|
||||
"ListSyncLevelHelpText": "Филмите в библиотеката ще бъдат премахнати или непроменени, ако не са във вашия списък",
|
||||
"ListUpdateInterval": "Интервал за актуализиране на списъка",
|
||||
"LogFiles": "Лог файлове",
|
||||
"LogFilesLocationMessage": "Регистрационните файлове се намират в:",
|
||||
"Logging": "Регистрация",
|
||||
"LogLevel": "Log Level",
|
||||
"LogLevelTraceHelpTextWarning": "Регистрацията на проследяване трябва да бъде разрешена само временно",
|
||||
@@ -381,12 +387,15 @@
|
||||
"MonitoredOnly": "Само наблюдавано",
|
||||
"MonitoredStatus": "Наблюдавано / Състояние",
|
||||
"MonitorMovie": "Монитор на филм",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "Понастоящем инсталираната моно версия {0} е стара и не се поддържа. Моля, надстройте Mono до версия {1}.",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "Понастоящем инсталираната моно версия {0} се поддържа, но се препоръчва надстройка до {1}.",
|
||||
"Months": "Месеци",
|
||||
"MoreControlCFText": "Искате повече контрол над това кои изтегляния са предпочитани? Добави",
|
||||
"MoreInfo": "Повече информация",
|
||||
"MoveFolders1": "Искате ли да преместите папките с филми в „{0}“?",
|
||||
"Movie": "Филм",
|
||||
"MovieAlreadyExcluded": "Филмът вече е изключен",
|
||||
"MovieAvailableButMissing": "Наличен филм, но липсва",
|
||||
"MovieChat": "Чат за филми",
|
||||
"MovieDetailsNextMovie": "Подробности за филма: Следващ филм",
|
||||
"MovieIndexScrollBottom": "Индекс на филма: Превъртане отдолу",
|
||||
@@ -523,6 +532,7 @@
|
||||
"SelectDotDot": "„Изберете ...",
|
||||
"SelectFolder": "Изберете папка",
|
||||
"SelectLanguage": "Избери език",
|
||||
"SelectLanguges": "Изберете Езици",
|
||||
"SelectMovie": "Изберете Филм",
|
||||
"SelectQuality": "Изберете Качество",
|
||||
"SetPermissions": "Задайте разрешения",
|
||||
@@ -745,6 +755,7 @@
|
||||
"AllResultsHiddenFilter": "Всички резултати са скрити от приложения филтър",
|
||||
"AlternativeTitle": "Алтернативно заглавие",
|
||||
"AnalyticsEnabledHelpText": "Изпращайте анонимна информация за използването и грешките до сървърите на Radarr. Това включва информация за вашия браузър, кои страници на Radarr WebUI използвате, отчитане на грешки, както и версията на операционната система и времето за изпълнение. Ще използваме тази информация, за да дадем приоритет на функциите и корекциите на грешки.",
|
||||
"AnnoucedMsg": "Филмът е обявен",
|
||||
"AppDataDirectory": "Директория на AppData",
|
||||
"Apply": "Приложи",
|
||||
"AptUpdater": "Използвайте apt, за да инсталирате актуализацията",
|
||||
@@ -888,13 +899,17 @@
|
||||
"MinimumAge": "Минимална възраст",
|
||||
"MinimumFreeSpace": "Минимално свободно пространство",
|
||||
"MinimumLimits": "Минимални лимити",
|
||||
"MonoVersion": "Моно версия",
|
||||
"NextExecution": "Следващо изпълнение",
|
||||
"NoEventsFound": "Няма намерени събития",
|
||||
"MonoVersionCheckNotSupportedMessage": "Понастоящем инсталираната моно версия {0} вече не се поддържа. Моля, надстройте Mono до версия {1}.",
|
||||
"None": "Нито един",
|
||||
"MoveFiles": "Преместване на файлове",
|
||||
"MovieFilesTotaling": "Филмови файлове общо",
|
||||
"Ok": "Добре",
|
||||
"MovieHasntReleasedYet": "Филмът все още не е пуснат",
|
||||
"MovieIsRecommend": "Препоръчва се филм въз основа на скорошно добавяне",
|
||||
"MovieWasDownloadedAndSorted": "Филмът беше изтеглен и сортиран",
|
||||
"NegateHelpText": "Ако е отметнато, персонализираният формат няма да се прилага, ако това {0} условие съвпада.",
|
||||
"NoAltTitle": "Няма алтернативни заглавия.",
|
||||
"NoLinks": "Няма връзки",
|
||||
@@ -945,9 +960,12 @@
|
||||
"MarkAsFailed": "Означаване като неуспешно",
|
||||
"Mechanism": "Механизъм",
|
||||
"MediaInfo": "Информация за медиите",
|
||||
"MediaInfoDllCheckMessage": "Библиотеката на MediaInfo не можа да бъде заредена {0}",
|
||||
"Hostname": "Име на хост",
|
||||
"MinutesSixty": "60 минути: {0}",
|
||||
"Missing": "Липсва",
|
||||
"MonoNotNetCoreCheckMessage": "Моля, надстройте до .NET Core версията на Radarr",
|
||||
"MonoTlsCheckMessage": "Работното решение на Radarr Mono 4.x tls все още е активирано, помислете за премахване на MONO_TLS_PROVIDER = опция за наследствена среда",
|
||||
"MovieID": "Идентификатор на филм",
|
||||
"MovieIndex": "Индекс на филма",
|
||||
"MovieInfoLanguageHelpTextWarning": "Необходимо е презареждане на браузъра",
|
||||
@@ -992,7 +1010,9 @@
|
||||
"Proper": "Правилно",
|
||||
"Protocol": "Протокол",
|
||||
"ProxyBypassFilterHelpText": "Използвайте „,“ като разделител и „*“. като заместващ знак за поддомейни",
|
||||
"AllowMovieChangeClickToChangeMovie": "Щракнете, за да промените филма",
|
||||
"QuickImport": "Бърз импорт",
|
||||
"Radarr": "Радар",
|
||||
"RadarrSupportsAnyDownloadClient": "Radarr поддържа всеки клиент за изтегляне, който използва стандарта Newznab, както и други клиенти за изтегляне, изброени по-долу.",
|
||||
"RadarrSupportsAnyRSSMovieListsAsWellAsTheOneStatedBelow": "Radarr поддържа всички RSS филмови списъци, както и посочения по-долу.",
|
||||
"AlreadyInYourLibrary": "Вече във вашата библиотека",
|
||||
@@ -1033,6 +1053,8 @@
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "Понастоящем инсталираната версия на SQLite {0} вече не се поддържа. Моля, надстройте SQLite поне до версия {1}.",
|
||||
"ShowReleaseDate": "Показване на датата на издаване",
|
||||
"ShowReleaseDateHelpText": "Показване на датата на пускане под постер",
|
||||
"NoCinemaRelease": "Няма издание на кино",
|
||||
"ReleaseDate": "Дати на издаване",
|
||||
"ShowCinemaRelease": "Показване на датата на излизане на киното",
|
||||
"showCinemaReleaseHelpText": "Покажете датата на излизане на киното под плакат",
|
||||
"OnMovieDelete": "На Изтриване на филм",
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"DeleteSelectedMovieFilesMessage": "Opravdu chcete odstranit vybrané filmové soubory?",
|
||||
"IndexerStatusCheckAllClientMessage": "Všechny indexery nejsou k dispozici z důvodu selhání",
|
||||
"Location": "Umístění",
|
||||
"MonoTlsCheckMessage": "Řešení Radarr Mono 4.x tls je stále povoleno, zvažte odebrání MONO_TLS_PROVIDER = možnost staršího prostředí",
|
||||
"Events": "Události",
|
||||
"OverviewOptions": "Možnosti přehledu",
|
||||
"RecycleBinCleanupDaysHelpTextWarning": "Soubory v koši starší než vybraný počet dní budou automaticky vyčištěny",
|
||||
@@ -83,6 +84,7 @@
|
||||
"MinutesHundredTwenty": "120 minut: {0}",
|
||||
"MinutesNinety": "90 minut: {0}",
|
||||
"MoreControlCFText": "Chcete větší kontrolu nad tím, které stahování jsou preferovány? Přidat",
|
||||
"MovieAvailableButMissing": "Film je k dispozici, ale chybí",
|
||||
"NoListRecommendations": "Nebyly nalezeny žádné položky seznamu ani doporučení. Chcete-li začít, budete chtít přidat nový film, importovat některé existující nebo přidat seznam.",
|
||||
"PreviewRename": "Náhled Přejmenovat",
|
||||
"PreviewRenameHelpText": "Tip: Chcete-li zobrazit náhled přejmenování ... vyberte možnost Zrušit, klikněte na libovolný název filmu a použijte ikonu",
|
||||
@@ -216,6 +218,7 @@
|
||||
"AllMoviesInPathHaveBeenImported": "Všechny filmy z domény {0} byly importovány",
|
||||
"AllResultsHiddenFilter": "Všechny výsledky jsou skryty použitým filtrem",
|
||||
"Monday": "pondělí",
|
||||
"AnnoucedMsg": "Film je ohlášen",
|
||||
"AppDataDirectory": "Adresář AppData",
|
||||
"Apply": "Aplikovat",
|
||||
"OnUpgradeHelpText": "Při upgradu",
|
||||
@@ -274,9 +277,12 @@
|
||||
"ListSyncLevelHelpTextWarning": "Filmové soubory budou trvale smazány, což může vést k vymazání vaší knihovny, pokud jsou vaše seznamy prázdné",
|
||||
"MinimumLimits": "Minimální limity",
|
||||
"Minutes": "Minut",
|
||||
"MonoVersionCheckNotSupportedMessage": "Aktuálně nainstalovaná mono verze {0} již není podporována. Upgradujte prosím Mono na verzi {1}.",
|
||||
"MovieFiles": "Filmové soubory",
|
||||
"MovieFilesTotaling": "Součet filmových souborů",
|
||||
"MovieHasntReleasedYet": "Film ještě nebyl vydán",
|
||||
"MovieNaming": "Pojmenování filmu",
|
||||
"MovieWasDownloadedAndSorted": "Film byl stažen a tříděn",
|
||||
"NextExecution": "Další spuštění",
|
||||
"NoAltTitle": "Žádné alternativní tituly.",
|
||||
"NoMinimumForAnyRuntime": "Žádné minimum za běhu",
|
||||
@@ -308,6 +314,7 @@
|
||||
"MinFormatScoreHelpText": "Minimální skóre vlastního formátu povoleno ke stažení",
|
||||
"MinimumAge": "Minimální věk",
|
||||
"MissingFromDisk": "Radarr nemohl najít soubor na disku, takže byl odstraněn",
|
||||
"MonoVersion": "Mono verze",
|
||||
"MoveFiles": "Přesouvat soubory",
|
||||
"MinutesSixty": "60 minut: {0}",
|
||||
"Small": "Malý",
|
||||
@@ -389,11 +396,13 @@
|
||||
"MaximumSizeHelpText": "Maximální velikost uvolnění, která se má zachytit v MB. Nastavit na nulu nastavit na neomezený",
|
||||
"Mechanism": "Mechanismus",
|
||||
"MediaInfo": "Informace o médiích",
|
||||
"MediaInfoDllCheckMessage": "Knihovnu MediaInfo nelze načíst {0}",
|
||||
"MediaManagement": "Správa médií",
|
||||
"MediaManagementSettings": "Nastavení správy médií",
|
||||
"MediaManagementSettingsSummary": "Nastavení pojmenování a správy souborů",
|
||||
"Hostname": "Název hostitele",
|
||||
"Missing": "Chybějící",
|
||||
"MonoNotNetCoreCheckMessage": "Upgradujte na verzi .NET Radarr",
|
||||
"Month": "Měsíc",
|
||||
"MoreDetails": "Více informací",
|
||||
"MovieFolderFormat": "Formát složky filmu",
|
||||
@@ -469,7 +478,9 @@
|
||||
"AllowHardcodedSubsHelpText": "Zjištěné pevně zakódované odběry budou automaticky staženy",
|
||||
"QualityProfile": "Profil kvality",
|
||||
"QualityProfiles": "Profily kvality",
|
||||
"AllowMovieChangeClickToChangeMovie": "Kliknutím změníte film",
|
||||
"QuickImport": "Rychlý import",
|
||||
"Radarr": "Radarr",
|
||||
"RadarrSupportsAnyDownloadClient": "Radarr podporuje libovolného klienta pro stahování, který používá standard Newznab, stejně jako další klienty pro stahování uvedené níže.",
|
||||
"RadarrSupportsAnyRSSMovieListsAsWellAsTheOneStatedBelow": "Radarr podporuje všechny seznamy filmů RSS i níže uvedené.",
|
||||
"RadarrTags": "Radarr tagy",
|
||||
@@ -579,6 +590,7 @@
|
||||
"DestinationPath": "Cesta k cíli",
|
||||
"DestinationRelativePath": "Relativní cesta k cíli",
|
||||
"Details": "Detaily",
|
||||
"Digital": "Digitální",
|
||||
"Discover": "Objevit",
|
||||
"DiskSpace": "Místo na disku",
|
||||
"Docker": "Přístavní dělník",
|
||||
@@ -586,6 +598,8 @@
|
||||
"DoneEditingGroups": "Úpravy skupin dokončeny",
|
||||
"DoNotPrefer": "Nepřednostňovat",
|
||||
"DoNotUpgradeAutomatically": "Neupgradovat automaticky",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "Aktuálně nainstalovaný .Net Framework {0} je podporován, ale doporučujeme upgradovat alespoň na {1}.",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "Aktuálně nainstalovaný .Net Framework {0} je starý a nepodporovaný. Upgradujte .Net Framework na alespoň {1}.",
|
||||
"DownloadClient": "Stáhnout klienta",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Není k dispozici žádný klient pro stahování",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "S uživatelem {0} nelze komunikovat.",
|
||||
@@ -625,6 +639,7 @@
|
||||
"ErrorLoadingContents": "Chyba při načítání obsahu",
|
||||
"ErrorLoadingPreviews": "Chyba při načítání náhledů",
|
||||
"EventType": "Typ události",
|
||||
"Example": "Příklad",
|
||||
"Exception": "Výjimka",
|
||||
"Excluded": "Vyloučeno",
|
||||
"Existing": "Existující",
|
||||
@@ -641,6 +656,7 @@
|
||||
"Filename": "Název souboru",
|
||||
"FileNames": "Názvy souborů",
|
||||
"Files": "Soubory",
|
||||
"Filesize": "Velikost souboru",
|
||||
"FileWasDeletedByViaUI": "Soubor byl odstraněn prostřednictvím uživatelského rozhraní",
|
||||
"Filter": "Filtr",
|
||||
"FilterPlaceHolder": "Hledat filmy",
|
||||
@@ -717,6 +733,7 @@
|
||||
"ListSyncLevelHelpText": "Filmy v knihovně budou odstraněny nebo nesledovány, pokud nejsou ve vašem seznamu",
|
||||
"ListUpdateInterval": "Interval aktualizace seznamu",
|
||||
"LogFiles": "Záznam souborů",
|
||||
"LogFilesLocationMessage": "Soubory protokolu jsou umístěny v:",
|
||||
"Logging": "Protokolování",
|
||||
"LogLevel": "Úroveň protokolu",
|
||||
"LogOnly": "Pouze protokol",
|
||||
@@ -749,6 +766,8 @@
|
||||
"MonitoredOnly": "Pouze monitorováno",
|
||||
"MonitoredStatus": "Monitorováno / Stav",
|
||||
"MonitorMovie": "Monitorujte film",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "Aktuálně nainstalovaná mono verze {0} je stará a nepodporovaná. Upgradujte prosím Mono na verzi {1}.",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "Aktuálně nainstalovaná mono verze {0} je podporována, ale doporučuje se upgradovat na {1}.",
|
||||
"Months": "Měsíce",
|
||||
"MoreInfo": "Více informací",
|
||||
"MoveFolders1": "Chcete přesunout složky filmu do složky „{0}“?",
|
||||
@@ -868,6 +887,7 @@
|
||||
"SelectDotDot": "'Vybrat...",
|
||||
"SelectFolder": "Vybrat složku",
|
||||
"SelectLanguage": "Zvolte jazyk",
|
||||
"SelectLanguges": "Vyberte jazyky",
|
||||
"SelectMovie": "Vyberte film",
|
||||
"SelectQuality": "Vyberte kvalitu",
|
||||
"SetPermissions": "Nastavit oprávnění",
|
||||
@@ -1033,6 +1053,8 @@
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "Aktuálně nainstalovaná verze SQLite {0} již není podporována. Upgradujte SQLite alespoň na verzi {1}.",
|
||||
"ShowReleaseDate": "Zobrazit datum vydání",
|
||||
"ShowReleaseDateHelpText": "Zobrazit datum vydání pod plakátem",
|
||||
"NoCinemaRelease": "Žádné vydání kina",
|
||||
"ReleaseDate": "Datum vydání",
|
||||
"ShowCinemaRelease": "Zobrazit datum vydání kina",
|
||||
"showCinemaReleaseHelpText": "Zobrazit datum vydání kina pod plakátem",
|
||||
"OnMovieDelete": "Při mazání filmu",
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
"FreeSpace": "Frit Plads",
|
||||
"Formats": "Formater",
|
||||
"Folder": "Mappe",
|
||||
"Filesize": "Filstørrelse",
|
||||
"Files": "Filer",
|
||||
"Filename": "Filnavn",
|
||||
"FileManagement": "Fil Håndtering",
|
||||
@@ -52,6 +53,8 @@
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Ude af stand til at kommunikere med {0}.",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Ingen download klient tilgængelig",
|
||||
"DownloadClient": "Download Klient",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "Aktuelt installeret .Net Framwork {0} er gammel og usupporteret. Vær venlig og opgrader .Net Framework til ihvertfald {1}.",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "Aktuelt Installeret .Net Framework {0} er supporteret men vi foreslår at opgradere til ihvertfald {1}.",
|
||||
"DiskSpace": "Disk Plads",
|
||||
"Discover": "Opdag",
|
||||
"DigitalRelease": "Digital Udgivelse",
|
||||
@@ -113,6 +116,7 @@
|
||||
"UnableToLoadAltTitle": "Kan ikke indlæse alternative titler.",
|
||||
"WhatsNew": "Hvad er nyt?",
|
||||
"ProtocolHelpText": "Vælg hvilke protokol (r) du vil bruge, og hvilken der foretrækkes, når du vælger mellem ellers lige udgivelser",
|
||||
"Radarr": "Radarr",
|
||||
"RadarrSupportsAnyDownloadClient": "Radarr understøtter enhver downloadklient, der bruger Newznab-standarden, samt andre downloadklienter, der er anført nedenfor.",
|
||||
"RadarrTags": "Radarr tags",
|
||||
"RecycleBinHelpText": "Filmfiler går her, når de slettes i stedet for at blive slettet permanent",
|
||||
@@ -189,6 +193,7 @@
|
||||
"AllResultsHiddenFilter": "Alle resultater skjules af det anvendte filter",
|
||||
"Always": "Altid",
|
||||
"AnalyticsEnabledHelpText": "Send anonym brugs- og fejlinformation til Radarrs servere. Dette inkluderer information i din browser, hvilke Radarr WebUI-sider du bruger, fejlrapportering samt OS og runtime-version. Vi bruger disse oplysninger til at prioritere funktioner og fejlrettelser.",
|
||||
"AnnoucedMsg": "Film annonceres",
|
||||
"AppDataDirectory": "AppData-bibliotek",
|
||||
"AreYouSureYouWantToDeleteThisRemotePathMapping": "Er du sikker på, at du vil slette denne kortlægning af fjernstien?",
|
||||
"AuthBasic": "Grundlæggende (pop op-browser)",
|
||||
@@ -287,9 +292,11 @@
|
||||
"Minutes": "Protokoller",
|
||||
"ListExclusions": "Liste undtagelser",
|
||||
"MissingFromDisk": "Radarr kunne ikke finde filen på disken, så den blev fjernet",
|
||||
"MonoVersion": "Mono-version",
|
||||
"MoveFiles": "Flyt filer",
|
||||
"MovieFiles": "Filmfiler",
|
||||
"MovieIsRecommend": "Film anbefales baseret på nyere tilføjelse",
|
||||
"MovieWasDownloadedAndSorted": "Filmen blev downloadet og sorteret",
|
||||
"NextExecution": "Næste udførelse",
|
||||
"NoAltTitle": "Ingen alternative titler.",
|
||||
"NoEventsFound": "Ingen begivenheder fundet",
|
||||
@@ -312,6 +319,7 @@
|
||||
"Max": "Maks",
|
||||
"Medium": "Medium",
|
||||
"MovieFilesTotaling": "Totale filmfiler",
|
||||
"MovieHasntReleasedYet": "Filmen er endnu ikke udgivet",
|
||||
"OnGrab": "On Grab",
|
||||
"OnHealthIssue": "Om sundhedsspørgsmål",
|
||||
"OnImport": "Ved import",
|
||||
@@ -388,12 +396,15 @@
|
||||
"MaximumSizeHelpText": "Maksimal størrelse for en udgivelse, der kan hentes i MB. Sæt til nul for at sætte til ubegrænset",
|
||||
"Mechanism": "Mekanisme",
|
||||
"MediaInfo": "Medieinfo",
|
||||
"MediaInfoDllCheckMessage": "MediaInfo-biblioteket kunne ikke indlæses {0}",
|
||||
"MediaManagement": "Mediestyring",
|
||||
"MediaManagementSettings": "Indstillinger for mediestyring",
|
||||
"MediaManagementSettingsSummary": "Navngivning og filhåndteringsindstillinger",
|
||||
"Hostname": "Værtsnavn",
|
||||
"MinutesSixty": "60 minutter: {0}",
|
||||
"Missing": "Mangler",
|
||||
"MonoNotNetCoreCheckMessage": "Opgrader til .NET Core-versionen af Radarr. Mono-baserede versioner vil ikke være understøttet fra næste release.",
|
||||
"MonoTlsCheckMessage": "Radarr Mono 4.x tls-løsning er stadig aktiveret, overvej at fjerne MONO_TLS_PROVIDER = ældre miljømulighed",
|
||||
"Month": "Måned",
|
||||
"MoreDetails": "Flere detaljer",
|
||||
"MountCheckMessage": "Mount, der indeholder en filmsti, er monteret skrivebeskyttet: ",
|
||||
@@ -407,6 +418,7 @@
|
||||
"MovieIsMonitored": "Film overvåges",
|
||||
"MovieIsUnmonitored": "Filmen overvåges ikke",
|
||||
"Movies": "Film",
|
||||
"MonoVersionCheckNotSupportedMessage": "Aktuelt installeret Mono-version {0} understøttes ikke længere. Opgrader Mono til version {1}.",
|
||||
"NetCore": ".NET Core",
|
||||
"No": "Ingen",
|
||||
"OnHealthIssueHelpText": "Om sundhedsspørgsmål",
|
||||
@@ -451,6 +463,7 @@
|
||||
"AllowHardcodedSubsHelpText": "Registrerede hardkodede subs downloades automatisk",
|
||||
"QualityProfile": "Kvalitetsprofil",
|
||||
"QualityProfiles": "Kvalitetsprofiler",
|
||||
"AllowMovieChangeClickToChangeMovie": "Klik for at skifte film",
|
||||
"PreferredSize": "Foretrukken størrelse",
|
||||
"QuickImport": "Hurtig import",
|
||||
"RadarrSupportsAnyRSSMovieListsAsWellAsTheOneStatedBelow": "Radarr understøtter alle RSS-filmlister såvel som nedenstående.",
|
||||
@@ -565,6 +578,7 @@
|
||||
"DestinationPath": "Destinationssti",
|
||||
"DestinationRelativePath": "Destinationsrelateret sti",
|
||||
"DetailedProgressBar": "Detaljeret statuslinje",
|
||||
"Digital": "Digital",
|
||||
"Discord": "Uenighed",
|
||||
"Docker": "Docker",
|
||||
"Donations": "Donationer",
|
||||
@@ -605,6 +619,7 @@
|
||||
"ErrorLoadingContents": "Fejl ved indlæsning af indhold",
|
||||
"ErrorLoadingPreviews": "Fejl ved indlæsning af forhåndsvisning",
|
||||
"ErrorRestoringBackup": "Fejl ved gendannelse af sikkerhedskopi",
|
||||
"Example": "Eksempel",
|
||||
"Exception": "Undtagelse",
|
||||
"Excluded": "Ekskluderet",
|
||||
"Existing": "Eksisterende",
|
||||
@@ -681,6 +696,7 @@
|
||||
"ListSyncLevelHelpText": "Film i biblioteket fjernes eller overvåges, hvis de ikke er på din liste",
|
||||
"ListUpdateInterval": "Listeopdateringsinterval",
|
||||
"LogFiles": "Logfiler",
|
||||
"LogFilesLocationMessage": "Logfiler findes i:",
|
||||
"Logging": "Logning",
|
||||
"LogLevel": "Logniveau",
|
||||
"LogOnly": "Kun log",
|
||||
@@ -711,12 +727,15 @@
|
||||
"Monitored": "Overvåget",
|
||||
"MonitoredHelpText": "Download film, hvis den er tilgængelig",
|
||||
"MonitorMovie": "Overvåg film",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "Aktuelt installeret Mono-version {0} er gammel og understøttes ikke. Opgrader Mono til version {1}.",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "Aktuelt installeret Mono-version {0} understøttes, men det anbefales at opgradere til {1}.",
|
||||
"Months": "Måneder",
|
||||
"MoreControlCFText": "Ønsker du mere kontrol over, hvilke downloads der foretrækkes? Tilføj en",
|
||||
"MoreInfo": "Mere info",
|
||||
"MoveFolders1": "Vil du flytte filmmapperne til '{0}'?",
|
||||
"Movie": "Film",
|
||||
"MovieAlreadyExcluded": "Film allerede ekskluderet",
|
||||
"MovieAvailableButMissing": "Film tilgængelig, men mangler",
|
||||
"MovieChat": "Filmchat",
|
||||
"MovieDetailsNextMovie": "Filmoplysninger: Næste film",
|
||||
"MovieIndexScrollBottom": "Filmindeks: Rul ned",
|
||||
@@ -836,6 +855,7 @@
|
||||
"SelectDotDot": "'Vælg...",
|
||||
"SelectFolder": "Vælg Mappe",
|
||||
"SelectLanguage": "Vælg sprog",
|
||||
"SelectLanguges": "Vælg sprog",
|
||||
"SelectMovie": "Vælg Film",
|
||||
"SelectQuality": "Vælg Kvalitet",
|
||||
"SetPermissions": "Indstil tilladelser",
|
||||
@@ -1031,6 +1051,8 @@
|
||||
"ReleaseWillBeProcessedInterp": "Udgivelsen behandles {0}",
|
||||
"Search": "Søg",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "Aktuelt installeret SQLite-version {0} understøttes ikke længere. Opgrader SQLite til mindst version {1}.",
|
||||
"NoCinemaRelease": "Ingen biografudgivelse",
|
||||
"ReleaseDate": "Slip datoer",
|
||||
"ShowCinemaRelease": "Vis biografens udgivelsesdato",
|
||||
"showCinemaReleaseHelpText": "Vis biografens udgivelsesdato under plakaten",
|
||||
"ShowReleaseDate": "Vis udgivelsesdato",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"CompletedDownloadHandling": "Verarbeitung abgeschlossener Downloads",
|
||||
"Connect": "Verbindungen",
|
||||
"Connections": "Verbindungen",
|
||||
"Crew": "Crew",
|
||||
"Crew": "Besetzung",
|
||||
"CustomFilters": "Filter anpassen",
|
||||
"CustomFormats": "Eigene Formate",
|
||||
"Date": "Datum",
|
||||
@@ -29,6 +29,8 @@
|
||||
"Delete": "Löschen",
|
||||
"Discover": "Entdecken",
|
||||
"DiskSpace": "Speicherplatz",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "Derzeit installiertes .NET Framework {0} wird unterstützt, wir empfehlen jedoch ein Upgrade auf mindestens {1}.",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "Derzeit installiert .Net Framework {0} ist alt und wird nicht unterstützt. Bitte aktualisieren Sie das .Net Framework auf mindestens {1}.",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Es ist kein Downloader verfügbar",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Kommunikation mit {0} nicht möglich.",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Alle Downloader sind aufgrund von Fehlern nicht verfügbar",
|
||||
@@ -40,6 +42,7 @@
|
||||
"FailedDownloadHandling": "Verarbeitung fehlgeschlagener Downloads",
|
||||
"FileManagement": "Dateiverwaltung",
|
||||
"Files": "Dateien",
|
||||
"Filesize": "Dateigröße",
|
||||
"Filter": "Filter",
|
||||
"Folder": "Ordner",
|
||||
"Forecast": "Prognose",
|
||||
@@ -67,14 +70,18 @@
|
||||
"ListExclusions": "Listenausschlüsse",
|
||||
"Lists": "Listen",
|
||||
"LogFiles": "Protokolle",
|
||||
"LogFilesLocationMessage": "Protokolldateien befinden sich in:",
|
||||
"Logging": "Protokollierung",
|
||||
"ManualImport": "Manueller Import",
|
||||
"MediaInfoDllCheckMessage": "MediaInfo Mediathek konnte nicht geladen werden {0}",
|
||||
"MediaManagement": "Medien",
|
||||
"Metadata": "Metadaten",
|
||||
"MinAvailability": "Min. Verfügbarkeit",
|
||||
"MinimumAvailability": "Mindestverfügbarkeit",
|
||||
"Missing": "Fehlend",
|
||||
"Monitor": "Beobachten",
|
||||
"MonoNotNetCoreCheckMessage": "Bitte aktualisiere auf die .NET Core-Version von Radarr. Mono Version wird mit dem nächsten Release von Radarr nicht mehr unterstützt.",
|
||||
"MonoTlsCheckMessage": "Der Workaround für Radarr Mono 4.x TLS ist weiterhin aktiviert. Entferne möglicherweise die Option MONO_TLS_PROVIDER=legacy",
|
||||
"Month": "Monat",
|
||||
"MoreInfo": "Mehr Infos",
|
||||
"MountCheckMessage": "Der Einhängepunkt, welcher einen Filmpfad enthält, ist schreibgeschützt eingehängt: ",
|
||||
@@ -298,6 +305,9 @@
|
||||
"PendingChangesDiscardChanges": "Änderungen verwerfen und schließen",
|
||||
"OverviewOptions": "Übersichts Optionen",
|
||||
"Overview": "Übersicht",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "Die momentane installierte Mono Version {0} wird unterstützt aber es wird empfohlen auf {1} zu updaten.",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "Die momentane installierte Mono Version {0} ist alt und wird nicht unterstützt. Bitte update Mono zur Version {1}.",
|
||||
"MonoVersionCheckNotSupportedMessage": "Die momentane installierte Mono Version {0} wird nicht länger unterstützt. Bitte update Mono zur Version {1}.",
|
||||
"MonitorMovie": "Film beobachten",
|
||||
"InteractiveImport": "Interaktiver Import",
|
||||
"ExistingMovies": "Vorhandene Filme",
|
||||
@@ -432,6 +442,8 @@
|
||||
"MinimumLimits": "Mindest Grenzen",
|
||||
"Mode": "Modus",
|
||||
"MonitoredHelpText": "Herunterladen wenn der Film verfügbar ist",
|
||||
"MonoVersion": "Mono Version",
|
||||
"MovieAvailableButMissing": "Film verfügbar, aber fehlend",
|
||||
"MovieFiles": "Film Dateien",
|
||||
"MovieFolderFormat": "Filmordner Format",
|
||||
"MovieID": "Film ID",
|
||||
@@ -471,6 +483,7 @@
|
||||
"PublishedDate": "Veröffentlichungs Datum",
|
||||
"QualityCutoffHasNotBeenMet": "Qualitätsschwelle wurde noch nicht erreicht",
|
||||
"QualitySettings": "Qualitäts Einstellungen",
|
||||
"Radarr": "Radarr",
|
||||
"RadarrTags": "Radarr Tags",
|
||||
"Real": "Echt",
|
||||
"Reason": "Grund",
|
||||
@@ -516,7 +529,7 @@
|
||||
"ShowTitleHelpText": "Filmtitel unter dem Plakat anzeigen",
|
||||
"ShowUnknownMovieItems": "Unzugeordente Filmeinträge anzeigen",
|
||||
"SkipFreeSpaceCheck": "Pürfung des freien Speichers überspringen",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Aktiviere diese Option, wenn es nicht möglich ist, den freien Speicherplatz des Stammverzeichnisses für Filme zu erkennen",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Aktiviere dies, wenn es nicht möglich ist, den freien Speicherplatz vom Stammverzeichnis zu ermitteln",
|
||||
"SorryThatMovieCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.",
|
||||
"SourcePath": "Quellpfad",
|
||||
"SourceRelativePath": "Relativer Quellpfad",
|
||||
@@ -690,6 +703,7 @@
|
||||
"BranchUpdateMechanism": "Git-Branch für den externen Updateablauf",
|
||||
"BranchUpdate": "Verwendeter Git-Branch für Aktualisierungen",
|
||||
"BeforeUpdate": "Vor dem Update",
|
||||
"AllowMovieChangeClickToChangeMovie": "Klicken um den Film zu bearbeiten",
|
||||
"AddingTag": "Tag hinzufügen",
|
||||
"YouCanAlsoSearch": "Es kann auch nach der TMDb oder IMDb ID eines Filmes gesucht werden. Z.B.: 'tmdb:71663'",
|
||||
"VisitGithubCustomFormatsAphrodite": "Besuche das Wiki für mehr Details: ",
|
||||
@@ -806,6 +820,7 @@
|
||||
"ImportIncludeQuality": "Stelle sicher, dass die Qualität im Dateinamen vorkommt ( z.B.: {0} )",
|
||||
"ImportErrors": "Import Fehler",
|
||||
"Existing": "Vorhanden",
|
||||
"Digital": "Digital",
|
||||
"StartProcessing": "Verarbeitung starten",
|
||||
"ProcessingFolders": "Verarbeitungsordner",
|
||||
"CancelProcessing": "Verarbeitung abbrechen",
|
||||
@@ -816,7 +831,7 @@
|
||||
"Tomorrow": "Morgen",
|
||||
"Today": "Heute",
|
||||
"ListTagsHelpText": "Tags Liseneinträge werden hinzugefügt mit",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Indexer ist seit über 6 Stunden wegen bestehenden Fehlern nicht verfügbar: {0}",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Indexer wegen über 6 Stunden langen bestehenden Fehlern nicht verfügbar: {0}",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Alle Indexer sind wegen über 6 Stunden langen bestehender Fehler nicht verfügbar",
|
||||
"EditMovieFile": "Filmdatei bearbeiten",
|
||||
"MovieIsRecommend": "Film wird aufgrund der jüngsten Hinzufügungen empfohlen",
|
||||
@@ -870,6 +885,7 @@
|
||||
"Small": "Klein",
|
||||
"SelectQuality": "Qualität auswählen",
|
||||
"SelectMovie": "Film auswählen",
|
||||
"SelectLanguges": "Sprachen auswählen",
|
||||
"SelectLanguage": "Sprache auswählen",
|
||||
"SelectDotDot": "Auswählen...",
|
||||
"Seconds": "Sekunden",
|
||||
@@ -928,7 +944,9 @@
|
||||
"Negated": "Negiert",
|
||||
"Negate": "Negieren",
|
||||
"MultiLanguage": "Mehrsprachig",
|
||||
"MovieWasDownloadedAndSorted": "Film wurde heruntergeladen und einsortiert",
|
||||
"MovieInvalidFormat": "Film: Ungütiges Format",
|
||||
"MovieHasntReleasedYet": "Film wurde noch nicht veröffentlicht",
|
||||
"MovieFilesTotaling": "Filmdateien insgesamt",
|
||||
"MovieChat": "Filmchat",
|
||||
"MoveFolders1": "Wilst du die Filmordner nach '{0}' verschieben ?",
|
||||
@@ -936,7 +954,7 @@
|
||||
"Months": "Monate",
|
||||
"MonitoredStatus": "Beobachtet/Status",
|
||||
"Monday": "Montag",
|
||||
"MissingFromDisk": "Radarr konnte die Datei nicht auf der Festplatte finden, daher wurde die Verknüpfung auf die Datei aus der Datenbank entfernt",
|
||||
"MissingFromDisk": "Radarr konnte die Datei nicht auf der Festplatte finden, daher wurde die Datei aus der Datenbank entfernt",
|
||||
"Minutes": "Minuten",
|
||||
"MinimumCustomFormatScore": "Minimum der eigenen Formate Bewertungspunkte",
|
||||
"Min": "Min.",
|
||||
@@ -974,6 +992,7 @@
|
||||
"FailedToLoadMovieFromAPI": "Film konnte nicht über die API geladen werden",
|
||||
"ExternalUpdater": "Radarr wurde so konfiguriert, dass ein externer Update Mechanismus benutzt wird",
|
||||
"ExcludeTitle": "{0} ausschließen? Dies wird Radarr daran hindern, es automatisch beim Listen synchronisieren hinzuzufügen.",
|
||||
"Example": "Beispiel",
|
||||
"ErrorRestoringBackup": "Fehler beim Wiederherstellen",
|
||||
"Enabled": "Aktiviert",
|
||||
"EditQualityProfile": "Qualitätsprofil bearbeiten",
|
||||
@@ -1012,6 +1031,7 @@
|
||||
"AreYouSureYouWantToRemoveSelectedItemsFromQueue": "Bist du sicher, dass du {0} Einträge aus der Warteschlange löschen willst?",
|
||||
"AreYouSureYouWantToDeleteFormat": "Bist du sicher, dass du das Formatierungstag {0} löschen willst ?",
|
||||
"AptUpdater": "Benutze 'apt' um das Update zu installieren",
|
||||
"AnnoucedMsg": "Film ist angekündigt",
|
||||
"Always": "Immer",
|
||||
"AllResultsHiddenFilter": "Keine Ergebnisse mit den ausgewählten Filtern",
|
||||
"AllMoviesInPathHaveBeenImported": "Alle Filme in {0} wurden importiert",
|
||||
@@ -1031,6 +1051,8 @@
|
||||
"ImportLibrary": "Mediathek Import",
|
||||
"ImportNotForDownloads": "Benutze dies NICHT um abgeschlossene Downloads deines Download Clients hinzuzufügen. Dies ist NUR für vorhandene organisierte Mediatheken und nicht für unsortierte Dateien.",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "Die derzeit installierte SQLite-Version {0} wird nicht mehr unterstützt. Bitte aktualisieren Sie SQLite auf mindestens Version {1}.",
|
||||
"NoCinemaRelease": "Keine Kinoveröffentlichung",
|
||||
"ReleaseDate": "VÖ Termine",
|
||||
"ShowCinemaRelease": "Erscheinungsdatum des Kinos anzeigen",
|
||||
"showCinemaReleaseHelpText": "Erscheinungsdatum des Kinos unter Poster anzeigen",
|
||||
"ShowReleaseDate": "Veröffentlichungsdatum anzeigen",
|
||||
@@ -1059,10 +1081,13 @@
|
||||
"RemotePathMappingCheckBadDockerPath": "Docker erkannt; Downloader {0} speichert Downloads in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Remote-Pfadzuordnungen und die Downloader Einstellungen.",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "Downloader {0} meldet Dateien in {1}, aber Radarr kann dieses Verzeichnis nicht sehen.Möglicherweise müssen die Verzeichnisreche angepasst werden.",
|
||||
"RemotePathMappingCheckRemoteDownloadClient": "Downloader {0} meldet Dateien in {1}, aber dieses Verzeichnis scheint nicht zu existieren. Möglicherweise fehle die Remote-Pfadzuordnung.",
|
||||
"RemotePathMappingCheckDockerFilesMissing": "Docker erkannt; Downloader {0} meldet Dateien in {1}, aber dieses Verzeichnis scheint nicht im Container zu existieren. Überprüfe deine Remote-Pfadzuordnungen und die Container Volume Einsellungen.",
|
||||
"RemotePathMappingCheckFolderPermissions": "Radarr kann das Downloadverzeichnis sehen, aber nicht verarbeiten {0}. Möglicherwiese ein Rechteproblem.",
|
||||
"RemotePathMappingCheckImportFailed": "Radarr konnte den Film nicht importieren. Prüfe die Logs für mehr Informtationen.",
|
||||
"RemotePathMappingCheckFileRemoved": "Datei {0} wurde während des Verarbeitens entfernt.",
|
||||
"RemotePathMappingCheckDownloadPermissions": "Radarr kann den Download sehen, aber nicht verarbeiten {0}. Möglicherweise ein Rechteproblem.",
|
||||
"MonoBSDSupportCheckMessage": "Das Betriebssystem {0} wird mit dem nächsten Release von Radarr nicht mehr unterstützt.",
|
||||
"Monox86SupportCheckMessage": "Das momentan verwendete Betriebssystem ist 32 Bit und wird mit dem nächsten Release von Radarr nicht mehr unterstützt.",
|
||||
"ImportListMultipleMissingRoots": "Mehrere Stammverzeichnisse fehlen für Importlist: {0}",
|
||||
"ImportListMissingRoot": "Fehlendes Stammverzeichnis für Importlist(en): {0}",
|
||||
"BypassDelayIfHighestQualityHelpText": "Verzögerung ignorieren wenn das Release die höchste aktivierte Qualität des Qualitätsprofils mit dem bevorzugtem Protokoll ist",
|
||||
@@ -1086,20 +1111,5 @@
|
||||
"RemoveSelectedItems": "Entferne ausgewählte Einträge",
|
||||
"RemoveFailed": "Entfernen fehlgeschlagen",
|
||||
"RemoveCompleted": "Abgeschlossene entfernen",
|
||||
"RemoveDownloadsAlert": "Die Einstellungen zum entfernen wurde in den einzelnen Downloader Einstellungen in der obigen Tabelle verschoben.",
|
||||
"LocalPath": "Lokaler Pfad",
|
||||
"AnnouncedMsg": "Film ist angekündigt",
|
||||
"ClickToChangeReleaseGroup": "Releasegruppe ändern",
|
||||
"Filters": "Filter",
|
||||
"SelectLanguages": "Sprachen auswählen",
|
||||
"IndexerJackettAll": "Indexer, welche den nicht unterstützten 'all'-Endpoint von Jackett verwenden: {0}",
|
||||
"ManualImportSetReleaseGroup": "Manueller Import - Releasegruppe setzen",
|
||||
"OnApplicationUpdate": "Bei Programm-Update",
|
||||
"OnApplicationUpdateHelpText": "Bei Programm-Update",
|
||||
"RemotePath": "Entfernter Pfad",
|
||||
"SelectReleaseGroup": "Releasgruppe auswählen",
|
||||
"SizeLimit": "Grössenlimit",
|
||||
"SetReleaseGroup": "Releasgruppe setzen",
|
||||
"IndexerDownloadClientHelpText": "Wähle aus, welcher Download-Client für diesen Indexer verwendet wird",
|
||||
"DiscordUrlInSlackNotification": "Du hast eine Discord-Benachrichtigung als Slack-Benachrichtigung eingerichtet. Richte diese für bessere Funktionalität als Discord-Benachrichtigung ein. Folgende Benachrichtigen sind betroffen: {}"
|
||||
"RemoveDownloadsAlert": "Die Einstellungen zum entfernen wurde in den einzelnen Downloader Einstellungen in der obigen Tabelle verschoben."
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
"Forecast": "Πρόβλεψη",
|
||||
"Folder": "Φάκελος",
|
||||
"Filter": "Φίλτρο",
|
||||
"Filesize": "Μέγεθος Αρχείου",
|
||||
"Files": "Αρχεία",
|
||||
"Filename": "Όνομα Αρχείου",
|
||||
"FileManagement": "Διαχείρηση Αρχείων",
|
||||
@@ -56,6 +57,8 @@
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Προγράμματα λήψης που είναι μη διαθέσιμα λόγων αποτυχιών: {0}",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Όλα τα προγράμματα λήψης είναι μη διαθέσιμα λόγων αποτυχιών",
|
||||
"DownloadClientsSettingsSummary": "Προγράμματα λήψης, διαχείριση λήψεων και αντιστοίχηση remote path",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "Η τρέχουσα εγκατάσταση του .Net Framework {0} είναι παλιά και δεν υποστηρίζεται. Παρακαλούμε αναβαθμίστε το .Net Framework σε τουλάχιστον {1}.",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "Η τρέχουσα εγκατάσταση του .Net Framework {0} υποστηρίζεται αλλά θα σας συμβουλεύαμε να αναβαθμίσετε τουλάχιστον στην {1}.",
|
||||
"DelayProfiles": "Προφίλ χρονοκαθυστέρησης",
|
||||
"CustomFormatsSettingsSummary": "Custom Formats και Ρυθμίσεις",
|
||||
"CustomFormats": "Custom Formats",
|
||||
@@ -169,6 +172,7 @@
|
||||
"Always": "Πάντα",
|
||||
"AnalyseVideoFiles": "Ανάλυση αρχείων βίντεο",
|
||||
"AnalyticsEnabledHelpText": "Στείλτε ανώνυμες πληροφορίες χρήσης και σφάλματος στους διακομιστές του Radarr. Αυτό περιλαμβάνει πληροφορίες στο πρόγραμμα περιήγησής σας, ποιες σελίδες Radarr WebUI χρησιμοποιείτε, αναφορά σφαλμάτων καθώς και έκδοση λειτουργικού συστήματος και χρόνου εκτέλεσης. Θα χρησιμοποιήσουμε αυτές τις πληροφορίες για να δώσουμε προτεραιότητα σε λειτουργίες και διορθώσεις σφαλμάτων.",
|
||||
"AnnoucedMsg": "Η ταινία ανακοινώνεται",
|
||||
"AppDataDirectory": "Κατάλογος AppData",
|
||||
"AptUpdater": "Χρησιμοποιήστε το apt για να εγκαταστήσετε την ενημέρωση",
|
||||
"AreYouSureYouWantToDeleteFormat": "Είστε βέβαιοι ότι θέλετε να διαγράψετε την ετικέτα μορφής {0};",
|
||||
@@ -255,6 +259,7 @@
|
||||
"MovieIsMonitored": "Η ταινία παρακολουθείται",
|
||||
"DeleteDownloadClient": "Διαγραφή προγράμματος-πελάτη λήψης",
|
||||
"DeleteListMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη λίστα \"{0}\";",
|
||||
"Radarr": "Ραντάρ",
|
||||
"DeleteMovieFolderLabel": "Διαγραφή φακέλου ταινίας",
|
||||
"DockerUpdater": "ενημερώστε το κοντέινερ για να λάβετε την ενημέρωση",
|
||||
"EditGroups": "Επεξεργασία ομάδων",
|
||||
@@ -279,9 +284,13 @@
|
||||
"Minutes": "Λεπτά",
|
||||
"MissingFromDisk": "Ο Radarr δεν μπόρεσε να βρει το αρχείο στο δίσκο και έτσι καταργήθηκε",
|
||||
"Monday": "Δευτέρα",
|
||||
"MonoVersion": "Μονο έκδοση",
|
||||
"MonoVersionCheckNotSupportedMessage": "Η τρέχουσα εγκατεστημένη έκδοση Mono {0} δεν υποστηρίζεται πλέον. Αναβαθμίστε το Mono σε έκδοση {1}.",
|
||||
"MoveFiles": "Μετακίνηση αρχείων",
|
||||
"MovieFilesTotaling": "Συνολικά αρχεία ταινιών",
|
||||
"MovieHasntReleasedYet": "Η ταινία δεν έχει κυκλοφορήσει ακόμα",
|
||||
"MovieIsRecommend": "Η ταινία συνιστάται με βάση την πρόσφατη προσθήκη",
|
||||
"MovieWasDownloadedAndSorted": "Η ταινία έγινε λήψη και ταξινόμηση",
|
||||
"NegateHelpText": "Εάν επιλεγεί, η προσαρμοσμένη μορφή δεν θα εφαρμοστεί εάν αντιστοιχεί σε αυτήν την {0} συνθήκη.",
|
||||
"NextExecution": "Επόμενη εκτέλεση",
|
||||
"NoAltTitle": "Χωρίς εναλλακτικούς τίτλους.",
|
||||
@@ -375,11 +384,14 @@
|
||||
"MaximumSizeHelpText": "Μέγιστο μέγεθος για μια έκδοση που θα αρπάξει σε MB. Ορίστε στο μηδέν για να ορίσετε σε απεριόριστο",
|
||||
"Mechanism": "Μηχανισμός",
|
||||
"MediaInfo": "Πληροφορίες πολυμέσων",
|
||||
"MediaInfoDllCheckMessage": "Δεν ήταν δυνατή η φόρτωση της βιβλιοθήκης MediaInfo {0}",
|
||||
"MediaManagement": "Διαχείριση μέσων",
|
||||
"MediaManagementSettings": "Ρυθμίσεις διαχείρισης πολυμέσων",
|
||||
"MediaManagementSettingsSummary": "Ρυθμίσεις ονομασίας και διαχείρισης αρχείων",
|
||||
"MinutesSixty": "60 λεπτά: {0}",
|
||||
"Missing": "Λείπει",
|
||||
"MonoNotNetCoreCheckMessage": "Αναβαθμίστε στην έκδοση .NET Core του Radarr",
|
||||
"MonoTlsCheckMessage": "Η λύση Radarr Mono 4.x tls είναι ακόμα ενεργοποιημένη, εξετάστε το ενδεχόμενο να καταργήσετε το MONO_TLS_PROVIDER = επιλογή περιβάλλοντος παλαιού τύπου",
|
||||
"Month": "Μήνας",
|
||||
"MoreDetails": "Περισσότερες λεπτομέρειες",
|
||||
"MountCheckMessage": "Το προσάρτημα που περιέχει μια διαδρομή ταινίας είναι τοποθετημένο μόνο για ανάγνωση: ",
|
||||
@@ -460,6 +472,7 @@
|
||||
"AllowHardcodedSubsHelpText": "Οι ανιχνευόμενοι κωδικοποιημένοι συνδρομητές θα ληφθούν αυτόματα",
|
||||
"QualityProfile": "Ποιοτικό προφίλ",
|
||||
"QualityProfiles": "Προφίλ ποιότητας",
|
||||
"AllowMovieChangeClickToChangeMovie": "Κάντε κλικ για να αλλάξετε ταινία",
|
||||
"QuickImport": "Γρήγορη εισαγωγή",
|
||||
"RadarrSupportsAnyDownloadClient": "Το Radarr υποστηρίζει οποιονδήποτε πελάτη λήψης που χρησιμοποιεί το πρότυπο Newznab, καθώς και άλλους πελάτες λήψης που αναφέρονται παρακάτω.",
|
||||
"AlreadyInYourLibrary": "Ήδη στη βιβλιοθήκη σας",
|
||||
@@ -557,6 +570,7 @@
|
||||
"DeleteSelectedMovieFiles": "Διαγραφή επιλεγμένων αρχείων ταινιών",
|
||||
"DeleteTheMovieFolder": "Ο φάκελος ταινίας \"{0}\" και όλο το περιεχόμενό της θα διαγραφούν.",
|
||||
"DestinationRelativePath": "Σχετική διαδρομή προορισμού",
|
||||
"Digital": "Ψηφιακό",
|
||||
"Discord": "Διχόνοια",
|
||||
"Docker": "Λιμενεργάτης",
|
||||
"Donations": "Δωρεές",
|
||||
@@ -593,6 +607,7 @@
|
||||
"Error": "Λάθος",
|
||||
"ErrorLoadingPreviews": "Σφάλμα κατά τη φόρτωση προεπισκοπήσεων",
|
||||
"ErrorRestoringBackup": "Σφάλμα κατά την επαναφορά του αντιγράφου ασφαλείας",
|
||||
"Example": "Παράδειγμα",
|
||||
"Exception": "Εξαίρεση",
|
||||
"Excluded": "Εξαιρείται",
|
||||
"Existing": "Υφιστάμενο",
|
||||
@@ -670,6 +685,7 @@
|
||||
"ListSettings": "Ρυθμίσεις λίστας",
|
||||
"ListSyncLevelHelpText": "Οι ταινίες στη βιβλιοθήκη θα καταργηθούν ή θα παρακολουθούνται, εάν δεν βρίσκονται στη λίστα σας",
|
||||
"LogFiles": "Αρχεία καταγραφής",
|
||||
"LogFilesLocationMessage": "Τα αρχεία καταγραφής βρίσκονται σε:",
|
||||
"Logging": "Ξύλευση",
|
||||
"LogLevel": "Επίπεδο καταγραφής",
|
||||
"LogLevelTraceHelpTextWarning": "Η καταγραφή ιχνών πρέπει να ενεργοποιηθεί προσωρινά",
|
||||
@@ -705,10 +721,13 @@
|
||||
"MonitoredOnly": "Παρακολούθηση μόνο",
|
||||
"MonitoredStatus": "Παρακολούθηση / Κατάσταση",
|
||||
"MonitorMovie": "Παρακολούθηση ταινίας",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "Η τρέχουσα εγκατεστημένη έκδοση Mono {0} είναι παλιά και δεν υποστηρίζεται. Αναβαθμίστε το Mono σε έκδοση {1}.",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "Η τρέχουσα εγκατεστημένη έκδοση Mono {0} υποστηρίζεται, αλλά συνιστάται η αναβάθμιση σε {1}.",
|
||||
"Months": "Μήνες",
|
||||
"MoreControlCFText": "Θέλετε περισσότερο έλεγχο σχετικά με τις προτιμήσεις λήψεων; Πρόσθεσε ένα",
|
||||
"Movie": "Ταινία",
|
||||
"MovieAlreadyExcluded": "Η ταινία εξαιρείται ήδη",
|
||||
"MovieAvailableButMissing": "Διαθέσιμη ταινία, αλλά λείπει",
|
||||
"MovieChat": "Συνομιλία ταινίας",
|
||||
"MovieDetailsNextMovie": "Λεπτομέρειες ταινίας: Επόμενη ταινία",
|
||||
"MovieIndexScrollBottom": "Ευρετήριο ταινιών: Κύλιση κάτω",
|
||||
@@ -836,6 +855,7 @@
|
||||
"SelectDotDot": "'Επιλέγω...",
|
||||
"SelectFolder": "Επιλέξτε φάκελο",
|
||||
"SelectLanguage": "Επιλέξτε γλώσσα",
|
||||
"SelectLanguges": "Επιλέξτε Γλώσσες",
|
||||
"SelectMovie": "Επιλέξτε ταινία",
|
||||
"SelectQuality": "Επιλέξτε Ποιότητα",
|
||||
"SetPermissions": "Ορίστε δικαιώματα",
|
||||
@@ -1031,6 +1051,8 @@
|
||||
"ReleaseWillBeProcessedInterp": "Η κυκλοφορία θα υποβληθεί σε επεξεργασία {0}",
|
||||
"Search": "Αναζήτηση",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "Η τρέχουσα εγκατεστημένη έκδοση SQLite {0} δεν υποστηρίζεται πλέον. Αναβαθμίστε το SQLite σε τουλάχιστον έκδοση {1}.",
|
||||
"NoCinemaRelease": "Χωρίς κυκλοφορία κινηματογράφου",
|
||||
"ReleaseDate": "Ημερομηνίες κυκλοφορίας",
|
||||
"ShowCinemaRelease": "Εμφάνιση ημερομηνίας κυκλοφορίας κινηματογράφου",
|
||||
"showCinemaReleaseHelpText": "Εμφάνιση ημερομηνίας κυκλοφορίας κινηματογράφου κάτω από την αφίσα",
|
||||
"ShowReleaseDate": "Εμφάνιση ημερομηνίας κυκλοφορίας",
|
||||
|
||||
@@ -71,7 +71,6 @@
|
||||
"Authentication": "Authentication",
|
||||
"AuthenticationMethodHelpText": "Require Username and Password to access Radarr",
|
||||
"AuthForm": "Forms (Login Page)",
|
||||
"Auto": "Auto",
|
||||
"Automatic": "Automatic",
|
||||
"AutomaticSearch": "Automatic Search",
|
||||
"AutoRedownloadFailedHelpText": "Automatically search for and attempt to download a different release",
|
||||
@@ -263,7 +262,6 @@
|
||||
"DownloadPropersAndRepacksHelpTextWarning": "Use custom formats for automatic upgrades to Propers/Repacks",
|
||||
"DownloadWarning": "Download warning: {0}",
|
||||
"DownloadWarningCheckDownloadClientForMoreDetails": "Download warning: check download client for more details",
|
||||
"Duration": "Duration",
|
||||
"Edit": "Edit",
|
||||
"EditCustomFormat": "Edit Custom Format",
|
||||
"EditDelayProfile": "Edit Delay Profile",
|
||||
@@ -345,7 +343,7 @@
|
||||
"ForMoreInformationOnTheIndividualImportListsClinkOnTheInfoButtons": "For more information on the individual import lists, click on the info buttons.",
|
||||
"ForMoreInformationOnTheIndividualIndexers": "For more information on the individual indexers, click on the info buttons.",
|
||||
"FreeSpace": "Free Space",
|
||||
"From": "from",
|
||||
"From": "From",
|
||||
"General": "General",
|
||||
"GeneralSettings": "General Settings",
|
||||
"GeneralSettingsSummary": "Port, SSL, username/password, proxy, analytics and updates",
|
||||
@@ -384,8 +382,6 @@
|
||||
"IllRestartLater": "I'll restart later",
|
||||
"Images": "Images",
|
||||
"IMDb": "IMDb",
|
||||
"ImdbRating": "IMDb Rating",
|
||||
"ImdbVotes": "IMDb Votes",
|
||||
"Import": "Import",
|
||||
"ImportCustomFormat": "Import Custom Format",
|
||||
"Imported": "Imported",
|
||||
@@ -423,11 +419,10 @@
|
||||
"Indexer": "Indexer",
|
||||
"IndexerDownloadClientHelpText": "Specify which download client is used for grabs from this indexer",
|
||||
"IndexerFlags": "Indexer Flags",
|
||||
"IndexerJackettAll": "Indexers using the unsupported Jackett 'all' endpoint: {0}",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "All indexers are unavailable due to failures for more than 6 hours",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Indexers unavailable due to failures for more than 6 hours: {0}",
|
||||
"IndexerPriority": "Indexer Priority",
|
||||
"IndexerPriorityHelpText": "Indexer Priority from 1 (Highest) to 50 (Lowest). Default: 25. Used when grabbing releases as a tiebreaker for otherwise equal releases, Radarr will still use all enabled indexers for RSS Sync and Searching",
|
||||
"IndexerPriorityHelpText": "Indexer Priority from 1 (Highest) to 50 (Lowest). Default: 25.",
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "All rss-capable indexers are temporarily unavailable due to recent indexer errors",
|
||||
"IndexerRssHealthCheckNoIndexers": "No indexers available with RSS sync enabled, Radarr will not grab new releases automatically",
|
||||
"Indexers": "Indexers",
|
||||
@@ -463,7 +458,6 @@
|
||||
"Level": "Level",
|
||||
"LinkHere": "here",
|
||||
"Links": "Links",
|
||||
"List": "List",
|
||||
"ListExclusions": "List Exclusions",
|
||||
"Lists": "Lists",
|
||||
"ListSettings": "List Settings",
|
||||
@@ -590,7 +584,6 @@
|
||||
"Negated": "Negated",
|
||||
"NegateHelpText": "If checked, the custom format will not apply if this {0} condition matches.",
|
||||
"NetCore": ".NET",
|
||||
"Never": "Never",
|
||||
"New": "New",
|
||||
"NextExecution": "Next Execution",
|
||||
"No": "No",
|
||||
@@ -729,7 +722,6 @@
|
||||
"RadarrSupportsCustomConditionsAgainstTheReleasePropertiesBelow": "Radarr supports custom conditions against the release properties below.",
|
||||
"RadarrTags": "Radarr Tags",
|
||||
"RadarrUpdated": "Radarr Updated",
|
||||
"Rating": "Rating",
|
||||
"Ratings": "Ratings",
|
||||
"ReadTheWikiForMoreInformation": "Read the Wiki for more information",
|
||||
"Real": "Real",
|
||||
@@ -946,7 +938,6 @@
|
||||
"SSLCertPathHelpText": "Path to pfx file",
|
||||
"SSLPort": "SSL Port",
|
||||
"StandardMovieFormat": "Standard Movie Format",
|
||||
"Started": "Started",
|
||||
"StartImport": "Start Import",
|
||||
"StartProcessing": "Start Processing",
|
||||
"StartSearchForMissingMovie": "Start search for missing movie",
|
||||
@@ -977,7 +968,7 @@
|
||||
"TestAllIndexers": "Test All Indexers",
|
||||
"TestAllLists": "Test All Lists",
|
||||
"TheLogLevelDefault": "The log level defaults to 'Info' and can be changed in",
|
||||
"ThisCannotBeCancelled": "This cannot be cancelled once started without disabling all of your indexers.",
|
||||
"ThisCannotBeCancelled": "This cannot be cancelled once started without restarting Radarr.",
|
||||
"ThisConditionMatchesUsingRegularExpressions": "This condition matches using Regular Expressions. Note that the characters {0} have special meanings and need escaping with a {1}",
|
||||
"Time": "Time",
|
||||
"TimeFormat": "Time Format",
|
||||
@@ -987,8 +978,6 @@
|
||||
"TMDb": "TMDb",
|
||||
"TMDBId": "TMDb Id",
|
||||
"TmdbIdHelpText": "The TMDb Id of the movie to exclude",
|
||||
"TmdbRating": "TMDb Rating",
|
||||
"TmdbVotes": "TMDb Votes",
|
||||
"Today": "Today",
|
||||
"Tomorrow": "Tomorrow",
|
||||
"TorrentDelay": "Torrent Delay",
|
||||
@@ -1094,7 +1083,6 @@
|
||||
"VideoCodec": "Video Codec",
|
||||
"View": "View",
|
||||
"VisitGithubCustomFormatsAphrodite": "Visit the wiki for more details: ",
|
||||
"Waiting": "Waiting",
|
||||
"WaitingToImport": "Waiting to Import",
|
||||
"WaitingToProcess": "Waiting to Process",
|
||||
"Wanted": "Wanted",
|
||||
@@ -1113,4 +1101,4 @@
|
||||
"YesMoveFiles": "Yes, Move the Files",
|
||||
"Yesterday": "Yesterday",
|
||||
"YouCanAlsoSearch": "You can also search using TMDb ID or IMDb ID of a movie. e.g. `tmdb:71663`"
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@
|
||||
"Forecast": "Pronóstico",
|
||||
"Folder": "Carpeta",
|
||||
"Filter": "Filtro",
|
||||
"Filesize": "Taman̄o de archivo",
|
||||
"Files": "Archivos",
|
||||
"FileManagement": "Administración de Archivos",
|
||||
"FailedDownloadHandling": "Manipulación de Descargas Fallidas",
|
||||
@@ -30,6 +31,8 @@
|
||||
"DownloadClients": "Gestores de Descargas",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Incapaz de comunicarse con {0}.",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Ningún gestor de descargas disponible",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "El .Net Framework {0} instalado actualmente es antiguo y por lo tanto, no compatible. Por favor actualiza .Net Framework a por lo menos, {1}.",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "El .Net Framework {0} instalado actualmente es compatible pero recomendamos actualizar a por lo menos {1}.",
|
||||
"DiskSpace": "Espacio en Disco",
|
||||
"Discover": "Descubrir",
|
||||
"Delete": "Borrar",
|
||||
@@ -126,6 +129,7 @@
|
||||
"ImportListStatusCheckAllClientMessage": "Las listas no están disponibles debido a errores",
|
||||
"Movies": "Películas",
|
||||
"MovieNaming": "Renombrar Películas",
|
||||
"MonoNotNetCoreCheckMessage": "Por favor actualiza a la versión .NET Core de Radarr, versiones de Mono no serán soportadas en la siguiente actualización",
|
||||
"MovieIndex": "Índice de Películas",
|
||||
"MovieEditor": "Editor de Películas",
|
||||
"Movie": "Película",
|
||||
@@ -137,8 +141,10 @@
|
||||
"MinAvailability": "Disponibilidad mínima",
|
||||
"Metadata": "Metadatos",
|
||||
"MediaManagement": "Multimedia",
|
||||
"MediaInfoDllCheckMessage": "La Librería MediaInfo no se ha cargado {0}",
|
||||
"ManualImport": "Importar Manualmente",
|
||||
"Logging": "Registro de eventos",
|
||||
"LogFilesLocationMessage": "Los archivos de registro se encuentran en:",
|
||||
"LogFiles": "Archivos de Registro",
|
||||
"Lists": "Listas",
|
||||
"ListExclusions": "Excluidas de las listas",
|
||||
@@ -170,6 +176,7 @@
|
||||
"OutputPath": "Ruta de Output",
|
||||
"MovieTitle": "Título de la Película",
|
||||
"MountCheckMessage": "El punto de montaje que contiene la ruta de una película es de read-only: ",
|
||||
"MonoTlsCheckMessage": "Radarr Mono 4.x tls todavía está habilitado, considera la posibilidad de eliminar la opción MONO_TLS_PROVIDER=legacy",
|
||||
"MonitoredOnly": "Monitoreadas Solamente",
|
||||
"MetadataSettingsSummary": "Crear archivos de metadatos cuando las películas se importen ó actualicen",
|
||||
"MediaManagementSettingsSummary": "Ajustes de nombrado y gestión de archivos",
|
||||
@@ -303,6 +310,9 @@
|
||||
"PendingChangesDiscardChanges": "Descartar cambios y salir",
|
||||
"OverviewOptions": "Opciones de Resumen",
|
||||
"Overview": "Resumen",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "Le versión de Mono {0} instalada actualmente es compatible pero se recomienda actualizar a {1}.",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "Le versión de Mono {0} instalada actualmente es antigua y no compatible. Por favor actualiza Mono a la versión {1}.",
|
||||
"MonoVersionCheckNotSupportedMessage": "La versión de Mono {0} instalada actualmente no es compatible. Por favor actualiza Mono a la versión {1}.",
|
||||
"SettingsEnableColorImpairedModeHelpText": "Estilo modificado para permitir que usuarios con problemas de color distingan mejor la información codificada por colores",
|
||||
"SettingsEnableColorImpairedMode": "Activar Modo De Color Degradado",
|
||||
"Group": "Grupo",
|
||||
@@ -509,6 +519,7 @@
|
||||
"Real": "Real",
|
||||
"ReadTheWikiForMoreInformation": "Lee la Wiki para más información",
|
||||
"RadarrTags": "Etiquetas de Radarr",
|
||||
"Radarr": "Radarr",
|
||||
"QualitySettings": "Ajustes de Calidad",
|
||||
"QualityCutoffHasNotBeenMet": "Corte de calidad no ha sido alcanzado",
|
||||
"PublishedDate": "Fecha de Publicación",
|
||||
@@ -549,6 +560,8 @@
|
||||
"MovieID": "ID de Película",
|
||||
"MovieFolderFormat": "Formato de Carpeta de Película",
|
||||
"MovieFiles": "Archivos",
|
||||
"MovieAvailableButMissing": "Película Disponible pero Ausente",
|
||||
"MonoVersion": "Version de Mono",
|
||||
"MonitoredHelpText": "Descargar película si está disponible",
|
||||
"Mode": "Modo",
|
||||
"MinimumLimits": "Límites Mínimos",
|
||||
@@ -690,6 +703,7 @@
|
||||
"BranchUpdateMechanism": "Rama usada por el mecanismo de actualización externo",
|
||||
"BranchUpdate": "Qué rama usar para actualizar Radarr",
|
||||
"BeforeUpdate": "Antes de actualizar",
|
||||
"AllowMovieChangeClickToChangeMovie": "Clic para cambiar la película",
|
||||
"AddingTag": "Añadiendo etiqueta",
|
||||
"RadarrSupportsCustomConditionsAgainstTheReleasePropertiesBelow": "Radarr soporta condiciones personalizadas contra las propiedades de estrenos abajo.",
|
||||
"ThisConditionMatchesUsingRegularExpressions": "Esta condición coincide con el uso de Expresiones Regulares. Tenga en cuenta que los caracteres {0} tienen significados especiales y necesitan escapar con un {1}",
|
||||
@@ -809,6 +823,7 @@
|
||||
"ImportErrors": "Errores al importar",
|
||||
"Existing": "Existente",
|
||||
"EditRestriction": "Editar Restricción",
|
||||
"Digital": "Digital",
|
||||
"CancelProcessing": "Cancelar Procesamiento",
|
||||
"AddRestriction": "Añadir Restricción",
|
||||
"AddMovie": "Añadir Película",
|
||||
@@ -852,6 +867,7 @@
|
||||
"AllMoviesInPathHaveBeenImported": "Se han importado todas las películas de {0}",
|
||||
"AllResultsHiddenFilter": "Todos los resultados están ocultos por el filtro aplicado",
|
||||
"Always": "Siempre",
|
||||
"AnnoucedMsg": "Se anuncia la película",
|
||||
"AptUpdater": "Use apt para instalar la actualización",
|
||||
"AreYouSureYouWantToDeleteFormat": "¿Está seguro de que desea eliminar la etiqueta de formato {0}?",
|
||||
"AreYouSureYouWantToRemoveSelectedItemsFromQueue": "¿Está seguro de que desea eliminar el {0} elemento {1} de la cola?",
|
||||
@@ -864,7 +880,9 @@
|
||||
"Minutes": "Minutos",
|
||||
"MissingFromDisk": "Radarr no pudo encontrar el archivo en el disco, por lo que fue eliminado",
|
||||
"Monday": "lunes",
|
||||
"MovieHasntReleasedYet": "La película aún no se ha estrenado",
|
||||
"MovieIsRecommend": "Se recomienda la película según la adición reciente",
|
||||
"MovieWasDownloadedAndSorted": "La película se descargó y se ordenó",
|
||||
"NextExecution": "Siguiente ejecución",
|
||||
"NoAltTitle": "Sin títulos alternativos.",
|
||||
"NoEventsFound": "No se encontraron eventos",
|
||||
@@ -933,6 +951,7 @@
|
||||
"EditListExclusion": "Editar exclusión de lista",
|
||||
"EditQualityProfile": "Editar perfil de calidad",
|
||||
"ErrorRestoringBackup": "Error al restaurar la copia de seguridad",
|
||||
"Example": "Ejemplo",
|
||||
"ExternalUpdater": "Radarr está configurado para usar un mecanismo de actualización externo",
|
||||
"FailedToLoadMovieFromAPI": "No se pudo cargar la película desde la API",
|
||||
"FailedToLoadQueue": "No se pudo cargar la cola",
|
||||
@@ -995,6 +1014,7 @@
|
||||
"Seconds": "Segundos",
|
||||
"SelectDotDot": "'Seleccione...",
|
||||
"SelectLanguage": "Seleccione el idioma",
|
||||
"SelectLanguges": "Seleccionar idiomas",
|
||||
"SelectMovie": "Seleccionar película",
|
||||
"SelectQuality": "Seleccionar calidad",
|
||||
"Small": "Pequeña",
|
||||
@@ -1031,10 +1051,12 @@
|
||||
"Yesterday": "Ayer",
|
||||
"MoveFolders2": "¿Le gustaría mover los archivos de película de '{0}' a '{1}'?",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "La versión {0} de SQLite instalada actualmente ya no es compatible. Actualice SQLite al menos a la versión {1}.",
|
||||
"ReleaseDate": "Fechas de Estreno",
|
||||
"ShowCinemaRelease": "Mostrar fecha de estreno en el cine",
|
||||
"showCinemaReleaseHelpText": "Mostrar la fecha de estreno en el cine debajo del cartel",
|
||||
"ShowReleaseDate": "Mostrar fecha de lanzamiento",
|
||||
"ShowReleaseDateHelpText": "Mostrar la fecha de lanzamiento debajo del cartel",
|
||||
"NoCinemaRelease": "Sin estreno en el cine",
|
||||
"OnMovieDelete": "Al eliminar la película",
|
||||
"OnMovieDeleteHelpText": "Al eliminar la película",
|
||||
"OnMovieFileDelete": "Al eliminar archivo de película",
|
||||
|
||||
@@ -23,13 +23,16 @@
|
||||
"Agenda": "Tehtävälista",
|
||||
"AgeWhenGrabbed": "Ikä (siepatessa)",
|
||||
"All": "Kaikki",
|
||||
"AllowMovieChangeClickToChangeMovie": "Paina vaihtaaksesi elokuvaa",
|
||||
"ConnectionLostMessage": "Radarr on menettänyt yhteyden taustajärjestelmään ja sivu on päivitettävä toiminnallisuuden palauttamiseksi.",
|
||||
"CutoffHelpText": "Kun tämä laatu on saavutettu, Radarr ei enää lataa elokuvia.",
|
||||
"DeleteQualityProfile": "Poista laatuprofiili",
|
||||
"DeleteSelectedMovieFiles": "Poista valitut elokuvatiedostot",
|
||||
"DestinationPath": "Kohdesijainti",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "Nykyinen .NET Framework -versio {0} on vanhentuntu, eikä sitä tueta. Päivitä .NET Framework vähintään versioon {1}.",
|
||||
"EditListExclusion": "Muokkaa poikkeussääntöä",
|
||||
"EnableAutomaticAdd": "Automaattilisäys",
|
||||
"Example": "Esimerkki",
|
||||
"ExistingTag": "Olemassa oleva tunniste",
|
||||
"ExtraFileExtensionsHelpTexts1": "Pilkulla eroteltu lista tuotavista oheistiedostoista (.nfo tuodaan nimellä .nfo-orig).",
|
||||
"FailedToLoadQueue": "Jonon lataus epäonnistui.",
|
||||
@@ -55,8 +58,10 @@
|
||||
"MinimumAgeHelpText": "Vain Usenet: NZB: n vähimmäisikä minuutteina, ennen kuin heidät napataan. Käytä tätä antaaksesi uusille julkaisuille aikaa levittää usenet-palveluntarjoajallesi.",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Estä tuonti, jos vapaan levytilan määrä sen jälkeen jää tässä määritetyn arvon alle.",
|
||||
"MonitoredHelpText": "Elokuvaa etsitään ja se ladataan, jos se on saatavilla.",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "Tällä hetkellä asennettu Mono-versio {0} on vanha ja sitä ei tueta. Päivitä Mono versioon {1}.",
|
||||
"MoveFolders1": "Haluatko siirtää elokuvakansiot kansioon {0}?",
|
||||
"MovieChat": "Elokuvakeskustelu",
|
||||
"MovieAvailableButMissing": "Elokuva saatavilla, mutta puuttuu",
|
||||
"MultiLanguage": "Monikielinen",
|
||||
"OrganizeModalNamingPattern": "Nimimalli:",
|
||||
"PosterOptions": "Julistevaihtoehdot",
|
||||
@@ -71,6 +76,7 @@
|
||||
"Runtime": "Ajonaika",
|
||||
"SearchCutoffUnmet": "Haun raja-arvo ei täytetty",
|
||||
"SearchFiltered": "Etsi suodatettuja",
|
||||
"SelectLanguges": "Valitse Kielet",
|
||||
"SetPermissionsLinuxHelpTextWarning": "Jos et ole varma näiden asetusten toiminnasta, älä muuta niitä.",
|
||||
"SettingsRemotePathMappingRemotePathHelpText": "Lataustyökalun käyttämän hakemiston juurisijainti",
|
||||
"SettingsShowRelativeDatesHelpText": "Käytä näyttääksesi suhteelliset päiväykset (tänään/eilen/yms.) tai käytä absoluuttisia päiväyksiä.",
|
||||
@@ -165,6 +171,7 @@
|
||||
"Always": "Aina",
|
||||
"AnalyseVideoFiles": "Analysoi videotiedostot",
|
||||
"AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja Radarrin palvelimille. Tämä sisältää tietoja selaimestasi, verkkokäyttöliittymän sivujen käytöstä, virheraportoinnista sekä käyttöjärjestelmästäsi ja versiosta. Käytämme näitä tietoja ominaisuuksien ja virhekorjauksien painotukseen.",
|
||||
"AnnoucedMsg": "Elokuva on julkistettu",
|
||||
"AptUpdater": "Käytä APT:ta päivityksen asennukseen",
|
||||
"AreYouSureYouWantToDeleteFormat": "Haluatko varmasti poistaa muotoilutagin '{0}'?",
|
||||
"AreYouSureYouWantToDeleteThisImportListExclusion": "Haluatko varmasti poistaa poikkeussäännön?",
|
||||
@@ -217,9 +224,13 @@
|
||||
"Minutes": "Minuuttia",
|
||||
"MissingFromDisk": "Radarr ei löytänyt tiedostoa levyltä, joten sen kytkös kirjaston elokuvaan poistettiin",
|
||||
"Monday": "maanantai",
|
||||
"MonoVersion": "Mono-versio",
|
||||
"MonoVersionCheckNotSupportedMessage": "Tällä hetkellä asennettua mono-versiota {0} ei enää tueta. Päivitä Mono versioon {1}.",
|
||||
"MoveFiles": "Siirrä tiedostoja",
|
||||
"MovieFiles": "Elokuvatiedostot",
|
||||
"MovieHasntReleasedYet": "Elokuvaa ei ole vielä julkaistu",
|
||||
"MovieIsRecommend": "Elokuvaa suositellaan viimeaikaisen lisäyksen perusteella",
|
||||
"MovieWasDownloadedAndSorted": "Elokuva ladattiin ja lajiteltiin",
|
||||
"NextExecution": "Seuraava toteutus",
|
||||
"NoAltTitle": "Ei vaihtoehtoisia nimikkeitä.",
|
||||
"NoEventsFound": "Tapahtumia ei löytynyt",
|
||||
@@ -300,12 +311,15 @@
|
||||
"MarkAsFailed": "Merkitse epäonnistuneeksi",
|
||||
"Mechanism": "Mekanismi",
|
||||
"MediaInfo": "Mediatiedot",
|
||||
"MediaInfoDllCheckMessage": "MediaInfo-kirjastoa ei voitu ladata {0}",
|
||||
"MediaManagement": "Median hallinta",
|
||||
"MediaManagementSettings": "Medianhallinnan asetukset",
|
||||
"MediaManagementSettingsSummary": "Tiedostojenhallinan ja nimeämisen asetukset.",
|
||||
"Hostname": "Osoite",
|
||||
"MinutesSixty": "60 minuuttia: {0}",
|
||||
"Missing": "Puuttuvat",
|
||||
"MonoNotNetCoreCheckMessage": "Päivitä Radarr sen .NET Core -versioon. Mono-versioita ei tueta seuraavassa julkaisussa.",
|
||||
"MonoTlsCheckMessage": "Radarr Mono 4.x -tls -kiertotapa on edelleen käytössä, harkitse MONO_TLS_PROVIDER = vanhan ympäristön vaihtoehdon poistamista",
|
||||
"Month": "Kuukausi",
|
||||
"MoreDetails": "Lisätietoja",
|
||||
"MountCheckMessage": "Elokuvareitin sisältävä kiinnike on asennettu vain luku -tilaan: ",
|
||||
@@ -415,6 +429,7 @@
|
||||
"QualityProfile": "Laatuprofiili",
|
||||
"QualityProfiles": "Laatuprofiilit",
|
||||
"QuickImport": "Siirrä automaattisesti",
|
||||
"Radarr": "Radarr",
|
||||
"RadarrSupportsAnyRSSMovieListsAsWellAsTheOneStatedBelow": "Radarr tukee kaikkia RSS-elokuvaluetteloita sekä alla mainittuja.",
|
||||
"RadarrTags": "Radarr-tunnisteet",
|
||||
"AlreadyInYourLibrary": "Elokuva on jo kirjastossasi",
|
||||
@@ -535,6 +550,7 @@
|
||||
"DestinationRelativePath": "Kohteen sijainnin suhteellinen polku",
|
||||
"DetailedProgressBar": "Yksityiskohtainen edistymispalkki",
|
||||
"Details": "Tiedot",
|
||||
"Digital": "Digitaalinen",
|
||||
"Discord": "Discord",
|
||||
"Discover": "Ehdotuksia",
|
||||
"DiskSpace": "Tallennustila",
|
||||
@@ -543,6 +559,7 @@
|
||||
"DoneEditingGroups": "Lopeta ryhmien muokkaus",
|
||||
"DoNotPrefer": "Älä suosi",
|
||||
"DoNotUpgradeAutomatically": "Älä päivitä automaattisesti",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "Nykyistä .NET Framework -versiota {0} tuetaan, mutta suosittelemme päivitystä vähintään versioon {1}.",
|
||||
"DownloadClient": "Lataustyökalu",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Lataustyökaluja ei ole käytettävissä",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Lataustyökalun '{0}' kanssa ei voida viestiä.",
|
||||
@@ -605,6 +622,7 @@
|
||||
"Filename": "Tiedostonimi",
|
||||
"FileNames": "Tiedostonimet",
|
||||
"Files": "Tiedostot",
|
||||
"Filesize": "Tiedostokoko",
|
||||
"FileWasDeletedByViaUI": "Tiedosto poistettiin käyttöliittymän kautta.",
|
||||
"FilterPlaceHolder": "Hae elokuvia",
|
||||
"FirstDayOfWeek": "Viikon ensimmäinen päivä",
|
||||
@@ -681,6 +699,7 @@
|
||||
"ListsSettingsSummary": "Tuontilistat ja niiden poikkeussäännöt.",
|
||||
"ListUpdateInterval": "Luettelon päivitysväli",
|
||||
"LogFiles": "Lokitiedostot",
|
||||
"LogFilesLocationMessage": "Lokitiedostot sijaitsevat:",
|
||||
"Logging": "Lokitietojen kirjaus",
|
||||
"LogLevel": "Kirjauksen taso",
|
||||
"LogLevelTraceHelpTextWarning": "Jäljityskirjausta tulisi käyttää vain väliaikaisesti",
|
||||
@@ -712,6 +731,7 @@
|
||||
"MonitoredOnly": "Valvottu",
|
||||
"MonitoredStatus": "Valvottu/tila",
|
||||
"MonitorMovie": "Elokuvan valvonta",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "Tällä hetkellä asennettua mono-versiota {0} tuetaan, mutta sen päivitystä versioon {1} suositellaan.",
|
||||
"Months": "Kuukaudet",
|
||||
"MoreControlCFText": "Haluatko hallinnoita latausten painotusta monipuolisemmin? Lisää",
|
||||
"MoreInfo": "Lisätietoja",
|
||||
@@ -1031,6 +1051,8 @@
|
||||
"ReleaseWillBeProcessedInterp": "Julkaisu käsitellään {0}",
|
||||
"Edit": "Muokkaa",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "Tällä hetkellä asennettua SQLite-versiota {0} ei enää tueta. Päivitä SQLite vähintään versioon {1}.",
|
||||
"NoCinemaRelease": "Ei teatterijulkaisua",
|
||||
"ReleaseDate": "Julkaisupäivät",
|
||||
"ShowCinemaRelease": "Näytä teatterijulkaisu",
|
||||
"showCinemaReleaseHelpText": "Näytä teatterijulkaisun päivämäärä julisteen alla.",
|
||||
"ShowReleaseDate": "Näytä fyysinen julkaisu",
|
||||
@@ -1063,12 +1085,15 @@
|
||||
"RemotePathMappingCheckImportFailed": "Radarr ei voinut tuoda elokuvaa. Tarkista loki saadaksesi lisätietoja.",
|
||||
"RemotePathMappingCheckLocalFolderMissing": "Etälataustyökalu '{0}' sijoittaa lataukset kohteeseen '{1}', mutta kansiota ei näytä olevan olemassa. Todennäköinen syy on puuttuva tai virheellinen etäsijainnin kartoitus.",
|
||||
"RemotePathMappingCheckWrongOSPath": "Etälataustyökalu '{0}' sijoittaa lataukset kohteeseen '{1}', mutta se ei ole kelvollinen '{2}' -sijainti. Tarkista etäsijaintiesi kartoitukset ja lataustyökalun asetukset.",
|
||||
"RemotePathMappingCheckDockerFilesMissing": "Käytät Dockeria ja lataustyökalu '{0}' ilmoitti latauskohteeksi '{1}', mutta kansiota ei näytä olevan olemassa containerissa. Tarkista etäsijaintiesi kartoitukset ja containerin tallennusmedia-asetukset.",
|
||||
"BlocklistHelpText": "Estää Radarria sieppaamasta tätä julkaisua automaattisesti uudelleen.",
|
||||
"From": "Lähde",
|
||||
"ImportListMissingRoot": "Tuontilistalta tai -listoilta puuttuu juurikansio: {0}",
|
||||
"ImportListMultipleMissingRoots": "Tuontilistoilta puuttuu useita juurikansioita: {0}",
|
||||
"IndexerTagHelpText": "Tietolähdettä käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille elokuville. Käytä kaikille jättämällä tyhjäksi.",
|
||||
"Letterboxd": "Letterboxd",
|
||||
"MonoBSDSupportCheckMessage": "Radarrin seuraava julkaisu ei tue '{0}' -käyttöjärjestelmää.",
|
||||
"Monox86SupportCheckMessage": "Nykyinen käyttöjärjestelmä on 32-bittinen, eikä Radarrin seuraava julkaisu enää tue sitä.",
|
||||
"NotificationTriggersHelpText": "Valitse ilmoituksen laukaisevat tapahtumat.",
|
||||
"RemotePathMappingCheckDownloadPermissions": "Radarr näkee, muttei voi käyttää ladattua elokuvaa '{0}'. Todennäköinen syy on sijainnin käyttöoikeusvirhe.",
|
||||
"RemotePathMappingCheckFileRemoved": "Tiedosto '{0}' poistettiin kesken käsittelyn.",
|
||||
@@ -1089,21 +1114,5 @@
|
||||
"RemoveDownloadsAlert": "Poistoasetukset on siirretty yllä olevassa taulukossa yksittäisten lataustyökalujen alle.",
|
||||
"OnApplicationUpdate": "Kun sovellus päivittyy",
|
||||
"OnApplicationUpdateHelpText": "Kun sovellus päivittyy",
|
||||
"DiscordUrlInSlackNotification": "Olet määrittänyt Discord-ilmoituksen Slack-ilmoitukseksi. Määritä se Discord-ilmoitukseksi parempaa toiminnallisuutta varten. Koskee seuraavia ilmoituksia: {0}",
|
||||
"LocalPath": "Paikallinen sijainti",
|
||||
"ManualImportSetReleaseGroup": "Manuaalinen tuonti - Määritä julkaisuryhmä",
|
||||
"AnnouncedMsg": "Elokuva on julkistettu",
|
||||
"IndexerDownloadClientHelpText": "Määritä tämän tietolähteen kanssa käytettävä lataustyökalu",
|
||||
"RemotePath": "Etäsijainti",
|
||||
"SelectLanguages": "Valitse kielet",
|
||||
"SelectReleaseGroup": "Valitse julkaisuryhmä",
|
||||
"SetReleaseGroup": "Määritä julkaisuryhmä",
|
||||
"SizeLimit": "Kokorajoitus",
|
||||
"ClickToChangeReleaseGroup": "Paina vaihtaaksesi julkaisuryhmää",
|
||||
"Filters": "Suodattimet",
|
||||
"TmdbRating": "TMDb-arvio",
|
||||
"IndexerJackettAll": "Jackettin ei-tuettua 'all'-päätettä käyttävät tietolähteet: {0}",
|
||||
"TmdbVotes": "TMDb-äänet",
|
||||
"ImdbRating": "IMDb-arvio",
|
||||
"ImdbVotes": "IMDb-äänet"
|
||||
"DiscordUrlInSlackNotification": "Olet määrittänyt Discord-ilmoituksen Slack-ilmoitukseksi. Määritä se Discord-ilmoitukseksi parempaa toiminnallisuutta varten. Koskee seuraavia ilmoituksia: {0}"
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"DotNetVersionCheckNotRecommendedMessage": "Le .Net Framework actuellement installé {0} est pris en charge, mais nous vous recommandons de mettre à niveau vers au moins {1}.",
|
||||
"IndexerStatusCheckAllClientMessage": "Tous les indexeurs sont indisponibles en raison d'échecs",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Aucun indexeur disponible avec la recherche interactive activée, Radarr ne fournira aucun résultat de recherche interactif",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Tous les indexeurs compatibles avec la recherche sont temporairement indisponibles en raison d'erreurs d'indexation récentes",
|
||||
@@ -19,6 +20,7 @@
|
||||
"Formats": "Formats",
|
||||
"Folder": "Dossier",
|
||||
"Filter": "Filtre",
|
||||
"Filesize": "Taille du fichier",
|
||||
"Files": "Fichiers",
|
||||
"FileManagement": "Gestion de fichiers",
|
||||
"FailedDownloadHandling": "Gestion des échecs de téléchargement",
|
||||
@@ -59,7 +61,7 @@
|
||||
"Activity": "Activité",
|
||||
"About": "À propos",
|
||||
"CustomFormatsSettingsSummary": "Paramètres et Formats personnalisés",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison d'échecs: {0}",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison d'échecs : {0}",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Clients de Téléchargement indisponibles en raison d'échecs : {0}",
|
||||
"SetTags": "Définir Tags",
|
||||
"ReleaseTitle": "Titre de la version",
|
||||
@@ -141,6 +143,7 @@
|
||||
"MountCheckMessage": "Le montage contenant un chemin de film est monté en lecture seule : ",
|
||||
"MoreInfo": "Plus d'informations",
|
||||
"Month": "Mois",
|
||||
"MonoTlsCheckMessage": "Solution de contournement Radarr Mono 4.x tls toujours activée, pensez à supprimer l'option d'environnement MONO_TLS_PROVIDER = legacy",
|
||||
"ListsSettingsSummary": "Importer listes, listes d'exclusions",
|
||||
"ListExclusions": "Liste des exclusions",
|
||||
"IndexersSettingsSummary": "Indexeurs et restrictions de version",
|
||||
@@ -150,7 +153,9 @@
|
||||
"DownloadClientsSettingsSummary": "Clients de Téléchargement, la gestion des téléchargements et les mappages de chemins d'accès à distance",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Impossible de communiquer avec {0}.",
|
||||
"DownloadClient": "Client de Téléchargement",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "Le .Net Framework {0} actuellement installé est ancien et n'est pas pris en charge. Veuillez mettre à niveau .Net Framework à au moins {1}.",
|
||||
"CutoffUnmet": "Limite non satisfaite",
|
||||
"MonoNotNetCoreCheckMessage": "Veuillez mettre à niveau vers la version .NET Core de Radarr, les versions de Mono ne seront plus supportées dans la prochaine version.",
|
||||
"MonitoredOnly": "Surveillé uniquement",
|
||||
"Monitor": "Surveiller",
|
||||
"Missing": "Manquant",
|
||||
@@ -160,9 +165,11 @@
|
||||
"Metadata": "Métadonnées",
|
||||
"MediaManagementSettingsSummary": "Paramètres de dénomination et de gestion des fichiers",
|
||||
"MediaManagement": "Gestion des médias",
|
||||
"MediaInfoDllCheckMessage": "Impossible de charger la bibliothèque MediaInfo {0}",
|
||||
"MassMovieSearch": "Recherche de films en masse",
|
||||
"ManualImport": "Importation manuelle",
|
||||
"Logging": "Enregistrement",
|
||||
"LogFilesLocationMessage": "Les fichiers journaux se trouvent dans :",
|
||||
"LogFiles": "Fichiers Log",
|
||||
"Lists": "Listes",
|
||||
"IndexerRssHealthCheckNoIndexers": "Aucun indexeur disponible avec la synchronisation RSS activée, Radarr ne récupérera pas automatiquement les nouvelles versions",
|
||||
@@ -298,6 +305,9 @@
|
||||
"PendingChangesMessage": "Vous avez effectué des changements non sauvegardés, souhaitez vous quitter cette page ?",
|
||||
"PendingChangesDiscardChanges": "Abandonner les changements et quitter",
|
||||
"Overview": "Aperçu",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "La version installée de Mono {0} est supportée mais mettre à jour en version {1} est recommandé.",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "La version installée de Mono {0} est vieille est n'est plus supportée. Merci de mettre à jour Mono en version {1}.",
|
||||
"MonoVersionCheckNotSupportedMessage": "La version installée de Mono {0} n'est plus supportée. Veuillez mettre à jour Mono en version {1}.",
|
||||
"MonitorMovie": "Surveiller le film",
|
||||
"InteractiveImport": "Importation interactive",
|
||||
"ExistingMovies": "Films existants",
|
||||
@@ -439,6 +449,7 @@
|
||||
"ApplyTagsHelpTexts3": "Retirer : Retire les tags renseignés",
|
||||
"ApplyTagsHelpTexts2": "Ajouter : Ajouter les tags à la liste de tags existants",
|
||||
"ApplyTagsHelpTexts1": "Comment appliquer des tags au film sélectionné",
|
||||
"AllowMovieChangeClickToChangeMovie": "Cliquer pour changer le film",
|
||||
"DeleteDownloadClientMessageText": "Êtes-vous sûr de vouloir supprimer le client de téléchargement '{0}' ?",
|
||||
"DeleteBackupMessageText": "Êtes-vous sûr de vouloir supprimer la sauvegarde '{0}' ?",
|
||||
"ErrorLoadingContents": "Erreur lors du chargement du contenu",
|
||||
@@ -533,8 +544,10 @@
|
||||
"MovieID": "ID Film",
|
||||
"MovieFiles": "Fichiers vidéo",
|
||||
"MovieExcludedFromAutomaticAdd": "Film exclu de l'ajout automatique",
|
||||
"MovieAvailableButMissing": "Film disponible, mais manquant",
|
||||
"MovieAlreadyExcluded": "Film déjà exclu",
|
||||
"MoreDetails": "Plus de détails",
|
||||
"MonoVersion": "Mono Version",
|
||||
"MonitoredHelpText": "Télécharger le film si disponible",
|
||||
"Mode": "Mode",
|
||||
"MissingNotMonitored": "Manquant (non surveillé)",
|
||||
@@ -739,6 +752,7 @@
|
||||
"RadarrSupportsAnyRSSMovieListsAsWellAsTheOneStatedBelow": "Radarr prend en charge toutes les listes de films RSS ainsi que celle indiquée ci-dessous.",
|
||||
"RadarrSupportsAnyIndexer": "Radarr prend en charge tout indexeur qui utilise le standard Newznab, ainsi que d'autres indexeurs répertoriés ci-dessous.",
|
||||
"RadarrSupportsAnyDownloadClient": "Radarr prend en charge de nombreux clients de téléchargement torrent et usenet.",
|
||||
"Radarr": "Radarr",
|
||||
"Queued": "En file d'attente",
|
||||
"QualitySettings": "Paramètres Qualité",
|
||||
"QualityCutoffHasNotBeenMet": "Le seuil de qualité n'a pas été atteint",
|
||||
@@ -809,6 +823,7 @@
|
||||
"ImportErrors": "Erreurs d'importation",
|
||||
"Existing": "Existant",
|
||||
"EditRestriction": "Modifier la restriction",
|
||||
"Digital": "Numérique",
|
||||
"CancelProcessing": "Annuler le traitement",
|
||||
"AddRestriction": "Ajouter Restriction",
|
||||
"AddMovie": "Ajouter Film",
|
||||
@@ -847,6 +862,7 @@
|
||||
"AllMoviesInPathHaveBeenImported": "Tous les films dans {0} ont été importés",
|
||||
"AllResultsHiddenFilter": "Tous les résultats ont été dissimulés par le filtre actuellement appliqué",
|
||||
"Always": "Toujours",
|
||||
"AnnoucedMsg": "Le film est annoncé",
|
||||
"AptUpdater": "Utiliser apt pour installer la mise à jour",
|
||||
"AreYouSureYouWantToRemoveSelectedItemsFromQueue": "Êtes-vous sûr de vouloir désinstaller {0} objet{1} de la file d'attente ?",
|
||||
"AuthBasic": "Authentification de base (popup)",
|
||||
@@ -881,6 +897,7 @@
|
||||
"EditGroups": "Modifier les groupes",
|
||||
"EditListExclusion": "Modifier la liste d'exclusion",
|
||||
"Enabled": "Activé",
|
||||
"Example": "Exemple",
|
||||
"ExcludeTitle": "Exclure {0} ? Raddar n'importeras plus automatiquement ce film des listes de synchronisation.",
|
||||
"FailedToLoadMovieFromAPI": "Erreur lors du chargement du film via l'API",
|
||||
"FailedToLoadQueue": "Erreur lors du chargement de la file",
|
||||
@@ -895,6 +912,7 @@
|
||||
"HttpHttps": "HTTP(S)",
|
||||
"ImportLibrary": "Import bibliothèque",
|
||||
"MissingFromDisk": "Radarr n'a pas pu trouver le fichier sur le disque, il a donc été supprimé",
|
||||
"MovieHasntReleasedYet": "Le film n'est pas encore sorti",
|
||||
"MovieIsRecommend": "Le film est recommandé en fonction de l'ajout récent",
|
||||
"NoAltTitle": "Pas de titres alternatifs.",
|
||||
"NoLinks": "Aucun liens",
|
||||
@@ -923,6 +941,7 @@
|
||||
"Minutes": "Minutes",
|
||||
"Monday": "Lundi",
|
||||
"MovieFilesTotaling": "Totalisation des fichiers vidéo",
|
||||
"MovieWasDownloadedAndSorted": "Le film a été téléchargé et trié",
|
||||
"NextExecution": "Prochaine exécution",
|
||||
"NoEventsFound": "Aucun événement trouvé",
|
||||
"NoMoveFilesSelf": " Non, je vais déplacer les fichiers moi-même",
|
||||
@@ -996,6 +1015,7 @@
|
||||
"Seconds": "Secondes",
|
||||
"SelectDotDot": "'Sélectionner...",
|
||||
"SelectLanguage": "Choisir la langue",
|
||||
"SelectLanguges": "Sélectionnez les langues",
|
||||
"SelectMovie": "Sélectionnez un film",
|
||||
"SelectQuality": "Sélectionnez la qualité",
|
||||
"Small": "Petit",
|
||||
@@ -1031,6 +1051,8 @@
|
||||
"YesMoveFiles": "Oui, déplacez les fichiers",
|
||||
"MoveFolders2": "Souhaitez-vous déplacer les fichiers vidéo de «{0}» vers «{1}» ?",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "La version {0} de SQLite actuellement installée n'est plus prise en charge. Veuillez mettre à niveau SQLite vers au moins la version {1}.",
|
||||
"NoCinemaRelease": "Pas de sortie cinéma",
|
||||
"ReleaseDate": "Date de sortie",
|
||||
"ShowCinemaRelease": "Afficher la date de sortie du cinéma",
|
||||
"showCinemaReleaseHelpText": "Afficher la date de sortie du cinéma sous l'affiche",
|
||||
"ShowReleaseDate": "Afficher la date de sortie",
|
||||
@@ -1052,6 +1074,8 @@
|
||||
"UpdateAvailable": "Une nouvelle mise à jour est disponible",
|
||||
"RemotePathMappingCheckImportFailed": "Radarr a échoué en important un Film. Vérifier vos logs pour plus de détails.",
|
||||
"RemotePathMappingCheckDownloadPermissions": "Radarr peut voir mais ne peut accéder au film téléchargé {0}. Il s'agit probablement d'une erreur de permissions.",
|
||||
"Monox86SupportCheckMessage": "Le système d'exploitation est en 32 bits, il ne sera plus supporté dans la prochaine version de Radarr.",
|
||||
"MonoBSDSupportCheckMessage": "Le système d'exploitation {0} ne pourra pas supporter la prochaine version de Radarr.",
|
||||
"ImportListMultipleMissingRoots": "Plusieurs dossiers racines sont manquants pour importer les listes : {0}",
|
||||
"ImportListMissingRoot": "Le dossier racine est manquant pour importer la/les listes : {0}",
|
||||
"Letterboxd": "Letterboxd",
|
||||
@@ -1072,19 +1096,5 @@
|
||||
"RemotePathMappingCheckGenericPermissions": "Le client de téléchargement {0} met les téléchargements dans {1} mais Radarr ne peut voir ce répertoire. Il est possible que vous ayez besoin d'ajuster les permissions de ce dossier.",
|
||||
"RemotePathMappingCheckLocalWrongOSPath": "Le client de téléchargement {0} met les téléchargements dans {1} mais il ne s'agit pas d'un chemin {2} valide. Vérifiez les paramètres de votre client de téléchargement.",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "Le client de téléchargement {0} met les téléchargements dans {1} mais Radarr ne peut voir ce répertoire. Il est possible que vous ayez besoin d'ajuster les permissions de ce dossier.",
|
||||
"RemotePathMappingCheckFilesLocalWrongOSPath": "Le client de téléchargement {0} met les téléchargements dans {1} mais il ne s'agit pas d'un chemin {2} valide. Vérifiez les paramètres de votre client de téléchargement.",
|
||||
"BypassDelayIfHighestQualityHelpText": "Outrepasser le délai quand la version a la plus haute qualité activée dans le profil de qualité avec le protocole préféré",
|
||||
"ClickToChangeReleaseGroup": "Cliquez pour changer de release group",
|
||||
"AnnouncedMsg": "Le film est annoncé",
|
||||
"Filters": "Filtres",
|
||||
"IndexerDownloadClientHelpText": "Précisez quel client de téléchargement est utilisé pour cet indexer",
|
||||
"TmdbRating": "Note TMDb",
|
||||
"IndexerTagHelpText": "Utiliser seulement cet indexeur pour les films avec au moins un tag correspondant. Laissez vide pour l'utiliser avec tous les films.",
|
||||
"IndexerJackettAll": "Les indexeurs utilisant le endpoint 'all' de Jackett: {0}",
|
||||
"ManualImportSetReleaseGroup": "Import manuel - Spécifier le groupe de Release",
|
||||
"TmdbVotes": "Votes TMDb",
|
||||
"ImdbRating": "Note IMDb",
|
||||
"ImdbVotes": "Votes IMDb",
|
||||
"LocalPath": "Chemin local",
|
||||
"DiscordUrlInSlackNotification": "Vous avez une configuration de notification Discord en tant que notification Slack. Configurez cela comme une notification Discord pour une meilleure fonctionnalité. Les notifications affectées sont: {0}"
|
||||
"RemotePathMappingCheckFilesLocalWrongOSPath": "Le client de téléchargement {0} met les téléchargements dans {1} mais il ne s'agit pas d'un chemin {2} valide. Vérifiez les paramètres de votre client de téléchargement."
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"TotalFileSize": "גודל קובץ כולל",
|
||||
"AddDownloadClient": "הוסף לקוח הורדות",
|
||||
"AddRootFolder": "הוסף תיקיית שורש",
|
||||
"AnnoucedMsg": "הסרט הוכרז",
|
||||
"AptUpdater": "השתמש ב- apt כדי להתקין את העדכון",
|
||||
"AreYouSureYouWantToDeleteFormat": "האם אתה בטוח שברצונך למחוק את תג הפורמט {0}?",
|
||||
"AvailabilityDelayHelpText": "משך הזמן לפני או אחרי התאריך הזמין לחיפוש הסרט",
|
||||
@@ -40,12 +41,14 @@
|
||||
"CutoffHelpText": "לאחר שהאיכות הזו תושג Radarr כבר לא תוריד סרטים",
|
||||
"BeforeUpdate": "לפני העדכון",
|
||||
"AllMoviesHiddenDueToFilter": "כל הסרטים מוסתרים בגלל המסנן שהוחל.",
|
||||
"AllowMovieChangeClickToChangeMovie": "לחץ כדי לשנות סרט",
|
||||
"Debug": "לנפות",
|
||||
"DelayProfile": "עיכוב פרופיל",
|
||||
"DeleteBackupMessageText": "האם אתה בטוח שברצונך למחוק את הגיבוי '{0}'?",
|
||||
"DeleteEmptyFolders": "מחק תיקיות ריקות",
|
||||
"DeleteFile": "מחק קובץ",
|
||||
"DestinationPath": "נתיב יעד",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "NET Framework המותקן כרגע {0} נתמך, אך אנו ממליצים לשדרג לפחות ל- {1}.",
|
||||
"DownloadClientUnavailable": "לקוח ההורדות אינו זמין",
|
||||
"DownloadWarningCheckDownloadClientForMoreDetails": "אזהרת הורדה: בדוק את לקוח ההורדות לפרטים נוספים",
|
||||
"EditMovie": "ערוך את הסרט",
|
||||
@@ -67,6 +70,7 @@
|
||||
"LinkHere": "כאן",
|
||||
"LogLevel": "רמת יומן",
|
||||
"MinimumAvailability": "זמינות מינימלית",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "גרסת מונו המותקנת כעת {0} נתמכת, אך מומלץ לשדרג ל- {1}.",
|
||||
"MovieIndexScrollTop": "אינדקס הסרטים: גלול למעלה",
|
||||
"RecycleBinCleanupDaysHelpText": "הגדר ל 0 כדי להשבית ניקוי אוטומטי",
|
||||
"ReleaseDates": "תאריכי שחרור",
|
||||
@@ -158,6 +162,7 @@
|
||||
"ChmodFolderHelpText": "אוקטאל, מוחל במהלך ייבוא / שינוי שם לתיקיות מדיה וקבצים (ללא סיביות ביצוע)",
|
||||
"AgeWhenGrabbed": "גיל (כאשר תופס)",
|
||||
"ChmodFolderHelpTextWarning": "זה עובד רק אם המשתמש שמפעיל את Radarr הוא הבעלים של הקובץ. עדיף לוודא שלקוח ההורדה מגדיר את ההרשאות כהלכה.",
|
||||
"MonoVersion": "גרסת מונו",
|
||||
"AddMoviesMonitored": "הוסף סרטים מנוטרים",
|
||||
"AddNew": "הוסף חדש",
|
||||
"ExcludeMovie": "אל תכלול את הסרט",
|
||||
@@ -214,6 +219,7 @@
|
||||
"MissingFromDisk": "Radarr לא הצליח למצוא את הקובץ בדיסק ולכן הוא הוסר",
|
||||
"Monday": "יוֹם שֵׁנִי",
|
||||
"MoveFiles": "העבר קבצים",
|
||||
"MovieHasntReleasedYet": "הסרט עדיין לא יצא",
|
||||
"NoEventsFound": "לא נמצאו אירועים",
|
||||
"NoLinks": "אין קישורים",
|
||||
"NoMinimumForAnyRuntime": "אין מינימום לכל זמן ריצה",
|
||||
@@ -302,12 +308,15 @@
|
||||
"MaximumSizeHelpText": "גודל מרבי לתפיסה שניתן יהיה לתפוס ב- MB. הגדר לאפס כדי להגדיר ללא הגבלה",
|
||||
"Mechanism": "מַנגָנוֹן",
|
||||
"MediaInfo": "מידע מדיה",
|
||||
"MediaInfoDllCheckMessage": "לא ניתן היה לטעון את ספריית MediaInfo {0}",
|
||||
"MediaManagement": "ניהול מדיה",
|
||||
"MediaManagementSettings": "הגדרות ניהול מדיה",
|
||||
"MediaManagementSettingsSummary": "הגדרות שמות וניהול קבצים",
|
||||
"Hostname": "שם מארח",
|
||||
"MinutesSixty": "60 דקות: {0}",
|
||||
"Missing": "חָסֵר",
|
||||
"MonoNotNetCoreCheckMessage": "אנא שדרג לגרסת .NET Core של Radarr",
|
||||
"MonoTlsCheckMessage": "הפיתרון לעקיפת הבעיה של Radarr Mono 4.x עדיין מופעל, שקול להסיר MONO_TLS_PROVIDER = אפשרות סביבה מדור קודם",
|
||||
"MoreDetails": "פרטים נוספים",
|
||||
"MountCheckMessage": "הר המכיל נתיב סרט מותקן לקריאה בלבד: ",
|
||||
"MovieFolderFormat": "פורמט תיקיית סרטים",
|
||||
@@ -323,6 +332,7 @@
|
||||
"Max": "מקסימום",
|
||||
"MovieIsRecommend": "מומלץ להשתמש בסרט על פי התוספת האחרונה",
|
||||
"MovieNaming": "שמות סרטים",
|
||||
"MovieWasDownloadedAndSorted": "הסרט הורד ומוין",
|
||||
"NegateHelpText": "אם מסומן, הפורמט המותאם אישית לא יחול אם תנאי זה {0} תואם.",
|
||||
"NextExecution": "הביצוע הבא",
|
||||
"NoAltTitle": "אין כותרות חלופיות.",
|
||||
@@ -360,6 +370,7 @@
|
||||
"Cast": "ללהק",
|
||||
"CheckForFinishedDownloadsInterval": "בדוק אם קיימת מרווח להורדות",
|
||||
"Component": "רְכִיב",
|
||||
"MonoVersionCheckNotSupportedMessage": "גרסת מונו המותקנת כעת {0} אינה נתמכת עוד. שדרג את מונו לגרסה {1}.",
|
||||
"Month": "חוֹדֶשׁ",
|
||||
"MustContain": "חייב להכיל",
|
||||
"Date": "תַאֲרִיך",
|
||||
@@ -420,6 +431,7 @@
|
||||
"QualityProfile": "פרופיל איכות",
|
||||
"QualityProfiles": "פרופילי איכות",
|
||||
"QuickImport": "ייבוא מהיר",
|
||||
"Radarr": "רדאר",
|
||||
"RadarrSupportsAnyDownloadClient": "Radarr תומך בכל לקוח הורדות המשתמש בתקן Newznab, כמו גם בלקוחות הורדה אחרים המפורטים להלן.",
|
||||
"RadarrSupportsAnyRSSMovieListsAsWellAsTheOneStatedBelow": "Radarr תומך בכל רשימות סרטי RSS כמו גם ברשימה המפורטת להלן.",
|
||||
"RadarrTags": "תגיות רדאר",
|
||||
@@ -532,6 +544,7 @@
|
||||
"DestinationRelativePath": "מסלול יחסי יעד",
|
||||
"DetailedProgressBar": "סרגל התקדמות מפורט",
|
||||
"Details": "פרטים",
|
||||
"Digital": "דִיגִיטָלי",
|
||||
"Discord": "מַחֲלוֹקֶת",
|
||||
"Discover": "לְגַלוֹת",
|
||||
"DiskSpace": "שטח דיסק",
|
||||
@@ -540,6 +553,7 @@
|
||||
"DoneEditingGroups": "עריכת קבוצות הסתיימה",
|
||||
"DoNotPrefer": "לא מעדיפים",
|
||||
"DoNotUpgradeAutomatically": "אל תשדרג אוטומטית",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": ".Net Framework המותקן כעת {0} ישן ואינו נתמך. שדרג את .Net Framework ל- {1} לפחות.",
|
||||
"DownloadClient": "הורד לקוח",
|
||||
"DownloadClientCheckNoneAvailableMessage": "אין לקוח להורדה זמין",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "לא ניתן לתקשר עם {0}.",
|
||||
@@ -585,6 +599,7 @@
|
||||
"ErrorLoadingPreviews": "שגיאה בטעינת תצוגה מקדימה",
|
||||
"ErrorRestoringBackup": "שגיאה בשחזור הגיבוי",
|
||||
"EventType": "סוג אירוע",
|
||||
"Example": "דוגמא",
|
||||
"Exception": "יוצא מן הכלל",
|
||||
"Excluded": "לא נכלל",
|
||||
"Existing": "קיים",
|
||||
@@ -602,6 +617,7 @@
|
||||
"Filename": "שם קובץ",
|
||||
"FileNames": "שמות קבצים",
|
||||
"Files": "קבצים",
|
||||
"Filesize": "גודל הקובץ",
|
||||
"FileWasDeletedByUpgrade": "הקובץ נמחק כדי לייבא שדרוג",
|
||||
"FileWasDeletedByViaUI": "הקובץ נמחק דרך ממשק המשתמש",
|
||||
"FilterPlaceHolder": "חפש סרטים",
|
||||
@@ -683,6 +699,7 @@
|
||||
"ListSyncLevelHelpText": "סרטים בספריה יוסרו או יפקחו עליהם אם אינם ברשימה שלך",
|
||||
"ListUpdateInterval": "מרווח עדכון רשימה",
|
||||
"LogFiles": "קבצי יומן",
|
||||
"LogFilesLocationMessage": "קבצי יומן רישום נמצאים ב:",
|
||||
"Logging": "רישום",
|
||||
"LogLevelTraceHelpTextWarning": "יש להפעיל רישום מעקב באופן זמני בלבד",
|
||||
"LogOnly": "יומן בלבד",
|
||||
@@ -717,12 +734,14 @@
|
||||
"MonitoredOnly": "מנוטר בלבד",
|
||||
"MonitoredStatus": "פיקוח / סטטוס",
|
||||
"MonitorMovie": "צג סרט",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "גרסת מונו המותקנת כיום {0} ישנה ואינה נתמכת. שדרג את מונו לגרסה {1}.",
|
||||
"Months": "חודשים",
|
||||
"MoreControlCFText": "רוצה שליטה רבה יותר על אילו הורדות מעדיפים? הוסף",
|
||||
"MoreInfo": "עוד מידע",
|
||||
"MoveFolders1": "האם ברצונך להעביר את תיקיות הסרטים ל '{0}'?",
|
||||
"Movie": "סרט",
|
||||
"MovieAlreadyExcluded": "הסרט כבר לא נכלל",
|
||||
"MovieAvailableButMissing": "הסרט זמין, אך חסר",
|
||||
"MovieChat": "צ'אט בסרט",
|
||||
"MovieDetailsNextMovie": "פרטי הסרט: הסרט הבא",
|
||||
"MovieIndexScrollBottom": "אינדקס סרטים: גלילה תחתונה",
|
||||
@@ -846,6 +865,7 @@
|
||||
"SelectDotDot": "'בחר...",
|
||||
"SelectFolder": "בחר תיקייה",
|
||||
"SelectLanguage": "בחר שפה",
|
||||
"SelectLanguges": "בחר שפות",
|
||||
"SelectMovie": "בחר סרט",
|
||||
"SelectQuality": "בחר איכות",
|
||||
"SetPermissions": "הגדר הרשאות",
|
||||
@@ -1032,6 +1052,8 @@
|
||||
"Edit": "לַעֲרוֹך",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "גרסת SQLite המותקנת כעת {0} אינה נתמכת עוד. אנא שדרג את SQLite לגרסה {1} לפחות.",
|
||||
"ShowReleaseDateHelpText": "הצג תאריך יציאה תחת הכרזה",
|
||||
"NoCinemaRelease": "אין מהדורה קולנועית",
|
||||
"ReleaseDate": "תאריכי שחרור",
|
||||
"ShowCinemaRelease": "הצג תאריך יציאה לקולנוע",
|
||||
"showCinemaReleaseHelpText": "הצג תאריך יציאה לקולנוע תחת הכרזה",
|
||||
"ShowReleaseDate": "הצגת תאריך פרסום",
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"AgeWhenGrabbed": "आयु (जब पकड़ा गया)",
|
||||
"AllowHardcodedSubs": "हार्डकोडेड सब्सक्रिप्शन की अनुमति दें",
|
||||
"AllowHardcodedSubsHelpText": "पता लगाया गया हार्डकोड सब्मिट अपने आप डाउनलोड हो जाएगा",
|
||||
"AllowMovieChangeClickToChangeMovie": "फिल्म बदलने के लिए क्लिक करें",
|
||||
"AlreadyInYourLibrary": "पहले से ही आपकी लाइब्रेरी में",
|
||||
"AreYouSureYouWantToDeleteThisDelayProfile": "क्या आप वाकई इस विलंब प्रोफ़ाइल को हटाना चाहते हैं?",
|
||||
"DeleteEmptyFoldersHelpText": "डिस्क स्कैन के दौरान और मूवी फ़ाइलों को हटाए जाने के दौरान खाली मूवी फ़ोल्डर हटाएं",
|
||||
@@ -70,6 +71,7 @@
|
||||
"DeleteTagMessageText": "क्या आप वाकई '{0}' टैग हटाना चाहते हैं?",
|
||||
"DestinationRelativePath": "गंतव्य सापेक्ष पथ",
|
||||
"DetailedProgressBar": "विस्तृत प्रगति पट्टी",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "वर्तमान में स्थापित। नेट फ्रेमवर्क {0} पुराना और असमर्थित है। कृपया .Net फ्रेमवर्क को कम से कम {1} पर अपग्रेड करें।",
|
||||
"DownloadClientUnavailable": "डाउनलोड क्लाइंट अनुपलब्ध है",
|
||||
"DownloadFailedCheckDownloadClientForMoreDetails": "डाउनलोड विफल: अधिक विवरण के लिए डाउनलोड क्लाइंट की जाँच करें",
|
||||
"DownloadPropersAndRepacksHelpTextWarning": "Propers / Repacks में स्वचालित उन्नयन के लिए कस्टम स्वरूपों का उपयोग करें",
|
||||
@@ -135,6 +137,7 @@
|
||||
"LaunchBrowserHelpText": " एक वेब ब्राउज़र खोलें और ऐप स्टार्ट पर रेडर होमपेज पर नेविगेट करें।",
|
||||
"ListSettings": "सूची सेटिंग्स",
|
||||
"ListSyncLevelHelpText": "यदि आपकी सूची में नहीं है, तो लाइब्रेरी में फ़िल्में हटा दी जाएंगी या उन्हें हटा दिया जाएगा",
|
||||
"LogFilesLocationMessage": "लॉग फ़ाइल में स्थित हैं:",
|
||||
"LogOnly": "केवल लॉग करें",
|
||||
"ManualImportSelectLanguage": "मैनुअल आयात - भाषा का चयन करें",
|
||||
"ManualImportSelectMovie": "मैनुअल आयात - मूवी का चयन करें",
|
||||
@@ -148,8 +151,11 @@
|
||||
"MinutesNinety": "90 मिनट: {0}",
|
||||
"Monitor": "मॉनिटर",
|
||||
"MonitoredStatus": "नजर रखी / स्थिति",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "वर्तमान में स्थापित मोनो संस्करण {0} पुराना और असमर्थित है। कृपया मोनो को संस्करण {1} में अपग्रेड करें।",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "वर्तमान में स्थापित मोनो संस्करण {0} समर्थित है लेकिन {1} में अपग्रेड करने की सिफारिश की गई है।",
|
||||
"MoreControlCFText": "कौन सा डाउनलोड पसंद किया जाता है, इस पर अधिक नियंत्रण चाहते हैं? एक जोड़ें",
|
||||
"Movie": "चलचित्र",
|
||||
"MovieAvailableButMissing": "मूवी उपलब्ध है, लेकिन गुम है",
|
||||
"MovieDetailsNextMovie": "मूवी विवरण: अगली फिल्म",
|
||||
"MovieIndexScrollBottom": "मूवी इंडेक्स: नीचे स्क्रॉल करें",
|
||||
"MovieIndexScrollTop": "मूवी इंडेक्स: टॉप स्क्रॉल करें",
|
||||
@@ -319,6 +325,7 @@
|
||||
"DockerUpdater": "अपडेट प्राप्त करने के लिए docker कंटेनर को अपडेट करें",
|
||||
"DoNotPrefer": "प्रेफर न करें",
|
||||
"DoNotUpgradeAutomatically": "स्वचालित रूप से अपग्रेड न करें",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "वर्तमान में स्थापित। नेट फ्रेमवर्क {0} समर्थित है लेकिन हम कम से कम {1} को अपग्रेड करने की सलाह देते हैं।",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "{0} के साथ संवाद करने में असमर्थ।",
|
||||
"DownloadClientSettings": "क्लाइंट सेटिंग्स डाउनलोड करें",
|
||||
"DownloadClientsSettingsSummary": "क्लाइंट डाउनलोड करें, हैंडलिंग और दूरस्थ पथ मैपिंग डाउनलोड करें",
|
||||
@@ -344,6 +351,8 @@
|
||||
"UpgradesAllowed": "अपग्रेड की अनुमति है",
|
||||
"Pending": "विचाराधीन",
|
||||
"DownloadPropersAndRepacksHelpText2": "Propers / Repacks पर कस्टम प्रारूप स्कोर द्वारा सॉर्ट करने के लिए 'डोंट प्रेफर' का उपयोग करें",
|
||||
"MonoVersion": "मोनो संस्करण",
|
||||
"MonoVersionCheckNotSupportedMessage": "वर्तमान में स्थापित मोनो संस्करण {0} अब समर्थित नहीं है। कृपया मोनो को संस्करण {1} में अपग्रेड करें।",
|
||||
"AcceptConfirmationModal": "पुष्टि मोडल स्वीकार करें",
|
||||
"About": "के बारे में",
|
||||
"AddNotification": "अधिसूचना जोड़ें",
|
||||
@@ -361,6 +370,7 @@
|
||||
"UpdateCheckStartupNotWritableMessage": "अपडेट स्थापित नहीं किया जा सकता क्योंकि स्टार्टअप फ़ोल्डर '{0}' उपयोगकर्ता '{1}' द्वारा लिखने योग्य नहीं है।",
|
||||
"Day": "दिन",
|
||||
"DeleteListMessageText": "क्या आप वाकई '{0}' सूची को हटाना चाहते हैं?",
|
||||
"AnnoucedMsg": "मूवी की घोषणा की है",
|
||||
"Apply": "लागू",
|
||||
"AptUpdater": "अद्यतन स्थापित करने के लिए उपयुक्त का उपयोग करें",
|
||||
"AreYouSureYouWantToDeleteFormat": "क्या आप वाकई {0} प्रारूप टैग को हटाना चाहते हैं?",
|
||||
@@ -511,12 +521,15 @@
|
||||
"MarkAsFailed": "असफल के रूप में चिह्नित करें",
|
||||
"Mechanism": "तंत्र",
|
||||
"MediaInfo": "मीडिया की जानकारी",
|
||||
"MediaInfoDllCheckMessage": "MediaInfo लाइब्रेरी लोड नहीं की जा सकी {0}",
|
||||
"MediaManagement": "मीडिया प्रबंधन",
|
||||
"MediaManagementSettings": "मीडिया प्रबंधन सेटिंग्स",
|
||||
"MediaManagementSettingsSummary": "नामकरण और फ़ाइल प्रबंधन सेटिंग्स",
|
||||
"Hostname": "होस्ट का नाम",
|
||||
"MinutesSixty": "60 मिनट: {0}",
|
||||
"Missing": "लापता",
|
||||
"MonoNotNetCoreCheckMessage": "कृपया Radarr के .NET कोर संस्करण में अपग्रेड करें",
|
||||
"MonoTlsCheckMessage": "रेडार मोनो 4.x tls वर्कअराउंड अभी भी सक्षम है, MONO_TLS_PROVIDER = विरासत पर्यावरण विकल्प को हटाने पर विचार करें",
|
||||
"MoreDetails": "अधिक जानकारी",
|
||||
"MountCheckMessage": "मूवी पथ पर माउंट माउंट केवल पढ़ने योग्य है: ",
|
||||
"MovieIndex": "मूवी इंडेक्स",
|
||||
@@ -542,6 +555,8 @@
|
||||
"MinimumLimits": "न्यूनतम सीमा",
|
||||
"MoveFiles": "फ़ाइलें ले जाएँ",
|
||||
"MovieFilesTotaling": "मूवी फ़ाइलें कुल",
|
||||
"MovieHasntReleasedYet": "मूवी अभी तक रिलीज़ नहीं हुई है",
|
||||
"MovieWasDownloadedAndSorted": "मूवी डाउनलोड और सॉर्ट की गई",
|
||||
"NextExecution": "अगला निष्पादन",
|
||||
"NoResultsFound": "कोई परिणाम नहीं मिला",
|
||||
"OnHealthIssue": "स्वास्थ्य के मुद्दे पर",
|
||||
@@ -618,6 +633,7 @@
|
||||
"QualityProfiles": "गुणवत्ता प्रोफ़ाइल",
|
||||
"AddListExclusion": "सूची बहिष्करण जोड़ें",
|
||||
"QuickImport": "त्वरित आयात",
|
||||
"Radarr": "Radarr",
|
||||
"RadarrSupportsAnyDownloadClient": "रेडियर किसी भी डाउनलोड क्लाइंट का समर्थन करता है जो न्यूज़ानब मानक का उपयोग करता है, साथ ही नीचे सूचीबद्ध अन्य डाउनलोड क्लाइंट भी।",
|
||||
"RadarrTags": "रेडर टैग",
|
||||
"RecycleBinCleanupDaysHelpTextWarning": "रीसायकल बिन में चयनित दिनों की तुलना में पुरानी फाइलें अपने आप साफ हो जाएंगी",
|
||||
@@ -720,6 +736,7 @@
|
||||
"DeleteTheMovieFolder": "फिल्म फ़ोल्डर '{0}' और यह सब सामग्री हटा दी जाएगी।",
|
||||
"DestinationPath": "गंतव्य पथ",
|
||||
"Details": "विवरण",
|
||||
"Digital": "डिजिटल",
|
||||
"Discord": "कलह",
|
||||
"Discover": "डिस्कवर",
|
||||
"DiskSpace": "डिस्क में जगह",
|
||||
@@ -751,6 +768,7 @@
|
||||
"Error": "त्रुटि",
|
||||
"ErrorLoadingContents": "सामग्री लोड करने में त्रुटि",
|
||||
"EventType": "घटना प्रकार",
|
||||
"Example": "उदाहरण",
|
||||
"Exception": "अपवाद",
|
||||
"Existing": "मौजूदा",
|
||||
"ExistingTag": "मौजूदा टैग",
|
||||
@@ -761,6 +779,7 @@
|
||||
"Filename": "फ़ाइल का नाम",
|
||||
"FileNames": "फ़ाइल नाम",
|
||||
"Files": "फ़ाइलें",
|
||||
"Filesize": "फाइल का आकार",
|
||||
"FilterPlaceHolder": "फिल्में खोजें",
|
||||
"Fixed": "फिक्स्ड",
|
||||
"FocusSearchBox": "फोकस बॉक्स खोजें",
|
||||
@@ -915,6 +934,7 @@
|
||||
"SelectAll": "सभी का चयन करे",
|
||||
"SelectDotDot": "'चुनते हैं...",
|
||||
"SelectFolder": "फोल्डर का चयन करें",
|
||||
"SelectLanguges": "भाषाओं का चयन करें",
|
||||
"SelectMovie": "मूवी का चयन करें",
|
||||
"SelectQuality": "गुणवत्ता का चयन करें",
|
||||
"SetPermissionsLinuxHelpTextWarning": "यदि आप अनिश्चित हैं कि ये सेटिंग क्या करती हैं, तो उन्हें परिवर्तित न करें।",
|
||||
@@ -1032,6 +1052,8 @@
|
||||
"Edit": "संपादित करें",
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "वर्तमान में स्थापित SQLite संस्करण {0} अब समर्थित नहीं है। कृपया SQLite को कम से कम संस्करण {1} में अपग्रेड करें।",
|
||||
"showCinemaReleaseHelpText": "पोस्टर के तहत सिनेमा रिलीज की तारीख दिखाएं",
|
||||
"NoCinemaRelease": "कोई सिनेमा रिलीज़ नहीं",
|
||||
"ReleaseDate": "रिलीज़ करने की तिथि",
|
||||
"ShowCinemaRelease": "सिनेमा रिलीज की तारीख दिखाएँ",
|
||||
"ShowReleaseDate": "रिलीज की तारीख दिखाएँ",
|
||||
"ShowReleaseDateHelpText": "पोस्टर के तहत रिलीज की तारीख दिखाएं",
|
||||
|
||||
@@ -59,11 +59,14 @@
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Nem lehet kommunikálni a következővel: {0}.",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Nem található letöltési kliens",
|
||||
"DownloadClient": "Letöltési Kliens",
|
||||
"DotNetVersionCheckOldUnsupportedMessage": "A jelenleg telepített .Net Keretrendszer {0} régi és nem támogatott. Kérjük, frissítsd a .Net keretrendszert legalább {1} -ra.",
|
||||
"DotNetVersionCheckNotRecommendedMessage": "A jelenleg telepített .Net Framework {0} támogatott, de javasoljuk, hogy frissíts legalább {1} verzióra.",
|
||||
"Docker": "Docker",
|
||||
"DiskSpace": "Szabad Tárhely",
|
||||
"Discover": "Felfedezés",
|
||||
"Disabled": "Letiltott",
|
||||
"DigitalRelease": "Digitális Megjelenés",
|
||||
"Digital": "Digitális",
|
||||
"Details": "Részletek",
|
||||
"DetailedProgressBarHelpText": "Szöveg megjelenítése a folyamatjelző sávon",
|
||||
"DestinationPath": "Célmappa Útvonala",
|
||||
@@ -193,6 +196,7 @@
|
||||
"Age": "Kora",
|
||||
"AddListExclusion": "Kizárási Lista Hozzáadása",
|
||||
"ApiKey": "API Kulcs",
|
||||
"AllowMovieChangeClickToChangeMovie": "Kattints a film szerkesztéséhez",
|
||||
"All": "Összes",
|
||||
"Agenda": "Teendők",
|
||||
"AcceptConfirmationModal": "Változás Megerősítése",
|
||||
@@ -231,6 +235,7 @@
|
||||
"FirstDayOfWeek": "A Hét Első Napja",
|
||||
"FilterPlaceHolder": "Filmek Keresése",
|
||||
"Filter": "Szűrő",
|
||||
"Filesize": "Fájlméret",
|
||||
"Files": "Fájl",
|
||||
"FileNames": "Fájlnevek",
|
||||
"Filename": "Fájlnév",
|
||||
@@ -298,9 +303,12 @@
|
||||
"ShowStudio": "Stúdió megjelenítése",
|
||||
"ShowSizeOnDisk": "Használt hely megjelenítése",
|
||||
"ShowSearchHelpText": "A kereső gomb megjelenítése az egérrel",
|
||||
"MonoVersionCheckOldNotSupportedMessage": "A jelenleg telepített Mono {0} verzió régi és nem támogatott. Kérjük, frissítsd a Mono-t {1} verzióra.",
|
||||
"ShowRatings": "Értékelések mutatása",
|
||||
"ShowQualityProfileHelpText": "Minőségi profil megjelenítése a poszter alatt",
|
||||
"SettingsWeekColumnHeaderHelpText": "Minden oszlop felett jelenjen meg, hogy melyik hét az aktuális",
|
||||
"MonoVersion": "Mono Verzió",
|
||||
"MonoTlsCheckMessage": "A Radarr Mono 4.x tls megoldás továbbra is engedélyezett, fontolja meg a MONO_TLS_PROVIDER =legacy opció eltávolítását",
|
||||
"Global": "Globális",
|
||||
"CleanLibraryLevel": "Könyvtár tisztítása",
|
||||
"iCalLink": "iCal Link(ek)",
|
||||
@@ -435,6 +443,7 @@
|
||||
"RadarrSupportsAnyRSSMovieListsAsWellAsTheOneStatedBelow": "A Radarr támogatja az RSS filmlistákat, valamint az alábbiakban felsoroltakat.",
|
||||
"RadarrSupportsAnyIndexer": "A Radarr minden indexert támogat, amely a Newznab szabványt használja, valamint az alább felsorolt egyéb indexereket.",
|
||||
"RadarrSupportsAnyDownloadClient": "A Radarr számos népszerű torrent és usenet letöltési ügyfelet támogat.",
|
||||
"Radarr": "Radarr",
|
||||
"QuickImport": "Automatikus Áthelyezés",
|
||||
"Queued": "Sorban",
|
||||
"Queue": "Várakozási sor",
|
||||
@@ -471,6 +480,8 @@
|
||||
"OnGrabHelpText": "Kiválasztás alatt",
|
||||
"MoreDetails": "További részletek",
|
||||
"Month": "Hónap",
|
||||
"MonoVersionCheckUpgradeRecommendedMessage": "A jelenleg telepített Mono {0} verzió támogatott, de ajánlott frissíteni a(z) {1} verzióra.",
|
||||
"MonoVersionCheckNotSupportedMessage": "A jelenleg telepített Mono {0} verzió már nem támogatott. Kérjük, frissítsd a Mono-t {1} verzióra.",
|
||||
"PreferredSize": "Preferált méret",
|
||||
"PreferIndexerFlags": "Indexelő Zászlók előnyben részesítése",
|
||||
"PosterSize": "Poszter mérete",
|
||||
@@ -553,12 +564,14 @@
|
||||
"MovieEditor": "Filmszerkesztő",
|
||||
"MovieDetailsPreviousMovie": "A film részletei: Előző film",
|
||||
"MovieDetailsNextMovie": "A film részletei: Következő film",
|
||||
"MovieAvailableButMissing": "A film elérhető, de hiányzik",
|
||||
"MovieAlreadyExcluded": "A film már ki lett zárva",
|
||||
"Movie": "Film",
|
||||
"MoveFiles": "Fájl(ok) mozgatása",
|
||||
"MountCheckMessage": "A filmútvonalat tartalmazó mappa csak olvasható: ",
|
||||
"MoreInfo": "Több Információ",
|
||||
"YouCanAlsoSearch": "Kereshetsz a film TMDb azonosítójával vagy IMDb azonosítójával is. Például. \"tmdb: 71663\"",
|
||||
"MonoNotNetCoreCheckMessage": "Kérjük, frissítsd a Radarr .NET Core verzióját, a Mono verziókat a következő kiadás nem támogatja.",
|
||||
"MonitorMovie": "Film Monitorozása",
|
||||
"MonitoredOnly": "Csak a Megfigyelt",
|
||||
"MonitoredHelpText": "Töltse le a filmet, ha elérhető",
|
||||
@@ -587,6 +600,7 @@
|
||||
"MediaManagementSettingsSummary": "Elnevezési és fájlkezelési beállítások",
|
||||
"MediaManagementSettings": "Média Kezelési Beállítások",
|
||||
"MediaManagement": "Média Kezelés",
|
||||
"MediaInfoDllCheckMessage": "A MediaInfo könyvtár betöltése nem sikerült {0}",
|
||||
"MediaInfo": "Média Információ",
|
||||
"Mechanism": "Mechanizmus",
|
||||
"MaximumSizeHelpText": "A kiadás maximális mérete MB-ban. Állítsd nullára a korlátlan értékre",
|
||||
@@ -602,6 +616,7 @@
|
||||
"LogLevelTraceHelpTextWarning": "A nyomkövetést csak ideiglenesen szabad engedélyezni",
|
||||
"LogLevel": "Log Szint",
|
||||
"Logging": "Loggolás",
|
||||
"LogFilesLocationMessage": "Log Fájlok Helye:",
|
||||
"LogFiles": "Log Fájlok",
|
||||
"Location": "Lokáció",
|
||||
"Local": "Helyi",
|
||||
@@ -833,6 +848,7 @@
|
||||
"ChmodFolderHelpTextWarning": "Ez csak akkor működik, ha a Radarr-t futtató felhasználó a fájl tulajdonosa. Jobb, ha ellenőrzöd a letöltési kliensben megfelelően vannak-e beállítva az engedélyek.",
|
||||
"ChmodFolderHelpText": "Octal, importáláskor / átnevezéskor alkalmazva a média mappákra és fájlokra (bitek végrehajtása nélkül)",
|
||||
"ChmodFolder": "chmod Mappa",
|
||||
"Example": "Példa",
|
||||
"ErrorRestoringBackup": "Hiba a mentés visszaállítása közben",
|
||||
"Enabled": "Engedélyezve",
|
||||
"EditQualityProfile": "Minőség profil szerkesztése",
|
||||
@@ -871,6 +887,7 @@
|
||||
"AreYouSureYouWantToRemoveSelectedItemsFromQueue": "Biztosan eltávolítja az {0} elemet {1} a sorból?",
|
||||
"AreYouSureYouWantToDeleteFormat": "Biztosan törlöd a(z) {0} formátumú címkét?",
|
||||
"AptUpdater": "Az apt használatával telepítsd a frissítést",
|
||||
"AnnoucedMsg": "A film be van jelentve",
|
||||
"Always": "Mindig",
|
||||
"AllResultsHiddenFilter": "Az alkalmazott szűrők miatt, az összes keresési eredmény rejtve marad",
|
||||
"AllMoviesInPathHaveBeenImported": "Az összes film a(z) {0} -ból importálva lett",
|
||||
@@ -942,6 +959,7 @@
|
||||
"Small": "kicsi",
|
||||
"SelectQuality": "Válasszon minőséget",
|
||||
"SelectMovie": "Válasszon filmet",
|
||||
"SelectLanguges": "Válasszon nyelveket",
|
||||
"SelectLanguage": "Válasszon nyelvet",
|
||||
"SelectDotDot": "Válassza...",
|
||||
"Seconds": "Másodpercek",
|
||||
@@ -1000,7 +1018,9 @@
|
||||
"Negated": "Megtagadva",
|
||||
"Negate": "Megtagadás",
|
||||
"MultiLanguage": "Többnyelvű",
|
||||
"MovieWasDownloadedAndSorted": "Film letöltve és válogatva",
|
||||
"MovieInvalidFormat": "Film: Érvénytelen formátum",
|
||||
"MovieHasntReleasedYet": "A film még nem jelent meg",
|
||||
"MovieFilesTotaling": "Film fájlok összege",
|
||||
"MovieChat": "Film Chat",
|
||||
"MoveFolders1": "Szeretné áthelyezni a film mappáját ide: '{0}'?",
|
||||
@@ -1033,6 +1053,8 @@
|
||||
"SqliteVersionCheckUpgradeRequiredMessage": "A jelenleg telepített {0} SQLite verzió már nem támogatott. Kérjük, frissítse az SQLite-t legalább a (z) {1} verzióra.",
|
||||
"showCinemaReleaseHelpText": "A mozi megjelenésének dátuma a poszter alatt",
|
||||
"ShowReleaseDateHelpText": "Mutasd a megjelenés dátumát a poszter alatt",
|
||||
"NoCinemaRelease": "Nincs mozi kiadás",
|
||||
"ReleaseDate": "Megjelenés Dátuma",
|
||||
"ShowCinemaRelease": "A mozi megjelenésének dátuma",
|
||||
"ShowReleaseDate": "Megjelenés dátuma",
|
||||
"OnMovieDelete": "A film törlésekor",
|
||||
@@ -1050,6 +1072,7 @@
|
||||
"UpdateAvailable": "Új frissítés elérhető",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "A letöltőkliens {0} jelentett fájljait a(z) {1} fájlba, de a Radarr nem látja ezt a könyvtárat. Lehet, hogy módosítania kell a mappa engedélyeit.",
|
||||
"RemotePathMappingCheckRemoteDownloadClient": "A távoli letöltőkliens {0} fájlokat jelentett a(z) {1} fájlban, de úgy tűnik, hogy ez a könyvtár nem létezik. Valószínűleg hiányzik a távoli útvonal-hozzárendelés.",
|
||||
"RemotePathMappingCheckDockerFilesMissing": "Dockert használsz; a letöltőkliens {0} jelentett fájljait a(z) {1} fájlba, de úgy tűnik, hogy a könyvtár nem létezik a tárolóban. Tekintse át a távoli elérési utak hozzárendelését és a tároló kötetbeállításait.",
|
||||
"RemotePathMappingCheckFolderPermissions": "A Radarr láthatja, de nem fér hozzá a (z) {0} letöltési könyvtárhoz. Valószínűleg engedélyezési hiba.",
|
||||
"RemotePathMappingCheckFilesLocalWrongOSPath": "A helyi letöltőkliens {0} fájlokat jelentett a (z) {1} fájlban, de ez nem érvényes {2} elérési út. Ellenőrizze a letöltési kliens beállításait.",
|
||||
"RemotePathMappingCheckFilesBadDockerPath": "Dockert használsz; letöltőkliens {0} jelentett fájljait a(z) {1} domainben, de ez nem érvényes {2} elérési út. Ellenőrizze a távoli elérési utak hozzárendelését és a letöltőkliens beállításait.",
|
||||
@@ -1063,6 +1086,8 @@
|
||||
"RemotePathMappingCheckLocalFolderMissing": "A távoli letöltési ügyfél {0} letölti a letöltéseket a(z) {1} könyvtárba, de úgy tűnik, hogy ez a könyvtár nem létezik. Valószínűleg hiányzik vagy helytelen a távoli elérési út feltérképezése.",
|
||||
"RemotePathMappingCheckDockerFolderMissing": "Dockert használsz; a letöltő kliens {0} letölti a letöltéseket a(z) {1} fájlban, de úgy tűnik, hogy ez a könyvtár nem létezik a tárolóban. Tekintse át a távoli elérési utak hozzárendelését és a tároló kötetbeállításait.",
|
||||
"RemotePathMappingCheckBadDockerPath": "Dockert használsz; a letöltő kliens {0} a letöltéseket a (z) {1} helyre helyezi, de ez nem érvényes {2} útvonal. Ellenőrizze a távoli elérési utak hozzárendelését és töltse le a kliens beállításait.",
|
||||
"MonoBSDSupportCheckMessage": "Az operációs rendszert {0} a Radarr következő kiadása nem támogatja.",
|
||||
"Monox86SupportCheckMessage": "A jelenlegi operációs rendszer 32 bites, ezt a Radarr következő kiadása nem fogja támogatni.",
|
||||
"ImportListMultipleMissingRoots": "Több gyökérmappa hiányzik az importálási listákhoz: {0}",
|
||||
"ImportListMissingRoot": "Hiányzó gyökérmappa az importálási listá(k)hoz: {0}",
|
||||
"BypassDelayIfHighestQualityHelpText": "Bypass késleltetés, ha a kiadásnak a legmagasabb engedélyezett minősége van az előnyben részesített protokollal rendelkező minőségi profilban",
|
||||
@@ -1086,14 +1111,5 @@
|
||||
"RemoveSelectedItems": "A kijelölt elemek eltávolítása",
|
||||
"RemoveFailed": "Eltávolítá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é.",
|
||||
"ImdbVotes": "IMDb Szavazatok",
|
||||
"DiscordUrlInSlackNotification": "A Discord-értesítést Slack-értesítésként állította be. Állítsa be ezt Discord-értesítésként a jobb működés érdekében. A végrehajtott értesítések a következők: {0}",
|
||||
"Filters": "Szűrők",
|
||||
"IndexerDownloadClientHelpText": "Adja meg, hogy melyik letöltési kliens használja az indexelőből történő megfogásokat",
|
||||
"AnnouncedMsg": "A filmet bejelentették",
|
||||
"ClickToChangeReleaseGroup": "Kiadási csoport módosítása",
|
||||
"TmdbRating": "TMDb Értékelés",
|
||||
"TmdbVotes": "TMDb Szavazatok",
|
||||
"ImdbRating": "IMDb Értékelés"
|
||||
"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é."
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user