1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-03-28 18:05:41 -04:00

Compare commits

...

38 Commits

Author SHA1 Message Date
Qstick
500bc3a571 New: Include CustomFormats for CustomScript on Grab
Fixes #7656

Co-Authored-By: bakerboy448 <55419169+bakerboy448@users.noreply.github.com>
2022-10-15 14:34:10 -05:00
nuxen
e6567d0365 Fixed: Add HQMUX to the exception Release Groups
Fixed: Add HQMUX to the exception Release Groups
2022-10-15 12:09:18 -05:00
Qstick
dbca393772 New: Retry Postgres connection 3 times (with 5 second sleep) on Startup
(cherry picked from commit 3e700b63c26b247fcac83428ba79e53c88f797ff)

[common]
2022-10-15 12:08:47 -05:00
Qstick
9662495fa2 Fixed: Remove buggy CF import check 2022-10-15 12:01:09 -05:00
Qstick
76f0c54b3c Update FUNDING.yml 2022-10-14 22:12:40 -05:00
Weblate
d7ff92115c Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
Currently translated at 99.9% (1146 of 1147 strings)

Co-authored-by: fyu0h <biiigback@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/zh_CN/
Translation: Servarr/Radarr
2022-10-10 22:31:42 -05:00
owine
54a49d6878 Add trailing spaces to issue template
Only OS had one
2022-10-10 21:13:43 -05:00
Qstick
a8362511f9 Fixed: Only replace the Title instance of a release
For movies such as X (2022) we don't want to replace every instance of `X` in the release string, but only the instance we identify as the title.
2022-10-09 00:46:38 -05:00
Alex
b9f2b3e06f build: harden support.yml permissions
Signed-off-by: Alex <aleksandrosansan@gmail.com>
2022-10-09 00:04:52 -05:00
Alex
d995bc5a7e build: harden azuresync.yml permissions
Signed-off-by: Alex <aleksandrosansan@gmail.com>
2022-10-09 00:04:52 -05:00
Alex
8886162bba build: harden lock.yml permissions
Signed-off-by: Alex <aleksandrosansan@gmail.com>
2022-10-09 00:04:52 -05:00
Qstick
eb9eb4ec64 Fixed: Cleanup MovieMetadata that was removed from a collection 2022-10-09 00:02:34 -05:00
Servarr
f910a8fde7 Automated API Docs update 2022-10-07 21:34:01 -05:00
Qstick
f6904608a7 Remove unused calendar parameter 2022-10-07 21:26:25 -05:00
Weblate
0c79548fc4 Translated using Weblate (Dutch) [skip ci]
Currently translated at 94.8% (1088 of 1147 strings)

Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Catalan) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (German) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: contramundi <robert.ars@outlook.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: libsu <libsu@qq.com>
Co-authored-by: reloxx <reloxx@interia.pl>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/zh_CN/
Translation: Servarr/Radarr
2022-10-07 20:45:04 -05:00
bakerboy448
362e664ce6 update feature request template
[skip ci] [common]
2022-10-06 17:58:06 +01:00
Qstick
c2cbfb274a Bump version to 4.3.0 2022-09-25 11:55:51 -05:00
Qstick
9b3770a018 Ignore SQLiteException tests on Azure 2022-09-24 20:16:19 -05:00
Qstick
9db6289693 Correct SQLiteException Sentry filtering 2022-09-24 19:45:10 -05:00
Qstick
8a63f6ae37 Fix TagDetails sql for PG, add test 2022-09-24 19:01:47 -05:00
dglava
069b18e5e3 Fixed: Add YTS.AG to the exception Release Groups (#7627)
* Fixed: Add YTS.AG to the exception Release Groups

* Fix: Remove unneeded test case for YTS.AG

* Fix: Simplify ExceptionReleaseGroupRegex
2022-09-24 13:27:51 -05:00
Bakerboy448
f05333db51 Fixed: Improve RarBG Error Handling 2022-09-23 21:48:07 -05:00
Qstick
f50e8f631e fix typo in MovieRepository 2022-09-23 21:46:39 -05:00
bakerboy448
b9886cd11c Fixed: Repack Preference Ignored
(cherry picked from commit 04447d9d4db8cc3d54baf0a721f4430cf77908c4)

Fixes #6595
Closes #7621
2022-09-23 21:44:27 -05:00
Qstick
9f3eecb2a9 Fixed: Ignore Movies with null tags when pulling AllMovieTags 2022-09-23 21:34:10 -05:00
Stevie Robinson
52c24a4333 New: Torrent Seed Ratio no longer advance settings
(cherry picked from commit c98fac65ed8e669c5e97ed3255c424b61fe0e8b3)
2022-09-22 12:29:06 -05:00
Weblate
9bc31b46fa Translated using Weblate (Dutch) [skip ci]
Currently translated at 94.8% (1088 of 1147 strings)

Co-authored-by: Bob <bob@mijnthuisadres.nl>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/nl/
Translation: Servarr/Radarr
2022-09-21 21:10:10 +01:00
Qstick
f4d8e113c1 Remove unused package 'react-slick' 2022-09-17 22:32:46 -05:00
Qstick
1e1a4240d1 Fixed: Collection Carousel Improvements 2022-09-17 22:17:41 -05:00
Weblate
8fb53df4af Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Polish) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Slovak) [skip ci]

Currently translated at 14.6% (168 of 1147 strings)

Translated using Weblate (Portuguese) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Finnish) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Portuguese (Brazil)) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Portuguese) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Hungarian) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Catalan) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Chinese (Traditional) (zh_TW)) [skip ci]

Currently translated at 1.2% (14 of 1147 strings)

Translated using Weblate (Finnish) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Translated using Weblate (Chinese (Traditional) (zh_TW)) [skip ci]

Currently translated at 1.0% (12 of 1147 strings)

Added translation using Weblate (Latvian) [skip ci]

Translated using Weblate (German) [skip ci]

Currently translated at 100.0% (1147 of 1147 strings)

