mirror of
https://github.com/Radarr/Radarr.git
synced 2026-03-06 13:31:28 -05:00
Compare commits
20 Commits
v5.0.2.810
...
collection
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04b15f2178 | ||
|
|
39d7320a75 | ||
|
|
207a4b19dc | ||
|
|
c221e2097a | ||
|
|
a61804e949 | ||
|
|
cb2bed93cb | ||
|
|
2bea61bae5 | ||
|
|
7922109f01 | ||
|
|
46dd72e0cd | ||
|
|
4e3535f1fe | ||
|
|
3468f1144d | ||
|
|
572c410f54 | ||
|
|
1762a189d2 | ||
|
|
e2f5f2f73a | ||
|
|
ade387ba74 | ||
|
|
6b9a622328 | ||
|
|
ba5028bebb | ||
|
|
33d1d1f875 | ||
|
|
fb60dcb5bf | ||
|
|
ddf23530fc |
@@ -9,7 +9,7 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '5.0.2'
|
||||
majorVersion: '5.0.3'
|
||||
minorVersion: $[counter('minorVersion', 2000)]
|
||||
radarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(radarrVersion)'
|
||||
|
||||
@@ -82,7 +82,7 @@ class BlocklistRow extends Component {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (name === 'movies.sortTitle') {
|
||||
if (name === 'movieMetadata.sortTitle') {
|
||||
return (
|
||||
<TableRowCell key={name}>
|
||||
<MovieTitleLink
|
||||
|
||||
@@ -99,7 +99,7 @@ class HistoryRow extends Component {
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'movies.sortTitle') {
|
||||
if (name === 'movieMetadata.sortTitle') {
|
||||
return (
|
||||
<TableRowCell key={name}>
|
||||
<MovieTitleLink
|
||||
@@ -217,10 +217,12 @@ class HistoryRow extends Component {
|
||||
key={name}
|
||||
className={styles.details}
|
||||
>
|
||||
<IconButton
|
||||
name={icons.INFO}
|
||||
onPress={this.onDetailsPress}
|
||||
/>
|
||||
<div className={styles.actionContents}>
|
||||
<IconButton
|
||||
name={icons.INFO}
|
||||
onPress={this.onDetailsPress}
|
||||
/>
|
||||
</div>
|
||||
</TableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
import classNames from 'classnames';
|
||||
import moment from 'moment';
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import * as calendarViews from 'Calendar/calendarViews';
|
||||
import CalendarEventConnector from 'Calendar/Events/CalendarEventConnector';
|
||||
import styles from './CalendarDay.css';
|
||||
|
||||
function CalendarDay(props) {
|
||||
const {
|
||||
date,
|
||||
time,
|
||||
isTodaysDate,
|
||||
events,
|
||||
view,
|
||||
onEventModalOpenToggle
|
||||
} = props;
|
||||
|
||||
return (
|
||||
<div className={classNames(
|
||||
styles.day,
|
||||
view === calendarViews.DAY && styles.isSingleDay
|
||||
)}
|
||||
>
|
||||
{
|
||||
view === calendarViews.MONTH &&
|
||||
<div className={classNames(
|
||||
styles.dayOfMonth,
|
||||
isTodaysDate && styles.isToday,
|
||||
!moment(date).isSame(moment(time), 'month') && styles.isDifferentMonth
|
||||
)}
|
||||
>
|
||||
{moment(date).date()}
|
||||
</div>
|
||||
}
|
||||
<div>
|
||||
{
|
||||
events.map((event) => {
|
||||
return (
|
||||
<CalendarEventConnector
|
||||
key={event.id}
|
||||
movieId={event.id}
|
||||
date={date}
|
||||
{...event}
|
||||
onEventModalOpenToggle={onEventModalOpenToggle}
|
||||
/>
|
||||
);
|
||||
})
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
CalendarDay.propTypes = {
|
||||
date: PropTypes.string.isRequired,
|
||||
time: PropTypes.string.isRequired,
|
||||
isTodaysDate: PropTypes.bool.isRequired,
|
||||
events: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
view: PropTypes.string.isRequired,
|
||||
onEventModalOpenToggle: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default CalendarDay;
|
||||
67
frontend/src/Calendar/Day/CalendarDay.tsx
Normal file
67
frontend/src/Calendar/Day/CalendarDay.tsx
Normal file
@@ -0,0 +1,67 @@
|
||||
import classNames from 'classnames';
|
||||
import moment from 'moment';
|
||||
import React from 'react';
|
||||
import * as calendarViews from 'Calendar/calendarViews';
|
||||
import CalendarEventConnector from 'Calendar/Events/CalendarEventConnector';
|
||||
import CalendarEvent from 'typings/CalendarEvent';
|
||||
import styles from './CalendarDay.css';
|
||||
|
||||
interface CalendarDayProps {
|
||||
date: string;
|
||||
time: string;
|
||||
isTodaysDate: boolean;
|
||||
events: CalendarEvent[];
|
||||
view: string;
|
||||
onEventModalOpenToggle(...args: unknown[]): unknown;
|
||||
}
|
||||
|
||||
function CalendarDay(props: CalendarDayProps) {
|
||||
const { date, time, isTodaysDate, events, view, onEventModalOpenToggle } =
|
||||
props;
|
||||
|
||||
const ref = React.useRef<HTMLDivElement>(null);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (isTodaysDate && view === calendarViews.MONTH && ref.current) {
|
||||
ref.current.scrollIntoView();
|
||||
}
|
||||
}, [time, isTodaysDate, view]);
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={ref}
|
||||
className={classNames(
|
||||
styles.day,
|
||||
view === calendarViews.DAY && styles.isSingleDay
|
||||
)}
|
||||
>
|
||||
{view === calendarViews.MONTH && (
|
||||
<div
|
||||
className={classNames(
|
||||
styles.dayOfMonth,
|
||||
isTodaysDate && styles.isToday,
|
||||
!moment(date).isSame(moment(time), 'month') &&
|
||||
styles.isDifferentMonth
|
||||
)}
|
||||
>
|
||||
{moment(date).date()}
|
||||
</div>
|
||||
)}
|
||||
<div>
|
||||
{events.map((event) => {
|
||||
return (
|
||||
<CalendarEventConnector
|
||||
key={event.id}
|
||||
{...event}
|
||||
movieId={event.id}
|
||||
date={date as string}
|
||||
onEventModalOpenToggle={onEventModalOpenToggle}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default CalendarDay;
|
||||
@@ -25,6 +25,7 @@ class CalendarEvent extends Component {
|
||||
title,
|
||||
titleSlug,
|
||||
genres,
|
||||
date,
|
||||
monitored,
|
||||
certification,
|
||||
hasFile,
|
||||
@@ -33,8 +34,7 @@ class CalendarEvent extends Component {
|
||||
showMovieInformation,
|
||||
showCutoffUnmetIcon,
|
||||
fullColorEvents,
|
||||
colorImpairedMode,
|
||||
date
|
||||
colorImpairedMode
|
||||
} = this.props;
|
||||
|
||||
const isDownloading = !!(queueItem || grabbed);
|
||||
@@ -148,17 +148,18 @@ CalendarEvent.propTypes = {
|
||||
inCinemas: PropTypes.string,
|
||||
physicalRelease: PropTypes.string,
|
||||
digitalRelease: PropTypes.string,
|
||||
date: PropTypes.string.isRequired,
|
||||
monitored: PropTypes.bool.isRequired,
|
||||
certification: PropTypes.string,
|
||||
hasFile: PropTypes.bool.isRequired,
|
||||
grabbed: PropTypes.bool,
|
||||
queueItem: PropTypes.object,
|
||||
showMovieInformation: PropTypes.bool.isRequired,
|
||||
showCutoffUnmetIcon: PropTypes.bool.isRequired,
|
||||
fullColorEvents: PropTypes.bool.isRequired,
|
||||
timeFormat: PropTypes.string.isRequired,
|
||||
colorImpairedMode: PropTypes.bool.isRequired,
|
||||
date: PropTypes.string.isRequired
|
||||
// These props come from the connector, not marked as required to appease TS for now.
|
||||
showMovieInformation: PropTypes.bool,
|
||||
showCutoffUnmetIcon: PropTypes.bool,
|
||||
fullColorEvents: PropTypes.bool,
|
||||
timeFormat: PropTypes.string,
|
||||
colorImpairedMode: PropTypes.bool
|
||||
};
|
||||
|
||||
CalendarEvent.defaultProps = {
|
||||
|
||||
@@ -52,11 +52,7 @@
|
||||
width: 75px;
|
||||
}
|
||||
|
||||
.title {
|
||||
composes: cell;
|
||||
}
|
||||
|
||||
.title div {
|
||||
.titleContent {
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ interface CssExports {
|
||||
'quality': string;
|
||||
'rejected': string;
|
||||
'size': string;
|
||||
'title': string;
|
||||
'titleContent': string;
|
||||
}
|
||||
export const cssExports: CssExports;
|
||||
export default cssExports;
|
||||
|
||||
@@ -246,10 +246,12 @@ function InteractiveSearchRow(props: InteractiveSearchRowProps) {
|
||||
) : null}
|
||||
</TableRowCell>
|
||||
|
||||
<TableRowCell className={styles.title}>
|
||||
<Link to={infoUrl} title={title}>
|
||||
<div>{title}</div>
|
||||
</Link>
|
||||
<TableRowCell>
|
||||
<div className={styles.titleContent}>
|
||||
<Link to={infoUrl} title={title}>
|
||||
{title}
|
||||
</Link>
|
||||
</div>
|
||||
</TableRowCell>
|
||||
|
||||
<TableRowCell className={styles.indexer}>{indexer}</TableRowCell>
|
||||
|
||||
@@ -32,7 +32,7 @@ export const defaultState = {
|
||||
|
||||
columns: [
|
||||
{
|
||||
name: 'movies.sortTitle',
|
||||
name: 'movieMetadata.sortTitle',
|
||||
label: () => translate('MovieTitle'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
|
||||
@@ -37,7 +37,7 @@ export const defaultState = {
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'movies.sortTitle',
|
||||
name: 'movieMetadata.sortTitle',
|
||||
label: () => translate('Movie'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
|
||||
5
frontend/src/typings/CalendarEvent.ts
Normal file
5
frontend/src/typings/CalendarEvent.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import Movie from 'Movie/Movie';
|
||||
|
||||
type CalendarEvent = Movie;
|
||||
|
||||
export default CalendarEvent;
|
||||
@@ -12,7 +12,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
{
|
||||
public static class NzbDroneLogger
|
||||
{
|
||||
private const string FILE_LOG_LAYOUT = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
|
||||
private const string FILE_LOG_LAYOUT = @"${date:format=yyyy-MM-dd HH\:mm\:ss.fff}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
|
||||
|
||||
private static bool _isConfigured;
|
||||
|
||||
|
||||
@@ -425,7 +425,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 0.7,
|
||||
Eta = 8640000,
|
||||
State = "stalledDL",
|
||||
State = "pausedUP",
|
||||
Label = "",
|
||||
SavePath = @"C:\Torrents".AsOsAgnostic(),
|
||||
ContentPath = @"C:\Torrents\Droned.S01.12".AsOsAgnostic()
|
||||
|
||||
@@ -452,6 +452,30 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||
result.OutputRootFolders.First().Should().Be(fullCategoryDir);
|
||||
}
|
||||
|
||||
[TestCase("0")]
|
||||
[TestCase("15d")]
|
||||
public void should_set_history_removes_completed_downloads_false(string historyRetention)
|
||||
{
|
||||
_config.Misc.history_retention = historyRetention;
|
||||
|
||||
var downloadClientInfo = Subject.GetStatus();
|
||||
|
||||
downloadClientInfo.RemovesCompletedDownloads.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("-1")]
|
||||
[TestCase("15")]
|
||||
[TestCase("3")]
|
||||
[TestCase("3d")]
|
||||
public void should_set_history_removes_completed_downloads_true(string historyRetention)
|
||||
{
|
||||
_config.Misc.history_retention = historyRetention;
|
||||
|
||||
var downloadClientInfo = Subject.GetStatus();
|
||||
|
||||
downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase(@"Y:\sabnzbd\root", @"completed\downloads", @"vv", @"Y:\sabnzbd\root\completed\downloads", @"Y:\sabnzbd\root\completed\downloads\vv")]
|
||||
[TestCase(@"Y:\sabnzbd\root", @"completed", @"vv", @"Y:\sabnzbd\root\completed", @"Y:\sabnzbd\root\completed\vv")]
|
||||
[TestCase(@"/sabnzbd/root", @"completed/downloads", @"vv", @"/sabnzbd/root/completed/downloads", @"/sabnzbd/root/completed/downloads/vv")]
|
||||
|
||||
@@ -6,7 +6,6 @@ using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Indexers.PassThePopcorn;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
@@ -20,26 +19,22 @@ namespace NzbDrone.Core.Test.IndexerTests.PTPTests
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
Subject.Definition = new IndexerDefinition()
|
||||
Subject.Definition = new IndexerDefinition
|
||||
{
|
||||
Name = "PTP",
|
||||
Settings = new PassThePopcornSettings() { APIUser = "asdf", APIKey = "sad" }
|
||||
Settings = new PassThePopcornSettings
|
||||
{
|
||||
APIUser = "asdf",
|
||||
APIKey = "sad"
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
[TestCase("Files/Indexers/PTP/imdbsearch.json")]
|
||||
public async Task should_parse_feed_from_PTP(string fileName)
|
||||
{
|
||||
var authResponse = new PassThePopcornAuthResponse { Result = "Ok" };
|
||||
|
||||
var authStream = new System.IO.StringWriter();
|
||||
Json.Serialize(authResponse, authStream);
|
||||
var responseJson = ReadAllText(fileName);
|
||||
|
||||
Mocker.GetMock<IHttpClient>()
|
||||
.Setup(o => o.ExecuteAsync(It.Is<HttpRequest>(v => v.Method == HttpMethod.Post)))
|
||||
.Returns<HttpRequest>(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), authStream.ToString())));
|
||||
|
||||
Mocker.GetMock<IHttpClient>()
|
||||
.Setup(o => o.ExecuteAsync(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get)))
|
||||
.Returns<HttpRequest>(r => Task.FromResult(new HttpResponse(r, new HttpHeader { ContentType = HttpAccept.Json.Value }, responseJson)));
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test.Localization
|
||||
{
|
||||
var localizedString = Subject.GetLocalizedString("UiLanguage", "fr_fr");
|
||||
|
||||
localizedString.Should().Be("UI Langue");
|
||||
localizedString.Should().Be("Langue de l'IU");
|
||||
|
||||
ExceptionVerification.ExpectedErrors(1);
|
||||
}
|
||||
|
||||
@@ -48,7 +48,10 @@ namespace NzbDrone.Core.Blocklisting
|
||||
Delete(x => movieIds.Contains(x.MovieId));
|
||||
}
|
||||
|
||||
protected override SqlBuilder PagedBuilder() => new SqlBuilder(_database.DatabaseType).Join<Blocklist, Movie>((b, m) => b.MovieId == m.Id);
|
||||
protected override SqlBuilder PagedBuilder() => new SqlBuilder(_database.DatabaseType)
|
||||
.Join<Blocklist, Movie>((b, m) => b.MovieId == m.Id)
|
||||
.LeftJoin<Movie, MovieMetadata>((m, mm) => m.MovieMetadataId == mm.Id);
|
||||
|
||||
protected override IEnumerable<Blocklist> PagedQuery(SqlBuilder sql) => _database.QueryJoined<Blocklist, Movie>(sql, (bl, movie) =>
|
||||
{
|
||||
bl.Movie = movie;
|
||||
|
||||
@@ -302,13 +302,13 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
break;
|
||||
}
|
||||
|
||||
if (version >= new Version("2.6.1"))
|
||||
if (version >= new Version("2.6.1") && item.Status == DownloadItemStatus.Completed)
|
||||
{
|
||||
if (torrent.ContentPath != torrent.SavePath)
|
||||
{
|
||||
item.OutputPath = _remotePathMappingService.RemapRemoteToLocal(Settings.Host, new OsPath(torrent.ContentPath));
|
||||
}
|
||||
else if (item.Status == DownloadItemStatus.Completed)
|
||||
else
|
||||
{
|
||||
item.Status = DownloadItemStatus.Warning;
|
||||
item.Message = "Unable to Import. Path matches client base download directory, it's possible 'Keep top-level folder' is disabled for this torrent or 'Torrent Content Layout' is NOT set to 'Original' or 'Create Subfolder'?";
|
||||
@@ -384,11 +384,13 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
}
|
||||
}
|
||||
|
||||
var minimumRetention = 60 * 24 * 14;
|
||||
|
||||
return new DownloadClientInfo
|
||||
{
|
||||
IsLocalhost = Settings.Host == "127.0.0.1" || Settings.Host == "localhost",
|
||||
OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, destDir) },
|
||||
RemovesCompletedDownloads = (config.MaxRatioEnabled || config.MaxSeedingTimeEnabled) && (config.MaxRatioAction == QBittorrentMaxRatioAction.Remove || config.MaxRatioAction == QBittorrentMaxRatioAction.DeleteFiles)
|
||||
RemovesCompletedDownloads = (config.MaxRatioEnabled || (config.MaxSeedingTimeEnabled && config.MaxSeedingTime < minimumRetention)) && (config.MaxRatioAction == QBittorrentMaxRatioAction.Remove || config.MaxRatioAction == QBittorrentMaxRatioAction.DeleteFiles)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -278,7 +278,16 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
status.OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, category.FullPath) };
|
||||
}
|
||||
|
||||
status.RemovesCompletedDownloads = config.Misc.history_retention != "0";
|
||||
if (config.Misc.history_retention.IsNotNullOrWhiteSpace() && config.Misc.history_retention.EndsWith("d"))
|
||||
{
|
||||
int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1),
|
||||
out var daysRetention);
|
||||
status.RemovesCompletedDownloads = daysRetention < 14;
|
||||
}
|
||||
else
|
||||
{
|
||||
status.RemovesCompletedDownloads = config.Misc.history_retention != "0";
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
|
||||
@@ -11,6 +12,7 @@ namespace NzbDrone.Core.Extras.Files
|
||||
void DeleteForMovieFile(int movieFileId);
|
||||
List<TExtraFile> GetFilesByMovie(int movieId);
|
||||
List<TExtraFile> GetFilesByMovieFile(int movieFileId);
|
||||
TExtraFile FindByPath(int movieId, string path);
|
||||
}
|
||||
|
||||
public class ExtraFileRepository<TExtraFile> : BasicRepository<TExtraFile>, IExtraFileRepository<TExtraFile>
|
||||
@@ -40,5 +42,10 @@ namespace NzbDrone.Core.Extras.Files
|
||||
{
|
||||
return Query(x => x.MovieFileId == movieFileId);
|
||||
}
|
||||
|
||||
public TExtraFile FindByPath(int movieId, string path)
|
||||
{
|
||||
return Query(c => c.MovieId == movieId && c.RelativePath == path).SingleOrDefault();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace NzbDrone.Core.Extras.Files
|
||||
{
|
||||
List<TExtraFile> GetFilesByMovie(int movieId);
|
||||
List<TExtraFile> GetFilesByMovieFile(int movieFileId);
|
||||
TExtraFile FindByPath(int movieId, string path);
|
||||
void Upsert(TExtraFile extraFile);
|
||||
void Upsert(List<TExtraFile> extraFiles);
|
||||
void Delete(int id);
|
||||
@@ -58,6 +59,11 @@ namespace NzbDrone.Core.Extras.Files
|
||||
return _repository.GetFilesByMovieFile(movieFileId);
|
||||
}
|
||||
|
||||
public TExtraFile FindByPath(int movieId, string path)
|
||||
{
|
||||
return _repository.FindByPath(movieId, path);
|
||||
}
|
||||
|
||||
public void Upsert(TExtraFile extraFile)
|
||||
{
|
||||
Upsert(new List<TExtraFile> { extraFile });
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
@@ -38,8 +37,8 @@ namespace NzbDrone.Core.Extras.Others
|
||||
}
|
||||
|
||||
var relativePath = movie.Path.GetRelativePath(path);
|
||||
var otherExtraFile = _otherExtraFileService.FindByPath(movie.Id, relativePath);
|
||||
|
||||
var otherExtraFile = _otherExtraFileService.GetFilesByMovie(movie.Id).Where(e => e.RelativePath == relativePath).SingleOrDefault();
|
||||
if (otherExtraFile != null)
|
||||
{
|
||||
var newPath = path + "-orig";
|
||||
@@ -63,8 +62,8 @@ namespace NzbDrone.Core.Extras.Others
|
||||
}
|
||||
|
||||
var relativePath = movie.Path.GetRelativePath(path);
|
||||
var otherExtraFile = _otherExtraFileService.FindByPath(movie.Id, relativePath);
|
||||
|
||||
var otherExtraFile = _otherExtraFileService.GetFilesByMovie(movie.Id).Where(e => e.RelativePath == relativePath).SingleOrDefault();
|
||||
if (otherExtraFile != null)
|
||||
{
|
||||
_recycleBinProvider.DeleteFile(path);
|
||||
|
||||
@@ -50,6 +50,7 @@ namespace NzbDrone.Core.HealthCheck
|
||||
.AddQueryParam("version", BuildInfo.Version)
|
||||
.AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant())
|
||||
.AddQueryParam("arch", RuntimeInformation.OSArchitecture)
|
||||
.AddQueryParam("runtime", "netcore")
|
||||
.AddQueryParam("branch", _configFileProvider.Branch)
|
||||
.Build();
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using NLog;
|
||||
using NzbDrone.Common.Cache;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Parser;
|
||||
@@ -15,7 +14,6 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
public override int PageSize => 50;
|
||||
|
||||
public PassThePopcorn(IHttpClient httpClient,
|
||||
ICacheManager cacheManager,
|
||||
IIndexerStatusService indexerStatusService,
|
||||
IConfigService configService,
|
||||
IParsingService parsingService,
|
||||
@@ -26,12 +24,7 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
|
||||
public override IIndexerRequestGenerator GetRequestGenerator()
|
||||
{
|
||||
return new PassThePopcornRequestGenerator()
|
||||
{
|
||||
Settings = Settings,
|
||||
HttpClient = _httpClient,
|
||||
Logger = _logger,
|
||||
};
|
||||
return new PassThePopcornRequestGenerator(Settings);
|
||||
}
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
|
||||
@@ -3,13 +3,27 @@ using System.Collections.Generic;
|
||||
|
||||
namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
{
|
||||
public class Director
|
||||
public class PassThePopcornResponse
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Id { get; set; }
|
||||
public string TotalResults { get; set; }
|
||||
public List<PassThePopcornMovie> Movies { get; set; }
|
||||
public string Page { get; set; }
|
||||
public string AuthKey { get; set; }
|
||||
public string PassKey { get; set; }
|
||||
}
|
||||
|
||||
public class Torrent
|
||||
public class PassThePopcornMovie
|
||||
{
|
||||
public string GroupId { get; set; }
|
||||
public string Title { get; set; }
|
||||
public string Year { get; set; }
|
||||
public string Cover { get; set; }
|
||||
public List<string> Tags { get; set; }
|
||||
public string ImdbId { get; set; }
|
||||
public List<PassThePopcornTorrent> Torrents { get; set; }
|
||||
}
|
||||
|
||||
public class PassThePopcornTorrent
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Quality { get; set; }
|
||||
@@ -29,37 +43,4 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
public bool GoldenPopcorn { get; set; }
|
||||
public string FreeleechType { get; set; }
|
||||
}
|
||||
|
||||
public class Movie
|
||||
{
|
||||
public string GroupId { get; set; }
|
||||
public string Title { get; set; }
|
||||
public string Year { get; set; }
|
||||
public string Cover { get; set; }
|
||||
public List<string> Tags { get; set; }
|
||||
public List<Director> Directors { get; set; }
|
||||
public string ImdbId { get; set; }
|
||||
public int TotalLeechers { get; set; }
|
||||
public int TotalSeeders { get; set; }
|
||||
public int TotalSnatched { get; set; }
|
||||
public long MaxSize { get; set; }
|
||||
public string LastUploadTime { get; set; }
|
||||
public List<Torrent> Torrents { get; set; }
|
||||
}
|
||||
|
||||
public class PassThePopcornResponse
|
||||
{
|
||||
public string TotalResults { get; set; }
|
||||
public List<Movie> Movies { get; set; }
|
||||
public string Page { get; set; }
|
||||
public string AuthKey { get; set; }
|
||||
public string PassKey { get; set; }
|
||||
}
|
||||
|
||||
public class PassThePopcornAuthResponse
|
||||
{
|
||||
public string Result { get; set; }
|
||||
public string Popcron { get; set; }
|
||||
public string AntiCsrfToken { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,26 +26,11 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
|
||||
if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
// Remove cookie cache
|
||||
if (indexerResponse.HttpResponse.HasHttpRedirect && indexerResponse.HttpResponse.Headers["Location"]
|
||||
.ContainsIgnoreCase("login.php"))
|
||||
{
|
||||
CookiesUpdater(null, null);
|
||||
throw new IndexerException(indexerResponse, "We are being redirected to the PTP login page. Most likely your session expired or was killed. Try testing the indexer in the settings.");
|
||||
}
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from API request");
|
||||
}
|
||||
|
||||
if (indexerResponse.HttpResponse.Headers.ContentType != HttpAccept.Json.Value)
|
||||
{
|
||||
if (indexerResponse.HttpResponse.Request.Url.Path.ContainsIgnoreCase("login.php"))
|
||||
{
|
||||
CookiesUpdater(null, null);
|
||||
throw new IndexerException(indexerResponse, "We are currently on the login page. Most likely your session expired or was killed. Try testing the indexer in the settings.");
|
||||
}
|
||||
|
||||
// Remove cookie cache
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response header {indexerResponse.HttpResponse.Headers.ContentType} from API request, expected {HttpAccept.Json.Value}");
|
||||
}
|
||||
|
||||
@@ -62,17 +47,16 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
foreach (var torrent in result.Torrents)
|
||||
{
|
||||
var id = torrent.Id;
|
||||
var title = torrent.ReleaseName;
|
||||
IndexerFlags flags = 0;
|
||||
|
||||
if (torrent.GoldenPopcorn)
|
||||
{
|
||||
flags |= IndexerFlags.PTP_Golden; // title = $"{title} 🍿";
|
||||
flags |= IndexerFlags.PTP_Golden;
|
||||
}
|
||||
|
||||
if (torrent.Checked)
|
||||
{
|
||||
flags |= IndexerFlags.PTP_Approved; // title = $"{title} ✔";
|
||||
flags |= IndexerFlags.PTP_Approved;
|
||||
}
|
||||
|
||||
if (torrent.FreeleechType == "Freeleech")
|
||||
@@ -88,10 +72,10 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
// Only add approved torrents
|
||||
try
|
||||
{
|
||||
torrentInfos.Add(new PassThePopcornInfo()
|
||||
torrentInfos.Add(new PassThePopcornInfo
|
||||
{
|
||||
Guid = string.Format("PassThePopcorn-{0}", id),
|
||||
Title = title,
|
||||
Guid = $"PassThePopcorn-{id}",
|
||||
Title = torrent.ReleaseName,
|
||||
Size = long.Parse(torrent.Size),
|
||||
DownloadUrl = GetDownloadUrl(id, jsonResponse.AuthKey, jsonResponse.PassKey),
|
||||
InfoUrl = GetInfoUrl(result.GroupId, id),
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
@@ -9,12 +8,12 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
{
|
||||
public class PassThePopcornRequestGenerator : IIndexerRequestGenerator
|
||||
{
|
||||
public PassThePopcornSettings Settings { get; set; }
|
||||
private readonly PassThePopcornSettings _settings;
|
||||
|
||||
public IDictionary<string, string> Cookies { get; set; }
|
||||
|
||||
public IHttpClient HttpClient { get; set; }
|
||||
public Logger Logger { get; set; }
|
||||
public PassThePopcornRequestGenerator(PassThePopcornSettings settings)
|
||||
{
|
||||
_settings = settings;
|
||||
}
|
||||
|
||||
public virtual IndexerPageableRequestChain GetRecentRequests()
|
||||
{
|
||||
@@ -37,37 +36,27 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
{
|
||||
foreach (var queryTitle in searchCriteria.CleanSceneTitles)
|
||||
{
|
||||
pageableRequests.Add(GetRequest(string.Format("{0}&year={1}", queryTitle, searchCriteria.Movie.Year)));
|
||||
pageableRequests.Add(GetRequest($"{queryTitle}&year={searchCriteria.Movie.Year}"));
|
||||
}
|
||||
}
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
|
||||
public Func<IDictionary<string, string>> GetCookies { get; set; }
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
|
||||
private IEnumerable<IndexerRequest> GetRequest(string searchParameters)
|
||||
{
|
||||
var request =
|
||||
new IndexerRequest(
|
||||
$"{Settings.BaseUrl.Trim().TrimEnd('/')}/torrents.php?action=advanced&json=noredirect&searchstr={searchParameters}",
|
||||
$"{_settings.BaseUrl.Trim().TrimEnd('/')}/torrents.php?action=advanced&json=noredirect&grouping=0&searchstr={searchParameters}",
|
||||
HttpAccept.Json);
|
||||
|
||||
request.HttpRequest.Headers["ApiUser"] = Settings.APIUser;
|
||||
request.HttpRequest.Headers["ApiKey"] = Settings.APIKey;
|
||||
|
||||
if (Settings.APIKey.IsNullOrWhiteSpace())
|
||||
{
|
||||
foreach (var cookie in Cookies)
|
||||
{
|
||||
request.HttpRequest.Cookies[cookie.Key] = cookie.Value;
|
||||
}
|
||||
|
||||
CookiesUpdater(Cookies, DateTime.Now + TimeSpan.FromDays(30));
|
||||
}
|
||||
request.HttpRequest.Headers.Add("ApiUser", _settings.APIUser);
|
||||
request.HttpRequest.Headers.Add("ApiKey", _settings.APIKey);
|
||||
|
||||
yield return request;
|
||||
}
|
||||
|
||||
public Func<IDictionary<string, string>> GetCookies { get; set; }
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace NzbDrone.Core.Indexers.PassThePopcorn
|
||||
|
||||
public class PassThePopcornSettings : ITorrentIndexerSettings
|
||||
{
|
||||
private static readonly PassThePopcornSettingsValidator Validator = new PassThePopcornSettingsValidator();
|
||||
private static readonly PassThePopcornSettingsValidator Validator = new ();
|
||||
|
||||
public PassThePopcornSettings()
|
||||
{
|
||||
|
||||
@@ -498,7 +498,7 @@
|
||||
"ShowMovieInformation": "Filminformationen anzeigen",
|
||||
"ShowTitleHelpText": "Filmtitel unter dem Plakat anzeigen",
|
||||
"ShowUnknownMovieItems": "Unzugeordente Filmeinträge anzeigen",
|
||||
"SkipFreeSpaceCheck": "Pürfung des freien Speichers überspringen",
|
||||
"SkipFreeSpaceCheck": "Prüfung des freien Speichers überspringen",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Aktiviere diese Option, wenn es Radarr nicht möglich ist, den freien Speicherplatz des Stammverzeichnisses für Filme zu erkennen",
|
||||
"SorryThatMovieCannotBeFound": "Schade, dieser Film kann nicht gefunden werden.",
|
||||
"SourcePath": "Quellpfad",
|
||||
|
||||
@@ -1154,5 +1154,21 @@
|
||||
"DeleteRootFolder": "Eliminar Carpeta Raíz",
|
||||
"DeleteRootFolderMessageText": "¿Está seguro de querer eliminar la carpeta raíz '{0}'?",
|
||||
"DeleteSelectedImportLists": "Eliminar Lista(s) de Importación",
|
||||
"ListWillRefreshEveryInterp": "La lista será refrescada cada {0}"
|
||||
"ListWillRefreshEveryInterp": "La lista será refrescada cada {0}",
|
||||
"VideoDynamicRange": "Video de Rango Dinámico",
|
||||
"AddConditionImplementation": "Añadir Condición - {implementationName}",
|
||||
"AddConnection": "Añadir Conexión",
|
||||
"AddConnectionImplementation": "Añadir Conexión - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Añadir Cliente de Descarga - {implementationName}",
|
||||
"AddImportList": "Añadir Lista de Importación",
|
||||
"AuthenticationRequired": "Autenticación requerida",
|
||||
"AuthenticationMethod": "Método de autenticación",
|
||||
"AuthenticationMethodHelpTextWarning": "Por favor selecciona un método válido de autenticación",
|
||||
"AuthenticationRequiredHelpText": "Cambiar para que las solicitudes requieran autenticación. No lo cambie a menos que entienda los riesgos.",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Introduzca una nueva contraseña",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Introduzca un nuevo nombre de usuario",
|
||||
"AuthenticationRequiredWarning": "Para evitar el acceso remoto sin autenticación, {appName} ahora requiere que la autenticación esté habilitada. Opcionalmente puede desactivar la autenticación desde una dirección local.",
|
||||
"AutomaticUpdatesDisabledDocker": "Las actualizaciones automáticas no están soportadas directamente cuando se utiliza el mecanismo de actualización de Docker. Tendrá que actualizar la imagen del contenedor fuera de {appName} o utilizar un script",
|
||||
"AppUpdated": "{appName} Actualizada",
|
||||
"AudioLanguages": "Idiomas de Audio"
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"AutoRedownloadFailedHelpText": "Etsi ja yritä ladata toinen julkaisu automaattisesti",
|
||||
"CertificateValidation": "Varmenteen vahvistus",
|
||||
"Agenda": "Tehtävälista",
|
||||
"AgeWhenGrabbed": "Ikä (siepatessa)",
|
||||
"AgeWhenGrabbed": "Ikä (sieppaushetkellä)",
|
||||
"All": "Kaikki",
|
||||
"CutoffHelpText": "Kun tämä laatu on saavutettu, Radarr ei enää lataa elokuvia.",
|
||||
"DeleteQualityProfile": "Poista laatuprofiili",
|
||||
@@ -55,9 +55,9 @@
|
||||
"MultiLanguage": "Monikielinen",
|
||||
"PosterOptions": "Julistevaihtoehdot",
|
||||
"PreviewRenameHelpText": "Vihje: Esikatsellaksesi uudelleennimeämistä, valitse 'Peruuta' ja paina jonkin elokuvan otsikkoa ja käytä",
|
||||
"ProxyCheckResolveIpMessage": "Määritetyn välityspalvelimen '{0}' IP-osoitteen selvitys epäonnistui.",
|
||||
"ProxyCheckResolveIpMessage": "Määritetyn välityspalvelimen \"{0}\" IP-osoitteen selvitys epäonnistui.",
|
||||
"ProxyUsernameHelpText": "Käyttäjätunnus ja salasana tulee syöttää vain tarvittaessa. Muussa tapauksessa jätä kentät tyhjiksi.",
|
||||
"QualityOrLangCutoffHasNotBeenMet": "Laadun tai kielen raja-arvoa ei ole saavutettu",
|
||||
"QualityOrLangCutoffHasNotBeenMet": "Laadun tai kielen raja-arvoa ei ole saavutettu.",
|
||||
"Queue": "Jono",
|
||||
"ReleaseTitle": "Julkaisun otsikko",
|
||||
"ReplaceWithSpaceDash": "Korvaus: välilyönti-väliviiva",
|
||||
@@ -65,9 +65,9 @@
|
||||
"Runtime": "Ajonaika",
|
||||
"SearchCutoffUnmet": "Haun raja-arvo ei täytetty",
|
||||
"SearchFiltered": "Etsi suodatettuja",
|
||||
"SetPermissionsLinuxHelpTextWarning": "Jos et ole varma näiden asetusten toiminnasta, älä muuta niitä.",
|
||||
"SetPermissionsLinuxHelpTextWarning": "Jollet ole varma mitä nämä asetukset tekevät, älä muuta niitä.",
|
||||
"SettingsRemotePathMappingRemotePathHelpText": "Lataustyökalun käyttämän hakemiston juurisijainti",
|
||||
"SettingsShowRelativeDatesHelpText": "Näytä suhteutetut (tänään/eilen/yms.) tai absoluuttiset päiväykset.",
|
||||
"SettingsShowRelativeDatesHelpText": "Näytä suhteutetut (tänään/eilen/yms.) absoluuttisten sijaan",
|
||||
"TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys.",
|
||||
"Time": "Aika",
|
||||
"UILanguageHelpTextWarning": "Käyttöönotto vaatii selaimen sivupäivityksen.",
|
||||
@@ -91,7 +91,7 @@
|
||||
"BackupIntervalHelpText": "Tietokannan ja asetusten automaattisen varmuuskopioinnin ajoitus.",
|
||||
"AppDataDirectory": "AppData-kansio",
|
||||
"BackupNow": "Varmuuskopioi nyt",
|
||||
"BindAddressHelpText": "Toimiva IP-osoite, localhost tai '*' (tähti) kaikille yhteyksille.",
|
||||
"BindAddressHelpText": "Toimiva IP-osoite, \"localhost\" tai \"*\" (tähti) kaikille verkkoliitännöille.",
|
||||
"Branch": "Kehityshaara",
|
||||
"BuiltIn": "Sisäänrakennettu",
|
||||
"CalendarOptions": "Kalenterin asetukset",
|
||||
@@ -150,11 +150,11 @@
|
||||
"AllResultsHiddenFilter": "Kaikki tulokset on piilotettu aktiivisen suodattimen johdosta.",
|
||||
"Always": "Aina",
|
||||
"AnalyseVideoFiles": "Analysoi videotiedostot",
|
||||
"AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja sovelluksen 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.",
|
||||
"AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja {appName}in palvelimille. Näihin sisältyy tietoja selaimestasi, käyttöliittymän sivujen käytöstä, virheraportoinnista, käyttöjärjestelmästä ja suoritusalustasta. Käytämme näitä tietoja ominaisuuksien ja vikakorjausten painotukseen.",
|
||||
"AptUpdater": "Käytä APT:ta päivityksen asennukseen",
|
||||
"ApplyTags": "Tunnistetoimenpide",
|
||||
"AuthBasic": "Perus (selaimen ponnahdus)",
|
||||
"AuthenticationMethodHelpText": "Vaadi käyttäjätunnus ja salasana.",
|
||||
"AuthenticationMethodHelpText": "Vaadi käyttäjätunnus ja salasana {appName}in käyttöön.",
|
||||
"AuthForm": "Lomake (kirjautumissivu)",
|
||||
"Automatic": "Automaattinen",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Levyltä poistettavien elokuvien valvonta lopetetaan automaattisesti.",
|
||||
@@ -288,7 +288,7 @@
|
||||
"MountCheckMessage": "Elokuvareitin sisältävä kiinnike on asennettu vain luku -tilaan: ",
|
||||
"MovieID": "Elokuvan tunnus",
|
||||
"MovieIndex": "Elokuvakirjasto",
|
||||
"MovieInfoLanguageHelpText": "Kieli, jota Radarr käyttää elokuvien tiedoille, jotka näkyvät käyttöliittymässä.",
|
||||
"MovieInfoLanguageHelpText": "Käyttöliittymässä näytettävien elokuvatietojen kieli.",
|
||||
"MovieInfoLanguageHelpTextWarning": "Käyttöönotto vaatii selaimen sivupäivityksen.",
|
||||
"MovieIsDownloading": "Elokuvaa ladataan",
|
||||
"CustomFormatUnknownCondition": "Tuntematon mukautetun muodon ehto '{0}'",
|
||||
@@ -372,7 +372,7 @@
|
||||
"PhysicalRelease": "Fyysinen julkaisu",
|
||||
"Port": "Portti",
|
||||
"PortNumber": "Portti",
|
||||
"ProfilesSettingsSummary": "Laatu-, kieli- ja viiveprofiilit.",
|
||||
"ProfilesSettingsSummary": "Laatu-, kieli-, viive- ja julkaisuprofiilit.",
|
||||
"Progress": "Edistyminen",
|
||||
"Proper": "Kunnollinen",
|
||||
"Protocol": "Protokolla",
|
||||
@@ -399,7 +399,7 @@
|
||||
"RootFolderCheckMultipleMessage": "Useita juurikansioita puuttuu: {0}",
|
||||
"SendAnonymousUsageData": "Lähetä nimettömiä käyttötietoja",
|
||||
"Search": "Haku",
|
||||
"AddImportExclusionHelpText": "Estä Radarria lisäämästä tiettyä elokuvaa tuontilistoilta.",
|
||||
"AddImportExclusionHelpText": "Estä {appName}ia lisäämästä tiettyä elokuvaa tuontilistoilta.",
|
||||
"ImportListStatusCheckAllClientMessage": "Mitkään listat eivät ole virheiden vuoksi käytettävissä",
|
||||
"StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta",
|
||||
"StartupDirectory": "Käynnistyskansio",
|
||||
@@ -408,7 +408,7 @@
|
||||
"Posters": "Julisteet",
|
||||
"PosterSize": "Julisteen koko",
|
||||
"TagCannotBeDeletedWhileInUse": "Tunnistetta ei voi poistaa, koska se on käytössä",
|
||||
"TimeFormat": "Kellonajan esitystapa",
|
||||
"TimeFormat": "Kellonajan esitys",
|
||||
"TotalFileSize": "Tiedoston koko",
|
||||
"TotalSpace": "Kokonaistila",
|
||||
"UpgradeAllowedHelpText": "Jos käytöstä poistettuja laatuja ei päivitetä.",
|
||||
@@ -427,7 +427,7 @@
|
||||
"NotificationTriggers": "Laukaisijat",
|
||||
"Real": "Todellinen",
|
||||
"ChooseAnotherFolder": "Valitse toinen kansio",
|
||||
"ClickToChangeLanguage": "Vaihda kieltä painamalla tästä",
|
||||
"ClickToChangeLanguage": "Vaihda kieli painamalla tästä",
|
||||
"ClickToChangeMovie": "Vaihda elokuvaa painamalla tästä",
|
||||
"ClickToChangeQuality": "Vaihda laatua painamalla tästä",
|
||||
"CloneCustomFormat": "Kloonaa mukautettu muoto",
|
||||
@@ -442,7 +442,7 @@
|
||||
"Backup": "Varmuuskopio",
|
||||
"AddNewMessage": "Uuden elokuvan lisäys on helppoa. Aloita vain haluamasi elokuvan nimen kirjoitus.",
|
||||
"AddNewTmdbIdMessage": "Voit etsiä myös elokuvan TMDb-tunnisteella (esim. 'tmdb:71663').",
|
||||
"BackupFolderHelpText": "Suhteelliset polut kohdistuvat sovelluksen AppData-kansioon.",
|
||||
"BackupFolderHelpText": "Suhteelliset polut kohdistuvat {appName}in AppData-kansioon.",
|
||||
"Connections": "Kytkennät",
|
||||
"ConnectSettings": "Kytkentöjen asetukset",
|
||||
"ConnectSettingsSummary": "Ilmoitukset, yhteydet mediapalvelimiin/-soittimiin ja omat komentosarjat.",
|
||||
@@ -457,7 +457,7 @@
|
||||
"Custom": "Mukautettu",
|
||||
"CustomFilters": "Mukautetut suodattimet",
|
||||
"CustomFormat": "Mukautettu muoto",
|
||||
"CustomFormatHelpText": "Radarr pisteyttää jokaisen julkaisun käyttäen pisteiden summaa täsmääville mukautetuille muodoille. Jos uusi julkaisu parantaisi pisteitä samalla tai paremmalla laadulla, Radarr sieppaa sen.",
|
||||
"CustomFormatHelpText": "Julkaisut pisteteytetään täsmäävien mukautettujen muotojen pisteiden summaa. Jos uusi julkaisu parantaisi pisteytystä samalla tai paremmalla laadulla, Radarr sieppaa sen.",
|
||||
"CustomFormats": "Mukautetut muodot",
|
||||
"CustomFormatScore": "Mukautetun muodon pisteytys",
|
||||
"CustomFormatsSettings": "Mukautettujen muotojen asetukset",
|
||||
@@ -533,10 +533,10 @@
|
||||
"Enable": "Käytä",
|
||||
"EnableAutoHelpText": "Tämän tuontilistan elokuvat lisätään Radarriin automaattisesti.",
|
||||
"EnableAutomaticSearch": "Automaattihaku",
|
||||
"EnableAutomaticSearchHelpText": "Profiilia käytetään automaattihaun yhteydessä, kun sellainen suoritetaan käyttöliittymästä tai Radarrin toimesta.",
|
||||
"EnableAutomaticSearchHelpText": "Profiilia käytetään automaattihauille, jotka suoritetaan käyttöliittymästä tai Radarrin toimesta.",
|
||||
"EnableAutomaticSearchHelpTextWarning": "Profiilia käytetään vuorovaikutteisen haun yhteydessä.",
|
||||
"EnableColorImpairedMode": "Heikentyneen värinäön tila",
|
||||
"EnableColorImpairedModeHelpText": "Muokattu tyyli käyttäjille, joiden värinäkö on heikentynyt. Auttaa erottamaan värikoodatun tiedon.",
|
||||
"EnableColorImpairedModeHelpText": "Vaihtoehtoinen tyyli, joka auttaa erottamaan värikoodatut tiedot paremmin",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Tuo valmistuneet lataukset lataustyökalusta automaattisesti.",
|
||||
"EnabledHelpText": "Käytä tätä tuontilistaa.",
|
||||
"EnableInteractiveSearchHelpTextWarning": "Tämä tietolähde ei tue hakua",
|
||||
@@ -786,20 +786,20 @@
|
||||
"SelectLanguage": "Valitse kieli",
|
||||
"SelectMovie": "Valitse Elokuva",
|
||||
"SelectQuality": "Valitse Laatu",
|
||||
"SetPermissions": "Aseta käyttöoikeudet",
|
||||
"SetPermissionsLinuxHelpText": "Pitäisikö chmod suorittaa, kun tiedostoja tuodaan / nimetään uudelleen?",
|
||||
"SetPermissions": "Määritä käyttöoikeudet",
|
||||
"SetPermissionsLinuxHelpText": "Tulisiko chmod suorittaa, kun tiedostoja tuodaan/nimetään uudelleen?",
|
||||
"SetTags": "Tunnisteiden määritys",
|
||||
"Settings": "Asetukset",
|
||||
"SettingsEnableColorImpairedMode": "Heikentyneen värinäön tila",
|
||||
"SettingsEnableColorImpairedModeHelpText": "Muokattu tyyli käyttäjille, joiden värinäkö on heikentynyt. Auttaa erottamaan värikoodatun tiedon.",
|
||||
"SettingsEnableColorImpairedModeHelpText": "Vaihtoehtoinen tyyli, joka auttaa erottamaan värikoodatut tiedot paremmin",
|
||||
"SettingsFirstDayOfWeek": "Viikon ensimmäinen päivä",
|
||||
"SettingsLongDateFormat": "Päiväyksen pitkä esitystapa",
|
||||
"SettingsRemotePathMappingHostHelpText": "Sama isäntä, jonka määritit etälatausasiakkaalle",
|
||||
"SettingsLongDateFormat": "Pitkän päiväyksen esitys",
|
||||
"SettingsRemotePathMappingHostHelpText": "Sama osoite, joka on määritty etälataustyökalulle.",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Polku, jonka kautta etäsijaintia tulee käyttää paikallisesti.",
|
||||
"SettingsRuntimeFormat": "Keston esitystapa",
|
||||
"SettingsShortDateFormat": "Päiväyksen lyhyt esitystapa",
|
||||
"SettingsShowRelativeDates": "Suhteellinen päiväysten esitystapa",
|
||||
"SettingsTimeFormat": "Kellonajan esitystapa",
|
||||
"SettingsRuntimeFormat": "Keston esitys",
|
||||
"SettingsShortDateFormat": "Lyhyen päiväyksen esitys",
|
||||
"SettingsShowRelativeDates": "Suhteellisten päiväysten esitys",
|
||||
"SettingsTimeFormat": "Kellonajan esitys",
|
||||
"SettingsWeekColumnHeader": "Viikkosarakkeen otsikko",
|
||||
"SettingsWeekColumnHeaderHelpText": "Näkyy jokaisen sarakkeen yläpuolella käytettäessä viikkonäkymää.",
|
||||
"ShouldMonitorHelpText": "Lisää listan elokuvat valvottuina.",
|
||||
@@ -849,7 +849,7 @@
|
||||
"StartSearchForMissingMovie": "Aloita puuttuvan elokuvan haku",
|
||||
"Status": "Tila",
|
||||
"Studio": "Studio",
|
||||
"Style": "Ulkoasun tyyli",
|
||||
"Style": "Ulkoasu",
|
||||
"SubfolderWillBeCreatedAutomaticallyInterp": "Alikansio '{0}' luodaan automaattisesti",
|
||||
"Sunday": "sunnuntai",
|
||||
"Table": "Taulukko",
|
||||
@@ -935,7 +935,7 @@
|
||||
"UpgradeUntilThisQualityIsMetOrExceeded": "Päivitä, kunnes tämä laatu saavutetaan tai ylitetään",
|
||||
"UpperCase": "Isot kirjaimet",
|
||||
"URLBase": "URL-perusta",
|
||||
"UrlBaseHelpText": "Käänteisen välityspalvelimen tuki (esim. 'http://[host]:[port]/[urlBase]'). Käytä oletusta jättämällä tyhjäksi.",
|
||||
"UrlBaseHelpText": "Käänteisen välityspalvelimen tuki (esim. \"http://[host]:[port]/[urlBase]\"). Käytä oletusta jättämällä tyhjäksi.",
|
||||
"UseHardlinksInsteadOfCopy": "Käytä hardlink-kytköksiä",
|
||||
"Usenet": "Usenet",
|
||||
"UsenetDelay": "Usenet-viive",
|
||||
@@ -1112,5 +1112,20 @@
|
||||
"ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi.",
|
||||
"DeleteSelectedDownloadClients": "Poista lataustyökalu",
|
||||
"RemoveSelectedItemQueueMessageText": "Haluatko varmasti poistaa jonosta 1 kohteen?",
|
||||
"RemoveSelectedItemsQueueMessageText": "Haluatko varmasti poistaa jonosta {0} kohdetta?"
|
||||
"RemoveSelectedItemsQueueMessageText": "Haluatko varmasti poistaa jonosta {0} kohdetta?",
|
||||
"LanguagesLoadError": "Kielien lataus ei onnistu",
|
||||
"SubtitleLanguages": "Tekstityskielet",
|
||||
"SelectLanguageModalTitle": "{modalTitle} - Valitse kieli",
|
||||
"AppUpdated": "{appName} on päivitetty",
|
||||
"AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on ladattava uudelleen.",
|
||||
"InvalidUILanguage": "Käytöliittymän kielivalinta on virheellinen. Korjaa se ja tallenna asetukset.",
|
||||
"GrabId": "Sieppaustunniste",
|
||||
"OverrideGrabNoLanguage": "Ainakin yksi kieli on valittava.",
|
||||
"BlocklistReleaseHelpText": "Etsii kohdetta uudelleen ja estää {appName}ia sieppaamasta tätä julkaisua automaattisesti uudelleen.",
|
||||
"AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt todennuksen käyttöönoton. Todennus voidaan poistaa käytöstä paikallisille osoitteille.",
|
||||
"AudioLanguages": "Äänen kielet",
|
||||
"AutomaticUpdatesDisabledDocker": "Suoraa automaattista päivitystä ei tueta käytettäessä Dockerin päivitysmekanismia. Joko Docker-säiliö on päivitettävä {appName}in ulkopuolella tai päivitys on suoritettava skriptillä.",
|
||||
"ConnectionLostReconnect": "{appName} pyrkii ajoittain muodostamaan yhteyden automaattisesti tai sitä voidaan yrittää manuaalisesti painamalla alta \"Lataa uudelleen\".",
|
||||
"ConnectionLostToBackend": "{appName} kadotti yhteyden taustajärjestelmään ja käytettävyyden palauttamiseksi se on ladattava uudelleen.",
|
||||
"InteractiveImportNoLanguage": "Kielet on valittavat jokaiselle valitulle tiedostolle"
|
||||
}
|
||||
|
||||
@@ -11,22 +11,22 @@
|
||||
"iCalLink": "Lien iCal",
|
||||
"Host": "Hôte",
|
||||
"History": "Historique",
|
||||
"HideAdvanced": "Masquer avancé",
|
||||
"HideAdvanced": "Masquer param. av.",
|
||||
"Health": "Santé",
|
||||
"GrabSelected": "Saisir la sélection",
|
||||
"General": "Général",
|
||||
"FreeSpace": "Espace libre",
|
||||
"Formats": "Formats",
|
||||
"Folder": "Dossier",
|
||||
"Filter": "Filtre",
|
||||
"Filter": "Filtrer",
|
||||
"Files": "Fichiers",
|
||||
"FileManagement": "Gestion de fichiers",
|
||||
"FailedDownloadHandling": "Gestion des échecs de téléchargement",
|
||||
"Events": "Événements",
|
||||
"Edit": "Éditer",
|
||||
"Edit": "Modifier",
|
||||
"Downloaded": "Téléchargé",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Aucun client de téléchargement n'est disponible en raison d'échecs",
|
||||
"DownloadClients": "Clients télécharg.",
|
||||
"DownloadClients": "Clients de télécharg.",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Aucun client de téléchargement n'est disponible",
|
||||
"Dates": "Dates",
|
||||
"Date": "Date",
|
||||
@@ -51,42 +51,42 @@
|
||||
"AppDataLocationHealthCheckMessage": "La mise à jour ne sera pas possible afin empêcher la suppression de AppData lors de la mise à jour",
|
||||
"Analytics": "Statistiques",
|
||||
"All": "Tout",
|
||||
"AddNewTmdbIdMessage": "Vous pouvez aussi effectuer une recherche de film à l'aide de son identifiant TMDb. exemple : \"tmdb:71663\"",
|
||||
"AddNewMessage": "C'est facile d'ajouter un nouveau film, vous avez juste à taper le nom du film que vous voulez ajouter",
|
||||
"AddNewTmdbIdMessage": "Vous pouvez aussi effectuer une recherche de film à l'aide de son identifiant TMDb, par exemple : « tmdb:71663 »",
|
||||
"AddNewMessage": "C'est facile d'ajouter un nouveau film, vous n'avez juste qu'à saisir le nom du film que vous voulez ajouter",
|
||||
"AddMovies": "Ajouter des films",
|
||||
"AddExclusion": "Ajouter une exclusion",
|
||||
"AddNew": "Ajouter un nouveau",
|
||||
"AddNew": "Ajouter une nouvelle",
|
||||
"Activity": "Activité",
|
||||
"About": "À propos",
|
||||
"CustomFormatsSettingsSummary": "Paramètres et Formats personnalisés",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison d'échecs : {0}",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Clients de Téléchargement indisponibles en raison d'échecs : {0}",
|
||||
"SetTags": "Définir Tags",
|
||||
"SetTags": "Définir les étiquettes",
|
||||
"ReleaseTitle": "Titre de la version",
|
||||
"ReleaseStatus": "Statut de la version",
|
||||
"ReleaseGroup": "Groupe de versions",
|
||||
"UpdateCheckUINotWritableMessage": "Impossible d'installer la mise à jour car le dossier d'interface utilisateur '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.",
|
||||
"UpdateCheckStartupTranslocationMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' se trouve dans un dossier App Translocation.",
|
||||
"UpdateCheckStartupNotWritableMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.",
|
||||
"UnselectAll": "Tout déselectionner",
|
||||
"UnselectAll": "Tout désélectionner",
|
||||
"Unmonitored": "Non surveillé",
|
||||
"UISettingsSummary": "Calendrier, date et les options d'altération des couleurs",
|
||||
"TagsSettingsSummary": "Voir tous les tags et leur utilisation. Les tags inutilisés peuvent être supprimés",
|
||||
"TagsSettingsSummary": "Voir toutes les étiquettes et leur utilisation. Les étiquettes inutilisées peuvent être supprimées",
|
||||
"Style": "Style",
|
||||
"Studio": "Studio",
|
||||
"Status": "Statut",
|
||||
"Status": "État",
|
||||
"SourceTitle": "Titre de la source",
|
||||
"Sort": "Trier",
|
||||
"SizeOnDisk": "Taille sur le disque",
|
||||
"Size": "Taille",
|
||||
"ShowAdvanced": "Afficher avancés",
|
||||
"ShowAdvanced": "Afficher param. av.",
|
||||
"Settings": "Paramètres",
|
||||
"SelectAll": "Tout sélectionner",
|
||||
"Security": "Sécurité",
|
||||
"SearchSelected": "Recherche sélectionnée",
|
||||
"SearchSelected": "Rechercher la sélection",
|
||||
"SearchForMissing": "Recherche les manquants",
|
||||
"SearchFiltered": "Chercher les filtrés",
|
||||
"SearchAll": "Rechercher tout",
|
||||
"SearchAll": "Tout rechercher",
|
||||
"Search": "Rechercher",
|
||||
"Scheduled": "Programmé",
|
||||
"SaveChanges": "Sauvegarder les modifications",
|
||||
@@ -110,9 +110,9 @@
|
||||
"Ratings": "Évaluations",
|
||||
"Queue": "File d'attente",
|
||||
"QualitySettingsSummary": "Tailles qualité et dénomination",
|
||||
"QualityProfiles": "Profils qualité",
|
||||
"QualityProfiles": "Profils de qualité",
|
||||
"QualityProfile": "Profil de qualité",
|
||||
"QualityDefinitions": "Définitions qualité",
|
||||
"QualityDefinitions": "Définitions des qualités",
|
||||
"Quality": "Qualité",
|
||||
"PtpOldSettingsCheckMessage": "Les indexeurs PassThePopcorn suivants ont des paramètres obsolètes et doivent être mis à jour : {0}",
|
||||
"ProxyCheckResolveIpMessage": "Impossible de résoudre l'adresse IP de l'hôte proxy configuré {0}",
|
||||
@@ -121,14 +121,14 @@
|
||||
"Proxy": "Proxy",
|
||||
"Protocol": "Protocole",
|
||||
"Progress": "Progression",
|
||||
"ProfilesSettingsSummary": "Profils de qualité, de langue et de délai",
|
||||
"ProfilesSettingsSummary": "Profils de qualité, de langue, de délai et de release",
|
||||
"Profiles": "Profils",
|
||||
"PreviewRename": "Aperçu Renommage",
|
||||
"PhysicalRelease": "Sortie Physique",
|
||||
"PhysicalRelease": "Sortie physique",
|
||||
"Path": "Chemin",
|
||||
"OutputPath": "Chemin de sortie",
|
||||
"Options": "Options",
|
||||
"NoChanges": "Aucun changement",
|
||||
"NoChanges": "Aucune modification",
|
||||
"NoChange": "Pas de changement",
|
||||
"ImportListStatusCheckSingleClientMessage": "Listes indisponibles en raison d'échecs : {0}",
|
||||
"ImportListStatusCheckAllClientMessage": "Toutes les listes ne sont pas disponibles en raison d'échecs",
|
||||
@@ -178,7 +178,7 @@
|
||||
"Titles": "Titres",
|
||||
"Timeleft": "Temps restant",
|
||||
"Tasks": "Tâches",
|
||||
"Tags": "Tags",
|
||||
"Tags": "Étiquettes",
|
||||
"System": "Système",
|
||||
"Year": "Année",
|
||||
"LastWriteTime": "Heure de la dernière écriture",
|
||||
@@ -254,19 +254,19 @@
|
||||
"SettingsWeekColumnHeaderHelpText": "Affiché au dessus de chaque colonne quand \"Semaine\" est l'affichage actif",
|
||||
"SettingsShowRelativeDates": "Afficher les dates relatives",
|
||||
"OverviewOptions": "Aperçu des options",
|
||||
"UnsavedChanges": "Changement non sauvegardés",
|
||||
"UnsavedChanges": "Modifications non sauvegardées",
|
||||
"Table": "Tableau",
|
||||
"ShowTitle": "Afficher le titre",
|
||||
"ShowStudio": "Afficher le studio",
|
||||
"ShowSizeOnDisk": "Afficher la taille sur le disque",
|
||||
"ShowSearchHelpText": "Afficher le bouton de recherche au survol de la souris",
|
||||
"ShowSearchHelpText": "Affiche le bouton de recherche au survol du curseur",
|
||||
"ShowSearch": "Afficher la recherche",
|
||||
"ShowQualityProfile": "Afficher le profil de qualité",
|
||||
"ShowPath": "Afficher le chemin",
|
||||
"ShowDateAdded": "Afficher la date d'ajout",
|
||||
"SettingsWeekColumnHeader": "En-tête de la colonne : Semaine",
|
||||
"SettingsTimeFormat": "Format de l'heure",
|
||||
"SettingsShowRelativeDatesHelpText": "Afficher les dates relatives (Aujourd'hui/ Hier/ etc) ou absolues",
|
||||
"SettingsShowRelativeDatesHelpText": "Afficher les dates relatives (aujourd'hui, hier, etc.) ou absolues",
|
||||
"SettingsShortDateFormat": "Format de date court",
|
||||
"SettingsRemotePathMappingRemotePathHelpText": "Chemin racine du dossier auquel le client de téléchargement accède",
|
||||
"SettingsRemotePathMappingRemotePath": "Chemin distant",
|
||||
@@ -282,12 +282,12 @@
|
||||
"SearchMovie": "Rechercher le film",
|
||||
"RecentFolders": "Dossiers récents",
|
||||
"QuickImport": "Déplacer automatiquement",
|
||||
"PosterSize": "Taille des posters",
|
||||
"PosterSize": "Taille des affiches",
|
||||
"Posters": "Affiches",
|
||||
"PosterOptions": "Options des posters",
|
||||
"PendingChangesStayReview": "Rester et vérifier les changements",
|
||||
"PendingChangesMessage": "Vous avez effectué des changements non sauvegardés, souhaitez vous quitter cette page ?",
|
||||
"PendingChangesDiscardChanges": "Abandonner les changements et quitter",
|
||||
"PosterOptions": "Options des affiches",
|
||||
"PendingChangesStayReview": "Rester et vérifier les modifications",
|
||||
"PendingChangesMessage": "Vous avez des modifications non sauvegardées, voulez-vous vraiment quitter cette page ?",
|
||||
"PendingChangesDiscardChanges": "Abandonner les modifications et quitter",
|
||||
"Overview": "Aperçu",
|
||||
"MonitorMovie": "Surveiller le film",
|
||||
"InteractiveImport": "Importation interactive",
|
||||
@@ -297,8 +297,8 @@
|
||||
"DetailedProgressBarHelpText": "Afficher le texte sur la barre de progression",
|
||||
"DetailedProgressBar": "Barre de progression détaillée",
|
||||
"Conditions": "Conditions",
|
||||
"ColonReplacementFormatHelpText": "Changer la manière dont Radarr remplace les 'deux-points'",
|
||||
"ColonReplacement": "Remplacement pour le 'deux-points'",
|
||||
"ColonReplacementFormatHelpText": "Changer la manière dont Radarr remplace les « deux-points »",
|
||||
"ColonReplacement": "Remplacement pour le « deux-points »",
|
||||
"CloneProfile": "Dupliqué le profil",
|
||||
"CloneIndexer": "Dupliqué l'indexeur",
|
||||
"ClientPriority": "Priorité du client",
|
||||
@@ -312,19 +312,19 @@
|
||||
"CertificateValidation": "Validation du certificat",
|
||||
"BypassProxyForLocalAddresses": "Contourner le proxy pour les adresses locales",
|
||||
"Branch": "Branche",
|
||||
"BindAddressHelpText": "Adresse IP valide, localhost ou '*' pour toutes les interfaces",
|
||||
"BindAddressHelpText": "Adresse IP valide, localhost ou « * » pour toutes les interfaces",
|
||||
"BindAddress": "Adresse de liaison",
|
||||
"Backups": "Sauvegardes",
|
||||
"BackupRetentionHelpText": "Les sauvegardes automatiques plus anciennes que la période de rétention seront nettoyées automatiquement",
|
||||
"BackupIntervalHelpText": "Intervalle entre les sauvegardes automatiques",
|
||||
"AvailabilityDelay": "Délai de disponibilité",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Les films qui sont effacés du disque dur ne seront plus surveillés dans Radarr",
|
||||
"AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Les films effacés du disque dur ne seront plus surveillés dans Radarr",
|
||||
"AutoRedownloadFailedHelpText": "Recherche automatique et tentative de téléchargement d'une version différente",
|
||||
"Automatic": "Automatique",
|
||||
"AuthenticationMethodHelpText": "Nom d'utilisateur et mot de passe requis pour accéder à {appName}",
|
||||
"AuthenticationMethodHelpText": "Exiger un nom d'utilisateur et un mot de passe pour accéder à {appName}",
|
||||
"Authentication": "Authentification",
|
||||
"AsAllDayHelpText": "Les événements apparaîtront comme des événements journaliers dans votre calendrier",
|
||||
"ApplyTags": "Appliquer les tags",
|
||||
"ApplyTags": "Appliquer les étiquettes",
|
||||
"AppDataDirectory": "Dossier AppData",
|
||||
"ApiKey": "Clé API",
|
||||
"AnalyticsEnabledHelpText": "Envoyer des informations anonymes sur l'utilisation et les erreurs vers les serveurs de Radarr. Cela inclut des informations sur votre navigateur, quelle page Radarr WebUI vous utilisez, les rapports d'erreur ainsi que le système d'exploitation et sa version. Nous utiliserons ces informations pour prioriser les nouvelles fonctionnalités et les corrections de bugs.",
|
||||
@@ -337,7 +337,7 @@
|
||||
"IgnoreDeletedMovies": "Annuler la surveillance des films supprimés",
|
||||
"IgnoredAddresses": "Adresses ignorées",
|
||||
"IconForCutoffUnmet": "Icône pour limite non atteinte",
|
||||
"ICalHttpUrlHelpText": "Copiez cette URL dans votre client ou cliquez pour souscrire si votre navigateur est compatible avec webcal",
|
||||
"ICalHttpUrlHelpText": "Copiez cette URL dans votre/vos client(s) ou cliquez pour abonner si votre navigateur est compatible avec webcal",
|
||||
"ICalFeed": "Flux iCal",
|
||||
"Hostname": "Nom d'hôte",
|
||||
"Group": "Groupe",
|
||||
@@ -400,14 +400,14 @@
|
||||
"CertificationCountry": "Pays de classification",
|
||||
"BackupFolderHelpText": "Les chemins relatifs pointeront sous le repertoire AppData de Radarr",
|
||||
"AvailabilityDelayHelpText": "Temps à laisser s’écouler (avant ou après la date de disponibilité) avant de chercher le film",
|
||||
"AddImportExclusionHelpText": "Empêcher Radarr d'ajouter le films automatiquement via une liste.",
|
||||
"AddImportExclusionHelpText": "Empêcher Radarr d'ajouter le film automatiquement via une liste",
|
||||
"ImportExtraFilesHelpText": "Importer les fichiers extra correspondants (sous-titres, .nfo etc.) après avoir importé un fichier film",
|
||||
"ImportExtraFiles": "Importer les fichiers extra",
|
||||
"ImportedTo": "Importé vers",
|
||||
"IllRestartLater": "Je redémarrerai plus tard",
|
||||
"IgnoredHelpText": "La version sera rejetée si elle contient au moins l'un de ces termes (insensible à la casse)",
|
||||
"Cutoff": "Limite",
|
||||
"CouldNotFindResults": "Pas de résultats pour '{0}'",
|
||||
"CouldNotFindResults": "Aucun résultat pour « {term} »",
|
||||
"ClickToChangeMovie": "Cliquer pour changer le film",
|
||||
"CheckDownloadClientForDetails": "Pour plus de détails, consultez le client de téléchargement",
|
||||
"CantFindMovie": "Pourquoi je ne parviens pas trouver mon film ?",
|
||||
@@ -416,8 +416,8 @@
|
||||
"BranchUpdate": "Branche à utiliser pour mettre à jour Radarr",
|
||||
"BeforeUpdate": "Avant la mise à jour",
|
||||
"ApplyTagsHelpTextHowToApplyMovies": "Comment appliquer des tags au film sélectionné",
|
||||
"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}' ?",
|
||||
"DeleteDownloadClientMessageText": "Voulez-vous supprimer le client de téléchargement « {name} » ?",
|
||||
"DeleteBackupMessageText": "Voulez-vous supprimer la sauvegarde « {name} » ?",
|
||||
"ErrorLoadingContents": "Erreur lors du chargement du contenu",
|
||||
"EnableInteractiveSearchHelpTextWarning": "La recherche n'est pas prise en charge avec cet indexeur",
|
||||
"EnableInteractiveSearchHelpText": "Sera utilisé lorsque la recherche interactive est utilisée",
|
||||
@@ -427,7 +427,7 @@
|
||||
"Downloading": "Téléchargement",
|
||||
"DownloadClientUnavailable": "Le client de téléchargement n'est pas disponible",
|
||||
"DeleteRestrictionHelpText": "Voulez-vous vraiment supprimer cette restriction ?",
|
||||
"DeleteIndexerMessageText": "Voulez-vous vraiment supprimer l'indexeur '{0}' ?",
|
||||
"DeleteIndexerMessageText": "Voulez-vous vraiment supprimer l'indexeur « {name} » ?",
|
||||
"CopyToClipboard": "Copier dans le presse-papier",
|
||||
"GoToInterp": "Aller à {0}",
|
||||
"ForMoreInformationOnTheIndividualImportListsClinkOnTheInfoButtons": "Pour plus d'informations sur les listes d'importation individuelles, cliquez sur les boutons d'information.",
|
||||
@@ -440,7 +440,7 @@
|
||||
"DownloadedButNotMonitored": "Téléchargé (non surveillé)",
|
||||
"DownloadedAndMonitored": "Téléchargé (surveillé)",
|
||||
"Disabled": "Désactivé",
|
||||
"DeleteNotificationMessageText": "Êtes-vous sûr de vouloir supprimer la notification '{0}' ?",
|
||||
"DeleteNotificationMessageText": "Voulez-vous supprimer la notification « {name} » ?",
|
||||
"AutomaticSearch": "Recherche automatique",
|
||||
"AddIndexer": "Ajouter un indexeur",
|
||||
"ListSyncLevelHelpText": "Les films de la bibliothèque seront traités en fonction de votre sélection s'ils n'apparaissent pas dans votre (ou vos) liste(s)",
|
||||
@@ -452,12 +452,12 @@
|
||||
"IndexerSettings": "Paramètres de l'indexeur",
|
||||
"IndexerPriorityHelpText": "Priorité de l'indexeur de 1 (la plus élevée) à 50 (la plus basse). Par défaut : 25. Utilisé lors de la récupération de versions pour départager des versions égales, Radarr utilisera toujours tous les indexeurs activés pour la synchronisation et la recherche RSS",
|
||||
"IndexerPriority": "Priorité de l'indexeur",
|
||||
"IncludeUnmonitored": "Inclure non surveillé",
|
||||
"IncludeUnmonitored": "Inclure les non surveillés",
|
||||
"IncludeRecommendationsHelpText": "Inclure les films recommandés par Radarr dans la vue découverte",
|
||||
"IncludeRadarrRecommendations": "Inclure les recommandations de Radarr",
|
||||
"ImportMovies": "Importer Films",
|
||||
"Importing": "Importation",
|
||||
"ImportFailed": "L'importation a échoué : {0}",
|
||||
"ImportFailed": "L'importation a échoué : {sourceTitle}",
|
||||
"ImportCustomFormat": "Importer format personnalisé",
|
||||
"IgnoredPlaceHolder": "Ajouter une nouvelle restriction",
|
||||
"HaveNotAddedMovies": "Vous n'avez pas encore ajouté de films, voulez-vous d'abord importer certains ou tous vos films ?",
|
||||
@@ -486,7 +486,7 @@
|
||||
"Version": "Version",
|
||||
"Username": "Nom d'utilisateur",
|
||||
"UseProxy": "Utiliser un proxy",
|
||||
"UsenetDelay": "Délai Usenet",
|
||||
"UsenetDelay": "Retard Usenet",
|
||||
"Usenet": "Usenet",
|
||||
"UseHardlinksInsteadOfCopy": "Utiliser des liens physiques au lieu de copier",
|
||||
"UrlBaseHelpText": "Pour la prise en charge du proxy inverse, la valeur par défaut est vide",
|
||||
@@ -516,7 +516,7 @@
|
||||
"MediaManagementSettings": "Paramètres de gestion des médias",
|
||||
"MediaInfo": "Média Info",
|
||||
"Mechanism": "Mécanisme",
|
||||
"MaximumSizeHelpText": "Taille maximale d'une version à saisir en Mo. Mettre à zéro pour définir sur illimité",
|
||||
"MaximumSizeHelpText": "Taille maximale d'une release à récupérer en Mo. Mettre à zéro pour définir sur illimité",
|
||||
"MaximumSize": "Taille maximum",
|
||||
"MaximumLimits": "Limites maximales",
|
||||
"MarkAsFailed": "Marquer comme échoué",
|
||||
@@ -532,39 +532,39 @@
|
||||
"ListSettings": "Paramètres liste",
|
||||
"HiddenClickToShow": "Caché, cliquez pour afficher",
|
||||
"IncludeHealthWarningsHelpText": "Inclure avertissements santé",
|
||||
"FocusSearchBox": "Zone de recherche de focus",
|
||||
"FocusSearchBox": "Placer le curseur sur la barre de recherche",
|
||||
"ThisConditionMatchesUsingRegularExpressions": "Cette condition correspond à l'utilisation d'expressions régulières. Notez que les caractères {0} ont des significations spéciales et doivent être échappés avec un {1}",
|
||||
"RequiredHelpText": "Cette {0} condition doit correspondre pour que le format personnalisé s'applique. Sinon, une seule correspondance {1} est suffisante.",
|
||||
"ProxyBypassFilterHelpText": "Utiliser ',' comme séparateur et '*.' comme caractère générique pour les sous-domaines",
|
||||
"OnGrabHelpText": "À la Récupération",
|
||||
"NegateHelpText": "Si coché, le format personnalisé ne s'appliquera pas si cette condition {0} correspond.",
|
||||
"LastDuration": "Dernière durée",
|
||||
"IncludeCustomFormatWhenRenamingHelpText": "Inclus dans {Custom Formats} renommer le format",
|
||||
"IncludeCustomFormatWhenRenamingHelpText": "Inclut dans {Custom Formats} renommant le format",
|
||||
"GrabReleaseMessageText": "Radarr n'a pas été en mesure de déterminer à quel film cette version était destinée. Radarr peut être incapable d'importer automatiquement cette version. Voulez-vous récupérer '{0}' ?",
|
||||
"ExtraFileExtensionsHelpTexts1": "Liste séparée par des virgules des fichiers supplémentaires à importer (.nfo sera importé en tant que .nfo-orig)",
|
||||
"YouCanAlsoSearch": "Vous pouvez également effectuer une recherche à l'aide de l'ID TMDb ou de l'ID IMDb d'un film. par exemple : `tmdb:71663`",
|
||||
"WhitelistedSubtitleTags": "Balises de sous-titres sur liste blanche",
|
||||
"WhitelistedHardcodedSubsHelpText": "Les balises de sous-titres définies ici ne seront pas considérées comme codées en dur",
|
||||
"WeekColumnHeader": "En-tête de colonne de la semaine",
|
||||
"UsenetDelayHelpText": "Délai en minutes avant de récupérer une version Usenet",
|
||||
"UsenetDelayHelpText": "Délai en minutes avant de récupérer une release de Usenet",
|
||||
"Uptime": "Durée de fonctionnent",
|
||||
"UpgradeUntilThisQualityIsMetOrExceeded": "Mettre à niveau jusqu'à ce que cette qualité soit atteinte ou dépassée",
|
||||
"UpgradeAllowedHelpText": "Si désactivé, la qualité ne sera pas améliorée",
|
||||
"UpgradeAllowedHelpText": "Si désactivé, les qualités ne seront pas améliorées",
|
||||
"UpdateScriptPathHelpText": "Chemin vers un script personnalisé qui prend un package de mise à jour extraite et gère le reste du processus de mise à jour",
|
||||
"UpdateMechanismHelpText": "Utiliser le programme de mise à jour intégré de Radarr ou un script",
|
||||
"UpdateAutomaticallyHelpText": "Télécharger et installer automatiquement les mises à jour. Vous pourrez toujours installer à partir de System : Updates",
|
||||
"Unreleased": "Indisponible",
|
||||
"Unreleased": "Non dévoilé",
|
||||
"UnmonitoredHelpText": "Inclure les films non surveillés dans le flux iCal",
|
||||
"Ungroup": "Dissocier",
|
||||
"UnableToLoadUISettings": "Impossible de charger les paramètres de l'interface utilisateur",
|
||||
"UnableToLoadTheCalendar": "Impossible de charger le calendrier",
|
||||
"UnableToLoadTags": "Impossible de charger les balises",
|
||||
"UnableToLoadTags": "Impossible de charger les étiquettes",
|
||||
"UnableToLoadListExclusions": "Impossible de charger les exclusions de liste",
|
||||
"UnableToLoadIndexers": "Impossible de charger les indexeurs",
|
||||
"UnableToLoadIndexerOptions": "Impossible de charger les options de l'indexeur",
|
||||
"UnableToLoadGeneralSettings": "Impossible de charger les paramètres généraux",
|
||||
"UnableToLoadDownloadClientOptions": "Impossible de charger les options du client de téléchargement",
|
||||
"UnableToLoadDelayProfiles": "Impossible de charger les profils de délai",
|
||||
"UnableToLoadDelayProfiles": "Impossible de charger les profils de retard",
|
||||
"UnableToLoadCustomFormats": "Impossible de charger les formats personnalisés",
|
||||
"UnableToLoadBackups": "Impossible de charger les sauvegardes",
|
||||
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Impossible d'ajouter un nouveau mappage de chemin distant, veuillez réessayer.",
|
||||
@@ -577,26 +577,26 @@
|
||||
"UnableToAddANewCustomFormatPleaseTryAgain": "Impossible d'ajouter un nouveau format personnalisé, veuillez réessayer.",
|
||||
"UnableToAddANewConditionPleaseTryAgain": "Impossible d'ajouter une nouvelle condition, veuillez réessayer.",
|
||||
"TorrentDelayHelpText": "Délai en minutes avant de récupérer un torrent",
|
||||
"TorrentDelay": "Torrent Délai",
|
||||
"TorrentDelay": "Retard du torrent",
|
||||
"PriorityHelpText": "Donnez la priorité à plusieurs clients de téléchargement. Le Round-Robin est utilisé pour les clients ayant la même priorité.",
|
||||
"TagIsNotUsedAndCanBeDeleted": "La balise n'est pas utilisée et peut être supprimée",
|
||||
"TagIsNotUsedAndCanBeDeleted": "L'étiquette n'est pas utilisée et peut être supprimée",
|
||||
"TagsHelpText": "S'applique aux films avec au moins une balise correspondante",
|
||||
"StartTypingOrSelectAPathBelow": "Commencer à taper ou sélectionner un chemin ci-dessous",
|
||||
"StartTypingOrSelectAPathBelow": "Commencer à écrire ou sélectionner un chemin ci-dessous",
|
||||
"ProtocolHelpText": "Choisissez le(s) protocole(s) à utiliser et celui qui est préféré lors du choix entre des versions par ailleurs égales",
|
||||
"PreferIndexerFlagsHelpText": "Prioriser les versions avec des indicateurs spéciaux",
|
||||
"PreferIndexerFlags": "Préférer les indicateurs d'indexation",
|
||||
"NoTagsHaveBeenAddedYet": "Aucune identification n'a été ajoutée pour l'instant",
|
||||
"NoTagsHaveBeenAddedYet": "Aucune étiquette n'a encore été ajoutée",
|
||||
"MinimumAgeHelpText": "Usenet uniquement : âge minimum en minutes des NZB avant qu'ils ne soient saisis. Utiliser ceci pour donner aux nouvelles versions le temps de se propager à votre fournisseur usenet.",
|
||||
"MinFormatScoreHelpText": "Score de format personnalisé minimum autorisé à télécharger",
|
||||
"IndexerFlags": "Indicateurs d'indexeur",
|
||||
"IncludeCustomFormatWhenRenaming": "Inclure un format personnalisé lors du changement de nom",
|
||||
"DeleteTagMessageText": "Voulez-vous vraiment supprimer la balise '{0}' ?",
|
||||
"DeleteTagMessageText": "Voulez-vous vraiment supprimer l'étiquette « {label} » ?",
|
||||
"DeleteDelayProfile": "Supprimer le profil de délai",
|
||||
"DelayProfile": "Profil de delai",
|
||||
"UISettings": "Paramètres UI",
|
||||
"UILanguageHelpTextWarning": "Rechargement du navigateur requis",
|
||||
"UILanguageHelpText": "Langue que Radarr utilisera pour l'interface utilisateur",
|
||||
"UILanguage": "UI Langue",
|
||||
"UILanguage": "Langue de l'IU",
|
||||
"TotalFileSize": "Taille totale du fichier",
|
||||
"Torrents": "Torrents",
|
||||
"TmdbIdHelpText": "L'ID TMDb du film à exclure",
|
||||
@@ -618,17 +618,17 @@
|
||||
"SourceRelativePath": "Chemin relatif de la source",
|
||||
"SourcePath": "Chemin source",
|
||||
"SorryThatMovieCannotBeFound": "Désolé, ce film est introuvable.",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "À utiliser lorsque Radarr ne parvient pas à détecter l'espace libre dans le dossier racine de votre film",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "À utiliser lorsque Radarr ne parvient pas à détecter l'espace libre dans votre dossier racine durant l'importation du fichier",
|
||||
"SkipFreeSpaceCheck": "Ignorer la vérification de l'espace libre",
|
||||
"ShowYear": "Afficher l'année",
|
||||
"ShowUnknownMovieItems": "Afficher les éléments de film inconnus",
|
||||
"ShowTitleHelpText": "Afficher le titre du film sous l'affiche",
|
||||
"ShowTitleHelpText": "Affiche le titre du film sous l'affiche",
|
||||
"ShowRatings": "Afficher les évaluations",
|
||||
"ShowQualityProfileHelpText": "Afficher le profil de qualité sous l'affiche",
|
||||
"ShowQualityProfileHelpText": "Affiche le profil de qualité sous l'affiche",
|
||||
"ShownClickToHide": "Montré, cliquez pour masquer",
|
||||
"ShowMovieInformationHelpText": "Afficher les genres de films et la certification",
|
||||
"ShowMovieInformation": "Afficher les informations sur le film",
|
||||
"ShowMonitoredHelpText": "Afficher le statut surveillé sous l'affiche",
|
||||
"ShowMonitoredHelpText": "Affiche le statut surveillé sous l'affiche",
|
||||
"ShowGenres": "Afficher les genres",
|
||||
"ShowCutoffUnmetIconHelpText": "Afficher l'icône des fichiers lorsque la limite n'a pas été atteinte",
|
||||
"ShowCertification": "Afficher la certification",
|
||||
@@ -658,12 +658,12 @@
|
||||
"RescanMovieFolderAfterRefresh": "Réanalyser le dossier de films après l'actualisation",
|
||||
"RescanAfterRefreshHelpTextWarning": "Radarr ne détectera pas automatiquement les modifications apportées aux fichiers lorsqu'il n'est pas défini sur «Toujours»",
|
||||
"RescanAfterRefreshHelpText": "Réanalyser le dossier du film après avoir actualisé le film",
|
||||
"ReplaceIllegalCharactersHelpText": "Remplacer les caractères illégaux. Si elle n'est pas cochée, Radarr les supprimera à la place",
|
||||
"ReplaceIllegalCharactersHelpText": "Remplacer les caractères illégaux. Si non coché, Radarr les supprimera",
|
||||
"ReplaceIllegalCharacters": "Remplacer les caractères illégaux",
|
||||
"Reorder": "Réorganiser",
|
||||
"RenameMoviesHelpText": "Radarr utilisera le nom de fichier existant si le changement de nom est désactivé",
|
||||
"RemovingTag": "Suppression du tag",
|
||||
"RadarrTags": "Radarr Tags",
|
||||
"RadarrTags": "Étiquettes Radarr",
|
||||
"Paused": "En pause",
|
||||
"MarkAsFailedMessageText": "Voulez-vous vraiment marquer '{0}' comme échoué ?",
|
||||
"ExistingTag": "Tag existant",
|
||||
@@ -671,7 +671,7 @@
|
||||
"DownloadPropersAndRepacksHelpText2": "Utiliser 'Ne pas préférer' pour trier par score de mot préféré par rapport aux propres/repacks",
|
||||
"DownloadPropersAndRepacksHelpText1": "S'il faut ou non mettre à niveau automatiquement vers Propres/Repacks",
|
||||
"DownloadPropersAndRepacks": "Propres et Repacks",
|
||||
"RenameMovies": "Renommer films",
|
||||
"RenameMovies": "Renommer les films",
|
||||
"RemoveHelpTextWarning": "La suppression supprimera le téléchargement et le(s) fichier(s) du client de téléchargement.",
|
||||
"RemoveFromQueue": "Supprimer de la file d'attente",
|
||||
"RemoveFromDownloadClient": "Supprimer du client de téléchargement",
|
||||
@@ -683,7 +683,7 @@
|
||||
"ReleaseRejected": "Version rejetée",
|
||||
"ReleaseDates": "Date de sortie",
|
||||
"RegularExpressionsCanBeTested": "Les expressions régulières peuvent être testées ",
|
||||
"RefreshMovie": "Actualiser film",
|
||||
"RefreshMovie": "Actualiser le film",
|
||||
"RefreshInformationAndScanDisk": "Actualiser les informations et analyser le disque",
|
||||
"Redownload": "Télécharger à nouveau",
|
||||
"RecyclingBinCleanup": "Nettoyage de la Corbeille",
|
||||
@@ -727,7 +727,7 @@
|
||||
"NoMinimumForAnyRuntime": "Aucun minimum pour n'importe quel durée",
|
||||
"NoLogFiles": "Aucun fichier journal",
|
||||
"NoLeaveIt": "Non, laisse-le",
|
||||
"NoHistory": "Pas d'historique",
|
||||
"NoHistory": "Aucun historique",
|
||||
"NoBackupsAreAvailable": "Aucune sauvegarde n'est disponible",
|
||||
"New": "Nouveau",
|
||||
"NetCore": ".NET",
|
||||
@@ -738,18 +738,18 @@
|
||||
"MovieYear": "Année du film",
|
||||
"MovieTitleHelpText": "Le titre du film à exclure (peut être quelque chose de significatif)",
|
||||
"MovieIndexScrollTop": "Index des films : faire défiler vers le haut",
|
||||
"MovieIndexScrollBottom": "Index des Films : faire défiler vers le bas",
|
||||
"MovieIndexScrollBottom": "Index des films : faire défiler vers le bas",
|
||||
"MovieDetailsPreviousMovie": "Détails du film : Film Précédent",
|
||||
"MovieDetailsNextMovie": "Détails du film : Prochain Film",
|
||||
"MoviesSelectedInterp": "{0} Film(s) Sélectionner",
|
||||
"MoviesSelectedInterp": "{count} film(s) sélectionné(s)",
|
||||
"MovieIsUnmonitored": "Le film n'est pas surveillé",
|
||||
"MovieIsOnImportExclusionList": "Film sur la liste d'exclusion d'importation",
|
||||
"MovieFolderFormat": "Format de dossier de film",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Empêcher l'importation si elle laisse moins d'espace disque disponible que cette quantité",
|
||||
"MIA": "MIA",
|
||||
"LaunchBrowserHelpText": " Ouvrer un navigateur et accéder à la page d'accueil de Radarr au démarrage de l'application.",
|
||||
"CloseCurrentModal": "Fermer le modal actuel",
|
||||
"AddingTag": "Ajouter un tag",
|
||||
"CloseCurrentModal": "Fermer cette fenêtre modale",
|
||||
"AddingTag": "Ajout d'une étiquette",
|
||||
"OnHealthIssueHelpText": "Lors d'un problème de santé",
|
||||
"AcceptConfirmationModal": "Accepter les modalités d'utilisations",
|
||||
"StartSearchForMissingMovie": "Lancer la recherche de film manquant",
|
||||
@@ -759,7 +759,7 @@
|
||||
"RequiredRestrictionPlaceHolder": "Ajouter une nouvelle restriction",
|
||||
"Released": "Sorti",
|
||||
"ProcessingFolders": "Traitement des dossiers",
|
||||
"OpenThisModal": "Ouvrer ce modal",
|
||||
"OpenThisModal": "Ouvrir cette fenêtre modale",
|
||||
"NoMatchFound": "Pas de résultat trouvé !",
|
||||
"ImportRootPath": "Pointer Radarr vers le dossier contenant tous vos films, pas un en particulier. Par exemple {0} et non {1}. De plus, chaque film doit être dans son propre dossier dans la racine.",
|
||||
"ImportIncludeQuality": "Assurez-vous que vos fichiers incluent la qualité dans leurs noms de fichiers. par exemple. {0}",
|
||||
@@ -799,15 +799,15 @@
|
||||
"AddToDownloadQueue": "Ajouter à la file d'attente de téléchargement",
|
||||
"AfterManualRefresh": "Après le rafraîchissement manuel",
|
||||
"AllFiles": "Tous les fichiers",
|
||||
"AllMoviesInPathHaveBeenImported": "Tous les films dans {0} ont été importés",
|
||||
"AllMoviesInPathHaveBeenImported": "Tous les films dans {path} ont été importés",
|
||||
"AllResultsHiddenFilter": "Tous les résultats ont été masqués par le filtre actuellement appliqué",
|
||||
"Always": "Toujours",
|
||||
"AptUpdater": "Utiliser apt pour installer la mise à jour",
|
||||
"AuthBasic": "Authentification de base (Basic) (popup dans le navigateur)",
|
||||
"AuthForm": "Authentification par un formulaire (page de connexion)",
|
||||
"AuthBasic": "Basique (fenêtre surgissante du navigateur)",
|
||||
"AuthForm": "Formulaire (page de connexion)",
|
||||
"BuiltIn": "Natif",
|
||||
"CalendarOptions": "Options du calendrier",
|
||||
"CertValidationNoLocal": "Désactivé pour les adresses IP locales",
|
||||
"CertValidationNoLocal": "Désactivée pour les adresses IP locales",
|
||||
"ChmodGroupHelpText": "Nom du Groupe ou GID. Utiliser le GID pour les systèmes de fichier distants.",
|
||||
"Connection": "Connexion",
|
||||
"CurrentlyInstalled": "Installé",
|
||||
@@ -817,7 +817,7 @@
|
||||
"Days": "Jours",
|
||||
"Debug": "Debug",
|
||||
"DefaultCase": "Casse par défaut",
|
||||
"DeletedMsg": "Le film à été supprimé de TMDb",
|
||||
"DeletedMsg": "Le film a été supprimé de TMDb",
|
||||
"DeleteFilesHelpText": "Supprimer les fichiers du film et dossier du film",
|
||||
"DeleteFilesLabel": "Supprimer {0} fichiers",
|
||||
"DeleteHeader": "Supprimer - {0}",
|
||||
@@ -827,7 +827,7 @@
|
||||
"Discord": "Discord",
|
||||
"DockerUpdater": "mettre à jour le conteneur docker pour recevoir la mise à jour",
|
||||
"Donations": "Dons",
|
||||
"DoneEditingGroups": "Finir de modifier les groupes",
|
||||
"DoneEditingGroups": "Terminer la modification des groupes",
|
||||
"DoNotPrefer": "Ne pas préférer",
|
||||
"DoNotUpgradeAutomatically": "Ne pas mettre à jour automatiquement",
|
||||
"EditCustomFormat": "Modifier le format personnalisé",
|
||||
@@ -888,11 +888,11 @@
|
||||
"TMDb": "TMDb",
|
||||
"ImportNotForDownloads": "Ne pas utiliser pour importer des téléchargements à partir de votre client de téléchargement, cela concerne uniquement les bibliothèques organisées existantes, pas les fichiers non triés.",
|
||||
"PreferUsenet": "Préférez Usenet",
|
||||
"ReplaceWithDash": "Remplacer par Dash",
|
||||
"ReplaceWithDash": "Remplacer par un tiret",
|
||||
"InCinemasDate": "Dans les cinémas Date",
|
||||
"InstallLatest": "Installer le dernier",
|
||||
"KeepAndUnmonitorMovie": "Conserver et annuler la surveillance du film",
|
||||
"Large": "Grand",
|
||||
"Large": "Grande",
|
||||
"LastUsed": "Dernière utilisation",
|
||||
"LogOnly": "Journal uniquement",
|
||||
"LookingForReleaseProfiles1": "Vous recherchez des profils de version ? Essayer",
|
||||
@@ -902,7 +902,7 @@
|
||||
"Min": "Min",
|
||||
"MegabytesPerMinute": "Mégaoctets par minute",
|
||||
"MinimumCustomFormatScore": "Score de format personnalisé minimum",
|
||||
"MonitoredStatus": "Surveillé / Statut",
|
||||
"MonitoredStatus": "Surveillé / État",
|
||||
"Months": "Mois",
|
||||
"MoreControlCFText": "Vous voulez plus de contrôle sur les téléchargements préférés ? Ajouter un",
|
||||
"MoveFolders1": "Souhaitez-vous déplacer les dossiers de films vers «{0}» ?",
|
||||
@@ -912,23 +912,23 @@
|
||||
"Negate": "Inverser",
|
||||
"Negated": "Inversé",
|
||||
"NoListRecommendations": "Aucun élément de liste ou recommandation n'a été trouvé, pour commencer, vous voudrez ajouter un nouveau film, importer des films existants ou ajouter une liste.",
|
||||
"OrganizeConfirm": "Voulez-vous vraiment organiser tous les fichiers dans les {0} films sélectionnés ?",
|
||||
"OrganizeConfirm": "Voulez-vous vraiment organiser tous les fichiers dans les {count} films sélectionnés ?",
|
||||
"OrganizeSelectedMovies": "Organiser les films sélectionnés",
|
||||
"PhysicalReleaseDate": "Date de sortie physique",
|
||||
"PreferAndUpgrade": "Préférez et améliorez",
|
||||
"Preferred": "Préféré",
|
||||
"PreviewRenameHelpText": "Conseil : pour prévisualiser un changement de nom... Sélectionnez 'Annuler', puis cliquez sur n'importe quel titre de film et utilisez le",
|
||||
"PrioritySettings": "Priorité : {0}",
|
||||
"PrioritySettings": "Priorité : {priority}",
|
||||
"Qualities": "Qualités",
|
||||
"QualityLimitsHelpText": "Les limites sont automatiquement ajustées pour l'exécution du film.",
|
||||
"QualityLimitsHelpText": "Les limites sont automatiquement ajustées en fonction de la durée du film.",
|
||||
"QualityOrLangCutoffHasNotBeenMet": "Le seuil de qualité ou de langue n'a pas été atteint",
|
||||
"RecentChanges": "Changements récents",
|
||||
"RefreshLists": "Actualiser les listes",
|
||||
"RemoveMovieAndDeleteFiles": "Supprimer le film et supprimer les fichiers",
|
||||
"RemoveMovieAndKeepFiles": "Supprimer le film et conserver les fichiers",
|
||||
"Replace": "Remplacer",
|
||||
"ReplaceWithSpaceDash": "Remplacer par Space Dash",
|
||||
"ReplaceWithSpaceDashSpace": "Remplacer par Space Dash Space",
|
||||
"ReplaceWithSpaceDash": "Remplacer par un espace puis un tiret",
|
||||
"ReplaceWithSpaceDashSpace": "Remplacer par un espace, un tiret puis un espace",
|
||||
"Required": "Obligatoire",
|
||||
"RestartReloadNote": "Remarque : Radarr redémarrera et rechargera automatiquement l'interface utilisateur pendant le processus de restauration.",
|
||||
"RSS": "RSS",
|
||||
@@ -944,8 +944,8 @@
|
||||
"Socks4": "Chaussettes4",
|
||||
"Socks5": "Chaussettes5 (Support TOR)",
|
||||
"SomeResultsHiddenFilter": "Tous les résultats ont été dissimulés par le filtre actuellement appliqué",
|
||||
"Sunday": "dimanche",
|
||||
"TagDetails": "Détails du tag - {0}",
|
||||
"Sunday": "Dimanche",
|
||||
"TagDetails": "Détails de la balise - {label}",
|
||||
"TheLogLevelDefault": "Le niveau de journalisation est par défaut «Info» et peut être modifié dans",
|
||||
"ThisCannotBeCancelled": "Cela ne peut pas être annulé une fois démarré sans désactiver tous vos indexeurs.",
|
||||
"TorrentDelayTime": "Retard du torrent : {0}",
|
||||
@@ -961,17 +961,17 @@
|
||||
"UpgradeUntilCustomFormatScore": "Mettre à niveau jusqu'au score de format personnalisé",
|
||||
"UpgradeUntilQuality": "Mise à niveau jusqu'à la qualité",
|
||||
"UpperCase": "Majuscules",
|
||||
"UsenetDelayTime": "Délai Usenet : {0}",
|
||||
"UsenetDelayTime": "Retard Usenet : {0}",
|
||||
"UsenetDisabled": "Usenet désactivé",
|
||||
"Weeks": "Semaines",
|
||||
"Wiki": "Wiki",
|
||||
"WouldYouLikeToRestoreBackup": "Souhaitez-vous restaurer la sauvegarde {0} ?",
|
||||
"WouldYouLikeToRestoreBackup": "Souhaitez-vous restaurer la sauvegarde « {name} » ?",
|
||||
"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}.",
|
||||
"ShowCinemaRelease": "Afficher la date de sortie du cinéma",
|
||||
"ShowReleaseDate": "Afficher la date de sortie",
|
||||
"ShowReleaseDateHelpText": "Afficher la date de sortie sous l'affiche",
|
||||
"ShowReleaseDateHelpText": "Affiche la date de sortie sous l'affiche",
|
||||
"OnMovieFileDeleteForUpgradeHelpText": "À la suppression du fichier vidéo pour mise à niveau",
|
||||
"OnUpgrade": "Lors de la mise à niveau",
|
||||
"OnMovieDelete": "À la suppression d'un film",
|
||||
@@ -996,7 +996,7 @@
|
||||
"TaskUserAgentTooltip": "User-Agent fourni par l'application qui a appelé l'API",
|
||||
"RemotePathMappingCheckFolderPermissions": "Radarr peut voir mais pas accéder au répertoire de téléchargement {0}. Erreur d'autorisations probable.",
|
||||
"RemotePathMappingCheckFileRemoved": "Le fichier {0} a été supprimé pendant le processus.",
|
||||
"UnableToAddRootFolder": "Impossible de charger les dossiers racine",
|
||||
"UnableToAddRootFolder": "Impossible de charger le dossier racine",
|
||||
"Blocklist": "Liste noire",
|
||||
"BlocklistRelease": "Version sur liste noire",
|
||||
"RemoveFromBlocklist": "Supprimer de la liste noire",
|
||||
@@ -1006,7 +1006,7 @@
|
||||
"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": "Ignorer le délai lorsque la libération a la qualité activée la plus élevée dans le profil de qualité avec le protocole préféré.",
|
||||
"BypassDelayIfHighestQualityHelpText": "Ignorer le délai lorsque la libération a la qualité activée la plus élevée dans le profil de qualité avec le protocole préféré",
|
||||
"ClickToChangeReleaseGroup": "Cliquez pour changer de groupe de diffusion",
|
||||
"AnnouncedMsg": "Le film est annoncé",
|
||||
"Filters": "Filtres",
|
||||
@@ -1055,7 +1055,7 @@
|
||||
"MonitorMovies": "Surveiller les films",
|
||||
"NoCollections": "Aucune collection n'a été trouvée. Pour commencer, vous devez ajouter un nouveau film ou importer des films existants",
|
||||
"RssSyncHelpText": "Intervalle en minutes. Régler à zéro pour désactiver (cela arrêtera tous les déclenchements automatiques)",
|
||||
"CollectionsSelectedInterp": "{0} Collections(s) Sélectionnée(s)",
|
||||
"CollectionsSelectedInterp": "{0} collection(s) sélectionnée(s)",
|
||||
"ChooseImportMode": "Sélectionnez le mode d'importation",
|
||||
"CollectionOptions": "Options de collection",
|
||||
"CollectionShowDetailsHelpText": "Afficher l'état et les propriétés de la collection",
|
||||
@@ -1076,7 +1076,7 @@
|
||||
"ShowCollectionDetails": "Afficher l'état de la collection",
|
||||
"EditCollection": "Modifier la collection",
|
||||
"ApplicationURL": "URL de l'application",
|
||||
"ApplicationUrlHelpText": "URL externe de cette application, y compris http(s)://, le port ainsi que la base de URL",
|
||||
"ApplicationUrlHelpText": "L'URL externe de cette application, y compris http(s)://, le port ainsi que la base de URL",
|
||||
"InstanceName": "Nom de l'instance",
|
||||
"InstanceNameHelpText": "Nom de l'instance dans l'onglet du navigateur et pour le nom d'application dans Syslog",
|
||||
"CollectionShowPostersHelpText": "Afficher les affiches des éléments de la collection",
|
||||
@@ -1090,7 +1090,7 @@
|
||||
"ResetQualityDefinitions": "Réinitialiser les définitions de qualité",
|
||||
"ResetTitles": "Réinitialiser les titres",
|
||||
"SettingsThemeHelpText": "Changez le thème de l'interface de l'application. Le thème \"Auto\" utilisera celui de votre système d'exploitation pour définir le mode clair ou foncé. Inspiré par Theme.Park",
|
||||
"ShowPosters": "Montre les affiches",
|
||||
"ShowPosters": "Montrer les affiches",
|
||||
"File": "Fichier",
|
||||
"MovieMatchType": "Film correspond du même type",
|
||||
"Loading": "Chargement",
|
||||
@@ -1098,39 +1098,39 @@
|
||||
"ThereWasAnErrorLoadingThisPage": "Une erreur s'est produite lors du chargement de cette page",
|
||||
"EditMovies": "Modifier Films",
|
||||
"EditSelectedMovies": "Modifier films sélectionnés",
|
||||
"StopSelecting": "Arrêtez la sélection",
|
||||
"StopSelecting": "Effacer la sélection",
|
||||
"UpdateFiltered": "Mettre à jour les filtres",
|
||||
"RecycleBinUnableToWriteHealthCheck": "Impossible d'écrire dans le dossier de corbeille configuré : {0}. Assurez vous que ce chemin existe et est accessible en écriture par l'utilisateur exécutant Radarr",
|
||||
"ApiKeyValidationHealthCheckMessage": "Veuillez mettre à jour votre clé API pour qu'elle contienne au moins {0} caractères. Vous pouvez le faire via les paramètres ou le fichier de configuration",
|
||||
"OnManualInteractionRequired": "Interaction manuelle requise",
|
||||
"OnManualInteractionRequiredHelpText": "Interaction manuelle requise",
|
||||
"ShowCinemaReleaseHelpText": "Afficher la date de sortie au cinéma sous l'affiche",
|
||||
"ShowCinemaReleaseHelpText": "Affiche la date de sortie au cinéma sous l'affiche",
|
||||
"ImportScriptPath": "Importer chemin du script",
|
||||
"DeleteRemotePathMapping": "Éditer le chemin distant",
|
||||
"DeleteRemotePathMappingMessageText": "Êtes-vous sûr de vouloir effacer ce chemin ?",
|
||||
"ApplyChanges": "Appliquer les modifications",
|
||||
"DownloadClientTagHelpText": "Utiliser seulement cet indexeur pour les films avec au moins un tag correspondant. Laissez vide pour l'utiliser avec tous les films.",
|
||||
"RemoveSelectedItemQueueMessageText": "Êtes-vous sûr de vouloir désinstaller {0} objet{1} de la file d'attente ?",
|
||||
"CountIndexersSelected": "{0} indexeur(s) sélectionné(s)",
|
||||
"DeleteConditionMessageText": "Voulez-vous vraiment supprimer la liste '{0}' ?",
|
||||
"DeleteCustomFormatMessageText": "Voulez-vous vraiment supprimer l'indexeur '{0}' ?",
|
||||
"RemoveSelectedItemQueueMessageText": "Voulez-vous vraiment supprimer 1 élément de la file d'attente ?",
|
||||
"CountIndexersSelected": "{count} indexeur(s) sélectionné(s)",
|
||||
"DeleteConditionMessageText": "Voulez-vous vraiment supprimer la condition « {name} » ?",
|
||||
"DeleteCustomFormatMessageText": "Voulez-vous vraiment supprimer le format personnalisé « {name} » ?",
|
||||
"DeleteDelayProfileMessageText": "Êtes vous sûr de vouloir effacer ce profil de délai ?",
|
||||
"ResetAPIKeyMessageText": "Êtes vous sûr de vouloir réinitialiser votre Clé d'API ?",
|
||||
"ResetAPIKeyMessageText": "Voulez-vous réinitialiser votre clé d'API ?",
|
||||
"ResetDefinitionTitlesHelpText": "Réinitialiser les titres des définitions ainsi que les valeurs",
|
||||
"ResetQualityDefinitionsMessageText": "Êtes-vous sûr de vouloir réinitialiser les définitions de qualité ?",
|
||||
"ResetQualityDefinitionsMessageText": "Voulez-vous vraiment réinitialiser les définitions de qualité ?",
|
||||
"AutomaticAdd": "Ajout automatique",
|
||||
"DeleteFormatMessageText": "Êtes-vous sûr de vouloir supprimer le tag {0} ?",
|
||||
"DeleteImportListExclusionMessageText": "Êtes vous sûr de vouloir effacer cette exclusion de liste d'imports ?",
|
||||
"DeleteSelectedDownloadClients": "Supprimer le client de téléchargement",
|
||||
"ApplyTagsHelpTextAdd": "Ajouter : Ajouter les tags à la liste de tags existantes",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Comment appliquer des tags aux indexeurs sélectionnés",
|
||||
"ApplyTagsHelpTextRemove": "Suprimer : Suprime les étiquettes renseignées",
|
||||
"ApplyTagsHelpTextReplace": "Remplacer : Remplace les balises par les balises saisies (ne pas saisir de balises pour effacer toutes les balises)",
|
||||
"ApplyTagsHelpTextAdd": "Ajouter : ajoute les étiquettes à la liste de étiquettes existantes",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Comment appliquer des étiquettes aux indexeurs sélectionnés",
|
||||
"ApplyTagsHelpTextRemove": "Supprimer : supprime les étiquettes renseignées",
|
||||
"ApplyTagsHelpTextReplace": "Remplacer : remplace les étiquettes par les étiquettes renseignées (ne pas renseigner d'étiquette pour toutes les effacer)",
|
||||
"DeleteSelectedIndexers": "Supprimer l'indexeur",
|
||||
"RemoveSelectedItemsQueueMessageText": "Êtes-vous sûr de vouloir supprimer {0} objet(s) de la file d'attente ?",
|
||||
"DeleteSelectedIndexersMessageText": "Voulez-vous vraiment supprimer l'indexeur '{0}' ?",
|
||||
"RemoveSelectedItemsQueueMessageText": "Voulez-vous vraiment supprimer {selectedCount} élément(s) de la file d'attente ?",
|
||||
"DeleteSelectedIndexersMessageText": "Voulez-vous vraiment supprimer les {count} indexeur(s) sélectionné(s) ?",
|
||||
"EditSelectedIndexers": "Modifier les indexeurs sélectionnés",
|
||||
"CountDownloadClientsSelected": "{0} client(s) de téléchargement sélectionné(s)",
|
||||
"CountDownloadClientsSelected": "{count} client(s) de téléchargement sélectionné(s)",
|
||||
"EditSelectedDownloadClients": "Modifier les clients de téléchargement sélectionnés",
|
||||
"AddAutoTag": "Ajouter un tag automatique",
|
||||
"AddCondition": "Ajouter une condition",
|
||||
@@ -1142,21 +1142,21 @@
|
||||
"AutoTaggingNegateHelpText": "Si coché, le format personnalisé ne s'appliquera pas si cette condition {0} correspond.",
|
||||
"AutoTaggingRequiredHelpText": "Cette {0} condition doit correspondre pour que le format personnalisé s'applique. Sinon, une seule correspondance {1} est suffisante.",
|
||||
"DeleteAutoTagHelpText": "Voulez-vous vraiment supprimer la balise '{0}' ?",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Comment appliquer des balises aux clients de téléchargement sélectionnés",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Comment appliquer des balises aux listes d'importation sélectionnées",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Voulez-vous vraiment supprimer l'indexeur '{0}' ?",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Comment appliquer des étiquettes aux clients de téléchargement sélectionnés",
|
||||
"ApplyTagsHelpTextHowToApplyImportLists": "Comment appliquer des étiquettes aux listes d'importation sélectionnées",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Voulez-vous vraiment supprimer {count} client(s) de téléchargement sélectionné(s) ?",
|
||||
"DeleteRootFolderMessageText": "Voulez-vous vraiment supprimer l'indexeur '{0}' ?",
|
||||
"AddConnection": "Ajouter une connexion",
|
||||
"DownloadClientsLoadError": "Impossible de charger les clients de téléchargement",
|
||||
"IMDbId": "Identifiant TMDb",
|
||||
"DisabledForLocalAddresses": "Désactivé pour les adresses IP locales",
|
||||
"DisabledForLocalAddresses": "Désactivée pour les adresses IP locales",
|
||||
"BypassDelayIfAboveCustomFormatScore": "Ignorer si le score est supérieur au format personnalisé",
|
||||
"BypassDelayIfAboveCustomFormatScoreHelpText": "Ignorer lorsque la version a un score supérieur au score minimum configuré pour le format personnalisé",
|
||||
"BypassDelayIfAboveCustomFormatScoreMinimumScore": "Score minimum pour le format personnalisé",
|
||||
"AuthenticationRequired": "Authentification requise",
|
||||
"AuthenticationRequiredHelpText": "Modifier les demandes pour lesquelles l'authentification est requise. Ne changez rien si vous ne comprenez pas les risques.",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Toutes les applications sont indisponibles en raison de dysfonctionnements",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Applications indisponibles en raison de dysfonctionnements : {0}",
|
||||
"AuthenticationRequiredHelpText": "Modifier les demandes pour lesquelles l'authentification est requise. Ne rien modifier si vous n'en comprenez pas les risques.",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Toutes les notifications sont indisponibles en raison de dysfonctionnements",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Notifications indisponibles en raison de dysfonctionnements : {0}",
|
||||
"RemoveFromDownloadClientHelpTextWarning": "La suppression supprimera le téléchargement et le(s) fichier(s) du client de téléchargement.",
|
||||
"AddConditionImplementation": "Ajouter une condition - {implementationName}",
|
||||
"AddConnectionImplementation": "Ajouter une connexion - {implementationName}",
|
||||
@@ -1170,9 +1170,78 @@
|
||||
"AllTitles": "Tous les titres",
|
||||
"AudioLanguages": "Langues audio",
|
||||
"AuthenticationMethod": "Méthode d'authentification",
|
||||
"AuthenticationMethodHelpTextWarning": "Veuillez sélectionner une méthode d'authentification valide",
|
||||
"AuthenticationMethodHelpTextWarning": "Veuillez choisir une méthode d'authentification valide",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Saisir un nouveau mot de passe",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Saisir un nouveau nom d'utilisateur",
|
||||
"AuthenticationRequiredWarning": "Pour empêcher l'accès à distance sans authentification, {appName} exige désormais que l'authentification soit activée. Vous pouvez éventuellement désactiver l'authentification à partir des adresses locales.",
|
||||
"AutomaticUpdatesDisabledDocker": "Les mises à jour automatiques ne sont pas directement prises en charge lors de l'utilisation du mécanisme de mise à jour de Docker. Vous devrez mettre à jour l'image du conteneur en dehors de {appName} ou utiliser un script"
|
||||
"AuthenticationRequiredWarning": "Pour empêcher l'accès à distance sans authentification, {appName} exige désormais que l'authentification soit activée. Vous pouvez éventuellement désactiver l'authentification pour les adresses locales.",
|
||||
"AutomaticUpdatesDisabledDocker": "Les mises à jour automatiques ne sont pas directement prises en charge lors de l'utilisation du mécanisme de mise à jour de Docker. Vous devrez mettre à jour l'image du conteneur en dehors de {appName} ou utiliser un script",
|
||||
"Popularity": "Popularité",
|
||||
"VideoDynamicRange": "Plage de dynamique vidéo",
|
||||
"FormatAgeDays": "jours",
|
||||
"FormatAgeDay": "jour",
|
||||
"FormatAgeHour": "heure",
|
||||
"FormatDateTime": "{formattedDate} {formattedTime}",
|
||||
"FormatShortTimeSpanHours": "{hours} heure(s)",
|
||||
"FormatRuntimeMinutes": "{minutes} m",
|
||||
"FormatShortTimeSpanSeconds": "{seconds} seconde(s)",
|
||||
"ShowRottenTomatoesRatingHelpText": "Affiche la note Tomate sous l'affiche",
|
||||
"ListWillRefreshEveryInterp": "La liste se rafraîchira tous/toutes la/les {0}",
|
||||
"OverrideGrabNoMovie": "Un film doit être sélectionné",
|
||||
"OverrideGrabNoLanguage": "Au moins une langue doit être sélectionnée",
|
||||
"ParseModalHelpTextDetails": "Radarr va tenter de parser le titre et de vous afficher les détails à son sujet",
|
||||
"QualitiesLoadError": "Impossible de charger les qualités",
|
||||
"SelectFolderModalTitle": "{modalTitle} - Sélectionner un dossier",
|
||||
"ShowImdbRatingHelpText": "Affiche la note IMDb sous l'affiche",
|
||||
"ShowRottenTomatoesRating": "Afficher la note Tomato",
|
||||
"SubtitleLanguages": "Langues des sous-titres",
|
||||
"True": "Vrai",
|
||||
"ManageDownloadClients": "Gérer les clients de téléchargement",
|
||||
"ManageClients": "Gérer les clients",
|
||||
"DeleteCondition": "Supprimer la condition",
|
||||
"TestParsing": "Tester le parsage",
|
||||
"Umask": "Umask",
|
||||
"Default": "Par défaut",
|
||||
"EditDownloadClientImplementation": "Modifier le client de téléchargement - {implementationName}",
|
||||
"Unknown": "Inconnu",
|
||||
"NoDownloadClientsFound": "Aucun client de téléchargement n'a été trouvé",
|
||||
"OverrideGrabNoQuality": "Une qualité doit être sélectionnée",
|
||||
"ConnectionLostReconnect": "{appName} essaiera de se connecter automatiquement, ou vous pouvez cliquer sur « Recharger » en bas.",
|
||||
"ConnectionLostToBackend": "{appName} a perdu sa connexion au backend et devra être rechargé pour fonctionner à nouveau.",
|
||||
"DefaultNameCopiedSpecification": "{name} - Copier",
|
||||
"Or": "ou",
|
||||
"FormatAgeHours": "heures",
|
||||
"Implementation": "Implémentation",
|
||||
"FormatTimeSpanDays": "{days}j {time}",
|
||||
"FormatAgeMinute": "minute",
|
||||
"FormatAgeMinutes": "minutes",
|
||||
"FormatDateTimeRelative": "{relativeDay}, {formattedDate} {formattedTime}",
|
||||
"FormatRuntimeHours": "{hours} h",
|
||||
"FormatShortTimeSpanMinutes": "{minutes} minute(s)",
|
||||
"NoIndexersFound": "Aucun indexeur n'a été trouvé",
|
||||
"ShowTmdbRatingHelpText": "Affiche la note TMDb sous l'affiche",
|
||||
"ShowTmdbRating": "Afficher la note TMDb",
|
||||
"ShowImdbRating": "Afficher la note IMDb",
|
||||
"NoHistoryBlocklist": "Pas d'historique de liste noire",
|
||||
"NoHistoryFound": "Aucun historique n'a été trouvé",
|
||||
"OrganizeRelativePaths": "Tous les chemins sont relatifs à : `{path}`",
|
||||
"OrganizeRenamingDisabled": "Le renommage est désactivé, rien à renommer",
|
||||
"OrganizeNothingToRename": "C'est fait ! Mon travail est terminé, plus aucun fichier à renommer.",
|
||||
"False": "Faux",
|
||||
"DefaultNameCopiedProfile": "{name} - Copier",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexeurs avec des clients de téléchargement invalides : {0].",
|
||||
"DeleteRootFolder": "Supprimer le dossier racine",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} - Sélectionner le client de téléchargements",
|
||||
"HistoryLoadError": "Impossible de charger l'historique",
|
||||
"InteractiveImportNoFilesFound": "Aucun fichier vidéo n'a été trouvé dans le dossier sélectionné",
|
||||
"InteractiveImportNoImportMode": "Un mode d'importation doit être sélectionné",
|
||||
"InteractiveImportNoLanguage": "Une langue doit être choisie pour chacun des fichiers sélectionnés",
|
||||
"LanguagesLoadError": "Impossible de charger les langues",
|
||||
"MovieImported": "Film importé",
|
||||
"SelectDropdown": "Sélectionner...",
|
||||
"SelectLanguageModalTitle": "{modalTitle} - Sélectionner une langue",
|
||||
"RemoveTagsAutomatically": "Supprimer automatiquement les étiquettes",
|
||||
"TablePageSizeHelpText": "Nombre d'éléments à afficher sur chaque page",
|
||||
"UnknownEventTooltip": "Événement inconnu",
|
||||
"AppUpdated": "{appName} mis à jour",
|
||||
"AppUpdatedVersion": "{appName} a été mis à jour vers la version `{version}`, pour profiter des derniers changements, vous devrez relancer {appName}"
|
||||
}
|
||||
|
||||
@@ -1079,5 +1079,6 @@
|
||||
"ApplyChanges": "Applica Cambiamenti",
|
||||
"AutomaticAdd": "Aggiungi Automaticamente",
|
||||
"AllTitles": "Tutti i Titoli",
|
||||
"ApiKeyValidationHealthCheckMessage": "Aggiorna la tua chiave API in modo che abbia una lunghezza di almeno {0} caratteri. Puoi farlo dalle impostazioni o dal file di configurazione"
|
||||
"ApiKeyValidationHealthCheckMessage": "Aggiorna la tua chiave API in modo che abbia una lunghezza di almeno {0} caratteri. Puoi farlo dalle impostazioni o dal file di configurazione",
|
||||
"AddImportList": "Aggiungi lista da importare"
|
||||
}
|
||||
|
||||
@@ -1125,5 +1125,11 @@
|
||||
"AddAutoTag": "Voeg Automatische Tag toe",
|
||||
"AddCondition": "Voeg Conditie toe",
|
||||
"AutoTagging": "Automatisch Taggen",
|
||||
"CloneAutoTag": "Kopieer Automatische Tag"
|
||||
"CloneAutoTag": "Kopieer Automatische Tag",
|
||||
"AddConditionImplementation": "Voeg voorwaarde toe - {implementationName}",
|
||||
"AddConnection": "Voeg connectie toe",
|
||||
"AddConnectionImplementation": "Voeg connectie toe - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Voeg Downloadclient toe - {implementationName}",
|
||||
"AddIndexerImplementation": "Indexeerder toevoegen - {implementationName}",
|
||||
"DeleteQualityProfileMessageText": "Bent u zeker dat u het kwaliteitsprofiel {name} wilt verwijderen?"
|
||||
}
|
||||
|
||||
@@ -629,7 +629,7 @@
|
||||
"SomeResultsHiddenFilter": "Alguns resultados estão ocultos pelo filtro aplicado",
|
||||
"Socks5": "Socks5 (Suporte à TOR)",
|
||||
"Small": "Pequeno",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Use quando o Radarr não conseguir detectar espaço livre na pasta raiz do filme",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Use quando o Radarr não conseguir detectar espaço livre em sua pasta raiz durante a importação do arquivo",
|
||||
"SkipFreeSpaceCheck": "Ignorar verificação de espaço livre",
|
||||
"SizeOnDisk": "Tamanho em disco",
|
||||
"Size": "Tamanho",
|
||||
@@ -1285,7 +1285,7 @@
|
||||
"DownloadIgnored": "Download ignorado",
|
||||
"GrabId": "Obter ID",
|
||||
"HistoryLoadError": "Não foi possível carregar o histórico",
|
||||
"InfoUrl": "URL com informações",
|
||||
"InfoUrl": "URL da info",
|
||||
"MovieImported": "Filme Importado",
|
||||
"MovieGrabbedHistoryTooltip": "Filme obtido de {indexer} e enviado para {downloadClient}",
|
||||
"MovieImportedTooltip": "Filme baixado com sucesso e obtido no cliente de download",
|
||||
@@ -1328,5 +1328,7 @@
|
||||
"OrganizeNamingPattern": "Padrão de nomenclatura: `{standardMovieFormat}`",
|
||||
"OrganizeNothingToRename": "Sucesso! Meu trabalho está concluído, não há arquivos para renomear.",
|
||||
"OrganizeRelativePaths": "Todos os caminhos são relativos a: `{path}`",
|
||||
"OrganizeRenamingDisabled": "A renomeação está desativada, nada para renomear"
|
||||
"OrganizeRenamingDisabled": "A renomeação está desativada, nada para renomear",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "O cliente de download {0} está configurado para remover downloads concluídos. Isso pode resultar na remoção dos downloads do seu cliente antes que {1} possa importá-los.",
|
||||
"Umask": "Desmascarar"
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
"AddExclusion": "Добавить исключение",
|
||||
"Added": "Добавлено",
|
||||
"Actions": "Действия",
|
||||
"About": "Подробности",
|
||||
"About": "Об",
|
||||
"Deleted": "Удалено",
|
||||
"DeleteCustomFormat": "Удалить пользовательский формат",
|
||||
"DeleteBackupMessageText": "Вы уверены, что хотите удалить резервную копию '{name}'?",
|
||||
@@ -1124,8 +1124,8 @@
|
||||
"AddImportList": "Добавить список импорта",
|
||||
"AddImportListImplementation": "Добавить список импорта - {implementationName}",
|
||||
"AddIndexerImplementation": "Добавить индексатор - {implementationName}",
|
||||
"AddConnection": "Добавить соединение",
|
||||
"AddConnectionImplementation": "Добавить соединение - {implementationName}",
|
||||
"AddConnection": "Добавить подключение",
|
||||
"AddConnectionImplementation": "Добавить подключение - {implementationName}",
|
||||
"ApplyTagsHelpTextHowToApplyMovies": "Как применить теги к выбранным фильмам",
|
||||
"AutoTaggingRequiredHelpText": "Это условие {0} должно соответствовать для применения правила автоматической маркировки. В противном случае достаточно одного совпадения {0}.",
|
||||
"AutoTaggingNegateHelpText": "Если это отмечено, правило автоматической маркировки не будет применяться, если условие {0} соответствует.",
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
"AuthForm": "表单(登陆页面)",
|
||||
"AuthBasic": "基础(浏览器弹出对话框)",
|
||||
"AppDataDirectory": "AppData目录",
|
||||
"ApiKey": "API 密钥",
|
||||
"ApiKey": "API Key",
|
||||
"Backups": "历史备份",
|
||||
"BindAddress": "绑定地址",
|
||||
"BranchUpdate": "更新Radarr的分支",
|
||||
@@ -690,7 +690,7 @@
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "无法添加新通知,请稍后重试。",
|
||||
"URLBase": "基本URL",
|
||||
"RemovedMovieCheckMultipleMessage": "电影“{0}”已从TMDb移除",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "当 Radarr 无法从movie根目录检测到空间时使用",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "当Radarr无法在文件导入期间检测到根文件夹的空闲空间时使用",
|
||||
"UnableToAddANewQualityProfilePleaseTryAgain": "无法添加新的质量配置,请稍后重试。",
|
||||
"ThisCannotBeCancelled": "在不禁用所有索引器的情况下,一旦启动就无法取消。",
|
||||
"SearchCutoffUnmet": "搜索未满足终止条件的",
|
||||
@@ -1329,5 +1329,6 @@
|
||||
"UnableToLoadAutoTagging": "无法加载自动标记",
|
||||
"OverrideGrabNoMovie": "必须选择电影",
|
||||
"RetryingDownloadOn": "于 {date} {time} 重试下载",
|
||||
"Or": "或"
|
||||
"Or": "或",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "下载客户端{0}设置为删除已完成的下载。这可能导致在{1}可以导入下载之前从您的客户端删除下载。"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using NzbDrone.Common.Cache;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
|
||||
@@ -31,6 +32,11 @@ namespace NzbDrone.Core.MediaCover
|
||||
|
||||
public string RegisterUrl(string url)
|
||||
{
|
||||
if (url.IsNullOrWhiteSpace())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var hash = url.SHA256Hash();
|
||||
|
||||
_cache.Set(hash, url, TimeSpan.FromHours(24));
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using FluentValidation;
|
||||
using FluentValidation.Validators;
|
||||
using NzbDrone.Common.Extensions;
|
||||
|
||||
namespace NzbDrone.Core.Organizer
|
||||
{
|
||||
@@ -8,13 +11,42 @@ namespace NzbDrone.Core.Organizer
|
||||
public static IRuleBuilderOptions<T, string> ValidMovieFolderFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
||||
{
|
||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
||||
ruleBuilder.SetValidator(new IllegalCharactersValidator());
|
||||
|
||||
return ruleBuilder.SetValidator(new RegularExpressionValidator(FileNameBuilder.MovieTitleRegex)).WithMessage("Must contain movie title");
|
||||
}
|
||||
|
||||
public static IRuleBuilderOptions<T, string> ValidMovieFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
||||
{
|
||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
||||
ruleBuilder.SetValidator(new IllegalCharactersValidator());
|
||||
|
||||
return ruleBuilder.SetValidator(new RegularExpressionValidator(FileNameBuilder.MovieTitleRegex)).WithMessage("Must contain movie title");
|
||||
}
|
||||
}
|
||||
|
||||
public class IllegalCharactersValidator : PropertyValidator
|
||||
{
|
||||
private static readonly char[] InvalidPathChars = Path.GetInvalidPathChars();
|
||||
|
||||
protected override string GetDefaultMessageTemplate() => "Contains illegal characters: {InvalidCharacters}";
|
||||
|
||||
protected override bool IsValid(PropertyValidatorContext context)
|
||||
{
|
||||
var value = context.PropertyValue as string;
|
||||
if (value.IsNullOrWhiteSpace())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var invalidCharacters = InvalidPathChars.Where(i => value!.IndexOf(i) >= 0).ToList();
|
||||
if (invalidCharacters.Any())
|
||||
{
|
||||
context.MessageFormatter.AppendArgument("InvalidCharacters", string.Join("", invalidCharacters));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Datastore.Events;
|
||||
using NzbDrone.Core.MediaCover;
|
||||
using NzbDrone.Core.Messaging.Commands;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Movies;
|
||||
@@ -31,8 +29,8 @@ namespace Radarr.Api.V3.Collections
|
||||
private readonly IMovieMetadataService _movieMetadataService;
|
||||
private readonly IBuildFileNames _fileNameBuilder;
|
||||
private readonly INamingConfigService _namingService;
|
||||
private readonly IMapCoversToLocal _coverMapper;
|
||||
private readonly IManageCommandQueue _commandQueueManager;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public CollectionController(IBroadcastSignalRMessage signalRBroadcaster,
|
||||
IMovieCollectionService collectionService,
|
||||
@@ -40,8 +38,8 @@ namespace Radarr.Api.V3.Collections
|
||||
IMovieMetadataService movieMetadataService,
|
||||
IBuildFileNames fileNameBuilder,
|
||||
INamingConfigService namingService,
|
||||
IMapCoversToLocal coverMapper,
|
||||
IManageCommandQueue commandQueueManager)
|
||||
IManageCommandQueue commandQueueManager,
|
||||
Logger logger)
|
||||
: base(signalRBroadcaster)
|
||||
{
|
||||
_collectionService = collectionService;
|
||||
@@ -49,8 +47,8 @@ namespace Radarr.Api.V3.Collections
|
||||
_movieMetadataService = movieMetadataService;
|
||||
_fileNameBuilder = fileNameBuilder;
|
||||
_namingService = namingService;
|
||||
_coverMapper = coverMapper;
|
||||
_commandQueueManager = commandQueueManager;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
protected override CollectionResource GetResourceById(int id)
|
||||
@@ -62,7 +60,6 @@ namespace Radarr.Api.V3.Collections
|
||||
public List<CollectionResource> GetCollections(int? tmdbId)
|
||||
{
|
||||
var collectionResources = new List<CollectionResource>();
|
||||
var coverFileInfos = _coverMapper.GetCoverFileInfos();
|
||||
|
||||
if (tmdbId.HasValue)
|
||||
{
|
||||
@@ -75,9 +72,11 @@ namespace Radarr.Api.V3.Collections
|
||||
}
|
||||
else
|
||||
{
|
||||
collectionResources = MapToResource(_collectionService.GetAllCollections(), coverFileInfos).ToList();
|
||||
collectionResources = MapToResource(_collectionService.GetAllCollections()).ToList();
|
||||
}
|
||||
|
||||
_logger.Trace("Returning Collections");
|
||||
|
||||
return collectionResources;
|
||||
}
|
||||
|
||||
@@ -137,7 +136,7 @@ namespace Radarr.Api.V3.Collections
|
||||
return Accepted(updated);
|
||||
}
|
||||
|
||||
private IEnumerable<CollectionResource> MapToResource(List<MovieCollection> collections, Dictionary<string, FileInfo> coverFileInfos)
|
||||
private IEnumerable<CollectionResource> MapToResource(List<MovieCollection> collections)
|
||||
{
|
||||
// Avoid calling for naming spec on every movie in filenamebuilder
|
||||
var namingConfig = _namingService.GetConfig();
|
||||
@@ -161,8 +160,6 @@ namespace Radarr.Api.V3.Collections
|
||||
resource.Movies.Add(movieResource);
|
||||
}
|
||||
|
||||
MapCoversToLocal(resource.Movies, coverFileInfos);
|
||||
|
||||
yield return resource;
|
||||
}
|
||||
}
|
||||
@@ -178,8 +175,6 @@ namespace Radarr.Api.V3.Collections
|
||||
var movieResource = movie.ToResource();
|
||||
movieResource.Folder = _fileNameBuilder.GetMovieFolder(new Movie { MovieMetadata = movie }, namingConfig);
|
||||
|
||||
_coverMapper.ConvertToLocalUrls(0, movieResource.Images);
|
||||
|
||||
if (!existingMoviesTmdbIds.Contains(movie.TmdbId))
|
||||
{
|
||||
resource.MissingMovies++;
|
||||
@@ -191,11 +186,6 @@ namespace Radarr.Api.V3.Collections
|
||||
return resource;
|
||||
}
|
||||
|
||||
private void MapCoversToLocal(IEnumerable<CollectionMovieResource> movies, Dictionary<string, FileInfo> coverFileInfos)
|
||||
{
|
||||
_coverMapper.ConvertToLocalUrls(movies.Select(x => Tuple.Create(0, x.Images.AsEnumerable())), coverFileInfos);
|
||||
}
|
||||
|
||||
[NonAction]
|
||||
public void Handle(CollectionAddedEvent message)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user