mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2026-03-05 13:40:08 -05:00
Compare commits
84 Commits
v1.31.2.49
...
v1.36.3.50
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c3ee3f2320 | ||
|
|
e8c26d0fea | ||
|
|
9c936121e8 | ||
|
|
40d2e40d94 | ||
|
|
837f50c91c | ||
|
|
f0a0202e5c | ||
|
|
708c94bc56 | ||
|
|
5ed82eaf09 | ||
|
|
7d77ad68fd | ||
|
|
6725358db5 | ||
|
|
c410e23460 | ||
|
|
903b86b9a2 | ||
|
|
52a49e6a34 | ||
|
|
a7d99f351c | ||
|
|
b0212dd780 | ||
|
|
c8f5099423 | ||
|
|
5cc4c3f302 | ||
|
|
c0d2cb42e9 | ||
|
|
8081f13052 | ||
|
|
84b672e617 | ||
|
|
ed586c2d72 | ||
|
|
233176e321 | ||
|
|
d1e3390bae | ||
|
|
1cd60c7a40 | ||
|
|
c61cfcd312 | ||
|
|
5eb4d112ca | ||
|
|
70f2361d69 | ||
|
|
1d6babaa15 | ||
|
|
0427add8d0 | ||
|
|
010c2b836d | ||
|
|
22c4c1fc9a | ||
|
|
d5f6cc94b8 | ||
|
|
411e96ef2a | ||
|
|
2b0e52ebca | ||
|
|
c6fa26ca7b | ||
|
|
c85f170d41 | ||
|
|
48a658571b | ||
|
|
0b3a5c9bc4 | ||
|
|
356d07ef34 | ||
|
|
0322d70d63 | ||
|
|
362f3fe223 | ||
|
|
075fd24f96 | ||
|
|
4ba72ea7f3 | ||
|
|
46f73c51bb | ||
|
|
3287d45661 | ||
|
|
71937fa44c | ||
|
|
6aefd46cd4 | ||
|
|
c8370c9e00 | ||
|
|
6be4203b41 | ||
|
|
1339373e43 | ||
|
|
fc9dfb0cf7 | ||
|
|
48301055ea | ||
|
|
8a9518c9c1 | ||
|
|
de099c6770 | ||
|
|
07711da4e0 | ||
|
|
7cb70716d0 | ||
|
|
548dedad5c | ||
|
|
7008626358 | ||
|
|
f6f2a3b00d | ||
|
|
2b16d93095 | ||
|
|
e63ee13d23 | ||
|
|
5c5a163151 | ||
|
|
023eec0ec0 | ||
|
|
5bc5f0e6b8 | ||
|
|
5cbacc01eb | ||
|
|
f4f1b38324 | ||
|
|
758dddd4ad | ||
|
|
73ee695633 | ||
|
|
27fbd7ef7e | ||
|
|
5125f256fb | ||
|
|
b99e8d0d65 | ||
|
|
d20b2cc9c0 | ||
|
|
8a1787bdb6 | ||
|
|
a19b8ea997 | ||
|
|
10ea6cd753 | ||
|
|
2c1b464715 | ||
|
|
3263454041 | ||
|
|
015db4a916 | ||
|
|
49268f3b8d | ||
|
|
f02a6f3e2c | ||
|
|
46b6124b97 | ||
|
|
53bc97b3be | ||
|
|
b09d4927cc | ||
|
|
328f3c0423 |
@@ -78,6 +78,6 @@ Thank you to [<img src="https://resources.jetbrains.com/storage/products/company
|
||||
### License
|
||||
|
||||
- [GNU GPL v3](http://www.gnu.org/licenses/gpl.html)
|
||||
- Copyright 2010-2024
|
||||
- Copyright 2010-2025
|
||||
|
||||
Icon Credit - [Box vector created by freepik - www.freepik.com](https://www.freepik.com/vectors/box)
|
||||
|
||||
@@ -9,7 +9,7 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '1.31.2'
|
||||
majorVersion: '1.36.3'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
prowlarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
|
||||
@@ -19,7 +19,7 @@ variables:
|
||||
nodeVersion: '20.X'
|
||||
innoVersion: '6.2.2'
|
||||
windowsImage: 'windows-2022'
|
||||
linuxImage: 'ubuntu-20.04'
|
||||
linuxImage: 'ubuntu-22.04'
|
||||
macImage: 'macOS-13'
|
||||
|
||||
trigger:
|
||||
@@ -476,6 +476,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(testName) Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: ne(variables['testName'], 'freebsd-x64')
|
||||
|
||||
- job: Unit_Docker
|
||||
displayName: Unit Docker
|
||||
@@ -532,7 +533,8 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(testName) Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
|
||||
failTaskOnMissingResultsFile: true
|
||||
|
||||
- job: Unit_LinuxCore_Postgres14
|
||||
displayName: Unit Native LinuxCore with Postgres14 Database
|
||||
dependsOn: Prepare
|
||||
@@ -585,6 +587,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'LinuxCore Postgres14 Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
|
||||
- job: Unit_LinuxCore_Postgres15
|
||||
displayName: Unit Native LinuxCore with Postgres15 Database
|
||||
@@ -638,6 +641,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'LinuxCore Postgres15 Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
|
||||
- stage: Integration
|
||||
displayName: Integration
|
||||
@@ -720,6 +724,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(testName) Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
- job: Integration_LinuxCore_Postgres14
|
||||
@@ -782,6 +787,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'Integration LinuxCore Postgres14 Database Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
|
||||
@@ -845,6 +851,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'Integration LinuxCore Postgres15 Database Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
- job: Integration_FreeBSD
|
||||
@@ -891,6 +898,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'FreeBSD Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: false
|
||||
displayName: Publish Test Results
|
||||
|
||||
- job: Integration_Docker
|
||||
@@ -960,6 +968,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(testName) Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
- stage: Automation
|
||||
@@ -1041,6 +1050,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(osName) Automation Tests'
|
||||
failTaskOnFailedTests: $(failBuild)
|
||||
failTaskOnMissingResultsFile: $(failBuild)
|
||||
displayName: Publish Test Results
|
||||
|
||||
- stage: Analyze
|
||||
|
||||
2
docs.sh
2
docs.sh
@@ -38,7 +38,7 @@ dotnet clean $slnFile -c Release
|
||||
dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p:RuntimeIdentifiers=$RUNTIME -t:PublishAllRids
|
||||
|
||||
dotnet new tool-manifest
|
||||
dotnet tool install --version 6.6.2 Swashbuckle.AspNetCore.Cli
|
||||
dotnet tool install --version 7.3.2 Swashbuckle.AspNetCore.Cli
|
||||
|
||||
dotnet tool run swagger tofile --output ./src/Prowlarr.Api.V1/openapi.json "$outputFolder/$FRAMEWORK/$RUNTIME/$application" v1 &
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ module.exports = (env) => {
|
||||
loose: true,
|
||||
debug: false,
|
||||
useBuiltIns: 'entry',
|
||||
corejs: '3.39'
|
||||
corejs: '3.42'
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
composes: link;
|
||||
|
||||
padding: 10px 24px;
|
||||
padding-left: 35px;
|
||||
}
|
||||
|
||||
.isActiveLink {
|
||||
@@ -41,10 +42,6 @@
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.noIcon {
|
||||
margin-left: 25px;
|
||||
}
|
||||
|
||||
.status {
|
||||
float: right;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ interface CssExports {
|
||||
'isActiveParentLink': string;
|
||||
'item': string;
|
||||
'link': string;
|
||||
'noIcon': string;
|
||||
'status': string;
|
||||
}
|
||||
export const cssExports: CssExports;
|
||||
|
||||
@@ -63,9 +63,7 @@ class PageSidebarItem extends Component {
|
||||
</span>
|
||||
}
|
||||
|
||||
<span className={isChildItem ? styles.noIcon : null}>
|
||||
{typeof title === 'function' ? title() : title}
|
||||
</span>
|
||||
{typeof title === 'function' ? title() : title}
|
||||
|
||||
{
|
||||
!!StatusComponent &&
|
||||
|
||||
@@ -22,11 +22,14 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.label {
|
||||
padding: 0 3px;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
color: var(--toolbarLabelColor);
|
||||
font-size: $extraSmallFontSize;
|
||||
line-height: calc($extraSmallFontSize + 1px);
|
||||
|
||||
@@ -23,6 +23,7 @@ function PageToolbarButton(props) {
|
||||
isDisabled && styles.isDisabled
|
||||
)}
|
||||
isDisabled={isDisabled || isSpinning}
|
||||
title={label}
|
||||
{...otherProps}
|
||||
>
|
||||
<Icon
|
||||
|
||||
@@ -65,17 +65,30 @@ class VirtualTable extends Component {
|
||||
|
||||
if (this._grid && scrollTop !== undefined && scrollTop !== 0 && !scrollRestored) {
|
||||
this.setState({ scrollRestored: true });
|
||||
this._grid.scrollToPosition({ scrollTop });
|
||||
this._gridScrollToPosition({ scrollTop });
|
||||
}
|
||||
|
||||
if (scrollIndex != null && scrollIndex !== prevProps.scrollIndex) {
|
||||
this._grid.scrollToCell({
|
||||
this._gridScrollToCell({
|
||||
rowIndex: scrollIndex,
|
||||
columnIndex: 0
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_gridScrollToCell = ({ rowIndex = 0, columnIndex = 0 }) => {
|
||||
const scrollOffset = this._grid.getOffsetForCell({
|
||||
rowIndex,
|
||||
columnIndex
|
||||
});
|
||||
|
||||
this._gridScrollToPosition(scrollOffset);
|
||||
};
|
||||
|
||||
_gridScrollToPosition = ({ scrollTop = 0, scrollLeft = 0 }) => {
|
||||
this.props.scroller?.scrollTo({ top: scrollTop, left: scrollLeft });
|
||||
};
|
||||
|
||||
//
|
||||
// Control
|
||||
|
||||
|
||||
30
package.json
30
package.json
@@ -23,17 +23,17 @@
|
||||
"defaults"
|
||||
],
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "6.7.1",
|
||||
"@fortawesome/fontawesome-svg-core": "6.7.1",
|
||||
"@fortawesome/free-regular-svg-icons": "6.7.1",
|
||||
"@fortawesome/free-solid-svg-icons": "6.7.1",
|
||||
"@fortawesome/fontawesome-free": "6.7.2",
|
||||
"@fortawesome/fontawesome-svg-core": "6.7.2",
|
||||
"@fortawesome/free-regular-svg-icons": "6.7.2",
|
||||
"@fortawesome/free-solid-svg-icons": "6.7.2",
|
||||
"@fortawesome/react-fontawesome": "0.2.2",
|
||||
"@juggle/resize-observer": "3.4.0",
|
||||
"@microsoft/signalr": "6.0.25",
|
||||
"@sentry/browser": "7.119.1",
|
||||
"@sentry/integrations": "7.119.1",
|
||||
"@types/node": "20.16.11",
|
||||
"@types/react": "18.2.79",
|
||||
"@types/react": "18.3.21",
|
||||
"@types/react-dom": "18.2.25",
|
||||
"chart.js": "4.4.4",
|
||||
"classnames": "2.5.1",
|
||||
@@ -71,9 +71,9 @@
|
||||
"react-router-dom": "5.2.0",
|
||||
"react-tabs": "4.3.0",
|
||||
"react-text-truncate": "0.19.0",
|
||||
"react-use-measure": "2.1.1",
|
||||
"react-virtualized": "9.21.1",
|
||||
"react-window": "1.8.10",
|
||||
"react-use-measure": "2.1.7",
|
||||
"react-virtualized": "9.22.6",
|
||||
"react-window": "1.8.11",
|
||||
"redux": "4.2.1",
|
||||
"redux-actions": "2.6.5",
|
||||
"redux-batched-actions": "0.5.0",
|
||||
@@ -84,13 +84,13 @@
|
||||
"typescript": "5.7.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.26.0",
|
||||
"@babel/eslint-parser": "7.25.9",
|
||||
"@babel/plugin-proposal-export-default-from": "7.25.9",
|
||||
"@babel/core": "7.27.1",
|
||||
"@babel/eslint-parser": "7.27.1",
|
||||
"@babel/plugin-proposal-export-default-from": "7.27.1",
|
||||
"@babel/plugin-syntax-dynamic-import": "7.8.3",
|
||||
"@babel/preset-env": "7.26.0",
|
||||
"@babel/preset-react": "7.26.3",
|
||||
"@babel/preset-typescript": "7.26.0",
|
||||
"@babel/preset-env": "7.27.2",
|
||||
"@babel/preset-react": "7.27.1",
|
||||
"@babel/preset-typescript": "7.27.1",
|
||||
"@types/lodash": "4.14.195",
|
||||
"@types/react-document-title": "2.0.10",
|
||||
"@types/react-router-dom": "5.3.3",
|
||||
@@ -104,7 +104,7 @@
|
||||
"babel-loader": "9.2.1",
|
||||
"babel-plugin-inline-classnames": "2.0.1",
|
||||
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
|
||||
"core-js": "3.39.0",
|
||||
"core-js": "3.42.0",
|
||||
"css-loader": "6.7.3",
|
||||
"css-modules-typescript-loader": "4.0.1",
|
||||
"eslint": "8.57.1",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Selenium.Support" Version="4.1.0" />
|
||||
<PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="99.0.4844.5100" />
|
||||
<PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="134.0.6998.16500" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\NzbDrone.Test.Common\Prowlarr.Test.Common.csproj" />
|
||||
|
||||
@@ -16,6 +16,8 @@ namespace NzbDrone.Common.Test.Http
|
||||
[TestCase("Readarr/1.0.0.2300 (ubuntu 20.04)", "Readarr")]
|
||||
[TestCase("Sonarr/3.0.6.9999 (ubuntu 20.04)", "Sonarr")]
|
||||
[TestCase("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36", "Other")]
|
||||
[TestCase("appbrr", "appbrr")]
|
||||
[TestCase(" appbrr ", "appbrr")]
|
||||
public void should_parse_user_agent(string userAgent, string parsedAgent)
|
||||
{
|
||||
UserAgentParser.ParseSource(userAgent).Should().Be(parsedAgent);
|
||||
|
||||
@@ -167,7 +167,7 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||
}
|
||||
catch (OperationCanceledException ex) when (cts.IsCancellationRequested)
|
||||
{
|
||||
throw new WebException("Http request timed out", ex.InnerException, WebExceptionStatus.Timeout, null);
|
||||
throw new WebException("Http request timed out", ex, WebExceptionStatus.Timeout, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
using System;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace NzbDrone.Common.Http
|
||||
{
|
||||
public static class UserAgentParser
|
||||
{
|
||||
private static readonly Regex AppSourceRegex = new Regex(@"(?<agent>[a-z0-9]*)\/.*(?:\(.*\))?",
|
||||
private static readonly Regex AppSourceRegex = new (@"^(?<agent>[a-z0-9]+)(?:\/.+(?:\(.*\))?|$)",
|
||||
RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||
|
||||
public static string SimplifyUserAgent(string userAgent)
|
||||
{
|
||||
if (userAgent == null || userAgent.StartsWith("Mozilla/5.0"))
|
||||
if (userAgent == null || userAgent.StartsWith("Mozilla/5.0", StringComparison.Ordinal))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@@ -19,14 +20,9 @@ namespace NzbDrone.Common.Http
|
||||
|
||||
public static string ParseSource(string userAgent)
|
||||
{
|
||||
var match = AppSourceRegex.Match(SimplifyUserAgent(userAgent) ?? string.Empty);
|
||||
var match = AppSourceRegex.Match(SimplifyUserAgent(userAgent?.Trim()) ?? string.Empty);
|
||||
|
||||
if (match.Groups["agent"].Success)
|
||||
{
|
||||
return match.Groups["agent"].Value;
|
||||
}
|
||||
|
||||
return "Other";
|
||||
return match.Groups["agent"].Success ? match.Groups["agent"].Value : "Other";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,27 +4,27 @@ namespace NzbDrone.Common.Instrumentation.Extensions
|
||||
{
|
||||
public static class LoggerExtensions
|
||||
{
|
||||
[MessageTemplateFormatMethod("message")]
|
||||
public static void ProgressInfo(this Logger logger, string message, params object[] args)
|
||||
{
|
||||
var formattedMessage = string.Format(message, args);
|
||||
LogProgressMessage(logger, LogLevel.Info, formattedMessage);
|
||||
LogProgressMessage(logger, LogLevel.Info, message, args);
|
||||
}
|
||||
|
||||
[MessageTemplateFormatMethod("message")]
|
||||
public static void ProgressDebug(this Logger logger, string message, params object[] args)
|
||||
{
|
||||
var formattedMessage = string.Format(message, args);
|
||||
LogProgressMessage(logger, LogLevel.Debug, formattedMessage);
|
||||
LogProgressMessage(logger, LogLevel.Debug, message, args);
|
||||
}
|
||||
|
||||
[MessageTemplateFormatMethod("message")]
|
||||
public static void ProgressTrace(this Logger logger, string message, params object[] args)
|
||||
{
|
||||
var formattedMessage = string.Format(message, args);
|
||||
LogProgressMessage(logger, LogLevel.Trace, formattedMessage);
|
||||
LogProgressMessage(logger, LogLevel.Trace, message, args);
|
||||
}
|
||||
|
||||
private static void LogProgressMessage(Logger logger, LogLevel level, string message)
|
||||
private static void LogProgressMessage(Logger logger, LogLevel level, string message, object[] parameters)
|
||||
{
|
||||
var logEvent = new LogEventInfo(level, logger.Name, message);
|
||||
var logEvent = new LogEventInfo(level, logger.Name, null, message, parameters);
|
||||
logEvent.Properties.Add("Status", "");
|
||||
|
||||
logger.Log(logEvent);
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NLog;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Model;
|
||||
@@ -117,7 +118,9 @@ namespace NzbDrone.Common.Processes
|
||||
UseShellExecute = false,
|
||||
RedirectStandardError = true,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardInput = true
|
||||
RedirectStandardInput = true,
|
||||
StandardOutputEncoding = Encoding.UTF8,
|
||||
StandardErrorEncoding = Encoding.UTF8
|
||||
};
|
||||
|
||||
if (environmentVariables != null)
|
||||
|
||||
@@ -5,21 +5,21 @@
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DryIoc.dll" Version="5.4.3" />
|
||||
<PackageReference Include="IPAddressRange" Version="6.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
|
||||
<PackageReference Include="IPAddressRange" Version="6.2.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.3" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.0" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.15" />
|
||||
<PackageReference Include="Npgsql" Version="7.0.9" />
|
||||
<PackageReference Include="NLog" Version="5.4.0" />
|
||||
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.3" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" />
|
||||
<PackageReference Include="Npgsql" Version="7.0.10" />
|
||||
<PackageReference Include="Sentry" Version="4.0.2" />
|
||||
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.10" />
|
||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.11" />
|
||||
<PackageReference Include="System.ValueTuple" Version="4.6.1" />
|
||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.1" />
|
||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.2" />
|
||||
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
|
||||
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
|
||||
<PackageReference Include="System.ServiceProcess.ServiceController" Version="6.0.1" />
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.IndexerTests.FileListTests
|
||||
torrentInfo.InfoUrl.Should().Be("https://filelist.io/details.php?id=665873");
|
||||
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
|
||||
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2020-01-25 20:20:19"));
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2020-01-25 19:20:19"));
|
||||
torrentInfo.Size.Should().Be(8300512414);
|
||||
torrentInfo.InfoHash.Should().Be(null);
|
||||
torrentInfo.MagnetUrl.Should().Be(null);
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace NzbDrone.Core.Test.IndexerTests.PTPTests
|
||||
first.Guid.Should().Be("PassThePopcorn-452135");
|
||||
first.Title.Should().Be("The.Night.Of.S01.BluRay.AAC2.0.x264-DEPTH");
|
||||
first.DownloadProtocol.Should().Be(DownloadProtocol.Torrent);
|
||||
first.DownloadUrl.Should().Be("https://passthepopcorn.me/torrents.php?action=download&id=452135&authkey=00000000000000000000000000000000&torrent_pass=00000000000000000000000000000000");
|
||||
first.DownloadUrl.Should().Be("https://passthepopcorn.me/torrents.php?action=download&id=452135");
|
||||
first.InfoUrl.Should().Be("https://passthepopcorn.me/torrents.php?id=148131&torrentid=452135");
|
||||
|
||||
//first.PublishDate.Should().Be(DateTime.Parse("2017-04-17T12:13:42+0000").ToUniversalTime()); stupid timezones
|
||||
|
||||
@@ -121,9 +121,16 @@ namespace NzbDrone.Core.Applications.Lidarr
|
||||
{
|
||||
var indexerCapabilities = GetIndexerCapabilities(indexer);
|
||||
|
||||
if (!indexerCapabilities.MusicSearchAvailable && !indexerCapabilities.SearchAvailable)
|
||||
{
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing music or basic search support by the indexer", indexer.Name, indexer.Id);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Empty())
|
||||
{
|
||||
_logger.Trace("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -178,7 +185,8 @@ namespace NzbDrone.Core.Applications.Lidarr
|
||||
{
|
||||
_logger.Debug("Syncing remote indexer with current settings");
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
if ((indexerCapabilities.MusicSearchAvailable || indexerCapabilities.SearchAvailable) &&
|
||||
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
{
|
||||
// Retain user fields not-affiliated with Prowlarr
|
||||
lidarrIndexer.Fields.AddRange(remoteIndexer.Fields.Where(f => lidarrIndexer.Fields.All(s => s.Name != f.Name)));
|
||||
@@ -204,7 +212,8 @@ namespace NzbDrone.Core.Applications.Lidarr
|
||||
{
|
||||
_appIndexerMapService.Delete(indexerMapping.Id);
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
if ((indexerCapabilities.MusicSearchAvailable || indexerCapabilities.SearchAvailable) &&
|
||||
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
{
|
||||
_logger.Debug("Remote indexer not found, re-adding {0} [{1}] to Lidarr", indexer.Name, indexer.Id);
|
||||
lidarrIndexer.Id = 0;
|
||||
|
||||
@@ -121,9 +121,16 @@ namespace NzbDrone.Core.Applications.Radarr
|
||||
{
|
||||
var indexerCapabilities = GetIndexerCapabilities(indexer);
|
||||
|
||||
if (!indexerCapabilities.MovieSearchAvailable)
|
||||
{
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing movie search support by the indexer", indexer.Name, indexer.Id);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Empty())
|
||||
{
|
||||
_logger.Trace("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -176,7 +183,7 @@ namespace NzbDrone.Core.Applications.Radarr
|
||||
|
||||
if (!radarrIndexer.Equals(remoteIndexer) || forceSync)
|
||||
{
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
if (indexerCapabilities.MovieSearchAvailable && indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
{
|
||||
// Retain user fields not-affiliated with Prowlarr
|
||||
radarrIndexer.Fields.AddRange(remoteIndexer.Fields.Where(f => radarrIndexer.Fields.All(s => s.Name != f.Name)));
|
||||
@@ -202,7 +209,7 @@ namespace NzbDrone.Core.Applications.Radarr
|
||||
{
|
||||
_appIndexerMapService.Delete(indexerMapping.Id);
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
if (indexerCapabilities.MovieSearchAvailable && indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
{
|
||||
_logger.Debug("Remote indexer not found, re-adding {0} [{1}] to Radarr", indexer.Name, indexer.Id);
|
||||
radarrIndexer.Id = 0;
|
||||
|
||||
@@ -121,9 +121,16 @@ namespace NzbDrone.Core.Applications.Readarr
|
||||
{
|
||||
var indexerCapabilities = GetIndexerCapabilities(indexer);
|
||||
|
||||
if (!indexerCapabilities.BookSearchAvailable && !indexerCapabilities.SearchAvailable)
|
||||
{
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing book or basic search support by the indexer", indexer.Name, indexer.Id);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Empty())
|
||||
{
|
||||
_logger.Trace("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -178,7 +185,8 @@ namespace NzbDrone.Core.Applications.Readarr
|
||||
{
|
||||
_logger.Debug("Syncing remote indexer with current settings");
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
if ((indexerCapabilities.BookSearchAvailable || indexerCapabilities.SearchAvailable) &&
|
||||
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
{
|
||||
// Retain user fields not-affiliated with Prowlarr
|
||||
readarrIndexer.Fields.AddRange(remoteIndexer.Fields.Where(f => readarrIndexer.Fields.All(s => s.Name != f.Name)));
|
||||
@@ -204,7 +212,8 @@ namespace NzbDrone.Core.Applications.Readarr
|
||||
{
|
||||
_appIndexerMapService.Delete(indexerMapping.Id);
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
if ((indexerCapabilities.BookSearchAvailable || indexerCapabilities.SearchAvailable) &&
|
||||
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
{
|
||||
_logger.Debug("Remote indexer not found, re-adding {0} [{1}] to Readarr", indexer.Name, indexer.Id);
|
||||
readarrIndexer.Id = 0;
|
||||
|
||||
@@ -125,10 +125,17 @@ namespace NzbDrone.Core.Applications.Sonarr
|
||||
{
|
||||
var indexerCapabilities = GetIndexerCapabilities(indexer);
|
||||
|
||||
if (!indexerCapabilities.TvSearchAvailable)
|
||||
{
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing TV search support by the indexer", indexer.Name, indexer.Id);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Empty() &&
|
||||
indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Empty())
|
||||
{
|
||||
_logger.Trace("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -183,7 +190,7 @@ namespace NzbDrone.Core.Applications.Sonarr
|
||||
{
|
||||
_logger.Debug("Syncing remote indexer with current settings");
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any() || indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Any())
|
||||
if (indexerCapabilities.TvSearchAvailable && (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any() || indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Any()))
|
||||
{
|
||||
// Retain user fields not-affiliated with Prowlarr
|
||||
sonarrIndexer.Fields.AddRange(remoteIndexer.Fields.Where(f => sonarrIndexer.Fields.All(s => s.Name != f.Name)));
|
||||
@@ -210,7 +217,7 @@ namespace NzbDrone.Core.Applications.Sonarr
|
||||
{
|
||||
_appIndexerMapService.Delete(indexerMapping.Id);
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any() || indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Any())
|
||||
if (indexerCapabilities.TvSearchAvailable && (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any() || indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Any()))
|
||||
{
|
||||
_logger.Debug("Remote indexer not found, re-adding {0} [{1}] to Sonarr", indexer.Name, indexer.Id);
|
||||
sonarrIndexer.Id = 0;
|
||||
|
||||
@@ -274,7 +274,7 @@ namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
var instanceName = _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName);
|
||||
|
||||
if (instanceName.ContainsIgnoreCase(BuildInfo.AppName))
|
||||
if (instanceName.Contains(BuildInfo.AppName, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return instanceName;
|
||||
}
|
||||
|
||||
@@ -254,7 +254,7 @@ namespace NzbDrone.Core.Datastore
|
||||
|
||||
protected void Delete(SqlBuilder builder)
|
||||
{
|
||||
var sql = builder.AddDeleteTemplate(typeof(TModel)).LogQuery();
|
||||
var sql = builder.AddDeleteTemplate(typeof(TModel));
|
||||
|
||||
using (var conn = _database.OpenConnection())
|
||||
{
|
||||
|
||||
@@ -7,6 +7,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -25,8 +26,9 @@ namespace NzbDrone.Core.Download.Clients.Aria2
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.Blackhole
|
||||
@@ -20,8 +21,9 @@ namespace NzbDrone.Core.Download.Clients.Blackhole
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.Blackhole
|
||||
@@ -16,8 +17,9 @@ namespace NzbDrone.Core.Download.Clients.Blackhole
|
||||
public UsenetBlackhole(IHttpClient httpClient,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(httpClient, configService, diskProvider, logger)
|
||||
: base(httpClient, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -23,8 +24,9 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Download.Clients.DownloadStation.Proxies;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@@ -33,8 +34,9 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_dsInfoProxy = dsInfoProxy;
|
||||
_dsTaskProxySelector = dsTaskProxySelector;
|
||||
|
||||
@@ -9,6 +9,7 @@ using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Download.Clients.DownloadStation.Proxies;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@@ -31,8 +32,9 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation
|
||||
IHttpClient httpClient,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(httpClient, configService, diskProvider, logger)
|
||||
: base(httpClient, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_dsInfoProxy = dsInfoProxy;
|
||||
_dsTaskProxySelector = dsTaskProxySelector;
|
||||
|
||||
@@ -8,6 +8,7 @@ using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Download.Clients.Flood.Models;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
|
||||
@@ -22,8 +23,9 @@ namespace NzbDrone.Core.Download.Clients.Flood
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.FreeboxDownload
|
||||
@@ -19,8 +20,9 @@ namespace NzbDrone.Core.Download.Clients.FreeboxDownload
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -20,8 +21,9 @@ namespace NzbDrone.Core.Download.Clients.Hadouken
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -20,8 +21,9 @@ namespace NzbDrone.Core.Download.Clients.NzbVortex
|
||||
IHttpClient httpClient,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(httpClient, configService, diskProvider, logger)
|
||||
: base(httpClient, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Exceptions;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -18,15 +19,14 @@ namespace NzbDrone.Core.Download.Clients.Nzbget
|
||||
public class Nzbget : UsenetClientBase<NzbgetSettings>
|
||||
{
|
||||
private readonly INzbgetProxy _proxy;
|
||||
private readonly string[] _successStatus = { "SUCCESS", "NONE" };
|
||||
private readonly string[] _deleteFailedStatus = { "HEALTH", "DUPE", "SCAN", "COPY", "BAD" };
|
||||
|
||||
public Nzbget(INzbgetProxy proxy,
|
||||
IHttpClient httpClient,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(httpClient, configService, diskProvider, logger)
|
||||
: base(httpClient, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
@@ -17,8 +18,9 @@ namespace NzbDrone.Core.Download.Clients.Pneumatic
|
||||
{
|
||||
public Pneumatic(IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(configService, diskProvider, logger)
|
||||
: base(configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -30,8 +31,9 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ICacheManager cacheManager,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxySelector = proxySelector;
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Exceptions;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -22,8 +23,9 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
IHttpClient httpClient,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(httpClient, configService, diskProvider, logger)
|
||||
: base(httpClient, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ using NLog;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
{
|
||||
@@ -15,8 +16,9 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(proxy, torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(proxy, torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -20,8 +21,9 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Download.Clients.Transmission;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.Vuze
|
||||
{
|
||||
@@ -16,8 +17,9 @@ namespace NzbDrone.Core.Download.Clients.Vuze
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(proxy, torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(proxy, torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Download.Clients.rTorrent;
|
||||
using NzbDrone.Core.Exceptions;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@@ -27,8 +28,9 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
IRTorrentDirectoryValidator rTorrentDirectoryValidator,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
_rTorrentDirectoryValidator = rTorrentDirectoryValidator;
|
||||
|
||||
@@ -7,7 +7,9 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.UTorrent
|
||||
@@ -21,8 +23,9 @@ namespace NzbDrone.Core.Download.Clients.UTorrent
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, logger)
|
||||
: base(torrentFileInfoReader, seedConfigProvider, configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
@@ -72,6 +75,9 @@ namespace NzbDrone.Core.Download.Clients.UTorrent
|
||||
}
|
||||
|
||||
public override string Name => "uTorrent";
|
||||
|
||||
public override ProviderMessage Message => new (_localizationService.GetLocalizedString("DownloadClientUTorrentProviderMessage"), ProviderMessageType.Warning);
|
||||
|
||||
public override bool SupportsCategories => true;
|
||||
|
||||
protected override void Test(List<ValidationFailure> failures)
|
||||
|
||||
@@ -8,6 +8,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@@ -19,6 +20,7 @@ namespace NzbDrone.Core.Download
|
||||
{
|
||||
protected readonly IConfigService _configService;
|
||||
protected readonly IDiskProvider _diskProvider;
|
||||
protected readonly ILocalizationService _localizationService;
|
||||
protected readonly Logger _logger;
|
||||
|
||||
public abstract string Name { get; }
|
||||
@@ -40,10 +42,12 @@ namespace NzbDrone.Core.Download
|
||||
|
||||
protected DownloadClientBase(IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
{
|
||||
_configService = configService;
|
||||
_diskProvider = diskProvider;
|
||||
_localizationService = localizationService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Xml;
|
||||
@@ -15,39 +16,53 @@ namespace NzbDrone.Core.Download
|
||||
{
|
||||
public void Validate(byte[] fileContent)
|
||||
{
|
||||
var reader = new StreamReader(new MemoryStream(fileContent));
|
||||
|
||||
using (var xmlTextReader = XmlReader.Create(reader, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore, IgnoreComments = true }))
|
||||
try
|
||||
{
|
||||
var xDoc = XDocument.Load(xmlTextReader);
|
||||
var nzb = xDoc.Root;
|
||||
var reader = new StreamReader(new MemoryStream(fileContent));
|
||||
|
||||
if (nzb == null)
|
||||
using (var xmlTextReader = XmlReader.Create(reader,
|
||||
new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore, IgnoreComments = true }))
|
||||
{
|
||||
throw new InvalidNzbException("Invalid NZB: No Root element");
|
||||
}
|
||||
var xDoc = XDocument.Load(xmlTextReader);
|
||||
var nzb = xDoc.Root;
|
||||
|
||||
// nZEDb has an bug in their error reporting code spitting out invalid http status codes
|
||||
if (nzb.Name.LocalName.Equals("error") &&
|
||||
nzb.TryGetAttributeValue("code", out var code) &&
|
||||
nzb.TryGetAttributeValue("description", out var description))
|
||||
{
|
||||
throw new InvalidNzbException("Invalid NZB: Contains indexer error: {0} - {1}", code, description);
|
||||
}
|
||||
if (nzb == null)
|
||||
{
|
||||
throw new InvalidNzbException("Invalid NZB: No Root element");
|
||||
}
|
||||
|
||||
if (!nzb.Name.LocalName.Equals("nzb"))
|
||||
{
|
||||
throw new InvalidNzbException("Invalid NZB: Unexpected root element. Expected 'nzb' found '{0}'", nzb.Name.LocalName);
|
||||
}
|
||||
// nZEDb has a bug in their error reporting code spitting out invalid http status codes
|
||||
if (nzb.Name.LocalName.Equals("error") &&
|
||||
nzb.TryGetAttributeValue("code", out var code) &&
|
||||
nzb.TryGetAttributeValue("description", out var description))
|
||||
{
|
||||
throw new InvalidNzbException("Invalid NZB: Contains indexer error: {0} - {1}", code, description);
|
||||
}
|
||||
|
||||
var ns = nzb.Name.Namespace;
|
||||
var files = nzb.Elements(ns + "file").ToList();
|
||||
if (!nzb.Name.LocalName.Equals("nzb"))
|
||||
{
|
||||
throw new InvalidNzbException(
|
||||
"Invalid NZB: Unexpected root element. Expected 'nzb' found '{0}'", nzb.Name.LocalName);
|
||||
}
|
||||
|
||||
if (files.Empty())
|
||||
{
|
||||
throw new InvalidNzbException("Invalid NZB: No files");
|
||||
var ns = nzb.Name.Namespace;
|
||||
var files = nzb.Elements(ns + "file").ToList();
|
||||
|
||||
if (files.Empty())
|
||||
{
|
||||
throw new InvalidNzbException("Invalid NZB: No files");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InvalidNzbException)
|
||||
{
|
||||
// Throw the original exception
|
||||
throw;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidNzbException("Invalid NZB: Unable to parse", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Exceptions;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
@@ -24,8 +25,9 @@ namespace NzbDrone.Core.Download
|
||||
ISeedConfigProvider seedConfigProvider,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(configService, diskProvider, logger)
|
||||
: base(configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_torrentFileInfoReader = torrentFileInfoReader;
|
||||
_seedConfigProvider = seedConfigProvider;
|
||||
|
||||
@@ -5,6 +5,7 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
@@ -19,8 +20,9 @@ namespace NzbDrone.Core.Download
|
||||
protected UsenetClientBase(IHttpClient httpClient,
|
||||
IConfigService configService,
|
||||
IDiskProvider diskProvider,
|
||||
ILocalizationService localizationService,
|
||||
Logger logger)
|
||||
: base(configService, diskProvider, logger)
|
||||
: base(configService, diskProvider, localizationService, logger)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
}
|
||||
|
||||
@@ -224,7 +224,7 @@ namespace NzbDrone.Core.History
|
||||
|
||||
if (message.Release.PublishDate != DateTime.MinValue)
|
||||
{
|
||||
history.Data.Add("PublishedDate", message.Release.PublishDate.ToString("s") + "Z");
|
||||
history.Data.Add("PublishedDate", message.Release.PublishDate.ToUniversalTime().ToString("s") + "Z");
|
||||
}
|
||||
|
||||
_historyRepository.Insert(history);
|
||||
|
||||
@@ -232,7 +232,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
if (queryCats.Any() && searchCriteria is TvSearchCriteria { Season: > 0 })
|
||||
{
|
||||
// Avoid searching for specials if it's a non-zero season search
|
||||
queryCats.RemoveAll(cat => cat is "anime[tv_special]" or "anime[ova]" or "anime[ona]" or "anime[dvd_special]" or "anime[bd_special]");
|
||||
queryCats.RemoveAll(cat => cat is "anime[tv_special]" or "anime[ova]" or "anime[dvd_special]" or "anime[bd_special]");
|
||||
}
|
||||
|
||||
if (queryCats.Any())
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
_capabilities = capabilities;
|
||||
}
|
||||
|
||||
private IEnumerable<IndexerRequest> GetPagedRequests(SearchCriteriaBase searchCriteria, string term, string imdbId = null, int tmdbId = 0)
|
||||
private IEnumerable<IndexerRequest> GetPagedRequests(SearchCriteriaBase searchCriteria, string searchTerm, string imdbId = null, int tmdbId = 0)
|
||||
{
|
||||
var body = new Dictionary<string, object>
|
||||
{
|
||||
@@ -129,9 +129,9 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
body.Add("tmdb_id", tmdbId);
|
||||
}
|
||||
|
||||
if (term.IsNotNullOrWhiteSpace())
|
||||
if (searchTerm.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
body.Add("search", term);
|
||||
body.Add("search", searchTerm.Trim());
|
||||
}
|
||||
|
||||
var cats = _capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories);
|
||||
@@ -199,7 +199,16 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
pageableRequests.Add(GetPagedRequests(searchCriteria, searchCriteria.SanitizedTvSearchString, searchCriteria.FullImdbId));
|
||||
var searchTerm = searchCriteria.SanitizedTvSearchString;
|
||||
|
||||
if (searchCriteria.Season is > 0 &&
|
||||
searchCriteria.Episode.IsNotNullOrWhiteSpace() &&
|
||||
DateTime.TryParseExact($"{searchCriteria.Season} {searchCriteria.Episode}", "yyyy MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var showDate))
|
||||
{
|
||||
searchTerm = $"{searchCriteria.SanitizedSearchTerm} {showDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}";
|
||||
}
|
||||
|
||||
pageableRequests.Add(GetPagedRequests(searchCriteria, searchTerm, searchCriteria.FullImdbId));
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
@@ -246,6 +255,11 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerHttpResponse.StatusCode} code from indexer request");
|
||||
}
|
||||
|
||||
if (indexerHttpResponse.Headers.ContentType.Contains("text/html"))
|
||||
{
|
||||
throw new IndexerException(indexerResponse, $"Indexer responded with HTML content. {(indexerHttpResponse.Content.ContainsIgnoreCase("site maintenance") ? "Site is under maintenance." : "Site is likely blocked or unavailable.")}");
|
||||
}
|
||||
|
||||
if (!indexerHttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value))
|
||||
{
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response header {indexerHttpResponse.Headers.ContentType} from indexer request, expected {HttpAccept.Json.Value}");
|
||||
@@ -295,6 +309,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
UploadVolumeFactor = 1,
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 172800, // 120 hours
|
||||
Languages = row.Audios?.Split(",", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries).ToList() ?? new List<string>(),
|
||||
Subs = row.Subtitles?.Split(",", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries).ToList() ?? new List<string>(),
|
||||
};
|
||||
|
||||
// BHD can return crazy values for tmdb
|
||||
@@ -461,9 +477,13 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
[JsonPropertyName("times_completed")]
|
||||
public int Grabs { get; set; }
|
||||
|
||||
public int Seeders { get; set; }
|
||||
public int Leechers { get; set; }
|
||||
|
||||
public string Audios { get; set; }
|
||||
public string Subtitles { get; set; }
|
||||
|
||||
[JsonPropertyName("created_at")]
|
||||
public string CreatedAt { get; set; }
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using AngleSharp.Dom;
|
||||
using Microsoft.AspNetCore.WebUtilities;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
@@ -214,19 +215,21 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
if (selector.Selector != null)
|
||||
{
|
||||
var selectorSelector = ApplyGoTemplateText(selector.Selector.TrimStart('.'), variables);
|
||||
selectorSelector = JsonParseFieldSelector(parentObj, selectorSelector);
|
||||
var fieldSelector = JsonParseFieldSelector(parentObj, selectorSelector);
|
||||
|
||||
JToken selection = null;
|
||||
if (selectorSelector != null)
|
||||
if (fieldSelector != null)
|
||||
{
|
||||
selection = parentObj.SelectToken(selectorSelector);
|
||||
selection = parentObj.SelectToken(fieldSelector);
|
||||
}
|
||||
|
||||
if (selection == null)
|
||||
{
|
||||
if (required)
|
||||
{
|
||||
throw new Exception(string.Format("Selector \"{0}\" didn't match {1}", selectorSelector, parentObj.ToString()));
|
||||
var jsonContent = parentObj.ToString(Formatting.None);
|
||||
|
||||
throw new Exception($"Selector \"{selectorSelector}\" didn't match JSON content").WithData("JsonContent", jsonContent[..Math.Min(jsonContent.Length, 5 * 1024)]);
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -234,7 +237,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
|
||||
if (selection.Type is JTokenType.Array)
|
||||
{
|
||||
// turn this json array into a comma delimited string
|
||||
// turn this json array into a comma-delimited string
|
||||
var valueArray = selection.Value<JArray>();
|
||||
value = string.Join(",", valueArray);
|
||||
}
|
||||
@@ -259,7 +262,9 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
{
|
||||
if (required)
|
||||
{
|
||||
throw new Exception($"None of the case selectors \"{string.Join(",", selector.Case)}\" matched {parentObj}");
|
||||
var jsonContent = parentObj.ToString(Formatting.None);
|
||||
|
||||
throw new Exception($"None of the case selectors \"{string.Join(",", selector.Case)}\" matched JSON content").WithData("JsonContent", jsonContent[..Math.Min(jsonContent.Length, 5 * 1024)]);
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -738,7 +743,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
case "hexdump":
|
||||
// this is mainly for debugging invisible special char related issues
|
||||
var hexData = string.Join("", data.Select(c => c + "(" + ((int)c).ToString("X2") + ")"));
|
||||
_logger.Debug(string.Format("CardigannIndexer ({0}): strdump: {1}", _definition.Id, hexData));
|
||||
_logger.Debug("CardigannIndexer ({0}): strdump: {1}", _definition.Id, hexData);
|
||||
break;
|
||||
case "strdump":
|
||||
// for debugging
|
||||
@@ -914,7 +919,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
|
||||
break;
|
||||
default:
|
||||
_logger.Error(string.Format("CardigannIndexer ({0}): Unsupported selector: {1}", _definition.Id, rowSelector));
|
||||
_logger.Error("CardigannIndexer ({0}): Unsupported selector: {1}", _definition.Id, rowSelector);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Trace(ex, "Failed to parse JSON rows count.");
|
||||
_logger.Debug(ex, "Failed to parse JSON rows count.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,7 +226,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
{
|
||||
results = ApplyFilters(results, search.Preprocessingfilters, variables);
|
||||
searchResultDocument = searchResultParser.ParseDocument(results);
|
||||
_logger.Trace(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", _definition.Id, results));
|
||||
_logger.Trace("CardigannIndexer ({0}): result after preprocessingfilters: {1}", _definition.Id, results);
|
||||
}
|
||||
|
||||
var rowsSelector = ApplyGoTemplateText(search.Rows.Selector, variables);
|
||||
@@ -241,7 +241,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
{
|
||||
results = ApplyFilters(results, search.Preprocessingfilters, variables);
|
||||
searchResultDocument = searchResultParser.ParseDocument(results);
|
||||
_logger.Trace(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", _definition.Id, results));
|
||||
_logger.Trace("CardigannIndexer ({0}): result after preprocessingfilters: {1}", _definition.Id, results);
|
||||
}
|
||||
|
||||
var rowsSelector = ApplyGoTemplateText(search.Rows.Selector, variables);
|
||||
|
||||
@@ -77,7 +77,7 @@ public class FileListParser : IParseIndexerResponse
|
||||
InfoUrl = GetInfoUrl(id),
|
||||
Seeders = row.Seeders,
|
||||
Peers = row.Leechers + row.Seeders,
|
||||
PublishDate = DateTime.Parse(row.UploadDate + " +0200", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
|
||||
PublishDate = DateTime.Parse(row.UploadDate + " +0300", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
|
||||
Description = row.SmallDescription,
|
||||
Genres = row.SmallDescription.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries).ToList(),
|
||||
ImdbId = imdbId,
|
||||
|
||||
@@ -148,7 +148,8 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
SupportsSearch = SupportsSearch,
|
||||
SupportsRedirect = SupportsRedirect,
|
||||
SupportsPagination = SupportsPagination,
|
||||
Capabilities = caps
|
||||
Capabilities = caps,
|
||||
Redirect = true
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ public class NorBits : TorrentIndexerBase<NorBitsSettings>
|
||||
public override string[] IndexerUrls => new[] { "https://norbits.net/" };
|
||||
public override string Description => "NorBits is a Norwegian Private site for MOVIES / TV / GENERAL";
|
||||
public override string Language => "nb-NO";
|
||||
public override Encoding Encoding => Encoding.GetEncoding("iso-8859-1");
|
||||
public override Encoding Encoding => Encoding.UTF8;
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
||||
public override IndexerCapabilities Capabilities => SetCapabilities();
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
|
||||
@@ -36,7 +38,19 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
{
|
||||
return new PassThePopcornParser(Settings);
|
||||
return new PassThePopcornParser(Settings, Capabilities.Categories);
|
||||
}
|
||||
|
||||
protected override Task<HttpRequest> GetDownloadRequest(Uri link)
|
||||
{
|
||||
var requestBuilder = new HttpRequestBuilder(link.AbsoluteUri);
|
||||
|
||||
var request = requestBuilder
|
||||
.SetHeader("ApiUser", Settings.APIUser)
|
||||
.SetHeader("ApiKey", Settings.APIKey)
|
||||
.Build();
|
||||
|
||||
return Task.FromResult(request);
|
||||
}
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
@@ -45,10 +59,6 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
{
|
||||
LimitsDefault = PageSize,
|
||||
LimitsMax = PageSize,
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
{
|
||||
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep, TvSearchParam.ImdbId
|
||||
},
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q, MovieSearchParam.ImdbId
|
||||
|
||||
@@ -5,21 +5,20 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
public class PassThePopcornResponse
|
||||
{
|
||||
public string TotalResults { get; set; }
|
||||
public List<PassThePopcornMovie> Movies { get; set; }
|
||||
public IReadOnlyCollection<PassThePopcornMovie> Movies { get; set; }
|
||||
public string Page { get; set; }
|
||||
public string AuthKey { get; set; }
|
||||
public string PassKey { get; set; }
|
||||
}
|
||||
|
||||
public class PassThePopcornMovie
|
||||
{
|
||||
public string GroupId { get; set; }
|
||||
public string CategoryId { get; set; }
|
||||
public string Title { get; set; }
|
||||
public string Year { get; set; }
|
||||
public string Cover { get; set; }
|
||||
public List<string> Tags { get; set; }
|
||||
public IReadOnlyCollection<string> Tags { get; set; }
|
||||
public string ImdbId { get; set; }
|
||||
public List<PassThePopcornTorrent> Torrents { get; set; }
|
||||
public IReadOnlyCollection<PassThePopcornTorrent> Torrents { get; set; }
|
||||
}
|
||||
|
||||
public class PassThePopcornTorrent
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text.RegularExpressions;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
@@ -14,12 +14,12 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
public class PassThePopcornParser : IParseIndexerResponse
|
||||
{
|
||||
private readonly PassThePopcornSettings _settings;
|
||||
private readonly IndexerCapabilitiesCategories _categories;
|
||||
|
||||
private static Regex SeasonRegex => new (@"\bS\d{2,3}(E\d{2,3})?\b", RegexOptions.Compiled);
|
||||
|
||||
public PassThePopcornParser(PassThePopcornSettings settings)
|
||||
public PassThePopcornParser(PassThePopcornSettings settings, IndexerCapabilitiesCategories categories)
|
||||
{
|
||||
_settings = settings;
|
||||
_categories = categories;
|
||||
}
|
||||
|
||||
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
|
||||
@@ -59,7 +59,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
// skip non-freeleech results when freeleech only is set
|
||||
var downloadVolumeFactor = torrent.FreeleechType?.ToUpperInvariant() switch
|
||||
{
|
||||
"FREELEECH" => 0,
|
||||
"FREELEECH" or "NEUTRAL LEECH" => 0,
|
||||
"HALF LEECH" => 0.5,
|
||||
_ => 1
|
||||
};
|
||||
@@ -84,12 +84,11 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
flags.Add(PassThePopcornFlag.Approved);
|
||||
}
|
||||
|
||||
var categories = new List<IndexerCategory> { NewznabStandardCategory.Movies };
|
||||
|
||||
if (title != null && SeasonRegex.Match(title).Success)
|
||||
var uploadVolumeFactor = torrent.FreeleechType?.ToUpperInvariant() switch
|
||||
{
|
||||
categories.Add(NewznabStandardCategory.TV);
|
||||
}
|
||||
"NEUTRAL LEECH" => 0,
|
||||
_ => 1
|
||||
};
|
||||
|
||||
torrentInfos.Add(new TorrentInfo
|
||||
{
|
||||
@@ -97,8 +96,8 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
Title = title,
|
||||
Year = int.Parse(result.Year),
|
||||
InfoUrl = GetInfoUrl(result.GroupId, id),
|
||||
DownloadUrl = GetDownloadUrl(id, jsonResponse.AuthKey, jsonResponse.PassKey),
|
||||
Categories = categories,
|
||||
DownloadUrl = GetDownloadUrl(id),
|
||||
Categories = _categories.MapTrackerCatToNewznab(result.CategoryId),
|
||||
Size = long.Parse(torrent.Size),
|
||||
Grabs = int.Parse(torrent.Snatched),
|
||||
Seeders = int.Parse(torrent.Seeders),
|
||||
@@ -108,10 +107,10 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
Scene = torrent.Scene,
|
||||
IndexerFlags = flags,
|
||||
DownloadVolumeFactor = downloadVolumeFactor,
|
||||
UploadVolumeFactor = 1,
|
||||
UploadVolumeFactor = uploadVolumeFactor,
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 345600,
|
||||
Genres = result.Tags ?? new List<string>(),
|
||||
Genres = result.Tags?.ToList() ?? new List<string>(),
|
||||
PosterUrl = GetPosterUrl(result.Cover)
|
||||
});
|
||||
}
|
||||
@@ -122,14 +121,12 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
|
||||
private string GetDownloadUrl(int torrentId, string authKey, string passKey)
|
||||
private string GetDownloadUrl(int torrentId)
|
||||
{
|
||||
var url = new HttpUri(_settings.BaseUrl)
|
||||
.CombinePath("/torrents.php")
|
||||
.AddQueryParam("action", "download")
|
||||
.AddQueryParam("id", torrentId)
|
||||
.AddQueryParam("authkey", authKey)
|
||||
.AddQueryParam("torrent_pass", passKey);
|
||||
.AddQueryParam("id", torrentId);
|
||||
|
||||
return url.FullUri;
|
||||
}
|
||||
|
||||
@@ -78,6 +78,8 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
{ "action", "advanced" },
|
||||
{ "json", "noredirect" },
|
||||
{ "grouping", "0" },
|
||||
{ "order_by", "time" },
|
||||
{ "order_way", "desc" },
|
||||
{ "searchstr", searchTerm }
|
||||
};
|
||||
|
||||
|
||||
@@ -18,6 +18,12 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
{
|
||||
private static readonly PassThePopcornSettingsValidator Validator = new ();
|
||||
|
||||
public PassThePopcornSettings()
|
||||
{
|
||||
BaseSettings.QueryLimit = 150;
|
||||
BaseSettings.LimitsUnit = (int)IndexerLimitsUnit.Hour;
|
||||
}
|
||||
|
||||
[FieldDefinition(2, Label = "IndexerSettingsApiUser", HelpText = "IndexerPassThePopcornSettingsApiUserHelpText", Privacy = PrivacyLevel.UserName)]
|
||||
public string APIUser { get; set; }
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
"https://rutracker.net/",
|
||||
"https://rutracker.nl/"
|
||||
};
|
||||
public override string Description => "RuTracker.org is a Semi-Private Russian torrent site with a thriving file-sharing community";
|
||||
public override string Description => "RuTracker.org is a RUSSIAN Semi-Private site with a thriving file-sharing community";
|
||||
public override string Language => "ru-RU";
|
||||
public override Encoding Encoding => Encoding.GetEncoding("windows-1251");
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.SemiPrivate;
|
||||
@@ -144,6 +144,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
SupportsRawSearch = true
|
||||
};
|
||||
|
||||
// Note: When refreshing the categories use the tracker.php page and NOT the search.php page!
|
||||
caps.Categories.AddCategoryMapping(22, NewznabStandardCategory.Movies, "Наше кино");
|
||||
caps.Categories.AddCategoryMapping(941, NewznabStandardCategory.Movies, "|- Кино СССР");
|
||||
caps.Categories.AddCategoryMapping(1666, NewznabStandardCategory.Movies, "|- Детские отечественные фильмы");
|
||||
@@ -1751,7 +1752,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
title = Regex.Replace(title, @"(\([\p{IsCyrillic}\W]+)\s/\s(.+?)\)", string.Empty, RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
// Remove VO, MVO and DVO from titles
|
||||
var vo = new Regex(@".VO\s\(.+?\)");
|
||||
var vo = new Regex(@"((?:\dx\s)?(?:[A-Z])?VO\s\(.+?\))");
|
||||
title = vo.Replace(title, string.Empty);
|
||||
|
||||
// Remove R5 and (R5) from release names
|
||||
@@ -1759,7 +1760,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
title = r5.Replace(title, "$1");
|
||||
|
||||
// Remove Sub languages from release names
|
||||
title = Regex.Replace(title, @"(\bSub\b.*$|\b[\+]*Sub[\+]*\b)", string.Empty);
|
||||
title = Regex.Replace(title, @"(\bSub\b[^+]*\b|\b[\+]*Sub[\+]*\b)", string.Empty);
|
||||
}
|
||||
|
||||
// language fix: all rutracker releases contains russian track
|
||||
|
||||
@@ -20,7 +20,7 @@ public class SecretCinema : GazelleBase<GazelleSettings>
|
||||
{
|
||||
public override string Name => "Secret Cinema";
|
||||
public override string[] IndexerUrls => new[] { "https://secret-cinema.pw/" };
|
||||
public override string Description => "A tracker for rare movies.";
|
||||
public override string Description => "Secret Cinema is a Private ratioless site for rare MOVIES.";
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
||||
public override IndexerCapabilities Capabilities => SetCapabilities();
|
||||
|
||||
@@ -151,7 +151,7 @@ public class SecretCinemaParser : IParseIndexerResponse
|
||||
|
||||
if (torrent.RemasterTitle.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
release.Title += $" [{torrent.RemasterTitle.Trim()}]";
|
||||
release.Title += $" [{WebUtility.HtmlDecode(torrent.RemasterTitle).Trim()}]";
|
||||
}
|
||||
|
||||
// Replace media formats with standards
|
||||
|
||||
@@ -250,7 +250,11 @@ namespace NzbDrone.Core.Indexers
|
||||
{
|
||||
var response = await _httpClient.ExecuteProxiedAsync(request, Definition);
|
||||
|
||||
if (response.StatusCode is HttpStatusCode.MovedPermanently or HttpStatusCode.Found or HttpStatusCode.SeeOther)
|
||||
if (response.StatusCode is HttpStatusCode.MovedPermanently
|
||||
or HttpStatusCode.Found
|
||||
or HttpStatusCode.SeeOther
|
||||
or HttpStatusCode.TemporaryRedirect
|
||||
or HttpStatusCode.PermanentRedirect)
|
||||
{
|
||||
var autoRedirectChain = new List<string> { request.Url.ToString() };
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@ namespace NzbDrone.Core.Indexers
|
||||
}
|
||||
else if (settings.BaseUrl.IsNotNullOrWhiteSpace() && LegacyUrls.Contains(settings.BaseUrl))
|
||||
{
|
||||
_logger.Debug(string.Format("Changing legacy site link from {0} to {1}", settings.BaseUrl, defaultLink));
|
||||
_logger.Debug("Changing legacy site link from {0} to {1}", settings.BaseUrl, defaultLink);
|
||||
settings.BaseUrl = defaultLink;
|
||||
}
|
||||
|
||||
|
||||
@@ -387,5 +387,35 @@
|
||||
"Label": "Етикет",
|
||||
"Categories": "Категории",
|
||||
"Album": "албум",
|
||||
"Artist": "изпълнител"
|
||||
"Artist": "изпълнител",
|
||||
"AddConnection": "Добави връзка",
|
||||
"AddConnectionImplementation": "Добави връзка - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Добави клиент за изтегляне - {implementationName}",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Потвърдете новата парола",
|
||||
"Default": "Подразбиране",
|
||||
"Any": "Всеки",
|
||||
"ApplicationUrlHelpText": "Външният URL адрес на това приложение, включително http(s)://, порт и основно URL",
|
||||
"Database": "База данни",
|
||||
"Destination": "Дестинация",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Незадължително локация за изтеглянията, оставете празно, за да използвате локацията по подразбиране на Aria2",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "Добавя префикс към url адреса на deluge json, вижте {url}",
|
||||
"Directory": "Директория",
|
||||
"AddIndexerImplementation": "Добави индексатор - {implementationName}",
|
||||
"AuthenticationRequiredHelpText": "Променете за кои заявки се изисква удостоверяване. Не променяйте, освен ако не разбирате рисковете.",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Въведете нова парола",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Незадължителна споделена папка, в която да се поставят изтеглянията, оставете празно, за да използвате местоположението по подразбиране на Download Station",
|
||||
"DownloadClientFloodSettingsAdditionalTags": "Допълнителни тагове",
|
||||
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Добавя свойствата на медията като тагове. Напътствията са примери.",
|
||||
"DownloadClientFloodSettingsTagsHelpText": "Първоначални тагове на изтегляне. За да бъде разпознато едно изтегляне, то трябва да има всички начални тагове. По този начин се избягват конфликти с необвързани с приложение изтегляния.",
|
||||
"ApplicationURL": "URL адрес на приложението",
|
||||
"AuthenticationRequired": "Изисква се удостоверяване",
|
||||
"ApplyChanges": "Прилагане на промените",
|
||||
"ApiKeyValidationHealthCheckMessage": "Моля, актуализирайте API ключа си така, че да съдържа поне {length} знака. Можете да направите това чрез настройките или конфигурационния файл",
|
||||
"AppUpdated": "{appName} Актуализиран",
|
||||
"AppUpdatedVersion": "{appName} е актуализиранa до версия `{version}`, за да получите най-новите промени, ще трябва да презаредите {appName}",
|
||||
"Donate": "Дарете",
|
||||
"AddCustomFilter": "Добави персонализиран филтър",
|
||||
"AuthenticationMethod": "Метод за удостоверяване",
|
||||
"AuthenticationMethodHelpTextWarning": "Моля, изберете валиден метод за удостоверяване",
|
||||
"BlackholeFolderHelpText": "Папка, в която {appName} ще съхранява файла {extension}"
|
||||
}
|
||||
|
||||
@@ -362,11 +362,11 @@
|
||||
"Theme": "Tema",
|
||||
"Track": "Pista",
|
||||
"Year": "Any",
|
||||
"UpdateAvailableHealthCheckMessage": "Nova actualització disponible",
|
||||
"UpdateAvailableHealthCheckMessage": "Nova actualització disponible: {version}",
|
||||
"ConnectionLostReconnect": "{appName} intentarà connectar-se automàticament, o podeu fer clic a recarregar.",
|
||||
"ConnectionLostToBackend": "{appName} ha perdut la connexió amb el backend i s'haurà de tornar a carregar per a restaurar la funcionalitat.",
|
||||
"RecentChanges": "Canvis recents",
|
||||
"WhatsNew": "Novetats",
|
||||
"WhatsNew": "Què hi ha de nou?",
|
||||
"minutes": "minuts",
|
||||
"DeleteAppProfileMessageText": "Esteu segur que voleu suprimir el perfil de l'aplicació '{name}'?",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Notificacions no disponibles a causa d'errors: {notificationNames}",
|
||||
@@ -484,7 +484,7 @@
|
||||
"InfoUrl": "URL d'informació",
|
||||
"PublishedDate": "Data de publicació",
|
||||
"Redirected": "Redirecció",
|
||||
"AllSearchResultsHiddenByFilter": "Tots els resultats estan ocults pel filtre aplicat",
|
||||
"AllSearchResultsHiddenByFilter": "Tots els resultats estan ocults pel filtre aplicat.",
|
||||
"HealthMessagesInfoBox": "Podeu trobar més informació sobre la causa d'aquests missatges de comprovació de salut fent clic a l'enllaç wiki (icona del llibre) al final de la fila o consultant els vostres [registres]({link}). Si teniu problemes per a interpretar aquests missatges, podeu posar-vos en contacte amb el nostre suport als enllaços següents.",
|
||||
"AptUpdater": "Utilitzeu apt per a instal·lar l'actualització",
|
||||
"DockerUpdater": "actualitzeu el contenidor Docker per a rebre l'actualització",
|
||||
@@ -496,10 +496,316 @@
|
||||
"Logout": "Tanca la sessió",
|
||||
"NoEventsFound": "No s'han trobat esdeveniments",
|
||||
"RestartReloadNote": "Nota: {appName} es reiniciarà i tornarà a carregar automàticament la interfície d'usuari durant el procés de restauració.",
|
||||
"TheLogLevelDefault": "El nivell de registre per defecte és \"Info\" i es pot canviar a [Configuració general](/configuració/general)",
|
||||
"TheLogLevelDefault": "El nivell de registre per defecte és \"Debug\" i es pot canviar a [Configuració general](/settings/general)",
|
||||
"UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,",
|
||||
"WouldYouLikeToRestoreBackup": "Voleu restaurar la còpia de seguretat '{name}'?",
|
||||
"InstallLatest": "Instal·la l'últim",
|
||||
"CurrentlyInstalled": "Instal·lat actualment",
|
||||
"DownloadClientSettingsAddPaused": "Afegeix pausats"
|
||||
"DownloadClientSettingsAddPaused": "Afegeix pausats",
|
||||
"Install": "Instal·la",
|
||||
"DownloadClientFloodSettingsAdditionalTags": "Etiquetes addicionals",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "URL de l'API",
|
||||
"DownloadClientFreeboxSettingsAppId": "Identificador de l'aplicació",
|
||||
"PreviouslyInstalled": "Instal·lat anteriorment",
|
||||
"PasswordConfirmation": "Confirmeu la contrasenya",
|
||||
"IndexerHDBitsSettingsOriginsHelpText": "Si no s'especifica, s'utilitzen totes les opcions.",
|
||||
"MinimumSeeders": "Seeders mínims",
|
||||
"SeedRatio": "Ràtio de la llavor",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Si un torrent està bloquejat per un hash, pot ser que no es rebutgi correctament durant el RSS/Search per a alguns indexadors, habilitant això permetrà que es rebutgi després que s'agafi el torrent, però abans que s'enviï al client.",
|
||||
"SeedTime": "Temps de la llavor",
|
||||
"DefaultCategory": "Categoria predeterminada",
|
||||
"IndexerVipExpiredHealthCheckMessage": "Els beneficis VIP de l'indexador han caducat: {indexerNames}",
|
||||
"MassEditor": "Editor de masses",
|
||||
"NoSearchResultsFound": "No s'han trobat resultats de cerca, proveu de realitzar una nova cerca a continuació.",
|
||||
"NotSupported": "No suportat",
|
||||
"OverrideAndAddToDownloadClient": "Sobreescriu i afegeix al client de baixada",
|
||||
"PackSeedTime": "Temps de la llavor del paquet",
|
||||
"SearchAllIndexers": "Cerca tots els indexadors",
|
||||
"SearchIndexers": "Cerca indexadors",
|
||||
"SeedTimeHelpText": "L'hora en què un torrent s'ha de sembrar abans d'aturar-se, buit és el predeterminat de l'aplicació",
|
||||
"SettingsIndexerLogging": "Registre de l'indexador millorat",
|
||||
"TotalIndexerSuccessfulGrabs": "Indexador total correcte",
|
||||
"BookSearch": "Cerca de llibres",
|
||||
"ClearHistoryMessageText": "Esteu segur que voleu netejar tot l'historial de {appName}?",
|
||||
"IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
|
||||
"ClearHistory": "Neteja l'historial",
|
||||
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "Clau de l'API del lloc",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpText": "Clau API del lloc (trobada a Configuració => Accés)",
|
||||
"IndexerBeyondHDSettingsRssKeyHelpText": "Clau RSS del lloc (trobada a Seguretat => Clau RSS)",
|
||||
"ApplicationsLoadError": "No s'ha pogut carregar la llista d'aplicacions",
|
||||
"BookSearchTypes": "Tipus de cerca de llibres",
|
||||
"DownloadClientCategory": "Baixa la categoria del client",
|
||||
"IndexerAuth": "Autor de l'indexador",
|
||||
"IndexerBeyondHDSettingsLimitedOnly": "Només limitat",
|
||||
"IndexerBeyondHDSettingsRefundOnly": "Només el reemborsament",
|
||||
"IndexerBeyondHDSettingsRefundOnlyHelpText": "Cerca només el reemborsament",
|
||||
"IndexerBeyondHDSettingsRewindOnlyHelpText": "Cerca només el rebobinat",
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Tipus de cerca",
|
||||
"IndexerBeyondHDSettingsSearchTypesHelpText": "Seleccioneu els tipus de llançaments que us interessin. Si no hi ha cap seleccionat, s'utilitzen totes les opcions.",
|
||||
"IndexerDownloadClientHelpText": "Especifiqueu quin client de baixada s'utilitza per a les captures fetes a {appName} des d'aquest indexador",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Ha de tenir permisos d'usuari i torrents",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNames": "Cerca noms de grup",
|
||||
"IndexerHDBitsSettingsFreeleechOnlyHelpText": "Mostra només els llançaments de freeleech",
|
||||
"IndexerHDBitsSettingsUseFilenames": "Utilitza els noms de fitxer",
|
||||
"IndexerHDBitsSettingsUseFilenamesHelpText": "Marqueu aquesta opció si voleu utilitzar noms de fitxer torrent com a títols de llançament",
|
||||
"IndexerHDBitsSettingsUsernameHelpText": "Nom d'usuari del lloc",
|
||||
"IndexerHealthCheckNoIndexers": "No hi ha indexadors activats, {appName} no retornarà els resultats de la cerca",
|
||||
"IndexerHistoryLoadError": "Error en carregar l'historial de l'indexador",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgent": "Agent d'usuari de la galeta",
|
||||
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
|
||||
"IndexerInfo": "Informació de l'indexador",
|
||||
"IndexerNebulanceSettingsApiKeyHelpText": "Clau API de la Configuració de l'usuari . Claus Api. La clau ha de tenir permisos de llista i baixada",
|
||||
"IndexerNewznabSettingsVipExpirationHelpText": "Data d'entrada (yyyy-mm-dd) per a la caducitat VIP o en blanc, {appName} notificarà 1 setmana des de la caducitat de VIP",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Els indexadors no tenen definició i no funcionaran: {indexerNames}. Suprimiu i (o torneu a afegir) a {appName}.",
|
||||
"IndexerObsoleteCheckMessage": "Els indexadors estan obsolets o s'han actualitzat: {0}. Suprimiu i (o torneu a afegir) a {appName}",
|
||||
"IndexerPassThePopcornSettingsApiKeyHelpText": "Clau de l'API del lloc",
|
||||
"IndexerRss": "Indexador RSS",
|
||||
"IndexerSettingsGrabLimitHelpText": "El nombre màxim de captures especificat per la unitat respectiva que {appName} permetrà al lloc",
|
||||
"IndexerSettingsPackSeedTimeIndexerHelpText": "L'hora en què un paquet (temporada o discografia) s'ha de sembrar el torrent abans d'aturar-se, buit és el valor predeterminat de l'aplicació",
|
||||
"IndexerSettingsPreferMagnetUrl": "Prefereix l'URL de l'imant",
|
||||
"IndexerSettingsPreferMagnetUrlHelpText": "Quan està activat, aquest indexador preferirà l'ús d'URLs magnet per a les captures amb enllaços de reserva a torrents",
|
||||
"IndexerSettingsQueryLimitHelpText": "El nombre màxim de consultes especificat per la unitat respectiva que {appName} permetrà al lloc",
|
||||
"InitialFailure": "Fallada inicial",
|
||||
"NoIndexerCategories": "No s'ha trobat cap categoria per a aquest indexador",
|
||||
"RepeatSearch": "Cerca repetida",
|
||||
"SettingsLogRotateHelpText": "Nombre màxim de fitxers de registre a mantenir desats a la carpeta de registres",
|
||||
"SyncProfile": "Perfil de sincronització",
|
||||
"TotalUserAgentGrabs": "Total d'agents d'usuari",
|
||||
"UnableToLoadAppProfiles": "No s'han pogut carregar els perfils de l'aplicació",
|
||||
"VipExpiration": "Caducitat VIP",
|
||||
"IndexerOrpheusSettingsApiKeyHelpText": "Clau API del lloc (trobada a Configuració => Accés)",
|
||||
"IndexerRedactedSettingsApiKeyHelpText": "Clau API del lloc (trobada a Configuració => Accés)",
|
||||
"ProwlarrSupportsAnyIndexer": "{appName} admet molts indexadors, a més de qualsevol indexador que utilitzi l'estàndard Newznab/Torznab utilitzant 'Generic Newznab' (per usenet) o 'Generic Torznab' (per torrents). Cerca i selecciona el teu indexador des de sota.",
|
||||
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "Categoria alternativa predeterminada si no hi ha cap categoria assignada per a un llançament. Afegir una categoria específica a {appName} evita conflictes amb baixades no relacionades amb {appName}. L'ús d'una categoria és opcional, però molt recomanable.",
|
||||
"AppProfileSelectHelpText": "Els perfils d'aplicació s'utilitzen per controlar RSS, la cerca automàtica i la configuració de cerca interactiva en sincronitzar aplicacions",
|
||||
"AudioSearch": "Cerca d'àudio",
|
||||
"IndexerSettingsAppsMinimumSeeders": "Aplicacions de cercadors mínims",
|
||||
"DeleteApplication": "Suprimeix l'aplicació",
|
||||
"DownloadClientSettingsPriorityItemHelpText": "Prioritat a usar en capturar elements",
|
||||
"DownloadClientSettingsDefaultCategoryHelpText": "Categoria alternativa predeterminada si no hi ha cap categoria assignada per a un llançament. Afegir una categoria específica a {appName} evita conflictes amb baixades no relacionades amb {appName}. L'ús d'una categoria és opcional, però molt recomanable.",
|
||||
"EditCategory": "Edita la categoria",
|
||||
"IndexerQuery": "Consulta de l'indexador",
|
||||
"IndexerSettingsBaseUrl": "Url base",
|
||||
"IndexerSettingsCookieHelpText": "Cookie del lloc",
|
||||
"IndexerSettingsLimitsUnitHelpText": "La unitat de temps per comptar els límits per indexador",
|
||||
"IndexerSettingsPackSeedTime": "Temps de la llavor del paquet",
|
||||
"IndexerSite": "Lloc indexador",
|
||||
"IndexerTagsHelpTextWarning": "Les etiquetes s'han d'utilitzar amb precaució, poden tenir efectes no desitjats. Un indexador amb una etiqueta només sincronitzarà amb aplicacions amb la mateixa etiqueta.",
|
||||
"IndexerSettingsSummary": "Configura diversos paràmetres globals de l'indexador.",
|
||||
"ManageApplications": "Gestiona les aplicacions",
|
||||
"PackSeedTimeHelpText": "L'hora en què un paquet (temporada o discografia) s'ha de sembrar el torrent abans d'aturar-se, buit és el valor predeterminat de l'aplicació",
|
||||
"PreferMagnetUrl": "Prefereix l'URL de l'imant",
|
||||
"PreferMagnetUrlHelpText": "Quan està activat, aquest indexador preferirà l'ús d'URLs magnet per a les captures amb enllaços de reserva a torrents",
|
||||
"ProwlarrDownloadClientsInAppOnlyAlert": "Els clients de baixada només són per a les cerques a l'aplicació {appName} i no sincronitzen amb les aplicacions. No hi ha plans per afegir aquesta funcionalitat.",
|
||||
"IndexerBeyondHDSettingsRewindOnly": "Només rebobina",
|
||||
"ProxyValidationUnableToConnect": "No s'ha pogut connectar al servidor intermediari: {exceptionMessage}. Comprova els detalls del registre que envolta aquest error",
|
||||
"QueryOptions": "Opcions de la consulta",
|
||||
"TestAllApps": "Prova totes les aplicacions",
|
||||
"TotalHostQueries": "Total de consultes de l'amfitrió",
|
||||
"AverageGrabs": "Mitjana d'herba",
|
||||
"AverageQueries": "Mitjana de consultes",
|
||||
"FilterPlaceHolder": "Cerca indexadors",
|
||||
"IndexerBeyondHDSettingsLimitedOnlyHelpText": "Cerca només freeleech (Limited UL)",
|
||||
"IndexerBeyondHDSettingsApiKeyHelpText": "Clau API del lloc (trobada a Seguretat => Clau API)",
|
||||
"IndexerSettingsVipExpiration": "Caducitat VIP",
|
||||
"IndexerVipExpiringHealthCheckMessage": "Els beneficis VIP de l'indexador expiraran aviat: {indexerNames}",
|
||||
"LastFailure": "Darrera fallada",
|
||||
"MovieSearch": "Cerca de pel·lícules",
|
||||
"MovieSearchTypes": "Tipus de cerca de pel·lícules",
|
||||
"MusicSearchTypes": "Tipus de cerca de música",
|
||||
"QueryType": "Tipus de consulta",
|
||||
"RssQueries": "Consultes RSS",
|
||||
"SyncLevelFull": "Sincronització completa: mantindrà els indexadors d'aquesta aplicació completament sincronitzats. Els canvis fets als indexadors a {appName} se sincronitzen amb aquesta aplicació. Qualsevol canvi fet a indexadors remotament dins d'aquesta aplicació serà anul·lat per {appName} en la següent sincronització.",
|
||||
"TotalHostGrabs": "Total d'amfitrions",
|
||||
"TotalQueries": "Total de consultes",
|
||||
"NoApplicationsFound": "No s'ha trobat cap aplicació",
|
||||
"SyncProfiles": "Sincronitza els perfils",
|
||||
"TorznabUrl": "Url Torznab",
|
||||
"TvSearch": "Cerca de TV",
|
||||
"DeleteIndexerProxy": "Suprimeix el servidor intermediari de l'indexador",
|
||||
"DisabledUntil": "Desactivat fins",
|
||||
"GrabTitle": "Captura el títol",
|
||||
"SettingsIndexerLoggingHelpText": "Registra dades addicionals de l'indexador",
|
||||
"SyncLevel": "Nivell de sincronització",
|
||||
"AdvancedSettingsHiddenClickToShow": "Configuració avançada oculta, feu clic per mostrar",
|
||||
"AdvancedSettingsShownClickToHide": "Configuració avançada mostrada, feu clic per amagar",
|
||||
"AppsMinimumSeeders": "Aplicacions de cercadors mínims",
|
||||
"AppsMinimumSeedersHelpText": "«Mínims filtradors requerits per les Aplicacions perquè l'indexador s'agafi",
|
||||
"CountIndexersAvailable": "{count} indexador(s) disponible",
|
||||
"HistoryCleanup": "Neteja de l'historial",
|
||||
"HistoryDetails": "Detalls de l'historial",
|
||||
"SettingsFilterSentryEventsHelpText": "Filtra els esdeveniments d'error d'usuari coneguts perquè s'enviïn com a Analytics",
|
||||
"MappedCategories": "Categories assignades",
|
||||
"AppSettingsSummary": "Aplicacions i paràmetres per configurar com {appName} interactua amb els vostres programes PVR",
|
||||
"ConnectSettingsSummary": "Notificacions i scripts personalitzats",
|
||||
"DeleteClientCategory": "Suprimeix la categoria del client de baixada",
|
||||
"FullSync": "Sincronització completa",
|
||||
"IndexerAlreadySetup": "Almenys una instància de l'indexador ja està configurada",
|
||||
"RawSearchSupported": "S'admet la cerca RAW",
|
||||
"RssFeed": "Canal RSS",
|
||||
"SearchTypes": "Tipus de cerca",
|
||||
"SeedRatioHelpText": "La relació a la qual ha d'arribar un torrent abans d'aturar-se, buida és la predeterminada de l'aplicació",
|
||||
"SemiPrivate": "Semi-Privada",
|
||||
"TotalIndexerQueries": "Total de consultes de l'indexador",
|
||||
"TotalUserAgentQueries": "Total de consultes d'agents d'usuari",
|
||||
"GoToApplication": "Ves a l'aplicació",
|
||||
"Url": "Url",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Esteu segur que voleu suprimir '{name}' de {appName}?",
|
||||
"AverageResponseTimesMs": "Temps mitjà de resposta de l'indexador (ms)",
|
||||
"FoundCountReleases": "S'han trobat {itemCount} versions",
|
||||
"AuthQueries": "Consultes d'Autorització",
|
||||
"BasicSearch": "Cerca bàsica",
|
||||
"IndexerName": "Nom de l'indexador",
|
||||
"IndexerStatus": "Estat de l'indexador",
|
||||
"IndexerTagsHelpText": "Utilitzeu etiquetes per especificar els intermediaris de l'indexador o a quines aplicacions se sincronitza l'indexador.",
|
||||
"NewznabUrl": "Url Newznab",
|
||||
"SearchCountIndexers": "Cerca {count} indexador",
|
||||
"UnableToLoadDevelopmentSettings": "No s'han pogut carregar els paràmetres de desenvolupament",
|
||||
"SettingsFilterSentryEvents": "Filtra els esdeveniments d'anàlisi",
|
||||
"ApplicationTagsHelpText": "Sincronitza els indexadors d'aquesta aplicació que tenen una o més etiquetes coincidents. Si no es llisten etiquetes aquí, llavors no s'impedirà la sincronització d'indexadors a causa de les seves etiquetes.",
|
||||
"ApplicationTagsHelpTextWarning": "Les etiquetes s'han d'utilitzar amb precaució, poden tenir efectes no desitjats. Una aplicació amb una etiqueta només sincronitzarà amb els indexadors que tinguin la mateixa etiqueta.",
|
||||
"DeleteSelectedApplications": "Suprimeix les aplicacions seleccionades",
|
||||
"DownloadClientsSettingsSummary": "Baixa la configuració dels clients per a la integració a la cerca de la interfície d'usuari {appName}",
|
||||
"ElapsedTime": "Temps transcorregut",
|
||||
"EnableIndexer": "Habilita l'indexador",
|
||||
"EnableRssHelpText": "Habilita el canal RSS per a l'indexador",
|
||||
"IncludeManualGrabsHelpText": "Inclou les notes manuals fetes a {appName}",
|
||||
"IndexerFailureRate": "Taxa de fallada de l'indexador",
|
||||
"ProwlarrSupportsAnyDownloadClient": "{appName} admet qualsevol dels clients de baixada que es llisten a continuació.",
|
||||
"TotalGrabs": "Grabs totals",
|
||||
"IndexerDetails": "Detalls de l'indexador",
|
||||
"IndexerPriorityHelpText": "Prioritat de l'indexador des de l'1 (el més alt) fins al 50 (el més oest). Per defecte: 25.",
|
||||
"IndexerProxy": "Servidor intermediari de l'indexador",
|
||||
"UISettingsSummary": "Opcions de data, idioma i color defectuoses",
|
||||
"IndexerCategories": "Categories de l'indexador",
|
||||
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
|
||||
"SearchCapabilities": "Capacitats de cerca",
|
||||
"SearchType": "Tipus de cerca",
|
||||
"SettingsLogSql": "Registre Sql",
|
||||
"SyncLevelAddRemove": "Afegeix i elimina només: quan s'afegeixen o s'eliminen els indexadors de {appName}, s'actualitzarà aquesta aplicació remota.",
|
||||
"IndexerProxies": "Propis de l'indexador",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Sincronitza les fulles del torrent de la llista de blocs en bloc mentre s'agafa",
|
||||
"CertificateValidationHelpText": "Canvia l'estricta validació de la certificació HTTPS",
|
||||
"IndexerDisabled": "Indexador desactivat",
|
||||
"IndexerFileListSettingsPasskeyHelpText": "Contrasenya del lloc (Aquesta és la cadena alfanumèrica a l'URL del seguidor que es mostra al client de baixada)",
|
||||
"IndexerSettingsQueryLimit": "Límit de consulta",
|
||||
"IndexerHDBitsSettingsPasskeyHelpText": "Contrasenya dels detalls de l'usuari",
|
||||
"IndexerSettingsPasskey": "Clau de pas",
|
||||
"ClickToChangeQueryOptions": "Feu clic per a canviar les opcions de consulta",
|
||||
"EnabledRedirected": "Activat, redirigit",
|
||||
"Parameters": "Paràmetres",
|
||||
"QueryResults": "Resultats de la consulta",
|
||||
"RedirectHelpText": "Redirigeix la sol·licitud de baixada entrant per a l'indexador i passa la captura directament en lloc de intermediaris a través de {appName}",
|
||||
"UnableToLoadIndexerProxies": "No s'han pogut carregar els intermediaris de l'indexador",
|
||||
"IndexerId": "ID de l'indexador",
|
||||
"IndexerAlphaRatioSettingsExcludeScene": "Exclou l'escena",
|
||||
"IndexerAlphaRatioSettingsExcludeSceneHelpText": "Exclou els llançaments d'escenes dels resultats",
|
||||
"IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
|
||||
"IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
|
||||
"IndexerFileListSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
|
||||
"IndexerFileListSettingsUsernameHelpText": "Nom d'usuari del lloc",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Cerca publicacions per noms de grup",
|
||||
"IndexerHDBitsSettingsOrigins": "Orígens",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgentHelpText": "Agent d'usuari associat a la cookie utilitzada des del navegador",
|
||||
"IndexerNewznabSettingsApiKeyHelpText": "Clau de l'API del lloc",
|
||||
"IndexerNzbIndexSettingsApiKeyHelpText": "Clau de l'API del lloc",
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "«Mínims filtradors requerits per les Aplicacions perquè l'indexador s'agafi",
|
||||
"IndexerSettingsFreeleechOnly": "Només Freeleech",
|
||||
"IndexerSettingsGrabLimit": "Límit de captura",
|
||||
"IndexerSettingsLimitsUnit": "Unitats de límits",
|
||||
"IndexerSettingsRssKey": "Clau RSS",
|
||||
"SelectIndexers": "Selecciona els indexadors",
|
||||
"SettingsSqlLoggingHelpText": "Registra totes les consultes SQL de {appName}",
|
||||
"SyncAppIndexers": "Sincronitza els indexadors d'aplicacions",
|
||||
"AppProfileInUse": "Perfil d'aplicació en ús",
|
||||
"DeleteAppProfile": "Suprimeix el perfil de l'aplicació",
|
||||
"TVSearchTypes": "Tipus de cerca de TV",
|
||||
"IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
|
||||
"IndexerMTeamTpSettingsApiKeyHelpText": "Clau API del Lloc (trobada a Tauler de control de l'usuari => Seguretat => Laboratori)",
|
||||
"MinimumSeedersHelpText": "Visors mínims requerits per l'aplicació perquè l'indexador s'agafi",
|
||||
"NoIndexerHistory": "No s'ha trobat cap historial per a aquest indexador",
|
||||
"SearchQueries": "Cerca consultes",
|
||||
"SettingsConsoleLogLevel": "Nivell de registre de la consola",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Només blat de moro daurat",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Cerca només els llançaments Golden Popcorn",
|
||||
"Open": "Obre",
|
||||
"ProwlarrDownloadClientsAlert": "Si voleu fer cerques directament dins de {appName}, heu d'afegir Clients de Baixades. En cas contrari, no cal afegir-les aquí. Per a les cerques des de les teves Apps, els clients de descàrrega configurats s'utilitzen en el seu lloc.",
|
||||
"Website": "Lloc web",
|
||||
"DownloadClientQbittorrentSettingsUseSslHelpText": "Utilitza una connexió segura. Vegeu Opcions -> Interfície web -> 'Utilitza HTTPS en comptes d'HTTP' a qBittorrent.",
|
||||
"IndexerAvistazSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Contrasenya del lloc",
|
||||
"IndexerAvistazSettingsPidHelpText": "PID de la pàgina del meu compte o del meu perfil",
|
||||
"IndexerAvistazSettingsUsernameHelpText": "Nom d'usuari del lloc",
|
||||
"IndexerAvistazSettingsUsernameHelpTextWarning": "Només el rang de membre i superior pot utilitzar l'API en aquest indexador.",
|
||||
"SelectedCountOfCountReleases": "S'han seleccionat {selectedCount} de les versions {itemCount}",
|
||||
"SettingsLogRotate": "Rotació del registre",
|
||||
"AreYouSureYouWantToDeleteCategory": "Esteu segur que voleu suprimir la categoria assignada?",
|
||||
"Book": "Llibre",
|
||||
"IndexerSettingsCookie": "Cookie",
|
||||
"DownloadClientFreeboxSettingsAppIdHelpText": "ID d'aplicació indicat en crear accés a l'API de Freebox (ex: 'app_id')",
|
||||
"DownloadClientFreeboxSettingsHostHelpText": "Nom d'amfitrió o adreça IP de l'amfitrió del Freebox, per defecte a '{url}' (només funcionarà si es troba a la mateixa xarxa)",
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "Port utilitzat per accedir a la interfície Freebox, per defecte a '{port}'",
|
||||
"DownloadClientRTorrentSettingsUrlPath": "Camí de l'Url",
|
||||
"IndexerHDBitsSettingsMediumsHelpText": "Si no s'especifica, s'utilitzen totes les opcions.",
|
||||
"NotificationsEmailSettingsUseEncryptionHelpText": "Si s'ha de preferir l'ús de l'encriptatge si es configura al servidor, per utilitzar sempre l'encriptatge mitjançant SSL (només Port 465) o StartTLS (qualsevol altre port) o per no utilitzar mai l'encriptatge",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Primer i últim",
|
||||
"DownloadClientFloodSettingsTagsHelpText": "Etiquetes inicials d'una baixada. Per ser reconegut, una baixada ha de tenir totes les etiquetes inicials. Això evita conflictes amb baixades no relacionades.",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrder": "Ordre seqüencial",
|
||||
"DownloadClientSettingsUseSslHelpText": "Usa una connexió segura quan es connecti a {clientName}",
|
||||
"InstallMajorVersionUpdate": "Instal·la l'actualització",
|
||||
"InstallMajorVersionUpdateMessageLink": "Si us plau, comproveu [{domain}]({url}) per a més informació.",
|
||||
"OverrideGrabModalTitle": "Sobreescriu i Captura - {title}",
|
||||
"SecretToken": "Testimoni secret",
|
||||
"TorrentBlackholeSaveMagnetFilesExtension": "Desa l'extensió dels fitxers magnètics",
|
||||
"FailedToFetchSettings": "No s'ha pogut recuperar la configuració",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Defineix l'URL base de l'API de Freebox amb la versió de l'API, p. ex. '{url}', per defecte a '{defaultApiUrl}'",
|
||||
"IndexerSettingsSeedTime": "Temps de la llavor",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Carpeta compartida opcional per posar les baixades, deixeu en blanc per utilitzar la ubicació predeterminada de l'estació de baixada",
|
||||
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Aquesta carpeta haurà de ser accessible des de XBMC",
|
||||
"DownloadClientPneumaticSettingsStrmFolder": "Carpeta Strm",
|
||||
"DownloadClientSettingsDestinationHelpText": "Especifica manualment la destinació de la baixada, deixeu-ho en blanc per a utilitzar el predeterminat",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Afegeix un prefix a l'URL rpc de {clientName}, ex. {url}, per defecte a ‘{defaultUrl}’",
|
||||
"IndexerSettingsApiPathHelpText": "Camí a l'api, normalment {url}",
|
||||
"LogSizeLimitHelpText": "Mida màxima del fitxer de registre en MB abans d'arxivar. Per defecte és 1MB.",
|
||||
"IndexerNewznabSettingsAdditionalParametersHelpText": "Paràmetres addicionals de Newznab",
|
||||
"InstallMajorVersionUpdateMessage": "Aquesta actualització instal·larà una nova versió principal i pot no ser compatible amb el vostre sistema. Esteu segur que voleu instal·lar aquesta actualització?",
|
||||
"PackageVersionInfo": "{packageVersion} per {packageAuthor}",
|
||||
"UpdaterLogFiles": "Fitxers de registre de l'actualitzador",
|
||||
"NotificationsEmailSettingsUseEncryption": "Utilitza l'encriptatge",
|
||||
"NotificationsTelegramSettingsIncludeAppNameHelpText": "Opcionalment prefixa el títol del missatge amb {appName} per diferenciar les notificacions de diferents aplicacions",
|
||||
"DownloadClientSettingsInitialState": "Estat inicial",
|
||||
"DownloadClientSettingsInitialStateHelpText": "Estat inicial dels torrents afegits a {clientName}",
|
||||
"IndexerPassThePopcornSettingsApiUserHelpText": "Aquests paràmetres es troben a la configuració de seguretat de PassThePopcorn (Edita el perfil > Seguretat).",
|
||||
"DownloadClientRTorrentSettingsUrlPathHelpText": "Camí al extrem XMLRPC, vegeu {url}. Normalment és RPC2 o [camí a ruTorrent]{url2} quan s'utilitza ruTorrent.",
|
||||
"IndexerSettingsApiPath": "Camí de l'API",
|
||||
"IndexerHDBitsSettingsCodecsHelpText": "Si no s'especifica, s'utilitzen totes les opcions.",
|
||||
"IndexerSettingsApiUser": "Usuari de l'API",
|
||||
"IndexerSettingsSeedTimeHelpText": "El temps en què s'ha de sembrar un torrent abans d'aturar-lo, el buit utilitza el valor per defecte del client de baixada",
|
||||
"IndexerSettingsSeedRatio": "Ràtio de la llavor",
|
||||
"IndexerSettingsSeedRatioHelpText": "Ràtio a la qual ha d'arribar un torrent abans d'aturar-se, buit utilitza el valor per defecte del client de baixada. La relació ha de ser com a mínim 1.0 i seguir les regles dels indexadors",
|
||||
"IndexerSettingsAdditionalParameters": "Paràmetres addicionals",
|
||||
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Afegeix les propietats dels suports com a etiquetes. Els consells són exemples.",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Afegeix un prefix a l'API de Flood, com ara {url}",
|
||||
"DownloadClientFreeboxSettingsAppToken": "Testimoni d'aplicació",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Aquesta opció requereix com a mínim la versió 16.0 de NzbGet",
|
||||
"DownloadClientPneumaticSettingsNzbFolder": "Carpeta Nzb",
|
||||
"DownloadClientPneumaticSettingsStrmFolderHelpText": "Els fitxers .strm d'aquesta carpeta s'importaran amb el dron",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Baixeu primer i primer les últimes peces (qBittorrent 4.1.0+)",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Baixada en ordre seqüencial (qBittorrent 4.1.0+)",
|
||||
"LabelIsRequired": "L'etiqueta és necessària",
|
||||
"NotificationsTelegramSettingsIncludeAppName": "Inclou {appName} al títol",
|
||||
"TorrentBlackholeSaveMagnetFiles": "Desa els fitxers Magnet",
|
||||
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Extensió a utilitzar per als enllaços magnet, per defecte és '.magnet'",
|
||||
"TorrentBlackholeSaveMagnetFilesHelpText": "Desa l'enllaç magnet si no hi ha cap fitxer .torrent disponible (només útil si el client de baixada admet magnets desats a un fitxer)",
|
||||
"TorrentBlackholeTorrentFolder": "Carpeta torrent",
|
||||
"UseSsl": "Usa SSL",
|
||||
"UsenetBlackholeNzbFolder": "Carpeta Nzb",
|
||||
"XmlRpcPath": "Camí RPC XML",
|
||||
"DownloadClientRTorrentSettingsAddStopped": "Afegeix aturat",
|
||||
"DownloadClientRTorrentSettingsAddStoppedHelpText": "En activar s'afegiran torrents i imants a rTorrent en un estat aturat. Això pot trencar els fitxers magnet.",
|
||||
"DownloadClientFreeboxSettingsAppTokenHelpText": "S'ha recuperat el testimoni de l'aplicació en crear l'accés a l'API de Freebox (ex: 'app_token')",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent té un historial d'inclusió de criptominers, programari maliciós i anuncis, us animem a triar un client diferent.",
|
||||
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Estat inicial dels torrents afegits a qBittorrent. Tingueu en compte que els torrents forçats no compleixen amb les restriccions de llavors",
|
||||
"LogSizeLimit": "Límit de la mida del registre",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} - Seleccioneu el client de baixada"
|
||||
}
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
"Title": "Titul",
|
||||
"Today": "Dnes",
|
||||
"Tomorrow": "Zítra",
|
||||
"Torrent": "Torrenty",
|
||||
"Torrent": "Torrent",
|
||||
"Torrents": "Torrenty",
|
||||
"Type": "Typ",
|
||||
"UI": "UI",
|
||||
@@ -633,5 +633,11 @@
|
||||
"IndexerAvistazSettingsFreeleechOnlyHelpText": "Hledat pouze freeleech vydání",
|
||||
"InitialFailure": "Úvodní selhání",
|
||||
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "Klíč API stránky",
|
||||
"SearchTypes": "Hledat typy"
|
||||
"SearchTypes": "Hledat typy",
|
||||
"NotificationTriggersHelpText": "Vyber, které události mají vyvolat toto upozornění",
|
||||
"IndexerSettingsBaseUrl": "Základní URL",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent má historii zahrnování kryptoměnových těžařů, malwaru a reklam, důrazně vám doporučujeme zvolit jiného klienta.",
|
||||
"IndexerSettingsBaseUrlHelpText": "Vyberte, jakou základní URL bude {appName} používat pro požadavky na web",
|
||||
"IndexerSettingsPackSeedTimeIndexerHelpText": "Doba, po kterou by měl být balíček (sezóna nebo diskografie) torrentu seedován před zastavením, prázdné pole znamená výchozí nastavení aplikace",
|
||||
"PackSeedTimeHelpText": "Doba, po kterou by měl být balíček (sezóna nebo diskografie) torrentu seedován před zastavením, prázdné pole znamená výchozí nastavení aplikace"
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
"ElapsedTime": "Vergangene Zeit",
|
||||
"Enable": "Aktivieren",
|
||||
"EnableAutomaticSearch": "Automatische Suche einschalten",
|
||||
"EnableAutomaticSearchHelpText": "Wird verwendet, wenn die automatische Suche über die Benutzeroberfläche oder durch {appName} durchgeführt wird.",
|
||||
"EnableAutomaticSearchHelpText": "Wird verwendet, wenn die automatische Suche über die Benutzeroberfläche oder durch {appName} durchgeführt wird",
|
||||
"EnableIndexer": "Indexer aktivieren",
|
||||
"EnableInteractiveSearch": "Interaktive Suche einschalten",
|
||||
"EnableInteractiveSearchHelpText": "Wird verwendet, wenn die interaktive Suche verwendet wird",
|
||||
@@ -179,7 +179,7 @@
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Alle Indexer sind aufgrund von Fehlern länger als 6 Stunden nicht verfügbar",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexer sind aufgrund von Fehlern länger als 6 Stunden nicht verfügbar: {indexerNames}",
|
||||
"IndexerName": "Indexer-Name",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Indexer haben keine Definition und werden nicht funktionieren: {indexerNames}. Bitte entferne und (oder) füge diese neu zu {appName} hinzu",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Indexer haben keine Definition und werden nicht funktionieren: {indexerNames}. Bitte entferne und (oder) füge diese neu zu {appName} hinzu.",
|
||||
"IndexerObsoleteCheckMessage": "Indexer sind nicht mehr verfügbar oder wurden aktualiiert: {0}. Bitte enfernen und (oder) neu zu {appName} hinzufügen",
|
||||
"IndexerPriority": "Indexer-Priorität",
|
||||
"IndexerPriorityHelpText": "Indexer Priorität von 1 (höchste) bis 50 (niedrigste). Standard: 25.",
|
||||
@@ -496,7 +496,7 @@
|
||||
"RecentChanges": "Kürzliche Änderungen",
|
||||
"WhatsNew": "Was ist neu?",
|
||||
"minutes": "Minuten",
|
||||
"DeleteAppProfileMessageText": "Qualitätsprofil '{0}' wirklich löschen?",
|
||||
"DeleteAppProfileMessageText": "Qualitätsprofil '{name}' wirklich löschen?",
|
||||
"AddConnection": "Verbindung hinzufügen",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Alle Benachrichtigungen sind aufgrund von Fehlern nicht verfügbar",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Benachrichtigungen nicht verfügbar wegen Fehlern: {notificationNames}",
|
||||
@@ -563,7 +563,7 @@
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Suchtyp",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Fügt der Flood-API ein Präfix hinzu, z. B. {url}",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "API-URL",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Definiere die Freebox-API-Basis-URL mit der API-Version, z. B. '{url}', standardmäßig '{defaultApiUrl}'.",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Definiere die Freebox-API-Basis-URL mit der API-Version, z. B. '{url}', standardmäßig '{defaultApiUrl}'",
|
||||
"DownloadClientRTorrentSettingsUrlPathHelpText": "Pfad zum XMLRPC-Endpunkt, siehe {url}. Dies ist normalerweise RPC2 oder [Pfad zu ruTorrent]{url2}, wenn ruTorrent verwendet wird.",
|
||||
"DownloadClientSettingsAddPaused": "Pausiert hinzufügen",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} – Wähle Download-Client",
|
||||
@@ -596,7 +596,7 @@
|
||||
"TorrentBlackholeTorrentFolder": "Torrent-Ordner",
|
||||
"UseSsl": "SSL verwenden",
|
||||
"UsenetBlackholeNzbFolder": "NZB-Ordner",
|
||||
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Für Magnet-Links zu verwendende Erweiterung, standardmäßig „.magnet“.",
|
||||
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Für Magnet-Links zu verwendende Erweiterung, standardmäßig „.magnet“",
|
||||
"XmlRpcPath": "XML-RPC-Pfad",
|
||||
"ProxyValidationBadRequest": "Proxy konnte nicht getestet werden. StatusCode: {statusCode}",
|
||||
"SecretToken": "Geheimer Token",
|
||||
@@ -612,15 +612,15 @@
|
||||
"BuiltIn": "Eingebaut",
|
||||
"PublishedDate": "Veröffentlichungsdatum",
|
||||
"Redirected": "Umleiten",
|
||||
"AllSearchResultsHiddenByFilter": "Alle Ergebnisse werden durch den angewendeten Filter ausgeblendet",
|
||||
"AllSearchResultsHiddenByFilter": "Alle Ergebnisse werden durch den angewendeten Filter ausgeblendet.",
|
||||
"DockerUpdater": "Aktualisieren Sie den Docker-Container, um das Update zu erhalten",
|
||||
"Download": "Herunterladen",
|
||||
"ErrorRestoringBackup": "Fehler beim Wiederherstellen der Sicherung",
|
||||
"ExternalUpdater": "{appName} ist so konfiguriert, dass es einen externen Aktualisierungsmechanismus verwendet",
|
||||
"NoEventsFound": "Keine Ereignisse gefunden",
|
||||
"RestartReloadNote": "Hinweis: {appName} startet während des Wiederherstellungsvorgangs automatisch neu und lädt die Benutzeroberfläche neu.",
|
||||
"TheLogLevelDefault": "Die Protokollebene ist standardmäßig auf „Info“ eingestellt und kann unter „Allgemeine Einstellungen“ (/settings/general) geändert werden.",
|
||||
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden.",
|
||||
"TheLogLevelDefault": "Die Protokollebene ist standardmäßig auf „Debug“ eingestellt und kann unter „Allgemeine Einstellungen“ (/settings/general) geändert werden",
|
||||
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden,",
|
||||
"UpdaterLogFiles": "Updater-Protokolldateien",
|
||||
"WouldYouLikeToRestoreBackup": "Willst du das Backup '{name}' wiederherstellen?",
|
||||
"AptUpdater": "Verwenden Sie apt, um das Update zu installieren",
|
||||
@@ -658,7 +658,7 @@
|
||||
"IndexerSettingsApiPath": "API-Pfad",
|
||||
"IndexerSettingsApiPathHelpText": "Pfad zur API, normalerweise {url}",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Fügt der {clientName}-rpc-URL ein Präfix hinzu, z. B. {url}, standardmäßig '{defaultUrl}'",
|
||||
"IndexerSettingsSeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen muss, bevor er gestoppt wird. Leer verwendet das Standardverhältnis des Download-Clients. Das Verhältnis sollte mindestens 1,0 betragen und den Regeln des Indexers folgen.",
|
||||
"IndexerSettingsSeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen muss, bevor er gestoppt wird. Leer verwendet das Standardverhältnis des Download-Clients. Das Verhältnis sollte mindestens 1,0 betragen und den Regeln des Indexers folgen",
|
||||
"IndexerSettingsSeedTimeHelpText": "Die Zeit, die ein Torrent gesät werden sollte, bevor er gestoppt wird. Leer verwendet die Standardzeit des Download-Clients",
|
||||
"InstallMajorVersionUpdate": "Update installieren",
|
||||
"InstallMajorVersionUpdateMessage": "Dieses Update wird eine neue Hauptversion installieren und ist möglicherweise nicht mit deinem System kompatibel. Bist du sicher, dass du dieses Update installieren möchtest?",
|
||||
@@ -806,5 +806,6 @@
|
||||
"IndexerSettingsBaseUrlHelpText": "Wähle die Basis-Url aus, die {appName} für Anfragen an die Seite verwenden soll",
|
||||
"RepeatSearch": "Suche wiederholen",
|
||||
"AverageResponseTimesMs": "Durchschnittliche Indexer-Antwortzeiten (ms)",
|
||||
"BasicSearch": "Einfache Suche"
|
||||
"BasicSearch": "Einfache Suche",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent ist dafür bekannt, dass es Kryptominer, Malware und Werbung enthält. Wir empfehlen dringend einen anderen Client zu wählen."
|
||||
}
|
||||
|
||||
@@ -485,7 +485,7 @@
|
||||
"Theme": "Θέμα",
|
||||
"Track": "Ιχνος",
|
||||
"Year": "Ετος",
|
||||
"UpdateAvailableHealthCheckMessage": "Νέα ενημέρωση είναι διαθέσιμη",
|
||||
"UpdateAvailableHealthCheckMessage": "Νέα ενημέρωση είναι διαθέσιμη: {version}",
|
||||
"Artist": "Καλλιτέχνης",
|
||||
"Author": "Συγγραφέας",
|
||||
"Book": "Βιβλίο",
|
||||
|
||||
@@ -241,6 +241,7 @@
|
||||
"DownloadClientStatusSingleClientHealthCheckMessage": "Download clients unavailable due to failures: {downloadClientNames}",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Optional location to put downloads in, leave blank to use the default Transmission location",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Adds a prefix to the {clientName} rpc url, eg {url}, defaults to '{defaultUrl}'",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent has a history of including cryptominers, malware and ads, we strongly encourage you to choose a different client.",
|
||||
"DownloadClients": "Download Clients",
|
||||
"DownloadClientsLoadError": "Unable to load download clients",
|
||||
"DownloadClientsSettingsSummary": "Download clients configuration for integration into {appName} UI search",
|
||||
@@ -723,7 +724,7 @@
|
||||
"TestAllApps": "Test All Apps",
|
||||
"TestAllClients": "Test All Clients",
|
||||
"TestAllIndexers": "Test All Indexers",
|
||||
"TheLogLevelDefault": "The log level defaults to 'Info' and can be changed in [General Settings](/settings/general)",
|
||||
"TheLogLevelDefault": "The log level defaults to 'Debug' and can be changed in [General Settings](/settings/general)",
|
||||
"Theme": "Theme",
|
||||
"ThemeHelpText": "Change Application UI Theme, 'Auto' Theme will use your OS Theme to set Light or Dark mode. Inspired by {inspiredBy}.",
|
||||
"Time": "Time",
|
||||
|
||||
@@ -806,5 +806,6 @@
|
||||
"InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información.",
|
||||
"FailedToFetchSettings": "Error al recuperar la configuración",
|
||||
"CurrentlyInstalled": "Actualmente instalado",
|
||||
"PreviouslyInstalled": "Previamente instalado"
|
||||
"PreviouslyInstalled": "Previamente instalado",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent tiene un amplio historial de incluir criptomineros, malware y publicidad, por lo que recomendamos encarecidamente que elijas un cliente diferente."
|
||||
}
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
{
|
||||
"ApiKey": "کلید API",
|
||||
"NetCore": ".NET"
|
||||
"NetCore": ".NET",
|
||||
"Add": "افزودن",
|
||||
"About": "درباره",
|
||||
"Actions": "اقدامات",
|
||||
"Docker": "Docker",
|
||||
"AddConnection": "افزودن پیوند",
|
||||
"AddConnectionImplementation": "افزودن پیوند - {implementationName}",
|
||||
"AddDownloadClientImplementation": "افزودن کلاینت دانلود - {implementationName}",
|
||||
"Torrents": "تورنت ها",
|
||||
"Usenet": "Usenet"
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"Fixed": "Korjattu",
|
||||
"FocusSearchBox": "Kohdista hakukenttä",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Saat lisätietoja yksittäisistä latauspalveluista painamalla niiden ohessa olevia lisätietopainikkeita.",
|
||||
"HideAdvanced": "Piilota lisäasetukset",
|
||||
"HideAdvanced": "Laajenna asetukset",
|
||||
"History": "Historia",
|
||||
"MIA": "Puuttuu",
|
||||
"New": "Uutta",
|
||||
@@ -161,7 +161,7 @@
|
||||
"SendAnonymousUsageData": "Lähetä nimettömiä käyttötietoja",
|
||||
"SetTags": "Tunnisteiden määritys",
|
||||
"SettingsEnableColorImpairedMode": "Heikentyneen värinäön tila",
|
||||
"ShowAdvanced": "Näytä lisäasetukset",
|
||||
"ShowAdvanced": "Supista asetukset",
|
||||
"ShowSearchHelpText": "Näytä hakupainike osoitettaessa.",
|
||||
"Shutdown": "Sammuta",
|
||||
"Size": "Koko",
|
||||
@@ -207,7 +207,7 @@
|
||||
"StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta",
|
||||
"StartupDirectory": "Käynnistyskansio",
|
||||
"TableOptions": "Taulukkonäkymän asetukset",
|
||||
"TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys",
|
||||
"TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys.",
|
||||
"TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille hakupalveluille.",
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "Virhe lisättäessä sovellusprofiilia. Yritä uudelleen.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Ilmoituspalvelun lisääminen epäonnistui. Yritä uudelleen.",
|
||||
@@ -312,7 +312,7 @@
|
||||
"FullSync": "Täysi synkronointi",
|
||||
"SyncLevelFull": "Täysi synkronointi: Pitää sovelluksen hakupalvelut täysin synkronoituna. Hakupalveluihin {appName}issa tehdyt muutokset synkronoidaan etäsovelluksen kanssa ja kaikki etäsovelluksessa tehdyt muutokset korvataan seuraavan synkronoinnin yhteydessä.",
|
||||
"EnableIndexer": "Ota hakupalvelu käyttöön",
|
||||
"FilterPlaceHolder": "Suodata hakupalveluita",
|
||||
"FilterPlaceHolder": "Suodata palveluita",
|
||||
"IndexerHealthCheckNoIndexers": "Yhtään hakupalvelua ei ole käytössä, eikä {appName} tämän vuoksi löydä tuloksia.",
|
||||
"IndexerObsoleteCheckMessage": "Hakupalvelut ovat poistuneet tai ne ovat muuttuneet: {0}. Poista tai lisää ne {appName}iin uudelleen.",
|
||||
"IndexerProxy": "Tiedonhaun välityspalvelin",
|
||||
@@ -507,7 +507,7 @@
|
||||
"AddDownloadClientImplementation": "Lisätään latauspalvelua – {implementationName}",
|
||||
"AddIndexerImplementation": "Lisätään hakupalvelua – {implementationName}",
|
||||
"OnGrabHelpText": "Kun julkaisu kaapataan",
|
||||
"ManageDownloadClients": "Hallitse latauspalveluita",
|
||||
"ManageDownloadClients": "Hallitse palveluita",
|
||||
"NoDownloadClientsFound": "Latauspalveluita ei löytynyt",
|
||||
"CountDownloadClientsSelected": "{count} latauspalvelu(a) on valittu",
|
||||
"EditSelectedDownloadClients": "Muokkaa valittuja latauspalveluita",
|
||||
@@ -519,7 +519,7 @@
|
||||
"ApplyChanges": "Toteuta muutokset",
|
||||
"EditSelectedIndexers": "Muokkaa valittuja sisältölähteitä",
|
||||
"NoHistoryFound": "Historiaa ei löytynyt",
|
||||
"NoIndexersFound": "Hakupalveluita ei löytynyt",
|
||||
"NoIndexersFound": "Palveluita ei löytynyt",
|
||||
"StopSelecting": "Lopeta valitseminen",
|
||||
"EditConnectionImplementation": "Muokataan ilmoituspalvelua – {implementationName}",
|
||||
"AddConnectionImplementation": "Lisätään ilmoituspavelua – {implementationName}",
|
||||
@@ -556,7 +556,7 @@
|
||||
"Implementation": "Toteutus",
|
||||
"IndexerCategories": "Hakupalvelukategoriat",
|
||||
"IndexerStatus": "Hakupalvelun tila",
|
||||
"ManageApplications": "Sovellusten hallinta",
|
||||
"ManageApplications": "Hallitse sovelluksia",
|
||||
"NewznabUrl": "Newznab URL",
|
||||
"PackSeedTime": "Paketin jakoaika",
|
||||
"PackSeedTimeHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.",
|
||||
@@ -710,13 +710,13 @@
|
||||
"Logout": "Kirjaudu ulos",
|
||||
"NoEventsFound": "Tapahtumia ei löytynyt",
|
||||
"RestartReloadNote": "Huomioi: {appName} käynnistyy palautusprosessin aikana automaattisesti uudelleen.",
|
||||
"TheLogLevelDefault": "Lokikirjauksen oletusarvoinen laajuus on \"Informatiivinen\". Laajuutta voidaan muuttaa [Yleisistä asetuksista](/settings/general).",
|
||||
"TheLogLevelDefault": "Lokikirjauksen oletusarvoinen laajuus on \"Vianselvitys\". Laajuutta voidaan muuttaa [Yleisistä asetuksista](/settings/general).",
|
||||
"UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan,",
|
||||
"UpdaterLogFiles": "Päivittäjän lokitiedostot",
|
||||
"WouldYouLikeToRestoreBackup": "Haluatko palauttaa varmuuskopion \"{name}\"?",
|
||||
"InstallLatest": "Asenna uusin",
|
||||
"CurrentlyInstalled": "Nyt asennettu",
|
||||
"PreviouslyInstalled": "Aiemmin asennettu",
|
||||
"CurrentlyInstalled": "Käytössä oleva versio",
|
||||
"PreviouslyInstalled": "Aiemmin käytössä ollut versio",
|
||||
"Mixed": "Sekoitettu",
|
||||
"IndexerSettingsAppsMinimumSeeders": "Jakajien vähimmäismäärä",
|
||||
"FailedToFetchSettings": "Asetusten nouto epäonnistui",
|
||||
@@ -805,6 +805,7 @@
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Vain \"Golden Popcorn\"",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Etsi vain ns. kultaisella pocornilla merkittyjä julkaisuja.",
|
||||
"IndexerSettingsFreeleechOnly": "Vain \"Freeleech\"",
|
||||
"IndexerSettingsCookieHelpText": "Jos sivusto vaatii kirjautumisevästeen, se on noudettava selaimen kautta.",
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Sivuston salasana"
|
||||
"IndexerSettingsCookieHelpText": "Jos sivusto vaatii kirjautumisevästeen, on se noudettava selaimen avulla.",
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Sivuston salasana",
|
||||
"DownloadClientUTorrentProviderMessage": "Koska uTorrent on tullut tunnetuksi kryptolouhinnasta sekä haitta- ja mainossisällöstä, suosittelemme valitsemaan jonkin muun työkalun."
|
||||
}
|
||||
|
||||
@@ -806,5 +806,6 @@
|
||||
"IndexerSettingsPreferMagnetUrl": "URL de préférence Magnet",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Popcorn doré uniquement",
|
||||
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Rechercher uniquement les versions Golden Popcorn",
|
||||
"IndexerAvistazSettingsUsernameHelpTextWarning": "Seuls les membres de rang et supérieur peuvent utiliser l'API sur cet indexeur."
|
||||
"IndexerAvistazSettingsUsernameHelpTextWarning": "Seuls les membres de rang et supérieur peuvent utiliser l'API sur cet indexeur.",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent a un historique d'inclusion de cryptomineurs, de logiciels malveillants et de publicités. Nous vous recommandons fortement de choisir un autre client."
|
||||
}
|
||||
|
||||
@@ -481,7 +481,7 @@
|
||||
"Genre": "Műfajok",
|
||||
"Theme": "Téma",
|
||||
"Track": "Dal",
|
||||
"UpdateAvailableHealthCheckMessage": "Új frissítés elérhető",
|
||||
"UpdateAvailableHealthCheckMessage": "Új frissítés elérhető: {version}",
|
||||
"Year": "Év",
|
||||
"Book": "Könyv",
|
||||
"Season": "Évad",
|
||||
|
||||
@@ -482,7 +482,7 @@
|
||||
"More": "Altro",
|
||||
"Season": "Stagione",
|
||||
"Year": "Anno",
|
||||
"UpdateAvailableHealthCheckMessage": "Nuovo aggiornamento disponibile",
|
||||
"UpdateAvailableHealthCheckMessage": "Nuovo aggiornamento disponibile: {version}",
|
||||
"Author": "Autore",
|
||||
"ApplyChanges": "Applica Cambiamenti",
|
||||
"ApiKeyValidationHealthCheckMessage": "Aggiorna la tua chiave API in modo che abbia una lunghezza di almeno {length} caratteri. Puoi farlo dalle impostazioni o dal file di configurazione",
|
||||
|
||||
@@ -421,5 +421,90 @@
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "API를 호출한 앱에서 제공하는 사용자 에이전트",
|
||||
"days": "일",
|
||||
"minutes": "분",
|
||||
"Author": "저작자"
|
||||
"Author": "저작자",
|
||||
"Categories": "카테고리",
|
||||
"SeedRatio": "종자 비율",
|
||||
"AuthenticationRequiredHelpText": "필수 인증을 요청하는 변경 사항. 위험을 이해하지 못한다면 변경하지 마세요.",
|
||||
"DownloadClientFloodSettingsAdditionalTagsHelpText": "미디어의 속성을 태그로 추가합니다. 힌트는 예시입니다.",
|
||||
"DownloadClientRTorrentSettingsAddStoppedHelpText": "활성화하면 rTorrent에 정지된 상태에서 토런트와 마그넷이 추가됩니다. 마그넷 파일이 손상될 수 있습니다.",
|
||||
"HealthMessagesInfoBox": "행 끝에 있는 위키 링크(책 아이콘)를 클릭하거나 [로그]({link})를 확인하면 이러한 상태 점검 메시지의 원인에 대한 상세 정보를 찾을 수 있습니다. 이러한 메시지를 해석하는 데 어려움이 있는 경우 아래 링크에서 지원팀에 문의할 수 있습니다.",
|
||||
"DownloadClientSettingsDestinationHelpText": "다운로드 대상을 수동으로 지정하고 기본값을 사용하려면 비워두세요.",
|
||||
"DownloadClientSettingsInitialStateHelpText": "{clientName}에 추가된 토런트의 초기 상태",
|
||||
"IndexerSettingsAdditionalParameters": "매개 변수 추가",
|
||||
"NoEventsFound": "이벤트가 없음",
|
||||
"BlackholeFolderHelpText": "{appName}가 {extension} 파일을 저장할 폴더",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "{clientName} url에 {url}과 같은 접두사를 추가합니다.",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "콘텐츠 레이아웃",
|
||||
"Install": "설치",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "새 비밀번호 확인",
|
||||
"FailedToFetchSettings": "설정을 가져오는데 실패함",
|
||||
"Default": "기본값",
|
||||
"Episode": "에피소드",
|
||||
"AuthenticationMethod": "인증 방법",
|
||||
"IndexerSettingsSeedRatio": "시드 비율",
|
||||
"Destination": "대상",
|
||||
"DownloadClientFreeboxSettingsAppToken": "앱 토큰",
|
||||
"Logout": "로그아웃",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "API 주소",
|
||||
"IndexerHDBitsSettingsCodecs": "코덱",
|
||||
"WhatsNew": "새로운 소식?",
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "Freebox 인터페이스에 액세스하는 데 사용되는 포트, 기본값은 '{port}'",
|
||||
"DownloadClientPneumaticSettingsStrmFolderHelpText": "이 폴더의 .strm 파일은 드론으로 가져옵니다.",
|
||||
"DownloadClientQbittorrentSettingsInitialStateHelpText": "qBittorrent에 추가된 토렌트의 초기 상태입니다. 강제 토렌트는 시드 제한을 따르지 않는다는 점에 유의하세요.",
|
||||
"DownloadClientRTorrentSettingsDirectoryHelpText": "다운로드를 넣을 선택 위치, 기본 rTorrent 위치를 사용하려면 비워두세요.",
|
||||
"DownloadClientSettingsUseSslHelpText": "{clientName}에 연결할 때 보안 연결을 사용",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "{clientName} rpc URL에 접두사를 추가합니다(예: {url}, 기본값은 '{defaultUrl}')",
|
||||
"InstallMajorVersionUpdateMessageLink": "상세 내용은 [{domain}]({url})을 확인하세요.",
|
||||
"ApplicationUrlHelpText": "이 애플리케이션의 외부 URL - http(s)://, port 및 URL 기반 포함",
|
||||
"Theme": "테마",
|
||||
"ApplicationURL": "애플리케이션 URL",
|
||||
"Directory": "디렉토리",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "다운로드를 넣을 공유 폴더(선택 사항). 기본 다운로드 스테이션 위치를 사용하려면 비워두세요.",
|
||||
"DownloadClientFloodSettingsAdditionalTags": "추가 태그",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "{url}와 같은 Flood API에 접두사를 추가합니다",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "API 버전을 사용하여 Freebox API 기본 URL을 정의하세요, 예를 들어 '{url}', 기본값은 '{defaultApiUrl}')",
|
||||
"DownloadClientFreeboxSettingsAppId": "앱 ID",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "이 옵션을 사용하려면 최소한 NzbGet 버전 16.0이 필요합니다",
|
||||
"DownloadClientPneumaticSettingsNzbFolderHelpText": "이 폴더는 XBMC에서 접근할 수 있어야 합니다.",
|
||||
"DownloadClientRTorrentSettingsAddStopped": "중지됨 추가",
|
||||
"Category": "카테고리",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "다운로드를 넣을 위치 (선택 사항), 기본 전송 위치를 사용하려면 비워두세요",
|
||||
"External": "외부",
|
||||
"IndexerSettingsSeedRatioHelpText": "토렌드가 멈추기 전에 도달해야 하는 비율, 비어 있을 경우 다운로드 클라이언트의 기본값을 사용합니다. 비율은 최소 1.0이어야 하며 인덱서 규칙을 따라야 합니다",
|
||||
"IndexerSettingsSeedTimeHelpText": "토렌드가 중지되기 전에 시드되어야 하는 시간, 비어 있을 경우 다운로드 클라이언트의 기본값을 사용합니다",
|
||||
"InvalidUILanguage": "UI가 잘못된 언어로 설정되어 있습니다, 수정하고 설정을 저장하세요",
|
||||
"AuthenticationRequired": "인증 필요",
|
||||
"NotificationsTelegramSettingsIncludeAppNameHelpText": "다른 애플리케이션의 알림을 구분하기 위해 메시지 제목 앞에 {appName}를 접두사로 사용 (선택 사항)",
|
||||
"PackageVersionInfo": "{packageVersion} by {packageAuthor}",
|
||||
"Duration": "기간",
|
||||
"Script": "스크립트",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} - 다운로드 클라이언트 선택",
|
||||
"TheLogLevelDefault": "로그 수준의 기본값은 '정보'이며 [일반 설정](/settings/general)에서 변경할 수 있습니다",
|
||||
"UpdaterLogFiles": "업데이트 도구 로그 파일",
|
||||
"CountDownloadClientsSelected": "{count}개의 다운로드 클라이언트를 선택함",
|
||||
"DefaultNameCopiedProfile": "{name} - 복사",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "deluge json url에 접두사를 추가합니다. {url}을(를) 참조하세요",
|
||||
"FailedToFetchUpdates": "업데이트를 가져오는데 실패함",
|
||||
"ApplyChanges": "변경 사항 적용",
|
||||
"Started": "시작됨",
|
||||
"Database": "데이터베이스",
|
||||
"PasswordConfirmation": "비밀번호 확인",
|
||||
"TorrentBlackholeSaveMagnetFiles": "마그넷 파일 저장",
|
||||
"TorrentBlackholeSaveMagnetFilesExtension": "마그넷 파일 확장자 저장",
|
||||
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "마그넷 링크에 사용할 확장자, 기본값은 '.magnet'입니다",
|
||||
"TorrentBlackholeSaveMagnetFilesHelpText": ".torrent 파일을 사용할 수 없는 경우 마그넷 링크를 저장합니다 (다운로드 클라이언트가 파일에 저장된 마그넷을 지원하는 경우에만 유용함)",
|
||||
"AuthenticationMethodHelpTextWarning": "유효한 인증 방법을 선택해주세요",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "새로운 비밀번호를 입력하세요",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "새로운 사용자이름을 입력하세요",
|
||||
"AuthenticationRequiredWarning": "인증 없이 원격 액세스를 방지하기 위해 {appName}은(는) 이제 인증을 활성화해야 합니다. 선택적으로 로컬 주소에서 인증을 비활성화할 수 있습니다.",
|
||||
"CountIndexersSelected": "{count}개의 인덱서를 선택함",
|
||||
"Label": "라벨",
|
||||
"More": "더 보기",
|
||||
"Donate": "기부하기",
|
||||
"Menu": "메뉴",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "qBittorrent의 구성된 콘텐츠 레이아웃을 사용할지, 토런트의 원래 레이아웃을 사용할지, 항상 하위 폴더를 생성할지(qBittorrent 4.3.2+)",
|
||||
"DownloadClientSettingsAddPaused": "일시 중지 추가",
|
||||
"SecretToken": "비밀 토큰",
|
||||
"NoDownloadClientsFound": "다운로드 클라이언트를 찾을 수 없음",
|
||||
"PrioritySettings": "우선 순위: {0}"
|
||||
}
|
||||
|
||||
@@ -160,5 +160,7 @@
|
||||
"AptUpdater": "Bruk apt til å installere oppdateringen",
|
||||
"Discord": "Discord",
|
||||
"AddCustomFilter": "Legg til eget filter",
|
||||
"Clone": "Lukk"
|
||||
"Clone": "Lukk",
|
||||
"AddDownloadClientImplementation": "Ny Nedlastingsklient - {implementationName}",
|
||||
"History": "Historikk"
|
||||
}
|
||||
|
||||
@@ -438,7 +438,7 @@
|
||||
"DownloadClientPriorityHelpText": "Geef prioriteit aan meerdere downloaders. Round-Robin wordt gebruikt voor downloaders met dezelfde prioriteit.",
|
||||
"Genre": "Genres",
|
||||
"Year": "Jaar",
|
||||
"UpdateAvailableHealthCheckMessage": "Nieuwe update is beschikbaar",
|
||||
"UpdateAvailableHealthCheckMessage": "Nieuwe update is beschikbaar: {version}",
|
||||
"Label": "Label",
|
||||
"Publisher": "Uitgever",
|
||||
"ApplyChanges": "Pas Wijzigingen Toe",
|
||||
|
||||
@@ -357,7 +357,7 @@
|
||||
"DeleteSelectedIndexersMessageText": "Czy na pewno chcesz usunąć indeksator „{0}”?",
|
||||
"DownloadClientPriorityHelpText": "Nadaj priorytet wielu klientom pobierania. W przypadku klientów o tym samym priorytecie używane jest działanie okrężne.",
|
||||
"Track": "Ślad",
|
||||
"UpdateAvailableHealthCheckMessage": "Dostępna jest aktualizacja",
|
||||
"UpdateAvailableHealthCheckMessage": "Dostępna jest aktualizacja: {version}",
|
||||
"Genre": "Gatunki",
|
||||
"ApplyChanges": "Zastosuj zmiany",
|
||||
"ApiKeyValidationHealthCheckMessage": "Zaktualizuj swój klucz API aby był długi na co najmniej {length} znaków. Możesz to zrobić poprzez ustawienia lub plik konfiguracyjny",
|
||||
|
||||
@@ -431,7 +431,7 @@
|
||||
"Season": "Temporada",
|
||||
"Theme": "Tema",
|
||||
"Track": "Rastreio",
|
||||
"UpdateAvailableHealthCheckMessage": "Nova atualização disponível",
|
||||
"UpdateAvailableHealthCheckMessage": "Nova atualização disponível: {version}",
|
||||
"Label": "Rótulo",
|
||||
"ConnectionLostReconnect": "O {appName} tentará ligar-se automaticamente, ou você pode clicar em Recarregar abaixo.",
|
||||
"ConnectionLostToBackend": "O {appName} perdeu a ligação com o back-end e precisará ser recarregado para restaurar a funcionalidade.",
|
||||
@@ -503,5 +503,10 @@
|
||||
"UpdateAppDirectlyLoadError": "Não foi possível atualizar o {appName} diretamente,",
|
||||
"InstallLatest": "Instalar o mais recente",
|
||||
"CurrentlyInstalled": "Atualmente instalado",
|
||||
"Mixed": "Corrigido"
|
||||
"Mixed": "Corrigido",
|
||||
"FailedToFetchSettings": "Falha ao obter as definições",
|
||||
"FailedToFetchUpdates": "Falha a obter atualizações",
|
||||
"External": "Externo",
|
||||
"Categories": "Categorias",
|
||||
"days": "dias"
|
||||
}
|
||||
|
||||
@@ -794,7 +794,7 @@
|
||||
"LogFilesLocation": "Os arquivos de log estão localizados em: {location}",
|
||||
"Logout": "Sair",
|
||||
"NoEventsFound": "Nenhum evento encontrado",
|
||||
"TheLogLevelDefault": "O nível de registro é padronizado como 'Info' e pode ser alterado em [Configurações Gerais](/settings/general)",
|
||||
"TheLogLevelDefault": "O nível de log padrão é ' Debug ' e pode ser alterado em [ Configurações gerais](/ configurações/geral)",
|
||||
"UpdateAppDirectlyLoadError": "Incapaz de atualizar o {appName} diretamente,",
|
||||
"UpdaterLogFiles": "Arquivos de log do atualizador",
|
||||
"WouldYouLikeToRestoreBackup": "Gostaria de restaurar o backup '{name}'?",
|
||||
@@ -806,5 +806,6 @@
|
||||
"InstallMajorVersionUpdateMessageLink": "Verifique [{domain}]({url}) para obter mais informações.",
|
||||
"FailedToFetchSettings": "Falha ao obter configurações",
|
||||
"CurrentlyInstalled": "Atualmente instalado",
|
||||
"PreviouslyInstalled": "Instalado anteriormente"
|
||||
"PreviouslyInstalled": "Instalado anteriormente",
|
||||
"DownloadClientUTorrentProviderMessage": "O uTorrent tem um histórico de incluir criptomineradores, malware e anúncios, recomendamos que você escolha outro cliente de download."
|
||||
}
|
||||
|
||||
@@ -806,5 +806,6 @@
|
||||
"InstallMajorVersionUpdateMessage": "Это обновление установит новую версию, которая может не поддерживаться вашей системой. Вы уверены, что хотите установить это обновление?",
|
||||
"FailedToFetchSettings": "Не удалось загрузить настройки",
|
||||
"CurrentlyInstalled": "Установлено",
|
||||
"PreviouslyInstalled": "Ранее установленный"
|
||||
"PreviouslyInstalled": "Ранее установленный",
|
||||
"DownloadClientUTorrentProviderMessage": "Мы настоятельно советуем не использовать uTorrent, т.к. он известен как программа-шифровальщик и в целом вредоносное ПО."
|
||||
}
|
||||
|
||||
@@ -544,7 +544,7 @@
|
||||
"LogFilesLocation": "Log kayıtlarının bulunduğu konum: {location}",
|
||||
"NoEventsFound": "Etkinlik bulunamadı",
|
||||
"RestartReloadNote": "Not: {appName} geri yükleme işlemi sırasında otomatik olarak yeniden başlatılacak ve kullanıcı arayüzünü yeniden yükleyecektir.",
|
||||
"TheLogLevelDefault": "Log seviyesi varsayılan olarak 'Bilgi' şeklindedir ve [Genel Ayarlar](/ayarlar/genel) bölümünden değiştirilebilir",
|
||||
"TheLogLevelDefault": "Günlük düzeyi varsayılan olarak 'Hata Ayıklama'dır ve [Genel Ayarlar](/ayarlar/genel) bölümünden değiştirilebilir",
|
||||
"UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor,",
|
||||
"DockerUpdater": "Güncellemeyi almak için docker konteynerini güncelleyin",
|
||||
"FailedToFetchUpdates": "Güncellemeler alınamadı",
|
||||
@@ -806,5 +806,6 @@
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Kullanıcı ve Torrent izinlerine sahip olmalısınız",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Grup adlarına göre sürüm ara",
|
||||
"IndexerHealthCheckNoIndexers": "Hiçbir indeksleyici etkinleştirilmedi, {appName} arama sonuçlarını döndürmeyecek",
|
||||
"QueryType": "Sorgu Türü"
|
||||
"QueryType": "Sorgu Türü",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent'in kripto para madenciliği, kötü amaçlı yazılım ve reklam içerme geçmişi vardır, bu nedenle farklı bir istemci seçmenizi önemle tavsiye ederiz."
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@
|
||||
"More": "Більше",
|
||||
"Track": "Трасувати",
|
||||
"Year": "Рік",
|
||||
"UpdateAvailableHealthCheckMessage": "Доступне нове оновлення",
|
||||
"UpdateAvailableHealthCheckMessage": "Доступне нове оновлення: {version}",
|
||||
"Genre": "Жанри",
|
||||
"ConnectionLostReconnect": "{appName} спробує підключитися автоматично, або ви можете натиснути «Перезавантажити» нижче.",
|
||||
"ConnectionLostToBackend": "{appName} втратив з’єднання з серверною частиною, і його потрібно перезавантажити, щоб відновити роботу.",
|
||||
@@ -441,5 +441,111 @@
|
||||
"CurrentlyInstalled": "В даний час встановлено",
|
||||
"Season": "Причина",
|
||||
"Stats": "Статус",
|
||||
"CountIndexersSelected": "{count} індексер(-и) обрано"
|
||||
"CountIndexersSelected": "{count} індексер(-и) обрано",
|
||||
"SeedRatio": "Коефіцієнт роздачі",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Якщо торрент заблоковано хешем, він може не бути належним чином відхилений під час RSS/пошуку для деяких індексаторів. Увімкнення цього параметра дозволить відхилити його після захоплення торента, але до його відправки клієнту.",
|
||||
"MinimumSeeders": "Мінімум сидерів (роздаючих)",
|
||||
"SeedTime": "Час сидіння",
|
||||
"Author": "Автор",
|
||||
"OnHealthRestoredHelpText": "При відновленні стану",
|
||||
"IndexerHDBitsSettingsOriginsHelpText": "Якщо не вказано, використовуються всі параметри.",
|
||||
"days": "дні(в)",
|
||||
"XmlRpcPath": "Шлях XML RPC",
|
||||
"Directory": "Тека",
|
||||
"DownloadClientFreeboxSettingsAppId": "ID додатку",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Перше і останнє спочатку",
|
||||
"FailedToFetchUpdates": "Не вдалося завантажити оновлення",
|
||||
"OverrideGrabModalTitle": "Перевизначити та захопити - {title}",
|
||||
"UpdaterLogFiles": "Файли журналу оновлення",
|
||||
"UseSsl": "Використовувати SSL",
|
||||
"WouldYouLikeToRestoreBackup": "Бажаєте відновити резервну копію '{name}'?",
|
||||
"DownloadClientSettingsInitialState": "Початковий стан",
|
||||
"Install": "Встановити",
|
||||
"InstallMajorVersionUpdateMessage": "Це оновлення встановить нову основну версію і може бути несумісним з вашою системою. Ви впевнені, що хочете встановити це оновлення?",
|
||||
"Logout": "Завершити сеанс",
|
||||
"NoDownloadClientsFound": "Клієнти завантаження не знайдено",
|
||||
"PackageVersionInfo": "{packageVersion} створено {packageAuthor}",
|
||||
"SecretToken": "Таємний токен",
|
||||
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Додає властивості мультимедіа у вигляді тегів. Підказки є прикладами.",
|
||||
"DownloadClientRTorrentSettingsUrlPathHelpText": "Шлях до кінцевої точки XMLRPC див. {url}. Зазвичай це RPC2 або [шлях до ruTorrent]{url2}, коли використовується ruTorrent.",
|
||||
"DownloadClientSettingsAddPaused": "Додати призупинені",
|
||||
"FailedToFetchSettings": "Не вдалося отримати налаштування",
|
||||
"IndexerNewznabSettingsAdditionalParametersHelpText": "Додаткові параметри Newznab",
|
||||
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Ця тека повинна бути доступна з XBMC",
|
||||
"DownloadClientPneumaticSettingsStrmFolder": "Тека STRM",
|
||||
"DownloadClientPneumaticSettingsStrmFolderHelpText": "Файли .strm у цій теці будуть імпортовані дроном",
|
||||
"InfoUrl": "URL-адреса інформації",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent має історію включення криптомайнерів, шкідливого програмного забезпечення та реклами. Ми наполегливо рекомендуємо вибрати інший клієнт.",
|
||||
"EditSelectedDownloadClients": "Редагувати вибрані клієнти завантаження",
|
||||
"IndexerHDBitsSettingsMediumsHelpText": "Якщо не вказано, використовуються всі параметри.",
|
||||
"IndexerSettingsAdditionalParameters": "Додаткові параметри",
|
||||
"IndexerSettingsCookie": "Cookie",
|
||||
"InstallMajorVersionUpdateMessageLink": "Будь ласка, перевірте [{domain}]({url}) для отримання додаткової інформації.",
|
||||
"InvalidUILanguage": "У вашому інтерфейсі встановлена недопустима мова. Виправте її та збережіть налаштування",
|
||||
"LogFilesLocation": "Файли журналу знаходяться в: {location}",
|
||||
"Menu": "Меню",
|
||||
"OnHealthRestored": "При відновленні стану",
|
||||
"PasswordConfirmation": "Підтвердження пароля",
|
||||
"PreviouslyInstalled": "Раніше встановлений",
|
||||
"LogSizeLimit": "Обмеження розміру журналу",
|
||||
"LogSizeLimitHelpText": "Максимальний розмір файлу журналу в МБ перед архівацією. За замовчуванням - 1 МБ.",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} - Вибрати клієнт завантаження",
|
||||
"IndexerSettingsApiPath": "Шлях API",
|
||||
"IndexerSettingsApiPathHelpText": "Шлях до API, зазвичай {url}",
|
||||
"IndexerSettingsApiUser": "API Користувач",
|
||||
"Implementation": "Реалізація",
|
||||
"ManageDownloadClients": "Керування клієнтами завантаження",
|
||||
"No": "Ні",
|
||||
"IndexerSettingsSeedRatioHelpText": "Рейтинг, якого має досягти торрент перед зупинкою. Якщо порожньо — використовується значення за замовчуванням клієнта завантаження. Рейтинг має бути не менше 1,0 і відповідати правилам індексаторів",
|
||||
"IndexerSettingsSeedTimeHelpText": "Час, протягом якого торрент має залишатися на роздачі перед зупинкою, якщо порожньо — використовується значення клієнта завантаження за замовчуванням",
|
||||
"NotificationsTelegramSettingsIncludeAppName": "Включити {appName} у заголовок",
|
||||
"NotificationsTelegramSettingsIncludeAppNameHelpText": "При необхідності додати до заголовка повідомлення префікс {appName}, щоб відрізняти сповіщення від різних додатків",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Макет контента",
|
||||
"External": "Зовнішній",
|
||||
"TorrentBlackholeTorrentFolder": "Тека торрента",
|
||||
"Donate": "Задонатити",
|
||||
"EditSelectedIndexers": "Редагувати вибраний індексатор",
|
||||
"IndexerSettingsSeedTime": "Час сидіння",
|
||||
"Label": "Мітка",
|
||||
"LabelIsRequired": "Необхідна мітка",
|
||||
"UsenetBlackholeNzbFolder": "Тека NZB",
|
||||
"NoHistoryFound": "Історія не знайдена",
|
||||
"NoIndexersFound": "Индексаторі не знайдено",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Для роботи цього параметра потрібна версія NzbGet не нижче 16.0",
|
||||
"DownloadClientPneumaticSettingsNzbFolder": "Тека NZB",
|
||||
"IndexerHDBitsSettingsCodecsHelpText": "Якщо не вказано, використовуються всі параметри.",
|
||||
"DefaultNameCopiedProfile": "{name} - Копіювати",
|
||||
"Destination": "Місце призначення",
|
||||
"DownloadClientFloodSettingsTagsHelpText": "Початкові теги завантаження. Щоб бути розпізнаним, завантаження повинно мати всі початкові теги. Це запобігає конфліктам з незв'язаними завантаженнями.",
|
||||
"DownloadClientFreeboxSettingsAppIdHelpText": "ID програми, отримане під час створення доступу до Freebox API (наприклад, 'app_id')",
|
||||
"DownloadClientFreeboxSettingsAppToken": "Токен додатку",
|
||||
"DownloadClientFreeboxSettingsAppTokenHelpText": "Токен додатку, отриманий під час створення доступу до Freebox API (наприклад, 'app_token')",
|
||||
"DownloadClientFreeboxSettingsHostHelpText": "Ім'я хоста або IP-адреса хоста Freebox, за замовчуванням — '{url}' (працює тільки якщо знаходиться в тій самій мережі)",
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "Порт, що використовується для доступу до інтерфейсу Freebox, за замовчуванням — '{port}'",
|
||||
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Початковий стан торрентів, доданих до qBittorrent. Зверніть увагу, що примусові торренти не дотримуються обмежень на роздачу",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrder": "Завантажувати послідовно",
|
||||
"DownloadClientRTorrentSettingsAddStopped": "Додати зупинені",
|
||||
"DownloadClientRTorrentSettingsAddStoppedHelpText": "Увімкнення додасть торренти та магнет-посилання в rTorrent у зупиненому стані. Це може призвести до пошкодження магнет-файлів.",
|
||||
"DownloadClientRTorrentSettingsUrlPath": "URL-путь",
|
||||
"NotificationsEmailSettingsUseEncryptionHelpText": "Виберіть режим шифрування: віддавати перевагу шифруванню, якщо воно налаштоване на сервері; завжди використовувати шифрування через SSL (тільки порт 465) або StartTLS (будь-який інший порт); ніколи не використовувати шифрування",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Вкажіть базову URL-адресу Freebox API з версією API, наприклад, '{url}', за замовчуванням — '{defaultApiUrl}'",
|
||||
"DownloadClientSettingsDestinationHelpText": "Ручне налаштування місця для завантаження, залиште порожнім для використання значення за замовчуванням",
|
||||
"DownloadClientSettingsUseSslHelpText": "Використовувати захищене з'єднання при підключенні до {clientName}",
|
||||
"HealthMessagesInfoBox": "Додаткову інформацію про причину появи цих повідомлень перевірки працездатності можна знайти, перейшовши за посиланням wiki (іконка книги) в кінці рядка або перевірити [журнали]({link}). Якщо у вас виникли труднощі з розумінням цих повідомлень, ви можете звернутися до нашої служби підтримки за посиланнями нижче.",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Індексатори з недопустимими клієнтами завантаження: {indexerNames}.",
|
||||
"Episode": "Епізод",
|
||||
"InstallMajorVersionUpdate": "Встановити оновлення",
|
||||
"ManageClients": "Керування клієнтами",
|
||||
"PrioritySettings": "Пріоритет: {0}",
|
||||
"IndexerPassThePopcornSettingsApiUserHelpText": "Ці налаштування можна знайти в налаштуваннях безпеки вашого PassThePopcorn (Редагувати профіль > Безпека).",
|
||||
"NotificationsEmailSettingsUseEncryption": "Використовувати шифрування",
|
||||
"TorrentBlackholeSaveMagnetFiles": "Зберігати магнітні файли",
|
||||
"TorrentBlackholeSaveMagnetFilesExtension": "Зберегти магнет-файли з розширенням",
|
||||
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Розширення для магнет-посилань, за замовчуванням '.magnet'",
|
||||
"TorrentBlackholeSaveMagnetFilesHelpText": "Зберегти магнет-посилання, якщо файл .torrent недоступний (корисно тільки в разі, якщо клієнт завантаження підтримує магнет-посилання, збережені у файлі)",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "Додає префікс до URL-адреси json, {url}",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Додає префікс до URL-адреси RPC {clientName}, наприклад {url}, за замовчуванням — '{defaultUrl}'",
|
||||
"IndexerSettingsSeedRatio": "Коефіцієнт роздачі",
|
||||
"ManualGrab": "Захват вручну",
|
||||
"StopSelecting": "Скасувати вибір"
|
||||
}
|
||||
|
||||
@@ -464,7 +464,7 @@
|
||||
"UnsavedChanges": "未保存更改",
|
||||
"UnselectAll": "取消全选",
|
||||
"UpdateAutomaticallyHelpText": "自动下载并安装更新。您还可以在「“系统”->“更新”」中安装",
|
||||
"UpdateAvailableHealthCheckMessage": "有新的更新可用",
|
||||
"UpdateAvailableHealthCheckMessage": "有新的更新可用: {version}",
|
||||
"UpdateStartupNotWritableHealthCheckMessage": "无法安装更新,因为用户“{userName}”对于启动文件夹“{startupFolder}”没有写入权限。",
|
||||
"UpdateStartupTranslocationHealthCheckMessage": "无法安装更新,因为启动文件夹“{0}”在一个应用程序迁移文件夹。Cannot install update because startup folder '{startupFolder}' is in an App Translocation folder.",
|
||||
"UpdateUiNotWritableHealthCheckMessage": "无法安装升级,因为用户“{userName}”不可写入界面文件夹“{uiFolder}”。",
|
||||
@@ -753,5 +753,6 @@
|
||||
"IndexerHDBitsSettingsUsernameHelpText": "网站用户名",
|
||||
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "只搜索免费发布",
|
||||
"IndexerFileListSettingsFreeleechOnlyHelpText": "只搜索免费发布",
|
||||
"IndexerFileListSettingsUsernameHelpText": "网站用户名"
|
||||
"IndexerFileListSettingsUsernameHelpText": "网站用户名",
|
||||
"IndexerBeyondHDSettingsRefundOnlyHelpText": "Search refund only"
|
||||
}
|
||||
|
||||
@@ -2,5 +2,8 @@
|
||||
"About": "关于",
|
||||
"Add": "添加",
|
||||
"Analytics": "分析",
|
||||
"Username": "用户名"
|
||||
"Username": "用户名",
|
||||
"AcceptConfirmationModal": "中文",
|
||||
"Backup": "备份",
|
||||
"BackupNow": "立即备份"
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace NzbDrone.Core.Notifications.Apprise
|
||||
{
|
||||
if (httpException.Response.StatusCode == HttpStatusCode.Unauthorized)
|
||||
{
|
||||
_logger.Error(ex, $"HTTP Auth credentials are invalid: {0}", ex.Message);
|
||||
_logger.Error(ex, "HTTP Auth credentials are invalid: {0}", ex.Message);
|
||||
return new ValidationFailure("AuthUsername", $"HTTP Auth credentials are invalid: {ex.Message}");
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ namespace NzbDrone.Core.Notifications.Apprise
|
||||
{
|
||||
var error = Json.Deserialize<AppriseError>(httpException.Response.Content);
|
||||
|
||||
_logger.Error(ex, $"Unable to send test message. Response from API: {0}", error.Error);
|
||||
_logger.Error(ex, "Unable to send test message. Response from API: {0}", error.Error);
|
||||
return new ValidationFailure(string.Empty, $"Unable to send test message. Response from API: {error.Error}");
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using FluentValidation.Results;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Disk;
|
||||
@@ -38,7 +39,31 @@ namespace NzbDrone.Core.Notifications.CustomScript
|
||||
|
||||
public override string Link => "https://wiki.servarr.com/prowlarr/settings#connections";
|
||||
|
||||
public override ProviderMessage Message => new ProviderMessage("Testing will execute the script with the EventType set to Test, ensure your script handles this correctly", ProviderMessageType.Warning);
|
||||
public override ProviderMessage Message => new ("Testing will execute the script with the EventType set to Test, ensure your script handles this correctly", ProviderMessageType.Warning);
|
||||
|
||||
public override void OnGrab(GrabMessage message)
|
||||
{
|
||||
var environmentVariables = new StringDictionary();
|
||||
|
||||
environmentVariables.Add("Prowlarr_EventType", "Grab");
|
||||
environmentVariables.Add("Prowlarr_InstanceName", _configFileProvider.InstanceName);
|
||||
environmentVariables.Add("Prowlarr_ApplicationUrl", _configService.ApplicationUrl);
|
||||
environmentVariables.Add("Prowlarr_Release_Title", message.Release.Title);
|
||||
environmentVariables.Add("Prowlarr_Release_Indexer", message.Release.Indexer ?? string.Empty);
|
||||
environmentVariables.Add("Prowlarr_Release_Size", message.Release.Size.ToString());
|
||||
environmentVariables.Add("Prowlarr_Release_Genres", string.Join("|", message.Release.Genres));
|
||||
environmentVariables.Add("Prowlarr_Release_Categories", string.Join("|", message.Release.Categories.Select(f => f.Name)));
|
||||
environmentVariables.Add("Prowlarr_Release_IndexerFlags", string.Join("|", message.Release.IndexerFlags.Select(f => f.Name)));
|
||||
environmentVariables.Add("Prowlarr_Release_PublishDate", message.Release.PublishDate.ToUniversalTime().ToString("s") + "Z");
|
||||
environmentVariables.Add("Prowlarr_Download_Client", message.DownloadClientName ?? string.Empty);
|
||||
environmentVariables.Add("Prowlarr_Download_Client_Type", message.DownloadClientType ?? string.Empty);
|
||||
environmentVariables.Add("Prowlarr_Download_Id", message.DownloadId ?? string.Empty);
|
||||
environmentVariables.Add("Prowlarr_Source", message.Source ?? string.Empty);
|
||||
environmentVariables.Add("Prowlarr_Host", message.Host ?? string.Empty);
|
||||
environmentVariables.Add("Prowlarr_Redirect", message.Redirect.ToString());
|
||||
|
||||
ExecuteScript(environmentVariables);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
@@ -130,10 +155,5 @@ namespace NzbDrone.Core.Notifications.CustomScript
|
||||
|
||||
return processOutput;
|
||||
}
|
||||
|
||||
private bool ValidatePathParent(string possibleParent, string path)
|
||||
{
|
||||
return possibleParent.IsParentPath(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.Notifications.Webhook
|
||||
@@ -13,10 +16,18 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
ReleaseTitle = release.Title;
|
||||
Indexer = release.Indexer;
|
||||
Size = release.Size;
|
||||
Categories = release.Categories.Select(f => f.Name).ToList();
|
||||
Genres = release.Genres.ToList();
|
||||
IndexerFlags = release.IndexerFlags.Select(f => f.Name).ToHashSet();
|
||||
PublishDate = release.PublishDate;
|
||||
}
|
||||
|
||||
public string ReleaseTitle { get; set; }
|
||||
public string Indexer { get; set; }
|
||||
public long? Size { get; set; }
|
||||
public List<string> Categories { get; set; }
|
||||
public List<string> Genres { get; set; }
|
||||
public HashSet<string> IndexerFlags { get; set; }
|
||||
public DateTime? PublishDate { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ namespace NzbDrone.Core.Parser.Model
|
||||
{
|
||||
public ReleaseInfo()
|
||||
{
|
||||
Genres = new List<string>();
|
||||
IndexerFlags = new HashSet<IndexerFlag>();
|
||||
Categories = new List<IndexerCategory>();
|
||||
Languages = new List<string>();
|
||||
|
||||
@@ -11,18 +11,18 @@
|
||||
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.7" />
|
||||
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||
<PackageReference Include="Npgsql" Version="7.0.9" />
|
||||
<PackageReference Include="Polly" Version="8.5.1" />
|
||||
<PackageReference Include="Npgsql" Version="7.0.10" />
|
||||
<PackageReference Include="Polly" Version="8.5.2" />
|
||||
<PackageReference Include="Servarr.FluentMigrator.Runner" Version="3.3.2.9" />
|
||||
<PackageReference Include="Servarr.FluentMigrator.Runner.Postgres" Version="3.3.2.9" />
|
||||
<PackageReference Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.0" />
|
||||
<PackageReference Include="System.Memory" Version="4.6.3" />
|
||||
<PackageReference Include="System.ServiceModel.Syndication" Version="6.0.0" />
|
||||
<PackageReference Include="FluentValidation" Version="9.5.4" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="NLog" Version="5.4.0" />
|
||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.10" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.11" />
|
||||
<PackageReference Include="MonoTorrent" Version="2.0.7" />
|
||||
<PackageReference Include="YamlDotNet" Version="13.1.1" />
|
||||
<PackageReference Include="AngleSharp" Version="1.2.0" />
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
<OutputType>Library</OutputType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.15" />
|
||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" />
|
||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.3" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="7.3.2" />
|
||||
<PackageReference Include="DryIoc.dll" Version="5.4.3" />
|
||||
<PackageReference Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<PackageReference Include="FluentAssertions" Version="6.11.0" />
|
||||
<PackageReference Include="FluentValidation" Version="9.5.4" />
|
||||
<PackageReference Include="Moq" Version="4.17.2" />
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="NLog" Version="5.4.0" />
|
||||
<PackageReference Include="NUnit" Version="3.14.0" />
|
||||
<PackageReference Include="RestSharp" Version="106.15.0" />
|
||||
<PackageReference Include="RestSharp.Serializers.SystemTextJson" Version="106.15.0" />
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DryIoc.dll" Version="5.4.3" />
|
||||
<PackageReference Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" />
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="NLog" Version="5.4.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\NzbDrone.Common\Prowlarr.Common.csproj" />
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="NLog" Version="5.4.0" />
|
||||
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Download;
|
||||
using NzbDrone.SignalR;
|
||||
using Prowlarr.Http;
|
||||
@@ -13,6 +14,7 @@ namespace Prowlarr.Api.V1.DownloadClient
|
||||
public DownloadClientController(IBroadcastSignalRMessage signalRBroadcaster, IDownloadClientFactory downloadClientFactory)
|
||||
: base(signalRBroadcaster, downloadClientFactory, "downloadclient", ResourceMapper, BulkResourceMapper)
|
||||
{
|
||||
SharedValidator.RuleFor(c => c.Priority).InclusiveBetween(1, 50);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user