Co-authored-by: Csaba <csab0825@gmail.com>
Co-authored-by: Dainel Amendoeira <daniel@amendoeira.eu>
Co-authored-by: Gylesie <github-anon.dasheens@aleeas.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: HiNesslio <chi.lio@shms-mail.ch>
Co-authored-by: Marcin <ml.cichy@gmail.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Qstick <qstick@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: reloxx <reloxx@interia.pl>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pl/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/sk/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/zh_TW/
Translation: Servarr/Radarr
2022-09-17 22:00:56 -05:00
bakerboy448
f6dd600d2b Clarify Folder as Root Folder (#7598) 2022-09-17 21:59:29 -05:00
Mijail Todorovich
40a15d59e0 Fixed: Toolbar Button labels overlap
Fixes #7553
2022-09-17 21:57:50 -05:00
Mark McDowall
c7baa66de2 Fixed: Series list jump bar click issues
(cherry picked from commit 9c7378625112088d022239fdbdb90c0dc941d61d)
2022-09-17 21:53:44 -05:00
Qstick
2be70f5001 Fixed: Use translated title for sorttitle in Kodi nfo
Fixes #7482
2022-09-17 21:52:44 -05:00
Mark McDowall
da857701f6 Handle redirects for 308 redirects
(cherry picked from commit 6eed7c8fed096fa1762448bc57876440f542be98)
2022-09-17 21:07:17 -05:00
Qstick
828d7eb1f3 Fixed: Improve Radarr List help text 2022-09-12 20:18:18 -05:00
bakerboy448
b3a056edf9 Fixed: Improve Quality Profile in-use helptext 2022-09-12 20:16:27 -05:00
Qstick
98437c3cac Bump version to 4.2.4 2022-09-08 22:35:00 -05:00
52 changed files with 535 additions and 209 deletions

2
.github/FUNDING.yml vendored
View File

@@ -1,6 +1,6 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
github: radarr
patreon: # Replace with a single Patreon username
open_collective: radarr
ko_fi: # Replace with a single Ko-fi username

View File

@@ -45,11 +45,11 @@ body:
- **Database**: Sqlite 3.36.0
value: |
- OS:
- Radarr:
- Docker Install:
- Using Reverse Proxy:
- Browser:
- Database:
- Radarr:
- Docker Install:
- Using Reverse Proxy:
- Browser:
- Database:
render: markdown
validations:
required: true

View File

@@ -5,9 +5,9 @@ body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the feature you are requesting.
description: Please search to see if an open or closed issue already exists for the feature you are requesting. If a request exists and is closed note that it may only be fixed in an unstable branch.
options:
- label: I have searched the existing issues
- label: I have searched the existing open and closed issues
required: true
- type: textarea
attributes:

View File

@@ -7,8 +7,12 @@ on:
concurrency: azuresync-${{ github.event.issue.number }}
permissions: {}
jobs:
alert:
permissions:
issues: write # to update issue body
runs-on: ubuntu-latest
steps:
- uses: danhellem/github-actions-issue-to-work-item@master

View File

@@ -5,8 +5,13 @@ on:
schedule:
- cron: '0 0 * * *'
permissions: {}
jobs:
lock:
permissions:
issues: write # to lock issues (dessant/lock-threads)
pull-requests: write # to lock PRs (dessant/lock-threads)
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v2

View File

@@ -4,8 +4,12 @@ on:
issues:
types: [labeled, unlabeled, reopened]
permissions: {}
jobs:
support:
permissions:
issues: write # to modify issues
runs-on: ubuntu-latest
steps:
- uses: dessant/support-requests@v2

View File

@@ -9,7 +9,7 @@ variables:
testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
majorVersion: '4.2.3'
majorVersion: '4.3.0'
minorVersion: $[counter('minorVersion', 2000)]
radarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(radarrVersion)'

View File

@@ -223,7 +223,6 @@ module.exports = (env) => {
{
loader: 'url-loader',
options: {
limit: 24096,
mimetype: 'application/font-woff',
emitFile: false,
name: 'Content/Fonts/[name].[ext]'
@@ -233,12 +232,11 @@ module.exports = (env) => {
},
{
test: /\.(ttf|eot|eot?#iefix|gif|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
test: /\.(ttf|eot|eot?#iefix|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: [
{
loader: 'file-loader',
options: {
limit: 24096,
emitFile: false,
name: 'Content/Fonts/[name].[ext]'
}

View File

@@ -115,7 +115,7 @@ class EditCollectionModalContent extends Component {
</FormGroup>
<FormGroup>
<FormLabel>{translate('Folder')}</FormLabel>
<FormLabel>{translate('RootFolder')}</FormLabel>
<FormInputGroup
type={inputTypes.ROOT_FOLDER_SELECT}

View File

@@ -1,7 +1,8 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Slider from 'react-slick';
import TextTruncate from 'react-text-truncate';
import { Navigation } from 'swiper';
import { Swiper, SwiperSlide } from 'swiper/react';
import EditCollectionModalConnector from 'Collection/Edit/EditCollectionModalConnector';
import CheckInput from 'Components/Form/CheckInput';
import Icon from 'Components/Icon';
@@ -17,8 +18,9 @@ import CollectionMovieConnector from './CollectionMovieConnector';
import CollectionMovieLabelConnector from './CollectionMovieLabelConnector';
import styles from './CollectionOverview.css';
import 'slick-carousel/slick/slick.css';
import 'slick-carousel/slick/slick-theme.css';
// Import Swiper styles
import 'swiper/css';
import 'swiper/css/navigation';
const columnPadding = parseInt(dimensions.movieIndexColumnPadding);
const columnPaddingSmallScreen = parseInt(dimensions.movieIndexColumnPaddingSmallScreen);
@@ -52,8 +54,12 @@ class CollectionOverview extends Component {
//
// Control
setSliderRef = (ref) => {
this.setState({ slider: ref });
setSliderPrevRef = (ref) => {
this._swiperPrevRef = ref;
};
setSliderNextRef = (ref) => {
this._swiperNextRef = ref;
};
//
@@ -120,15 +126,6 @@ class CollectionOverview extends Component {
const contentHeight = getContentHeight(rowHeight, isSmallScreen);
const overviewHeight = contentHeight - titleRowHeight - posterHeight;
const sliderSettings = {
arrows: false,
dots: false,
infinite: false,
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: true
};
return (
<div className={styles.container}>
<div className={styles.content}>
@@ -166,19 +163,21 @@ class CollectionOverview extends Component {
{
showPosters &&
<div className={styles.navigationButtons}>
<IconButton
name={icons.ARROW_LEFT}
title={translate('ScrollMovies')}
onPress={this.state.slider?.slickPrev}
size={20}
/>
<span ref={this.setSliderPrevRef}>
<IconButton
name={icons.ARROW_LEFT}
title={translate('ScrollMovies')}
size={20}
/>
</span>
<IconButton
name={icons.ARROW_RIGHT}
title={translate('ScrollMovies')}
onPress={this.state.slider?.slickNext}
size={20}
/>
<span ref={this.setSliderNextRef}>
<IconButton
name={icons.ARROW_RIGHT}
title={translate('ScrollMovies')}
size={20}
/>
</span>
</div>
}
@@ -270,9 +269,23 @@ class CollectionOverview extends Component {
{
showPosters ?
<div className={styles.sliderContainer}>
<Slider ref={this.setSliderRef} {...sliderSettings}>
<Swiper
slidesPerView='auto'
spaceBetween={10}
slidesPerGroup={3}
loop={false}
loopFillGroupWithBlank={true}
className="mySwiper"
modules={[Navigation]}
onInit={(swiper) => {
swiper.params.navigation.prevEl = this._swiperPrevRef;
swiper.params.navigation.nextEl = this._swiperNextRef;
swiper.navigation.init();
swiper.navigation.update();
}}
>
{movies.map((movie) => (
<div className={styles.movie} key={movie.tmdbId}>
<SwiperSlide key={movie.tmdbId} style={{ width: posterWidth }}>
<CollectionMovieConnector
key={movie.tmdbId}
posterWidth={posterWidth}
@@ -281,9 +294,9 @@ class CollectionOverview extends Component {
collectionId={id}
{...movie}
/>
</div>
</SwiperSlide>
))}
</Slider>
</Swiper>
</div> :
<div className={styles.labelsContainer}>
{movies.map((movie) => (

View File

@@ -1,4 +1,5 @@
.jumpBar {
z-index: $pageJumpBarZIndex;
display: flex;
align-content: stretch;
align-items: stretch;

View File

@@ -2,7 +2,8 @@
composes: link from '~Components/Link/Link.css';
padding-top: 4px;
width: $toolbarButtonWidth;
min-width: $toolbarButtonWidth;
width: min-content;
text-align: center;
&:hover {

View File

@@ -166,7 +166,7 @@ function EditImportListModalContent(props) {
</FormGroup>
<FormGroup>
<FormLabel>{translate('Folder')}</FormLabel>
<FormLabel>{translate('RootFolder')}</FormLabel>
<FormInputGroup
type={inputTypes.ROOT_FOLDER_SELECT}

View File

@@ -1,4 +1,5 @@
module.exports = {
pageJumpBarZIndex: 10,
modalZIndex: 1000,
popperZIndex: 2000
};

View File

@@ -62,8 +62,7 @@
"react-document-title": "2.0.3",
"react-dom": "17.0.2",
"react-focus-lock": "2.5.0",
"react-slick": "0.28.1",
"slick-carousel": "1.8.1",
"swiper": "8.3.2",
"react-google-recaptcha": "2.1.0",
"react-lazyload": "3.2.0",
"react-measure": "1.4.7",

View File

@@ -18,8 +18,10 @@ namespace NzbDrone.Common.Test.InstrumentationTests
private static LogLevel[] SentryLevels = LogLevel.AllLevels.Where(x => x >= LogLevel.Error).ToArray();
private static LogLevel[] OtherLevels = AllLevels.Except(SentryLevels).ToArray();
// TODO: SQLiteException filtering tests don't work on linux-86 and alpine customer Azure agents due to sqlite library not being loaded up, pass local
private static Exception[] FilteredExceptions = new Exception[]
{
// new SQLiteException(SQLiteErrorCode.Locked, "database is locked"),
new UnauthorizedAccessException(),
new AggregateException(new Exception[]
{
@@ -30,6 +32,7 @@ namespace NzbDrone.Common.Test.InstrumentationTests
private static Exception[] NonFilteredExceptions = new Exception[]
{
// new SQLiteException(SQLiteErrorCode.Error, "it's borked"),
new AggregateException(new Exception[]
{
new UnauthorizedAccessException(),

View File

@@ -55,7 +55,8 @@ namespace NzbDrone.Common.Http
StatusCode == HttpStatusCode.Found ||
StatusCode == HttpStatusCode.TemporaryRedirect ||
StatusCode == HttpStatusCode.RedirectMethod ||
StatusCode == HttpStatusCode.SeeOther;
StatusCode == HttpStatusCode.SeeOther ||
StatusCode == HttpStatusCode.PermanentRedirect;
public string[] GetCookieHeaders()
{

View File

@@ -248,7 +248,7 @@ namespace NzbDrone.Common.Instrumentation.Sentry
var isSentry = true;
var sqlEx = ex as SQLiteException;
if (sqlEx != null && !FilteredSQLiteErrors.Contains(sqlEx.ResultCode))
if (sqlEx != null && FilteredSQLiteErrors.Contains(sqlEx.ResultCode))
{
isSentry = false;
}

View File

@@ -1,6 +1,8 @@
using FizzWare.NBuilder;
using System;
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.DecisionEngine.Specifications;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Movies;
@@ -168,5 +170,80 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.Should()
.BeFalse();
}
[Test]
public void should_return_false_when_repack_but_auto_download_repack_is_false()
{
Mocker.GetMock<IConfigService>()
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.DoNotUpgrade);
_parsedMovieInfo.Quality.Revision.IsRepack = true;
_movie.MovieFileId = 1;
_movie.MovieFile = Builder<MovieFile>.CreateNew()
.With(e => e.Quality = new QualityModel(Quality.SDTV))
.With(e => e.ReleaseGroup = "Radarr")
.Build();
var remoteMovie = Builder<RemoteMovie>.CreateNew()
.With(e => e.ParsedMovieInfo = _parsedMovieInfo)
.With(e => e.Movie = _movie)
.Build();
Subject.IsSatisfiedBy(remoteMovie, null)
.Accepted
.Should()
.BeFalse();
}
[Test]
public void should_return_true_when_repack_but_auto_download_repack_is_true()
{
Mocker.GetMock<IConfigService>()
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.PreferAndUpgrade);
_parsedMovieInfo.Quality.Revision.IsRepack = true;
_movie.MovieFileId = 1;
_movie.MovieFile = Builder<MovieFile>.CreateNew()
.With(e => e.Quality = new QualityModel(Quality.SDTV))
.With(e => e.ReleaseGroup = "Radarr")
.Build();
var remoteMovie = Builder<RemoteMovie>.CreateNew()
.With(e => e.ParsedMovieInfo = _parsedMovieInfo)
.With(e => e.Movie = _movie)
.Build();
Subject.IsSatisfiedBy(remoteMovie, null)
.Accepted
.Should()
.BeTrue();
}
[Test]
public void should_return_true_when_repacks_are_not_preferred()
{
Mocker.GetMock<IConfigService>()
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.DoNotPrefer);
_parsedMovieInfo.Quality.Revision.IsRepack = true;
_movie.MovieFileId = 1;
_movie.MovieFile = Builder<MovieFile>.CreateNew()
.With(e => e.Quality = new QualityModel(Quality.SDTV))
.With(e => e.ReleaseGroup = "Radarr")
.Build();
var remoteMovie = Builder<RemoteMovie>.CreateNew()
.With(e => e.ParsedMovieInfo = _parsedMovieInfo)
.With(e => e.Movie = _movie)
.Build();
Subject.IsSatisfiedBy(remoteMovie, null)
.Accepted
.Should()
.BeTrue();
}
}
}

View File

@@ -50,6 +50,7 @@ namespace NzbDrone.Core.Test.ParserTests
[TestCase("The.Movie.Title.2013.720p.BluRay.x264-ROUGH [PublicHD]", "ROUGH")]
[TestCase("Some.Really.Bad.Movie.Title.[2021].1080p.WEB-HDRip.Dual.Audio.[Hindi.[Clean]. .English].x264.AAC.DD.2.0.By.Full4Movies.mkv-xpost", null)]
[TestCase("The.Movie.Title.2013.1080p.10bit.AMZN.WEB-DL.DDP5.1.HEVC-Vyndros", "Vyndros")]
[TestCase("Movie.Name.2022.1080p.BluRay.x264-[YTS.AG]", "YTS.AG")]
public void should_parse_expected_release_group(string title, string expected)
{
Parser.Parser.ParseReleaseGroup(title).Should().Be(expected);
@@ -104,6 +105,7 @@ namespace NzbDrone.Core.Test.ParserTests
[TestCase("Movie Title (2009) (2160p PMTP WEB-DL Hybrid H265 DV HDR10+ DDP Atmos 5.1 English - HONE)", "HONE")]
[TestCase("Why.Cant.You.Use.Normal.Characters.2021.2160p.UHD.HDR10+.BluRay.TrueHD.Atmos.7.1.x265-ZØNEHD", "ZØNEHD")]
[TestCase("Movie.Should.Not.Use.Dots.2022.1080p.BluRay.x265.10bit.Tigole", "Tigole")]
[TestCase("Movie.Title.2005.2160p.UHD.BluRay.TrueHD 7.1.Atmos.x265 - HQMUX", "HQMUX")]
public void should_parse_exception_release_group(string title, string expected)
{
Parser.Parser.ParseReleaseGroup(title).Should().Be(expected);

View File

@@ -1,6 +1,7 @@
using System;
using System.Data.Common;
using System.Data.SQLite;
using System.Net.Sockets;
using NLog;
using Npgsql;
using NzbDrone.Common.Disk;
@@ -124,6 +125,37 @@ namespace NzbDrone.Core.Datastore
throw new CorruptDatabaseException("Database file: {0} is corrupt, restore from backup if available. See: https://wiki.servarr.com/radarr/faq#i-am-getting-an-error-database-disk-image-is-malformed", e, fileName);
}
catch (NpgsqlException e)
{
if (e.InnerException is SocketException)
{
var retryCount = 3;
while (true)
{
Logger.Error(e, "Failure to connect to Postgres DB, {0} retries remaining", retryCount);
try
{
_migrationController.Migrate(connectionString, migrationContext);
}
catch (Exception ex)
{
if (--retryCount > 0)
{
System.Threading.Thread.Sleep(5000);
continue;
}
throw new RadarrStartupException(ex, "Error creating main database");
}
}
}
else
{
throw new RadarrStartupException(e, "Error creating main database");
}
}
catch (Exception e)
{
throw new RadarrStartupException(e, "Error creating main database");

View File

@@ -1,19 +1,23 @@
using System;
using System;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.IndexerSearch.Definitions;
using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.Qualities;
namespace NzbDrone.Core.DecisionEngine.Specifications
{
public class RepackSpecification : IDecisionEngineSpecification
{
private readonly UpgradableSpecification _upgradableSpecification;
private readonly IConfigService _configService;
private readonly Logger _logger;
public RepackSpecification(UpgradableSpecification upgradableSpecification, Logger logger)
public RepackSpecification(UpgradableSpecification upgradableSpecification, IConfigService configService, Logger logger)
{
_upgradableSpecification = upgradableSpecification;
_configService = configService;
_logger = logger;
}
@@ -22,11 +26,19 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
public Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria)
{
var downloadPropersAndRepacks = _configService.DownloadPropersAndRepacks;
if (!subject.ParsedMovieInfo.Quality.Revision.IsRepack)
{
return Decision.Accept();
}
if (downloadPropersAndRepacks == ProperDownloadTypes.DoNotPrefer)
{
_logger.Debug("Repacks are not preferred, skipping check");
return Decision.Accept();
}
if (subject.Movie.MovieFileId != 0)
{
var file = subject.Movie.MovieFile;
@@ -36,6 +48,12 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
var releaseGroup = subject.ParsedMovieInfo.ReleaseGroup;
var fileReleaseGroup = file.ReleaseGroup;
if (downloadPropersAndRepacks == ProperDownloadTypes.DoNotUpgrade)
{
_logger.Debug("Auto downloading of repacks is disabled");
return Decision.Reject("Repack downloading is disabled");
}
if (fileReleaseGroup.IsNullOrWhiteSpace())
{
return Decision.Reject("Unable to determine release group for the existing file");

View File

@@ -148,11 +148,13 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc
var details = new XElement("movie");
details.Add(new XElement("title", movieTranslation?.Title ?? movie.Title));
var metadataTitle = movieTranslation?.Title ?? movie.Title;
details.Add(new XElement("title", metadataTitle));
details.Add(new XElement("originaltitle", movie.MovieMetadata.Value.OriginalTitle));
details.Add(new XElement("sorttitle", movie.MovieMetadata.Value.SortTitle));
details.Add(new XElement("sorttitle", Parser.Parser.NormalizeTitle(metadataTitle)));
if (movie.MovieMetadata.Value.Ratings.Tmdb?.Votes > 0 || movie.MovieMetadata.Value.Ratings.Imdb?.Votes > 0)
{

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Messaging.Events;
@@ -7,6 +8,7 @@ namespace NzbDrone.Core.ImportLists.ImportListMovies
public interface IImportListMovieRepository : IBasicRepository<ImportListMovie>
{
List<ImportListMovie> GetAllForLists(List<int> listIds);
bool ExistsByMetadataId(int metadataId);
}
public class ImportListMovieRepository : BasicRepository<ImportListMovie>, IImportListMovieRepository
@@ -20,5 +22,12 @@ namespace NzbDrone.Core.ImportLists.ImportListMovies
{
return Query(x => listIds.Contains(x.ListId));
}
public bool ExistsByMetadataId(int metadataId)
{
var movies = Query(x => x.MovieMetadataId == metadataId);
return movies.Any();
}
}
}

View File

@@ -15,6 +15,7 @@ namespace NzbDrone.Core.ImportLists.ImportListMovies
List<ImportListMovie> SyncMoviesForList(List<ImportListMovie> listMovies, int listId);
void RemoveListMovie(ImportListMovie listMovie);
ImportListMovie GetById(int id);
bool ExistsByMetadataId(int metadataId);
}
public class ImportListMovieService : IImportListMovieService, IHandleAsync<ProviderDeletedEvent<IImportList>>
@@ -79,5 +80,10 @@ namespace NzbDrone.Core.ImportLists.ImportListMovies
var moviesOnList = _importListMovieRepository.GetAllForLists(new List<int> { message.ProviderId });
_importListMovieRepository.DeleteMany(moviesOnList);
}
public bool ExistsByMetadataId(int metadataId)
{
return _importListMovieRepository.ExistsByMetadataId(metadataId);
}
}
}

View File

@@ -28,10 +28,10 @@ namespace NzbDrone.Core.ImportLists.Radarr
TagIds = Array.Empty<int>();
}
[FieldDefinition(0, Label = "Full URL", HelpText = "URL, including port, of the Radarr V3 instance to import from")]
[FieldDefinition(0, Label = "Full URL", HelpText = "URL, including port, of the Radarr instance to import from (Radarr 3.0 or higher)")]
public string BaseUrl { get; set; }
[FieldDefinition(1, Label = "API Key", Privacy = PrivacyLevel.ApiKey, HelpText = "Apikey of the Radarr V3 instance to import from")]
[FieldDefinition(1, Label = "API Key", Privacy = PrivacyLevel.ApiKey, HelpText = "Apikey of the Radarr instance to import from (Radarr 3.0 or higher)")]
public string ApiKey { get; set; }
[FieldDefinition(2, Type = FieldType.Select, SelectOptionsProviderAction = "getProfiles", Label = "Profiles", HelpText = "Profiles from the source instance to import from")]

View File

@@ -31,10 +31,12 @@ namespace NzbDrone.Core.Indexers.Rarbg
if (jsonResponse.Resource.error_code.HasValue)
{
if (jsonResponse.Resource.error_code == 20 || jsonResponse.Resource.error_code == 8
|| jsonResponse.Resource.error_code == 9 || jsonResponse.Resource.error_code == 10)
if (jsonResponse.Resource.error_code == 5 || jsonResponse.Resource.error_code == 8
|| jsonResponse.Resource.error_code == 9 || jsonResponse.Resource.error_code == 10
|| jsonResponse.Resource.error_code == 13 || jsonResponse.Resource.error_code == 14
|| jsonResponse.Resource.error_code == 20)
{
// No results or imdbid not found
// No results, rate limit, tmdbid not found/invalid, or imdbid not found/invalid
return results;
}

View File

@@ -38,7 +38,7 @@ namespace NzbDrone.Core.Indexers
{
private static readonly SeedCriteriaSettingsValidator Validator = new SeedCriteriaSettingsValidator();
[FieldDefinition(0, Type = FieldType.Textbox, Label = "Seed Ratio", HelpText = "The ratio a torrent should reach before stopping, empty is download client's default", Advanced = true)]
[FieldDefinition(0, Type = FieldType.Textbox, Label = "Seed Ratio", HelpText = "The ratio a torrent should reach before stopping, empty is download client's default. Ratio should be at least 1.0 and follow the indexers rules")]
public double? SeedRatio { get; set; }
[FieldDefinition(1, Type = FieldType.Number, Label = "Seed Time", Unit = "minutes", HelpText = "The time a torrent should be seeded before stopping, empty is download client's default", Advanced = true)]

View File

@@ -30,7 +30,7 @@
"NoListRecommendations": "No s'han trobat elements de llista ni recomanacions; per començar, podeu afegir una pel·lícula nova, importar-ne algunes existents o afegir una llista.",
"NotAvailable": "No disponible",
"PreferAndUpgrade": "Marca preferit i actualitza",
"QualityProfileInUse": "No es pot suprimir un perfil de qualitat usat a una pel·lícula",
"QualityProfileInUse": "No es pot suprimir un perfil de qualitat usat a una pel·lícula, llista o col·lecció",
"RadarrTags": "Etiquetes de Radarr",
"Reddit": "Reddit",
"RSSSyncInterval": "Interval de sincronització RSS",
@@ -594,7 +594,7 @@
"IndexersSettingsSummary": "Indexadors i restriccions de llançament",
"IndexerStatusCheckAllClientMessage": "Tots els indexadors no estan disponibles a causa d'errors",
"IndexerStatusCheckSingleClientMessage": "Els indexadors no estan disponibles a causa d'errors: {0}",
"IndexerTagHelpText": "Utilitzeu aquest indexador només per a pel·lícules amb almenys una etiqueta coincident. Deixa en blanc per utilitzar-lo amb totes les pel·lícules.",
"IndexerTagHelpText": "Utilitzeu aquest indexador només per a pel·lícules amb almenys una etiqueta coincident. Deixeu-ho en blanc per utilitzar-ho amb totes les pel·lícules.",
"InstallLatest": "Instal·la l'últim",
"LanguageHelpText": "Idioma per a llançaments",
"Large": "Gran",
@@ -804,7 +804,7 @@
"RemotePathMappingCheckFilesLocalWrongOSPath": "El client de baixada local {0} ha informat de fitxers a {1}, però el camí {2} no és vàlid. Reviseu la configuració del vostre client de baixada.",
"RemotePathMappingCheckFilesWrongOSPath": "El client de baixada remota {0} ha informat de fitxers a {1}, però el camí {2} no és vàlid. Reviseu els mapes de camins remots i baixeu la configuració del client.",
"RemotePathMappingCheckFolderPermissions": "Radarr pot veure però no accedir al directori de descàrregues {0}. Error de permisos probable.",
"RemotePathMappingCheckGenericPermissions": "El client de baixada {0} col·loca les baixades a {1}, però Radarr no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
"RemotePathMappingCheckGenericPermissions": "El client de baixada {0} col·loca les baixades a {1}, però Radarr no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
"RemotePathMappingCheckImportFailed": "Radarr no ha pogut importar una pel·lícula. Comproveu els vostres registres per obtenir més informació.",
"RemotePathMappingCheckLocalFolderMissing": "El client de descàrrega remota {0} col·loca les baixades a {1}, però sembla que aquest directori no existeix. És probable que falti o sigui incorrecte l'assignació de camins remots.",
"RemotePathMappingCheckLocalWrongOSPath": "El client de baixada local {0} col·loca les baixades a {1}, però el camí {2} no és vàlid. Reviseu la configuració del vostre client de baixada.",
@@ -1143,5 +1143,7 @@
"ApiKey": "Clau API",
"AppDataDirectory": "Directori AppData",
"AppDataLocationHealthCheckMessage": "No es podrà actualitzar per evitar que s'eliminin AppData a l'actualització",
"Info": "Informació"
"Info": "Informació",
"ApplicationURL": "URL de l'aplicació",
"ApplicationUrlHelpText": "URL extern d'aquesta aplicació, inclòs http(s)://, port i URL base"
}

View File

@@ -339,7 +339,7 @@
"ChangeHasNotBeenSavedYet": "Änderung wurde noch nicht gespeichert",
"CheckForFinishedDownloadsInterval": "Intervall zum prüfen von fertigen Downloads",
"CleanLibraryLevel": "Mediathek aufräumen",
"ClickToChangeLanguage": "Sprache ändern...",
"ClickToChangeLanguage": "Sprache ändern ...",
"ClickToChangeQuality": "Hier klicken um die Qualität zu ändern",
"ClientPriority": "Priorität",
"CloneFormatTag": "Format Tag kopieren",
@@ -889,7 +889,7 @@
"RadarrUpdated": "Radarr wurde aktualisiert",
"RadarrCalendarFeed": "Radarr Kalender Feed",
"QueueIsEmpty": "Warteschlange ist leer",
"QualityProfileInUse": "Ein Qualitätsprofil mit zugeordneten Filmen kann nicht gelöscht werden",
"QualityProfileInUse": "Ein Qualitätsprofil mit zugeordneten Filmen, Listen oder Sammlungen kann nicht gelöscht werden",
"QualityOrLangCutoffHasNotBeenMet": "Qualität oder Sprache haben die Schwelle noch nicht erreicht",
"QualityLimitsHelpText": "Limitierungen werden automatisch an die Filmlänge angepasst.",
"QualitiesHelpText": "Qualitätsprofile oben sind mehr bevorzugt. Profile in einer Gruppe sind gleichgestellt. Nur ausgewählte werden gesucht",
@@ -1143,5 +1143,7 @@
"InstanceName": "Instanzname",
"InstanceNameHelpText": "Instanzname im Browser-Tab und für Syslog-Anwendungsname",
"RottenTomatoesRating": "Tomato Bewertung",
"TotalMovies": "Filme insgesamt"
"TotalMovies": "Filme insgesamt",
"ApplicationURL": "Anwendungs-URL",
"ApplicationUrlHelpText": "Die externe URL der Anwendung inklusive http(s)://, Port und URL-Basis"
}

View File

@@ -737,7 +737,7 @@
"QualityOrLangCutoffHasNotBeenMet": "Quality or Language cutoff has not been met",
"QualityProfile": "Quality Profile",
"QualityProfileDeleteConfirm": "Are you sure you want to delete the quality profile {0}",
"QualityProfileInUse": "Can't delete a quality profile that is attached to a movie",
"QualityProfileInUse": "Can't delete a quality profile that is attached to a movie, list, or collection",
"QualityProfiles": "Quality Profiles",
"QualitySettings": "Quality Settings",
"QualitySettingsSummary": "Quality sizes and naming",

View File

@@ -14,7 +14,7 @@
"RadarrSupportsAnyDownloadClient": "Radarr tukee kaikkien Newznab-yhteensopivien lataustyökalujen ohella myös monia muita alla listattuja torrent- ja Usenet-lataustyökaluja.",
"Timeleft": "Aikaa jäljellä",
"UpdateCheckStartupNotWritableMessage": "Päivitystä ei voi asentaa, koska käyttäjällä '{1}' ei ole kirjoitusoikeutta käynnistyskansioon '{0}'.",
"ApplyTagsHelpTexts4": " 'Korvaa' kaikki aiemmat tunnisteet tai poista kaikki tunnisteet jättämällä tyhjäksi",
"ApplyTagsHelpTexts4": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi.",
"UnableToLoadUISettings": "Käyttöliittymän asetuksien lataus epäonnistui.",
"NotAvailable": "Ei saatavilla",
"AddingTag": "Tunniste lisätään",
@@ -92,9 +92,9 @@
"DBMigration": "Tietokannan siirto",
"ApiKey": "API-avain",
"AcceptConfirmationModal": "Hyväksy vahvistus",
"ApplyTagsHelpTexts1": "Miten tunnisteita sovelletaan valittuihin elokuviin",
"ApplyTagsHelpTexts2": " 'Lisää' syötetyt tunnisteet aiempiin tunnisteisiin",
"ApplyTagsHelpTexts3": " 'Poista' ainoastaan syötetyt tunnisteet",
"ApplyTagsHelpTexts1": "Tunnistetoimenpiteiden selitykset:",
"ApplyTagsHelpTexts2": "- \"Lisää\" syötetyt tunnisteet aiempiin tunnisteisiin.",
"ApplyTagsHelpTexts3": "- \"Poista\" tyhjentää syötetyt tunnisteet.",
"AvailabilityDelay": "Saatavuusviive",
"AvailabilityDelayHelpText": "Aika ennen käytettävissä olevaa päivämäärää tai sen jälkeen elokuvan etsimiseen",
"BackupIntervalHelpText": "Prowlarrin tietokannan ja asetusten automaattisen varmuuskopioinnin suoritusaikaväli.",
@@ -160,16 +160,16 @@
"AddToDownloadQueue": "Lisää latausjonoon",
"AfterManualRefresh": "Manuaalisen päivityksen jälkeen",
"AllFiles": "Kaikki tiedostot",
"AllMoviesInPathHaveBeenImported": "Kaikki kansion '{0}' elokuvat on tuotu",
"AllResultsHiddenFilter": "Aktiivinen suodatin on piilottanut kaikki tulokset",
"AllMoviesInPathHaveBeenImported": "Kaikki kansion {0} elokuvat on tuotu",
"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.",
"AptUpdater": "Käytä APT:ta päivityksen asennukseen",
"AreYouSureYouWantToDeleteFormat": "Haluatko varmasti poistaa muotoilutagin '{0}'?",
"AreYouSureYouWantToDeleteThisImportListExclusion": "Haluatko varmasti poistaa poikkeussäännön?",
"AreYouSureYouWantToDeleteFormat": "Haluatko varmasti poistaa muotoilutunnisteen \"{0}\"?",
"AreYouSureYouWantToDeleteThisImportListExclusion": "Haluatko varmasti poistaa tämän poikkeussäännön?",
"AreYouSureYouWantToRemoveSelectedItemsFromQueue": "Haluatko varmasti poistaa jonosta {0} kohdetta?",
"ApplyTags": "Toimenpide tunnisteille",
"ApplyTags": "Tunnistetoimenpide",
"AuthBasic": "Perus (selaimen ponnahdus)",
"AuthenticationMethodHelpText": "Vaadi käyttäjätunnus ja salasana.",
"AuthForm": "Lomake (kirjautumissivu)",
@@ -253,7 +253,7 @@
"ProxyType": "Välityspalvelimen tyyppi",
"PtpOldSettingsCheckMessage": "Seuraavat PassThePopcorn-tietolähteet sisältävät vanhentuneita asetuksia, jotka olisi syytä päivittää: {0}",
"QualitiesHelpText": "Listalla ylempänä olevia laatuja painotetaan. Saman ryhmän laadut ovat tasaveroisia. Valitse vain haluamasi laadut.",
"QualityProfileInUse": "Elokuvaan liitettyä laatuprofiilia ei voi poistaa.",
"QualityProfileInUse": "Elokuvaan, listaan tai kokelmaan liitettyä laatuprofiilia ei voida poistaa.",
"QueueIsEmpty": "Jono on tyhjä",
"RadarrCalendarFeed": "Radarr-kalenterisyöte",
"RadarrUpdated": "Radarr Päivitetty",
@@ -397,7 +397,7 @@
"Path": "Sijainti",
"Paused": "Keskeytetty",
"Permissions": "Käyttöoikeudet",
"AllMoviesHiddenDueToFilter": "Käytössä oleva suodatin on piilottanut kaikki elokuvat.",
"AllMoviesHiddenDueToFilter": "Kaikki elokuvat on piilotettu aktiivisen suodattimen johdosta.",
"AllowHardcodedSubs": "Salli poltetut tekstitykset",
"PhysicalRelease": "Fyysinen julkaisu",
"Port": "Portti",
@@ -409,7 +409,7 @@
"ProtocolHelpText": "Valitse käytettävä (t) protokolla (t) ja mikä on suositeltava, kun valitset muuten yhtä suurten julkaisujen välillä",
"EditDelayProfile": "Muokkaa viiveprofiilia",
"ProxyBypassFilterHelpText": "Käytä erottimena ',' ja '*.' jokerimerkkinä aliverkkotunnuksille (esim. www.esimerkki.fi,*.esimerkki.fi)",
"AllowHardcodedSubsHelpText": "Havaitut poltetut tekstitykset ladataan automaattisesti",
"AllowHardcodedSubsHelpText": "Havaitut poltetut tekstitykset ladataan automaattisesti.",
"QualityProfile": "Laatuprofiili",
"QualityProfiles": "Laatuprofiilit",
"QuickImport": "Siirrä automaattisesti",
@@ -443,7 +443,7 @@
"TotalFileSize": "Tiedoston koko",
"TotalSpace": "Kokonaistila",
"UpgradeAllowedHelpText": "Jos käytöstä poistettuja laatuja ei päivitetä.",
"AreYouSureYouWantToDeleteThisDelayProfile": "Haluatko varmasti poistaa viiveprofiilin?",
"AreYouSureYouWantToDeleteThisDelayProfile": "Haluatko varmasti poistaa tämän viiveprofiilin?",
"Username": "Käyttäjätunnus",
"WaitingToImport": "Odottaa tuontia",
"DigitalRelease": "Digitaalinen julkaisu",
@@ -473,8 +473,8 @@
"ConnectionLost": "Yhteys on katkennut",
"Backup": "Varmuuskopio",
"ConnectionLostAutomaticMessage": "Radarr pyrkii muodostamaan yhteyden automaattisesti tai voit painaa alta \"Lataa uudelleen\".",
"AddNewMessage": "On helppoa lisätä uusi elokuva: ala vain kirjoittamaan haluamasi elokuvan nimeä.",
"AddNewTmdbIdMessage": "Voit tehdä hakuja myös elokuvan TMDb-tunnuksella (esim. 'tmdb:71663').",
"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.",
"Connections": "Kytkennät",
"ConnectSettings": "Kytkentöjen asetukset",
@@ -787,7 +787,7 @@
"RenameMovies": "Uudelleennimeä elokuvat",
"RenameMoviesHelpText": "Jos uudelleennimeäminen ei ole käytössä, käytetään olemassa olevaa tiedostonimeä.",
"Reorder": "Järjestä uudelleen",
"Replace": "Korvata",
"Replace": "Korvaa",
"ReplaceIllegalCharacters": "Korvaa kielletyt merkit",
"ReplaceIllegalCharactersHelpText": "Korvaa laittomat merkit. Jos ei käytössä, laittomat merkit poistetaan.",
"ReplaceWithSpaceDashSpace": "Korvus: välilyönti-väliviiva-välilyönti",
@@ -1116,7 +1116,7 @@
"RssSyncHelpText": "Aikaväli minuutteina. Arvo nolla kytkee toiminnon pois käytöstä ja lopettaen samalla automaattisen julkaisujen kaappauksen täysin.",
"InstanceName": "Instanssin nimi",
"InstanceNameHelpText": "Instanssin nimi välilehdellä ja järjestelmälokissa",
"AllCollectionsHiddenDueToFilter": "Käytössä oleva suodatin on piilottanut kaikki kokoelmat.",
"AllCollectionsHiddenDueToFilter": "Kaikki kokoelmat on piilotettu aktiivisen suodattimen johdosta.",
"Collections": "Kokoelmat",
"MonitorMovies": "Valvo elokuvia",
"NoCollections": "Kokoelmia ei löytynyt. Aloita lisäämällä uusi elokuva tai tuo joitakin olemassa olevia.",

View File

@@ -963,7 +963,7 @@
"RadarrUpdated": "A Radarr frissítve",
"RadarrCalendarFeed": "Radarr Naptár Feed",
"QueueIsEmpty": "A várakozási sor üres",
"QualityProfileInUse": "A minőség profil ami már filmhez van rendelve, nem törölhető",
"QualityProfileInUse": "A filmhez, listához vagy gyűjteményhez csatolt minőségi profil nem törölhető",
"QualityLimitsHelpText": "A korlátozások automatikusan beállítódnak a film hossza szerint.",
"QualitiesHelpText": "A nagyobb minőség a listában jobban preferált. Ugyenazon minőségek a csoportban egyenlőek. Csak a bejelölt minőségek a kívánt minőségek",
"Qualities": "Minőségek",

View File

@@ -0,0 +1 @@
{}

View File

@@ -1006,7 +1006,7 @@
"TorrentDelayTime": "Torrent-vertraging: {0}",
"TorrentsDisabled": "Torrents uitgeschakeld",
"Trace": "Spoor",
"Trailer": "Aanhangwagen",
"Trailer": "Trailer",
"Trakt": "Trakt",
"Trigger": "In gang zetten",
"UnableToImportCheckLogs": "Gedownload - Kan niet importeren: controleer de logboeken voor details",
@@ -1105,5 +1105,7 @@
"RssSyncHelpText": "Tussentijd in minuten. Schakel uit met 0 (dit stopt het automatisch ophalen van uitgaves)",
"NoCollections": "Geen films gevonden, om te beginnen, voeg een nieuwe film toe of importeer bestaande films.",
"Collections": "Collectie",
"MonitorMovies": "Bewaak Film"
"MonitorMovies": "Bewaak Film",
"ApplicationURL": "Applicatie URL",
"ApplicationUrlHelpText": "De externe URL van deze applicatie inclusief http(s)://,Port en URL base"
}

View File

@@ -289,7 +289,7 @@
"Presets": "Presety",
"ProxyType": "Typ proxy",
"PtpOldSettingsCheckMessage": "Następujące indeksatory PassThePopcorn mają przestarzałe ustawienia i należy je zaktualizować: {0}",
"QualityProfileInUse": "Nie można usunąć profilu jakości dołączonego do filmu",
"QualityProfileInUse": "Nie można usunąć profilu jakości przypisanego do filmu, listy bądź kolekcji",
"QueueIsEmpty": "Kolejka jest pusta",
"RadarrCalendarFeed": "Kanał kalendarza radarowego",
"RadarrUpdated": "Radarr zaktualizowany",
@@ -1060,7 +1060,7 @@
"SelectLanguages": "Wybierz język",
"AllCollectionsHiddenDueToFilter": "Wszystkie kolekcje są ukryte ze względu na zastosowany filtr.",
"Collections": "Kolekcje",
"RssSyncHelpText": "Odstęp w minutach. Ustaw na zero, aby wyłączyć (zatrzyma to wszystkie automatyczne przechwytywanie zwolnień)",
"RssSyncHelpText": "Odstęp w minutach. Ustaw na zero, aby wyłączyć (zatrzyma to wszystkie automatyczne przechwytywanie)",
"NoCollections": "Nie znaleziono żadnych filmów. Aby rozpocząć, musisz dodać nowy film lub zaimportować istniejące",
"MonitorMovies": "Monitoruj filmy",
"ClickToChangeReleaseGroup": "Kliknij, by zmienić grupę wydającą",
@@ -1078,7 +1078,7 @@
"ManualImportSetReleaseGroup": "Import ręczny - podaj nazwę grupy",
"Never": "Nigdy",
"RemotePathMappingCheckFilesWrongOSPath": "Zdalny klient pobierania {0} zgłosił pliki w {1}, lecz nie jest to poprawna ścieżka {2}. Zmień ustawienia zdalnego mapowania ścieżek i klienta pobierania.",
"RemotePathMappingCheckGenericPermissions": "Klient pobierania {0} umieszcza pobrane pliki w {1}, ale Radarr nie widzi tego folderu. Być może należy zmienić uprawnienia dostępu do folderu/ścieżkę dostępu.",
"RemotePathMappingCheckGenericPermissions": "Klient pobierania {0} umieszcza pobrane pliki w {1}, ale Radarr nie widzi tego folderu. Prawdopodobnie należy zmienić uprawnienia dostępu do folderu.",
"RemoveFailed": "Usuń nieudane",
"RemoveDownloadsAlert": "Ustawienia usuwania zostały przeniesione do ustawień poszczególnych klientów pobierania powyżej.",
"ShowCollectionDetails": "Pokaż stan kolekcji",
@@ -1143,5 +1143,7 @@
"CollectionShowDetailsHelpText": "Pokaż status i właściwości kolekcji",
"CollectionShowOverviewsHelpText": "Pokaż przegląd kolekcji",
"TotalMovies": "Filmów całkowicie",
"RottenTomatoesRating": "Ocena Tomato"
"RottenTomatoesRating": "Ocena Tomato",
"ApplicationUrlHelpText": "Zewnętrzny URL tej aplikacji zawiera http(s)://, port i adres URL",
"ApplicationURL": "Link do aplikacji"
}

View File

@@ -194,7 +194,7 @@
"IndexerStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a falhas: {0}",
"IndexerStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a falhas",
"IndexersSettingsSummary": "Restrições de versões e de indexadores",
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa ativada, o Radarr não fornecerá nenhum resultado das Pesquisas Interativas",
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa ativada, o Radarr não fornecerá nenhum resultado nas Pesquisas Interativas",
"IndexerSearchCheckNoAutomaticMessage": "Não há indexadores disponíveis com Pesquisa automática ativada, o Radarr não fornecerá nenhum resultado de pesquisa automática",
"IndexerSearchCheckNoAvailableIndexersMessage": "Todos os indexadores com funcionalidade de pesquisa estão indisponíveis devido a erros recentes do indexador",
"Indexers": "Indexadores",
@@ -378,7 +378,7 @@
"MaximumSizeHelpText": "Tamanho máximo de uma versão a capturar, em MB. Defina como zero para Ilimitado",
"MaximumSize": "Tamanho máximo",
"MaximumLimits": "Limites máximos",
"Logs": "Logs",
"Logs": "Registos",
"LogLevel": "Nível de log",
"Local": "Local",
"ListUpdateInterval": "Intervalo de atualização da lista",
@@ -650,7 +650,7 @@
"UpgradeUntilThisQualityIsMetOrExceeded": "Atualizar até que esta qualidade seja alcançada ou superada",
"UpgradeAllowedHelpText": "Se desativada, as qualidades não serão atualizadas",
"UpdateScriptPathHelpText": "Caminho para um script personalizado que toma um pacote de atualização extraído e lida com o restante do processo da atualização",
"UpdateMechanismHelpText": "Usar o atualizador do Radarr ou um script",
"UpdateMechanismHelpText": "Usar o atualizador interno do Radarr ou um script",
"UpdateAutomaticallyHelpText": "Transferir e instalar automaticamente as atualizações. Ainda é possível instalar a partir de Sistema: Atualizações",
"UnmonitoredHelpText": "Incluir filmes não monitorados no feed do iCal",
"TMDBId": "ID do TMDb",
@@ -684,12 +684,12 @@
"ShowGenres": "Mostrar géneros",
"ShowCertification": "Mostrar certificação",
"ShowAsAllDayEvents": "Mostrar como eventos de dia inteiro",
"ShouldMonitorHelpText": "Se ativada, os filmes desta lista serão adicionados e monitorados",
"ShouldMonitorHelpText": "Se filmes ou coleções adicionados por esta lista são adicionados como monitorados",
"SettingsRuntimeFormat": "Formato do tempo de execução",
"SetPermissionsLinuxHelpTextWarning": "Se você não conhece essa definição, não a altere.",
"SetPermissionsLinuxHelpText": "Deve-se executar chmod ao importar/renomear ficheiros?",
"SendAnonymousUsageData": "Enviar dados anônimos de uso",
"SearchOnAddHelpText": "Pesquisar os filmes desta lista ao adicionar ao Radarr",
"SearchOnAddHelpText": "Pesquisar os filmes desta lista ao adicionar à biblioteca",
"RSSSyncInterval": "Intervalo de sincronização RSS",
"RetryingDownloadInterp": "Nova tentativa de transferência {0} em {1}",
"RetentionHelpText": "Somente Usenet: defina como zero para retenção ilimitada",
@@ -706,11 +706,11 @@
"RadarrSupportsCustomConditionsAgainstTheReleasePropertiesBelow": "O Radar suporta condições personalizadas em relação às propriedades das versões abaixo.",
"RadarrSupportsAnyRSSMovieListsAsWellAsTheOneStatedBelow": "O Radarr suporta qualquer lista de filmes em RSS, bem como as demais listadas abaixo.",
"RadarrSupportsAnyDownloadClient": "O Radarr suporta muitos dos clientes de transferências torrent e usenet mais populares.",
"QualityProfileDeleteConfirm": "Tem a certeza que quer eliminar o perfil de qualidade {0}?",
"QualityProfileDeleteConfirm": "Tem a certeza que pretende eliminar o perfil de qualidade {0}",
"ProxyUsernameHelpText": "Apenas insira o utilizador e a palavra-passe caso seja requerido. Caso contrário, deixe em branco.",
"ProxyPasswordHelpText": "Apenas insira o utilizador e a palavra-passe caso seja requerido. Caso contrário, deixe em branco.",
"ProxyBypassFilterHelpText": "Utilizar \",\" como separador e \"*.\" como caráter universal para subdomínios",
"Proper": "Proper",
"Proper": "Correta",
"MovieInfoLanguage": "Idioma das informações do filme",
"MaintenanceRelease": "Versão de manutenção: correção de bugs e outras melhorias. Veja o Github Commit History para obter mais detalhes",
"TorrentDelay": "Atraso para torrents",
@@ -898,7 +898,7 @@
"PreferTorrent": "Preferir torrent",
"PreferUsenet": "Preferir Usenet",
"QualitiesHelpText": "Qualidades mais acima na lista têm maior prioridade, as que estão no mesmo grupo têm prioridade igual. Apenas qualidades verificadas são desejadas",
"QualityProfileInUse": "Não é possível eliminar um perfil de qualidade anexado a um filme",
"QualityProfileInUse": "Não é possível eliminar um perfil de qualidade quando associado a um filme, lista ou coleção",
"QueueIsEmpty": "A fila está vazia",
"RadarrCalendarFeed": "Feed de calendário do Radarr",
"ReleasedMsg": "Filme lançado",
@@ -996,7 +996,7 @@
"SelectMovie": "Selecionar filme",
"SelectQuality": "Selecionar qualidade",
"Small": "Pequeno",
"Socks4": "Socks4",
"Socks4": "SOCKS4",
"Socks5": "Socks5 (suporte a TOR)",
"SomeResultsHiddenFilter": "Alguns resultados estão ocultos pelo filtro aplicado",
"Sunday": "Domingo",
@@ -1050,7 +1050,7 @@
"RemotePathMappingCheckLocalWrongOSPath": "O cliente local {0} coloca as transferências em {1}, mas esse não é um caminho {2} válido. Revise as definições do cliente de transferências.",
"RemotePathMappingCheckLocalFolderMissing": "O cliente remoto {0} coloca as transferências em {1}, mas esse diretório parece não existir. O mapeamento de caminho remoto está provavelmente ausente ou incorreto.",
"RemotePathMappingCheckImportFailed": "O Radarr não conseguiu importar um filme. Verifique os ficheiros de log para obter mais informações.",
"RemotePathMappingCheckGenericPermissions": "O cliente {0} coloca as transferências em {1}, mas o Radarr não pode ver esse diretório. Pode ser necessário ajustar as permissões da pasta.",
"RemotePathMappingCheckGenericPermissions": "O cliente de download {0} coloca as transferências em {1}, mas o Radarr não consegue ver essa pasta. Pode ser necessário ajustar as permissões da pasta.",
"RemotePathMappingCheckFolderPermissions": "O Radarr pode ver, mas não pode acessar ao diretório de transferências {0}. Provável erro de permissões.",
"RemotePathMappingCheckFilesWrongOSPath": "O cliente de transferências remoto {0} relatou ficheiros em {1}, mas este não é um caminho {2} válido. Revise os mapeamentos de caminho remoto e as definições do cliente de transferências.",
"RemotePathMappingCheckFilesLocalWrongOSPath": "O cliente de transferências local {0} relatou ficheiros em {1}, mas este não é um caminho {2} válido. Revise as definições do cliente de transferências.",
@@ -1111,17 +1111,39 @@
"SetReleaseGroup": "Definir Grupo de Lançamento",
"Started": "Começado",
"Waiting": "À espera",
"Database": "base de dados",
"Database": "Base de dados",
"AllCollectionsHiddenDueToFilter": "Todos os filmes estão ocultos devido ao filtro aplicado.",
"Collections": "Coleção",
"RssSyncHelpText": "Intervalo em minutos. Defina como zero para desativar (isso parará toda a captura automática)",
"MonitorMovies": "Monitorar filme",
"NoCollections": "Nenhum filme encontrado. Para começar, adiciona um novo filme ou importa alguns já existentes.",
"MonitorMovies": "Monitorizar filmes",
"NoCollections": "Nenhuma coleção encontrada. Para iniciar, poderás adicionar um novo filme ou importar alguns já existentes",
"MovieAndCollection": "Filme e Coleção",
"CollectionsSelectedInterp": "{0} Coleções Selecionadas",
"EditCollection": "Editar Coleção",
"ChooseImportMode": "Selecionar Modo de Importação",
"InstanceName": "Nome da Instancia",
"CollectionOptions": "Opções de Coleção",
"CollectionShowDetailsHelpText": "Mostrar estado da coleção e proprieades"
"CollectionShowDetailsHelpText": "Mostrar estado da coleção e proprieades",
"RottenTomatoesRating": "Avaliação Tomato",
"SearchOnAddCollectionHelpText": "Procurar por filmes nesta coleção quando adicionado a uma biblioteca",
"OnMovieAdded": "Quando adicionado filme",
"OnMovieAddedHelpText": "Acção a aplicar quando o filme for adicionado",
"RefreshCollections": "Refrescar coleções",
"RefreshMonitoredIntervalHelpText": "Frequência de atualização da monitorização de downloads dos clientes de download, mínimo 1 minuto",
"ScrollMovies": "Rolar filmes",
"ShowOverview": "Mostrar visão global",
"ShowPosters": "Mostrar posteres",
"UnableToLoadCollections": "Impossível carregar coleções",
"TotalMovies": "Total de filmes",
"MonitorCollection": "Monitorizar coleção",
"MonitoredCollectionHelpText": "Monitorizar para automaticamente adicionar filmes desta coleção à biblioteca",
"InstanceNameHelpText": "Nome da instância na aba e nome da aplicação para Syslog",
"ApplicationURL": "URL da aplicação",
"ApplicationUrlHelpText": "O URL desta aplicação externa, incluindo http(s)://, porta e URL base",
"CollectionShowOverviewsHelpText": "Mostrar visão global da coleção",
"CollectionShowPostersHelpText": "Mostrar os posteres da coleção",
"MovieCollectionMissingRoot": "Falta a pasta base para a coleção de filmes: {0}",
"MovieCollectionMultipleMissingRoots": "Faltam várias pastas base para as coleções de filmes: {0}",
"MovieOnly": "Apenas filme",
"ShowCollectionDetails": "Mostrar estado da coleção"
}

View File

@@ -19,7 +19,7 @@
"IndexerStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a falhas",
"IndexersSettingsSummary": "Indexadores e restrições de lançamento",
"IndexerSettings": "Configurações do indexador",
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa Interativa habilitada, Radarr não irá prover quaisquer resultados para pesquisa interativa",
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a Pesquisa interativa ativada, o Radarr não fornecerá nenhum resultado de pesquisa interativa",
"IndexerSearchCheckNoAvailableIndexersMessage": "Todos os indexadores com capacidade de pesquisa estão temporariamente indisponíveis devido a erros recentes do indexador",
"IndexerSearchCheckNoAutomaticMessage": "Nenhum indexador disponível com a Pesquisa automática habilitada, o Radarr não fornecerá nenhum resultado de pesquisa automática",
"Indexers": "Indexadores",
@@ -846,7 +846,7 @@
"QualitySettingsSummary": "Tamanhos de qualidade e nomenclatura",
"QualitySettings": "Configurações de qualidade",
"QualityProfiles": "Perfis de qualidade",
"QualityProfileInUse": "Não é possível excluir um perfil de qualidade que está vinculado a um filme",
"QualityProfileInUse": "Não é possível excluir um perfil de qualidade anexado a um filme, lista ou coleção",
"QualityProfileDeleteConfirm": "Tem certeza que deseja excluir o perfil de qualidade {0}",
"QualityProfile": "Perfil de qualidade",
"QualityOrLangCutoffHasNotBeenMet": "Limite de qualidade ou de idioma não atingido",

View File

@@ -111,5 +111,64 @@
"AreYouSureYouWantToRemoveSelectedItemFromQueue": "Naozaj chcete odobrať {0} položku {1} z fronty?",
"ImportCustomFormat": "Pridať vlastný formát",
"DeleteRestrictionHelpText": "Naozaj chcete zmazať tento profil oneskorenia?",
"AllCollectionsHiddenDueToFilter": "Všetky filmy sú skryté kvôli použitému filtru."
"AllCollectionsHiddenDueToFilter": "Všetky filmy sú skryté kvôli použitému filtru.",
"CollectionShowOverviewsHelpText": "Zobraziť prehľady kolekcií",
"CollectionShowPostersHelpText": "Zobraziť plagáty kolekcií",
"CollectionOptions": "Možnosti kolekcie",
"ChmodGroup": "chmod Skupina",
"ColonReplacement": "Nahrádzanie bodkočiarky",
"CompletedDownloadHandling": "Zaobchádzanie s dokončenými sťahovaniami",
"Component": "Komponent",
"Conditions": "Podmienky",
"Connection": "Spojenie",
"ConnectionLost": "Spojenie prerušené",
"CertificateValidationHelpText": "Zmeňte, aké prísne je overenie certifikácie HTTPS. Nemeňte, pokiaľ nerozumiete rizikám.",
"Connect": "Pripojiť",
"AllowHardcodedSubs": "Povoliť pevne zakódované titulky",
"ApplicationUrlHelpText": "Externá URL tejto aplikácie vrátane http(s)://, portu a URL základu",
"CantFindMovie": "Prečo nemôžem nájsť môj film?",
"Cast": "Obsadenie",
"Certification": "Certifikácia",
"CertificationCountry": "Krajina certifikácie",
"ChangeHasNotBeenSavedYet": "Zmena ešte nebola uložená",
"ChmodGroupHelpTextWarning": "Toto funguje iba ak použivateľ bežiaci Radarr je vlastníkom súboru. Je to lepšie zaistite, že klient na sťahovanie používa tú istú skupinu ako Radarr.",
"ChmodFolderHelpTextWarning": "Toto funguje iba ak používateľ bežiaci Radarr je vlastníkom súboru. Je lepšie zaistiť, že klient na sťahovanie správne nastaví oprávnenia.",
"ChooseAnotherFolder": "Vybrať ďalší priečinok",
"ClickToChangeReleaseGroup": "Kliknutím zmeníte skupinu vydania",
"Collection": "Kolekcia",
"CollectionShowDetailsHelpText": "Zobraziť stav kolekcie a vlastnosti",
"ColonReplacementFormatHelpText": "Zmeňte spôsob, akým Radarr rieši nahradzovanie bodkočiarky",
"Columns": "Stĺpce",
"CheckDownloadClientForDetails": "ďalšie podrobnosti nájdete v klientovi na sťahovanie",
"Collections": "Kolekcie",
"CollectionsSelectedInterp": "{0} Označených kolekcií",
"AnnouncedMsg": "Film je ohlásený",
"AreYouSureYouWantToRemoveTheSelectedItemsFromBlocklist": "Naozaj si prajete odstrániť označené položky z blocklistu?",
"ChooseImportMode": "Zvoliť Import mód",
"ApplicationURL": "URL aplikácie",
"Auto": "Automaticky",
"BindAddress": "Viazať adresu",
"Blocklist": "Blocklist",
"Blocklisted": "V blockliste",
"BlocklistHelpText": "Zabráni Radarru, aby znova automaticky grabol toto vydanie",
"BlocklistRelease": "Blocklistnúť vydanie",
"CancelPendingTask": "Naozaj chcete zrušiť túto prebiehajúcu úlohu?",
"CancelProcessing": "Zrušiť spracovanie",
"CertificateValidation": "Overenie certifikátu",
"CertificationCountryHelpText": "Vyberte krajinu pre filmové certifikácie",
"CertValidationNoLocal": "Zakázané pre miestne adresy",
"ChangeFileDate": "Zmeniť dátum súboru",
"CheckForFinishedDownloadsInterval": "Interval kontroly dokončených sťahovaní",
"ChmodFolder": "chmod Priečinok",
"ChmodGroupHelpText": "Názov skupiny alebo gid. Použite gid pre vzdialené súborové systémy.",
"Clear": "Vymazať",
"ClickToChangeLanguage": "Kliknutím zmeníte jazyk",
"ClickToChangeQuality": "Kliknutím zmeníte kvalitu",
"ClientPriority": "Priorita klienta",
"CloneCustomFormat": "Klonovať vlastný formát",
"CloneFormatTag": "Klonovať značku formátu",
"CloneIndexer": "Klonovať indexer",
"CloneProfile": "Klonovať profil",
"Close": "Zatvoriť",
"CloseCurrentModal": "Zatvoriť aktuálne okno"
}

View File

@@ -79,7 +79,7 @@
"BranchUpdate": "更新Radarr的分支",
"Branch": "分支",
"Calendar": "日历",
"BindAddressHelpText": "192.168.50.189:7878",
"BindAddressHelpText": "有效的 IP4 地址或以'*'代表所有地址",
"BackupRetentionHelpText": "早于保留周期的自动备份将被自动清除",
"BackupNow": "马上备份",
"BackupIntervalHelpText": "自动备份时间间隔",
@@ -637,7 +637,7 @@
"InstallLatest": "安装最新版",
"IndexerStatusCheckSingleClientMessage": "搜刮器因错误不可用:{0}",
"IndexerStatusCheckAllClientMessage": "所有搜刮器都因错误不可用",
"IndexerSearchCheckNoInteractiveMessage": "没有任何索引器开启了手动搜索因此Radarr 不会提供任何手动搜索的结果",
"IndexerSearchCheckNoInteractiveMessage": "没有任何索引器勾选了手动搜索因此Radarr 不会提供任何手动搜索的结果",
"IndexerRssHealthCheckNoIndexers": "没有任何索引器开启了RSS同步Radarr不会自动抓取新发布的影片",
"IndexerLongTermStatusCheckSingleClientMessage": "由于故障6小时下列索引器都已不可用{0}",
"IndexerLongTermStatusCheckAllClientMessage": "由于故障超过6小时所有索引器均不可用",
@@ -775,7 +775,7 @@
"Updates": "更新",
"UnableToLoadRestrictions": "无法加载限制条件",
"UnmonitoredHelpText": "在iCal订阅中包含未监控的电影",
"QualityProfileInUse": "无法删除已指定给影片的质量配置",
"QualityProfileInUse": "无法删除已指定给影片、列表、收藏的质量配置",
"UnableToLoadQualities": "无法加载影片质量",
"UnmappedFolders": "未映射的文件夹",
"RecycleBinCleanupDaysHelpTextWarning": "回收站中的文件在超出选择的天数后会被自动清理",
@@ -1143,5 +1143,7 @@
"ShowPosters": "显示海报",
"OnMovieAdded": "电影添加时",
"OnMovieAddedHelpText": "电影添加时",
"TotalMovies": "电影总数"
"TotalMovies": "电影总数",
"ApplicationUrlHelpText": "此应用的外部URL包含 http(s)://端口和基本URL",
"ApplicationURL": "程序URL"
}

View File

@@ -7,8 +7,12 @@
"AddIndexer": "新增索引",
"AddingTag": "新增標籤",
"AddDownloadClient": "新增下載器",
"Added": "新增",
"Added": "新增",
"Age": "年齡",
"All": "全部",
"Analytics": "分析"
"Analytics": "分析",
"AddCustomFormat": "新增自定義格式",
"AddList": "新增列表",
"AddDelayProfile": "新增延時配置",
"AddedToDownloadQueue": "已添加到下載隊列"
}

View File

@@ -1,5 +1,3 @@
using System.Collections.Generic;
using System.Linq;
using NLog;
using NzbDrone.Core.CustomFormats;
using NzbDrone.Core.DecisionEngine;
@@ -11,19 +9,16 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Specifications
{
public class UpgradeSpecification : IImportDecisionEngineSpecification
{
private readonly ICustomFormatCalculationService _customFormatCalculationService;
private readonly Logger _logger;
public UpgradeSpecification(ICustomFormatCalculationService customFormatCalculationService, Logger logger)
{
_customFormatCalculationService = customFormatCalculationService;
_logger = logger;
}
public Decision IsSatisfiedBy(LocalMovie localMovie, DownloadClientItem downloadClientItem)
{
var qualityComparer = new QualityModelComparer(localMovie.Movie.Profile);
var preferredWordScore = GetCustomFormatScore(localMovie);
if (localMovie.Movie.MovieFileId > 0)
{
@@ -42,47 +37,9 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Specifications
_logger.Debug("This file isn't a quality upgrade for movie. Skipping {0}", localMovie.Path);
return Decision.Reject("Not a quality upgrade for existing movie file(s)");
}
movieFile.Movie = localMovie.Movie;
var customFormats = _customFormatCalculationService.ParseCustomFormat(movieFile);
var movieFileCustomFormatScore = localMovie.Movie.Profile.CalculateCustomFormatScore(customFormats);
if (qualityCompare == 0 && preferredWordScore < movieFileCustomFormatScore)
{
_logger.Debug("This file isn't a custom format upgrade for movie. Skipping {0}", localMovie.Path);
return Decision.Reject("Not a custom format upgrade for existing movie file(s)");
}
}
return Decision.Accept();
}
private int GetCustomFormatScore(LocalMovie localMovie)
{
var movie = localMovie.Movie;
var fileFormats = new List<CustomFormat>();
var folderFormats = new List<CustomFormat>();
var clientFormats = new List<CustomFormat>();
if (localMovie.FileMovieInfo != null)
{
fileFormats = _customFormatCalculationService.ParseCustomFormat(localMovie.FileMovieInfo, movie);
}
if (localMovie.FolderMovieInfo != null)
{
folderFormats = _customFormatCalculationService.ParseCustomFormat(localMovie.FolderMovieInfo, movie);
}
if (localMovie.DownloadClientMovieInfo != null)
{
clientFormats = _customFormatCalculationService.ParseCustomFormat(localMovie.DownloadClientMovieInfo, movie);
}
var formats = fileFormats.Union(folderFormats.Union(clientFormats)).ToList();
return movie.Profile.CalculateCustomFormatScore(formats);
}
}
}

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using NzbDrone.Core.ImportLists.ImportListMovies;
namespace NzbDrone.Core.Movies
{
@@ -11,15 +12,20 @@ namespace NzbDrone.Core.Movies
List<MovieMetadata> GetMoviesByCollectionTmdbId(int collectionId);
bool Upsert(MovieMetadata movie);
bool UpsertMany(List<MovieMetadata> movies);
void DeleteMany(List<MovieMetadata> movies);
}
public class MovieMetadataService : IMovieMetadataService
{
private readonly IMovieMetadataRepository _movieMetadataRepository;
private readonly IMovieService _movieService;
private readonly IImportListMovieService _importListMovieService;
public MovieMetadataService(IMovieMetadataRepository movieMetadataRepository)
public MovieMetadataService(IMovieMetadataRepository movieMetadataRepository, IMovieService movieService, IImportListMovieService importListMovieService)
{
_movieMetadataRepository = movieMetadataRepository;
_movieService = movieService;
_importListMovieService = importListMovieService;
}
public MovieMetadata FindByTmdbId(int tmdbId)
@@ -56,5 +62,16 @@ namespace NzbDrone.Core.Movies
{
return _movieMetadataRepository.UpsertMany(movies);
}
public void DeleteMany(List<MovieMetadata> movies)
{
foreach (var movie in movies)
{
if (!_importListMovieService.ExistsByMetadataId(movie.Id) && !_movieService.ExistsByMetadataId(movie.Id))
{
_movieMetadataRepository.Delete(movie);
}
}
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Dapper;
using NzbDrone.Core.Datastore;
@@ -30,6 +31,7 @@ namespace NzbDrone.Core.Movies
List<int> AllMovieTmdbIds();
Dictionary<int, List<int>> AllMovieTags();
List<int> GetRecommendations();
bool ExistsByMetadataId(int metadataId);
}
public class MovieRepository : BasicRepository<Movie>, IMovieRepository
@@ -311,7 +313,7 @@ namespace NzbDrone.Core.Movies
{
using (var conn = _database.OpenConnection())
{
var strSql = "SELECT \"Id\" AS \"Key\", \"Tags\" AS \"Value\" FROM \"Movies\"";
var strSql = "SELECT \"Id\" AS \"Key\", \"Tags\" AS \"Value\" FROM \"Movies\" WHERE \"Tags\" IS NOT NULL";
return conn.Query<KeyValuePair<int, List<int>>>(strSql).ToDictionary(x => x.Key, x => x.Value);
}
}
@@ -367,5 +369,12 @@ namespace NzbDrone.Core.Movies
return recommendations;
}
public bool ExistsByMetadataId(int metadataId)
{
var movies = Query(x => x.MovieMetadataId == metadataId);
return movies.Any();
}
}
}

View File

@@ -48,6 +48,7 @@ namespace NzbDrone.Core.Movies
List<int> GetRecommendedTmdbIds();
bool MoviePathExists(string folder);
void RemoveAddOptions(Movie movie);
bool ExistsByMetadataId(int metadataId);
}
public class MovieService : IMovieService, IHandle<MovieFileAddedEvent>,
@@ -389,6 +390,11 @@ namespace NzbDrone.Core.Movies
return _movieRepository.GetRecommendations();
}
public bool ExistsByMetadataId(int metadataId)
{
return _movieRepository.ExistsByMetadataId(metadataId);
}
public void Handle(MovieFileAddedEvent message)
{
var movie = message.MovieFile.Movie;

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NLog;
using NzbDrone.Common.Instrumentation.Extensions;
@@ -48,6 +49,7 @@ namespace NzbDrone.Core.Movies
_logger.ProgressInfo("Updating info for {0}", collection.Title);
MovieCollection collectionInfo;
List<MovieMetadata> movies;
try
{
@@ -68,8 +70,27 @@ namespace NzbDrone.Core.Movies
collection.LastInfoSync = DateTime.UtcNow;
collection.Images = collectionInfo.Images;
collectionInfo.Movies.ForEach(x => x.CollectionTmdbId = collection.TmdbId);
_movieMetadataService.UpsertMany(collectionInfo.Movies);
movies = collectionInfo.Movies;
movies.ForEach(x => x.CollectionTmdbId = collection.TmdbId);
var existingMetaForCollection = _movieMetadataService.GetMoviesByCollectionTmdbId(collection.TmdbId);
var updateList = new List<MovieMetadata>();
foreach (var remoteMovie in movies)
{
var existing = existingMetaForCollection.FirstOrDefault(e => e.TmdbId == remoteMovie.TmdbId);
if (existingMetaForCollection.Any(x => x.TmdbId == remoteMovie.TmdbId))
{
existingMetaForCollection.Remove(existing);
}
updateList.Add(remoteMovie);
}
_movieMetadataService.UpsertMany(updateList);
_movieMetadataService.DeleteMany(existingMetaForCollection);
_logger.Debug("Finished collection refresh for {0}", collection.Title);

View File

@@ -60,6 +60,8 @@ namespace NzbDrone.Core.Notifications.CustomScript
environmentVariables.Add("Radarr_Download_Client", message.DownloadClientName ?? string.Empty);
environmentVariables.Add("Radarr_Download_Client_Type", message.DownloadClientType ?? string.Empty);
environmentVariables.Add("Radarr_Download_Id", message.DownloadId ?? string.Empty);
environmentVariables.Add("Radarr_Release_CustomFormat", string.Join("|", remoteMovie.CustomFormats));
environmentVariables.Add("Radarr_Release_CustomFormatScore", remoteMovie.CustomFormatScore.ToString());
ExecuteScript(environmentVariables);
}

View File

@@ -147,11 +147,11 @@ namespace NzbDrone.Core.Parser
//Handle Exception Release Groups that don't follow -RlsGrp; Manual List
//groups whose releases end with RlsGroup) or RlsGroup]
private static readonly Regex ExceptionReleaseGroupRegex = new Regex(@"(?<releasegroup>(Joy|YIFY|YTS.MX|YTS.LT|FreetheFish|afm72|Anna|Bandi|Ghost|Kappa|MONOLITH|Qman|RZeroX|SAMPA|Silence|theincognito|t3nzin|Vyndros|HDO|DusIctv|DHD|SEV|CtrlHD|-ZR-|ADC|XZVN|RH|Kametsu|r00t|HONE)(?=\]|\)))", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex ExceptionReleaseGroupRegex = new Regex(@"(?<releasegroup>(Joy|YIFY|YTS.(MX|LT|AG)|FreetheFish|afm72|Anna|Bandi|Ghost|Kappa|MONOLITH|Qman|RZeroX|SAMPA|Silence|theincognito|t3nzin|Vyndros|HDO|DusIctv|DHD|SEV|CtrlHD|-ZR-|ADC|XZVN|RH|Kametsu|r00t|HONE)(?=\]|\)))", RegexOptions.IgnoreCase | RegexOptions.Compiled);
//Handle Exception Release Groups that don't follow -RlsGrp; Manual List
// name only...BE VERY CAREFUL WITH THIS, HIGH CHANCE OF FALSE POSITIVES
private static readonly Regex ExceptionReleaseGroupRegexExact = new Regex(@"(?<releasegroup>KRaLiMaRKo|E\.N\.D|D\-Z0N3|Koten_Gars|BluDragon|ZØNEHD|Tigole)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex ExceptionReleaseGroupRegexExact = new Regex(@"(?<releasegroup>KRaLiMaRKo|E\.N\.D|D\-Z0N3|Koten_Gars|BluDragon|ZØNEHD|Tigole|HQMUX)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex WordDelimiterRegex = new Regex(@"(\s|\.|,|_|-|=|'|\|)+", RegexOptions.Compiled);
private static readonly Regex SpecialCharRegex = new Regex(@"(\&|\:|\\|\/)+", RegexOptions.Compiled);
@@ -265,7 +265,15 @@ namespace NzbDrone.Core.Parser
if (simpleTitleReplaceString.IsNotNullOrWhiteSpace())
{
simpleReleaseTitle = simpleReleaseTitle.Replace(simpleTitleReplaceString, simpleTitleReplaceString.Contains(".") ? "A.Movie" : "A Movie");
if (match[0].Groups["title"].Success)
{
simpleReleaseTitle = simpleReleaseTitle.Remove(match[0].Groups["title"].Index, match[0].Groups["title"].Length)
.Insert(match[0].Groups["title"].Index, simpleTitleReplaceString.Contains(".") ? "A.Movie" : "A Movie");
}
else
{
simpleReleaseTitle = simpleReleaseTitle.Replace(simpleTitleReplaceString, simpleTitleReplaceString.Contains(".") ? "A.Movie" : "A Movie");
}
}
result.ReleaseGroup = ParseReleaseGroup(simpleReleaseTitle);

View File

@@ -0,0 +1,53 @@
using System.Linq;
using FluentAssertions;
using NUnit.Framework;
using Radarr.Api.V3.Tags;
namespace NzbDrone.Integration.Test.ApiTests
{
[TestFixture]
public class TagFixture : IntegrationTest
{
[Test]
[Order(0)]
public void should_not_have_tags_initially()
{
EnsureNoTag("test");
var items = Tags.All().Should().BeEmpty();
}
[Test]
[Order(2)]
public void should_be_able_to_add_tag()
{
var item = Tags.Post(new TagResource { Label = "test" });
item.Id.Should().NotBe(0);
}
[Test]
[Order(2)]
public void get_all_tags()
{
EnsureTag("test");
var clients = Tags.All();
clients.Should().NotBeNullOrEmpty();
}
[Test]
[Order(4)]
public void delete_tag()
{
var client = EnsureTag("test");
Tags.Get(client.Id).Should().NotBeNull();
Tags.Delete(client.Id);
Tags.All().Should().NotContain(v => v.Id == client.Id);
}
}
}

View File

@@ -41,7 +41,7 @@ namespace Radarr.Api.V3.Calendar
}
[HttpGet]
public List<MovieResource> GetCalendar(DateTime? start, DateTime? end, bool unmonitored = false, bool includeArtist = false)
public List<MovieResource> GetCalendar(DateTime? start, DateTime? end, bool unmonitored = false)
{
var startUse = start ?? DateTime.Today;
var endUse = end ?? DateTime.Today.AddDays(2);

View File

@@ -453,14 +453,6 @@
"type": "boolean",
"default": false
}
},
{
"name": "includeArtist",
"in": "query",
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {

View File

@@ -2221,7 +2221,7 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
classnames@2.3.1, classnames@^2.2.5:
classnames@2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
@@ -2756,6 +2756,13 @@ dom-serializer@^1.0.1:
domhandler "^4.2.0"
entities "^2.0.0"
dom7@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/dom7/-/dom7-4.0.4.tgz#8b68c5d8e5e2ed0fddb1cb93e433bc9060c8f3fb"
integrity sha512-DSSgBzQ4rJWQp1u6o+3FVwMNnT5bzQbMb+o31TjYYeRi05uAcpF8koxdfzeoe5ElzPmua7W7N28YJhF7iEKqIw==
dependencies:
ssr-window "^4.0.0"
domelementtype@^2.0.1, domelementtype@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
@@ -2820,11 +2827,6 @@ enhanced-resolve@^5.8.3:
graceful-fs "^4.2.4"
tapable "^2.2.0"
enquire.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814"
integrity sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==
entities@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
@@ -4294,13 +4296,6 @@ json-stringify-safe@^5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
json2mq@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==
dependencies:
string-convert "^0.2.0"
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@@ -5700,17 +5695,6 @@ react-side-effect@^1.0.2:
dependencies:
shallowequal "^1.0.1"
react-slick@0.28.1:
version "0.28.1"
resolved "https://registry.yarnpkg.com/react-slick/-/react-slick-0.28.1.tgz#12c18d991b59432df9c3757ba540a227b3fb85b9"
integrity sha512-JwRQXoWGJRbUTE7eZI1rGIHaXX/4YuwX6gn7ulfvUZ4vFDVQAA25HcsHSYaUiRCduTr6rskyIuyPMpuG6bbluw==
dependencies:
classnames "^2.2.5"
enquire.js "^2.1.6"
json2mq "^0.2.0"
lodash.debounce "^4.0.8"
resize-observer-polyfill "^1.5.0"
react-slider@1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/react-slider/-/react-slider-1.1.4.tgz#08b55f9be3e04cc10ae00cc3aedb6891dffe9bf3"
@@ -5988,7 +5972,7 @@ reselect@4.0.0:
resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7"
integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==
resize-observer-polyfill@^1.4.1, resize-observer-polyfill@^1.5.0:
resize-observer-polyfill@^1.4.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
@@ -6270,11 +6254,6 @@ slice-ansi@^4.0.0:
astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0"
slick-carousel@1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/slick-carousel/-/slick-carousel-1.8.1.tgz#a4bfb29014887bb66ce528b90bd0cda262cc8f8d"
integrity sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==
snapdragon-node@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -6387,6 +6366,11 @@ split-string@^3.0.1, split-string@^3.0.2:
dependencies:
extend-shallow "^3.0.0"
ssr-window@^4.0.0, ssr-window@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/ssr-window/-/ssr-window-4.0.2.tgz#dc6b3ee37be86ac0e3ddc60030f7b3bc9b8553be"
integrity sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==
static-extend@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -6403,11 +6387,6 @@ streamqueue@1.1.2:
isstream "^0.1.2"
readable-stream "^2.3.3"
string-convert@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==
string-template@~0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add"
@@ -6625,6 +6604,14 @@ svg-tags@^1.0.0:
resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==
swiper@8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/swiper/-/swiper-8.3.2.tgz#55a2637125b0514e58715aa51e040dc070203b47"
integrity sha512-8wsC7ORYvVSnLUoxs2+xmfLrDPNjBVQXMCFbOlqtHeON6wtu/blOyySDr8TCBCdse1bdcIbn7m8xJNxVFL8o4Q==
dependencies:
dom7 "^4.0.4"
ssr-window "^4.0.2"
table@^6.8.0:
version "6.8.0"
resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca"