mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2026-04-18 21:55:12 -04:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3c7575b58e | |||
| 93d8f81750 | |||
| 364c7c9c7e | |||
| 54af7fd3d0 | |||
| e6bc7fa062 | |||
| 98608e75a6 | |||
| 160320f3a2 | |||
| c9baaf634e | |||
| 8bf2f68abe | |||
| 9434091912 | |||
| 2f7d821d45 | |||
| 471c9910a0 | |||
| 98ff2f5cb6 | |||
| 4d9982872a | |||
| ae9326480e | |||
| 624cbd548f | |||
| f5f98e4f53 | |||
| 8585dd447e | |||
| dfffb3aa4e |
+4
-3
@@ -9,7 +9,7 @@ variables:
|
|||||||
testsFolder: './_tests'
|
testsFolder: './_tests'
|
||||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||||
majorVersion: '2.1.2'
|
majorVersion: '2.1.3'
|
||||||
minorVersion: $[counter('minorVersion', 1)]
|
minorVersion: $[counter('minorVersion', 1)]
|
||||||
prowlarrVersion: '$(majorVersion).$(minorVersion)'
|
prowlarrVersion: '$(majorVersion).$(minorVersion)'
|
||||||
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
|
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
|
||||||
@@ -1158,7 +1158,7 @@ stages:
|
|||||||
extraProperties: |
|
extraProperties: |
|
||||||
sonar.exclusions=**/obj/**,**/*.dll,**/NzbDrone.Core.Test/Files/**/*,./frontend/**,**/ExternalModules/**,./src/Libraries/**
|
sonar.exclusions=**/obj/**,**/*.dll,**/NzbDrone.Core.Test/Files/**/*,./frontend/**,**/ExternalModules/**,./src/Libraries/**
|
||||||
sonar.coverage.exclusions=**/Prowlarr.Api.V1/**/*
|
sonar.coverage.exclusions=**/Prowlarr.Api.V1/**/*
|
||||||
sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml
|
sonar.cs.cobertura.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.cobertura.xml
|
||||||
sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml
|
sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml
|
||||||
- bash: |
|
- bash: |
|
||||||
./build.sh --backend -f net8.0 -r win-x64
|
./build.sh --backend -f net8.0 -r win-x64
|
||||||
@@ -1170,10 +1170,11 @@ stages:
|
|||||||
- task: reportgenerator@5
|
- task: reportgenerator@5
|
||||||
displayName: Generate Coverage Report
|
displayName: Generate Coverage Report
|
||||||
inputs:
|
inputs:
|
||||||
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'
|
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.cobertura.xml'
|
||||||
targetdir: '$(Build.SourcesDirectory)/CoverageResults/combined'
|
targetdir: '$(Build.SourcesDirectory)/CoverageResults/combined'
|
||||||
reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
|
reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
|
||||||
publishCodeCoverageResults: true
|
publishCodeCoverageResults: true
|
||||||
|
sourcedirs: src
|
||||||
|
|
||||||
- stage: Report_Out
|
- stage: Report_Out
|
||||||
dependsOn:
|
dependsOn:
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
.modal {
|
.modal {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
max-width: 90%;
|
||||||
max-height: 90%;
|
max-height: 90%;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
import { useSelector } from 'react-redux';
|
||||||
|
import { createSelector } from 'reselect';
|
||||||
|
import AppState from 'App/State/AppState';
|
||||||
|
import themes from 'Styles/Themes';
|
||||||
|
|
||||||
|
function createThemeSelector() {
|
||||||
|
return createSelector(
|
||||||
|
(state: AppState) => state.settings.ui.item.theme || window.Prowlarr.theme,
|
||||||
|
(theme) => theme
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const useTheme = () => {
|
||||||
|
const selectedTheme = useSelector(createThemeSelector());
|
||||||
|
const [resolvedTheme, setResolvedTheme] = useState(selectedTheme);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (selectedTheme !== 'auto') {
|
||||||
|
setResolvedTheme(selectedTheme);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const applySystemTheme = () => {
|
||||||
|
setResolvedTheme(
|
||||||
|
window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||||
|
? 'dark'
|
||||||
|
: 'light'
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
applySystemTheme();
|
||||||
|
|
||||||
|
window
|
||||||
|
.matchMedia('(prefers-color-scheme: dark)')
|
||||||
|
.addEventListener('change', applySystemTheme);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window
|
||||||
|
.matchMedia('(prefers-color-scheme: dark)')
|
||||||
|
.removeEventListener('change', applySystemTheme);
|
||||||
|
};
|
||||||
|
}, [selectedTheme]);
|
||||||
|
|
||||||
|
return resolvedTheme;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useTheme;
|
||||||
|
|
||||||
|
export const useThemeColor = (color: string) => {
|
||||||
|
const theme = useTheme();
|
||||||
|
const themeVariables = themes[theme];
|
||||||
|
|
||||||
|
// @ts-expect-error - themeVariables is a string indexable type
|
||||||
|
return themeVariables[color];
|
||||||
|
};
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
|
|
||||||
<Deterministic Condition="$(AssemblyVersion.EndsWith('*'))">False</Deterministic>
|
<Deterministic Condition="$(AssemblyVersion.EndsWith('*'))">False</Deterministic>
|
||||||
|
|
||||||
<PathMap>$(MSBuildProjectDirectory)=./$(MSBuildProjectName)/</PathMap>
|
<PathMap>$(MSBuildThisFileDirectory)=./</PathMap>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<!-- Set the AssemblyConfiguration attribute for projects -->
|
<!-- Set the AssemblyConfiguration attribute for projects -->
|
||||||
@@ -123,14 +123,11 @@
|
|||||||
|
|
||||||
<!-- Standard testing packages -->
|
<!-- Standard testing packages -->
|
||||||
<ItemGroup Condition="'$(TestProject)'=='true'">
|
<ItemGroup Condition="'$(TestProject)'=='true'">
|
||||||
|
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
||||||
<PackageReference Include="NUnit" Version="3.14.0" />
|
<PackageReference Include="NUnit" Version="3.14.0" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
<PackageReference Include="NUnit3TestAdapter" Version="5.1.0" />
|
||||||
<PackageReference Include="NunitXml.TestLogger" Version="3.0.131" />
|
<PackageReference Include="NunitXml.TestLogger" Version="3.1.20" />
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TestProject)'=='true' and '$(TargetFramework)'=='net8.0'">
|
|
||||||
<PackageReference Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(ProwlarrProject)'=='true' and '$(EnableAnalyzers)'=='false'">
|
<PropertyGroup Condition="'$(ProwlarrProject)'=='true' and '$(EnableAnalyzers)'=='false'">
|
||||||
|
|||||||
@@ -5,8 +5,6 @@
|
|||||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
||||||
<add key="dotnet-bsd-crossbuild" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/dotnet-bsd-crossbuild/nuget/v3/index.json" />
|
<add key="dotnet-bsd-crossbuild" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/dotnet-bsd-crossbuild/nuget/v3/index.json" />
|
||||||
<add key="Mono.Posix.NETStandard" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/Mono.Posix.NETStandard/nuget/v3/index.json" />
|
<add key="Mono.Posix.NETStandard" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/Mono.Posix.NETStandard/nuget/v3/index.json" />
|
||||||
<add key="SQLite" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/SQLite/nuget/v3/index.json" />
|
|
||||||
<add key="coverlet-nightly" value="https://pkgs.dev.azure.com/Servarr/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json" />
|
|
||||||
<add key="FluentMigrator" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/FluentMigrator/nuget/v3/index.json" />
|
<add key="FluentMigrator" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/FluentMigrator/nuget/v3/index.json" />
|
||||||
</packageSources>
|
</packageSources>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|||||||
@@ -16,9 +16,10 @@
|
|||||||
<PackageReference Include="Sentry" Version="4.0.2" />
|
<PackageReference Include="Sentry" Version="4.0.2" />
|
||||||
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
||||||
<PackageReference Include="System.Text.Json" Version="8.0.5" />
|
<PackageReference Include="SourceGear.sqlite3" Version="3.50.4.2" />
|
||||||
|
<PackageReference Include="System.Data.SQLite" Version="2.0.1" />
|
||||||
|
<PackageReference Include="System.Text.Json" Version="8.0.6" />
|
||||||
<PackageReference Include="System.ValueTuple" Version="4.6.1" />
|
<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="8.0.1" />
|
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.1" />
|
||||||
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
|
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
|
||||||
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
|
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
|
||||||
|
|||||||
@@ -15,24 +15,24 @@ namespace NzbDrone.Core.Test.Http
|
|||||||
return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com,172.16.0.0/12", true, null, null);
|
return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com,172.16.0.0/12", true, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[TestCase("http://eu.httpbin.org/get")]
|
||||||
public void should_bypass_proxy()
|
[TestCase("http://google.com/get")]
|
||||||
|
[TestCase("http://localhost:8654/get")]
|
||||||
|
[TestCase("http://172.21.0.1:8989/api/v3/indexer/schema")]
|
||||||
|
public void should_bypass_proxy(string url)
|
||||||
{
|
{
|
||||||
var settings = GetProxySettings();
|
var settings = GetProxySettings();
|
||||||
|
|
||||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://eu.httpbin.org/get")).Should().BeTrue();
|
Subject.ShouldProxyBeBypassed(settings, new HttpUri(url)).Should().BeTrue();
|
||||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://google.com/get")).Should().BeTrue();
|
|
||||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://localhost:8654/get")).Should().BeTrue();
|
|
||||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.21.0.1:8989/api/v3/indexer/schema")).Should().BeTrue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[TestCase("http://bing.com/get")]
|
||||||
public void should_not_bypass_proxy()
|
[TestCase("http://172.3.0.1:8989/api/v3/indexer/schema")]
|
||||||
|
public void should_not_bypass_proxy(string url)
|
||||||
{
|
{
|
||||||
var settings = GetProxySettings();
|
var settings = GetProxySettings();
|
||||||
|
|
||||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://bing.com/get")).Should().BeFalse();
|
Subject.ShouldProxyBeBypassed(settings, new HttpUri(url)).Should().BeFalse();
|
||||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.3.0.1:8989/api/v3/indexer/schema")).Should().BeFalse();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dapper" Version="2.1.66" />
|
<PackageReference Include="Dapper" Version="2.1.66" />
|
||||||
<PackageReference Include="NBuilder" Version="6.1.0" />
|
<PackageReference Include="NBuilder" Version="6.1.0" />
|
||||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
|
||||||
<PackageReference Include="YamlDotNet" Version="16.3.0" />
|
<PackageReference Include="YamlDotNet" Version="16.3.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,13 +1,18 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.SQLite;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Dapper;
|
using Dapper;
|
||||||
|
using NLog;
|
||||||
|
using NzbDrone.Common.Instrumentation;
|
||||||
using NzbDrone.Core.Datastore.Events;
|
using NzbDrone.Core.Datastore.Events;
|
||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
|
using Polly;
|
||||||
|
using Polly.Retry;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Datastore
|
namespace NzbDrone.Core.Datastore
|
||||||
{
|
{
|
||||||
@@ -40,12 +45,31 @@ namespace NzbDrone.Core.Datastore
|
|||||||
public class BasicRepository<TModel> : IBasicRepository<TModel>
|
public class BasicRepository<TModel> : IBasicRepository<TModel>
|
||||||
where TModel : ModelBase, new()
|
where TModel : ModelBase, new()
|
||||||
{
|
{
|
||||||
|
private static readonly ILogger Logger = NzbDroneLogger.GetLogger(typeof(BasicRepository<TModel>));
|
||||||
|
|
||||||
private readonly IEventAggregator _eventAggregator;
|
private readonly IEventAggregator _eventAggregator;
|
||||||
private readonly PropertyInfo _keyProperty;
|
private readonly PropertyInfo _keyProperty;
|
||||||
private readonly List<PropertyInfo> _properties;
|
private readonly List<PropertyInfo> _properties;
|
||||||
private readonly string _updateSql;
|
private readonly string _updateSql;
|
||||||
private readonly string _insertSql;
|
private readonly string _insertSql;
|
||||||
|
|
||||||
|
private static ResiliencePipeline RetryStrategy => new ResiliencePipelineBuilder()
|
||||||
|
.AddRetry(new RetryStrategyOptions
|
||||||
|
{
|
||||||
|
ShouldHandle = new PredicateBuilder().Handle<SQLiteException>(ex => ex.ResultCode == SQLiteErrorCode.Busy),
|
||||||
|
Delay = TimeSpan.FromMilliseconds(100),
|
||||||
|
MaxRetryAttempts = 3,
|
||||||
|
BackoffType = DelayBackoffType.Exponential,
|
||||||
|
UseJitter = true,
|
||||||
|
OnRetry = args =>
|
||||||
|
{
|
||||||
|
Logger.Warn(args.Outcome.Exception, "Failed writing to database. Retry #{0}", args.AttemptNumber);
|
||||||
|
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.Build();
|
||||||
|
|
||||||
protected readonly IDatabase _database;
|
protected readonly IDatabase _database;
|
||||||
protected readonly string _table;
|
protected readonly string _table;
|
||||||
|
|
||||||
@@ -186,7 +210,9 @@ namespace NzbDrone.Core.Datastore
|
|||||||
private TModel Insert(IDbConnection connection, IDbTransaction transaction, TModel model)
|
private TModel Insert(IDbConnection connection, IDbTransaction transaction, TModel model)
|
||||||
{
|
{
|
||||||
SqlBuilderExtensions.LogQuery(_insertSql, model);
|
SqlBuilderExtensions.LogQuery(_insertSql, model);
|
||||||
var multi = connection.QueryMultiple(_insertSql, model, transaction);
|
|
||||||
|
var multi = RetryStrategy.Execute(static (state, _) => state.connection.QueryMultiple(state._insertSql, state.model, state.transaction), (connection, _insertSql, model, transaction));
|
||||||
|
|
||||||
var multiRead = multi.Read();
|
var multiRead = multi.Read();
|
||||||
var id = (int)(multiRead.First().id ?? multiRead.First().Id);
|
var id = (int)(multiRead.First().id ?? multiRead.First().Id);
|
||||||
_keyProperty.SetValue(model, id);
|
_keyProperty.SetValue(model, id);
|
||||||
@@ -383,7 +409,7 @@ namespace NzbDrone.Core.Datastore
|
|||||||
|
|
||||||
SqlBuilderExtensions.LogQuery(sql, model);
|
SqlBuilderExtensions.LogQuery(sql, model);
|
||||||
|
|
||||||
connection.Execute(sql, model, transaction: transaction);
|
RetryStrategy.Execute(static (state, _) => state.connection.Execute(state.sql, state.model, transaction: state.transaction), (connection, sql, model, transaction));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateFields(IDbConnection connection, IDbTransaction transaction, IList<TModel> models, List<PropertyInfo> propertiesToUpdate)
|
private void UpdateFields(IDbConnection connection, IDbTransaction transaction, IList<TModel> models, List<PropertyInfo> propertiesToUpdate)
|
||||||
@@ -395,7 +421,7 @@ namespace NzbDrone.Core.Datastore
|
|||||||
SqlBuilderExtensions.LogQuery(sql, model);
|
SqlBuilderExtensions.LogQuery(sql, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
connection.Execute(sql, models, transaction: transaction);
|
RetryStrategy.Execute(static (state, _) => state.connection.Execute(state.sql, state.models, transaction: state.transaction), (connection, sql, models, transaction));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual SqlBuilder PagedBuilder() => Builder();
|
protected virtual SqlBuilder PagedBuilder() => Builder();
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using NLog;
|
using NLog;
|
||||||
using NzbDrone.Core.Configuration;
|
using NzbDrone.Core.Configuration;
|
||||||
using NzbDrone.Core.Indexers.Definitions.Gazelle;
|
using NzbDrone.Core.Indexers.Definitions.Gazelle;
|
||||||
@@ -5,6 +6,7 @@ using NzbDrone.Core.Messaging.Events;
|
|||||||
|
|
||||||
namespace NzbDrone.Core.Indexers.Definitions;
|
namespace NzbDrone.Core.Indexers.Definitions;
|
||||||
|
|
||||||
|
[Obsolete("Moved to YML for Cardigann")]
|
||||||
public class CGPeers : GazelleBase<GazelleSettings>
|
public class CGPeers : GazelleBase<GazelleSettings>
|
||||||
{
|
{
|
||||||
public override string Name => "CGPeers";
|
public override string Name => "CGPeers";
|
||||||
|
|||||||
@@ -35,6 +35,16 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
|||||||
throw new RequestLimitReachedException(indexerResponse, "PTP Query Limit Reached. Please try again later.");
|
throw new RequestLimitReachedException(indexerResponse, "PTP Query Limit Reached. Please try again later.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (httpResponse.StatusCode == HttpStatusCode.TooManyRequests && indexerResponse.Content.Contains("We are not a TV indexer"))
|
||||||
|
{
|
||||||
|
throw new IndexerException(indexerResponse, "Invalid indexer request: We are not a TV indexer", HttpStatusCode.BadRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (httpResponse.StatusCode == HttpStatusCode.TooManyRequests)
|
||||||
|
{
|
||||||
|
throw new RequestLimitReachedException(indexerResponse, "PTP Request Limit Reached. Please try again later.");
|
||||||
|
}
|
||||||
|
|
||||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request");
|
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
using NzbDrone.Common.Http;
|
using NzbDrone.Common.Http;
|
||||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||||
@@ -115,6 +116,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
|||||||
var request = new IndexerRequest(searchUrl, HttpAccept.Json);
|
var request = new IndexerRequest(searchUrl, HttpAccept.Json);
|
||||||
request.HttpRequest.Headers.Add("ApiUser", _settings.APIUser);
|
request.HttpRequest.Headers.Add("ApiUser", _settings.APIUser);
|
||||||
request.HttpRequest.Headers.Add("ApiKey", _settings.APIKey);
|
request.HttpRequest.Headers.Add("ApiKey", _settings.APIKey);
|
||||||
|
request.HttpRequest.SuppressHttpErrorStatusCodes = new[] { HttpStatusCode.TooManyRequests };
|
||||||
|
|
||||||
yield return request;
|
yield return request;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
|||||||
{
|
{
|
||||||
public override string Name => "RevolutionTT";
|
public override string Name => "RevolutionTT";
|
||||||
|
|
||||||
public override string[] IndexerUrls => new[] { "https://revolutiontt.me/" };
|
public override string[] IndexerUrls => new[] { "https://revott.me/" };
|
||||||
|
public override string[] LegacyUrls => new[] { "https://revolutiontt.me/" };
|
||||||
public override string Description => "The Revolution has begun";
|
public override string Description => "The Revolution has begun";
|
||||||
private string LoginUrl => Settings.BaseUrl + "takelogin.php";
|
private string LoginUrl => Settings.BaseUrl + "takelogin.php";
|
||||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ namespace NzbDrone.Core.Indexers.Definitions;
|
|||||||
public class Shazbat : TorrentIndexerBase<ShazbatSettings>
|
public class Shazbat : TorrentIndexerBase<ShazbatSettings>
|
||||||
{
|
{
|
||||||
public override string Name => "Shazbat";
|
public override string Name => "Shazbat";
|
||||||
public override string[] IndexerUrls => new[] { "https://www.shazbat.tv/" };
|
public override string[] IndexerUrls => new[] { "https://www.shazbat.tube/" };
|
||||||
|
public override string[] LegacyUrls => new[] { "https://www.shazbat.tv/" };
|
||||||
public override string Description => "Shazbat is a PRIVATE Torrent Tracker with highly curated TV content";
|
public override string Description => "Shazbat is a PRIVATE Torrent Tracker with highly curated TV content";
|
||||||
public override string Language => "en-US";
|
public override string Language => "en-US";
|
||||||
public override Encoding Encoding => Encoding.UTF8;
|
public override Encoding Encoding => Encoding.UTF8;
|
||||||
|
|||||||
@@ -662,5 +662,13 @@
|
|||||||
"DownloadClientFloodSettingsTagsHelpText": "Initiële tags van een download. Om herkend te worden, moet een download alle initiële tags hebben. Dit voorkomt conflicten met niet-gerelateerde downloads.",
|
"DownloadClientFloodSettingsTagsHelpText": "Initiële tags van een download. Om herkend te worden, moet een download alle initiële tags hebben. Dit voorkomt conflicten met niet-gerelateerde downloads.",
|
||||||
"IndexerNewznabSettingsVipExpirationHelpText": "Voer de datum in (jjjj-mm-dd) voor VIP-vervaldatum of laat leeg. {appName} zal 1 week voor het verstrijken van de VIP-periode een melding geven",
|
"IndexerNewznabSettingsVipExpirationHelpText": "Voer de datum in (jjjj-mm-dd) voor VIP-vervaldatum of laat leeg. {appName} zal 1 week voor het verstrijken van de VIP-periode een melding geven",
|
||||||
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "Standaard fallback-categorie als er geen gekoppelde categorie bestaat voor een release. Het toevoegen van een categorie specifiek voor {appName} voorkomt conflicten met niet-gerelateerde downloads die niet van {appName} zijn. Het gebruik van een categorie is optioneel, maar wordt sterk aanbevolen. Er wordt een [categorie]-submap aangemaakt in de uitvoermap.",
|
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "Standaard fallback-categorie als er geen gekoppelde categorie bestaat voor een release. Het toevoegen van een categorie specifiek voor {appName} voorkomt conflicten met niet-gerelateerde downloads die niet van {appName} zijn. Het gebruik van een categorie is optioneel, maar wordt sterk aanbevolen. Er wordt een [categorie]-submap aangemaakt in de uitvoermap.",
|
||||||
"IndexerPassThePopcornSettingsApiUserHelpText": "Deze instellingen vind je in je PassThePopcorn beveiligingsinstellingen (Profiel bewerken > Beveiliging)."
|
"IndexerPassThePopcornSettingsApiUserHelpText": "Deze instellingen vind je in je PassThePopcorn beveiligingsinstellingen (Profiel bewerken > Beveiliging).",
|
||||||
|
"IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Doorzoek alleen freeleech releases",
|
||||||
|
"UsenetBlackholeNzbFolder": "Nzb map",
|
||||||
|
"IndexerSettingsAppsMinimumSeedersHelpText": "Minimum aantal vereiste seeders door de applicaties voordat de indexer iets ophaalt. Leeg laten gebruikt de standaardwaarde van het synchronisatieprofiel",
|
||||||
|
"IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Doorzoek alleen freeleech releases",
|
||||||
|
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "Site API-sleutel",
|
||||||
|
"SearchTypes": "Zoek types",
|
||||||
|
"IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Doorzoek alleen freeleech releases",
|
||||||
|
"IndexerAvistazSettingsFreeleechOnlyHelpText": "Doorzoek alleen freeleech releases"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
"Album": "專輯",
|
"Album": "專輯",
|
||||||
"Authentication": "認證",
|
"Authentication": "認證",
|
||||||
"AutomaticSearch": "自動搜尋",
|
"AutomaticSearch": "自動搜尋",
|
||||||
"BackupFolderHelpText": "相對路徑將位於Radarr的AppData目錄下",
|
"BackupFolderHelpText": "相對路徑將位於 {appName} 的 AppData 目錄下",
|
||||||
"BackupNow": "馬上備份",
|
"BackupNow": "馬上備份",
|
||||||
"BackupRetentionHelpText": "超過保留期的自動備份將被自動清理",
|
"BackupRetentionHelpText": "超過保留期的自動備份將被自動清理",
|
||||||
"BindAddress": "綁定地址(Bind Address)",
|
"BindAddress": "綁定地址(Bind Address)",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"Theme": "主題",
|
"Theme": "主題",
|
||||||
"ApiKeyValidationHealthCheckMessage": "請將您的API金鑰更新為至少{length}個字元長。您可以通過設定或配置文件進行此操作。",
|
"ApiKeyValidationHealthCheckMessage": "請將您的API金鑰更新為至少{length}個字元長。您可以通過設定或配置文件進行此操作。",
|
||||||
"AppDataLocationHealthCheckMessage": "為了避免在更新過程中刪除AppData,將無法進行更新。",
|
"AppDataLocationHealthCheckMessage": "為了避免在更新過程中刪除AppData,將無法進行更新。",
|
||||||
"AuthenticationMethodHelpText": "需要使用者名稱和密碼來存取Radarr",
|
"AuthenticationMethodHelpText": "需要使用者名稱和密碼才能存取 {appName}",
|
||||||
"Backup": "備份",
|
"Backup": "備份",
|
||||||
"Enable": "啟用",
|
"Enable": "啟用",
|
||||||
"Grabs": "抓取",
|
"Grabs": "抓取",
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"Seeders": "種子",
|
"Seeders": "種子",
|
||||||
"Settings": "設定",
|
"Settings": "設定",
|
||||||
"DownloadClients": "下載用戶端",
|
"DownloadClients": "下載用戶端",
|
||||||
"AnalyticsEnabledHelpText": "將使用和錯誤資訊匿名傳送至Radarr的伺服器。這些資訊包括您的瀏覽器資訊、使用的Radarr WebUI頁面、錯誤報告,以及作業系統和執行時版本。我們將使用這些資訊來優先處理功能和錯誤修復。",
|
"AnalyticsEnabledHelpText": "傳送匿名使用和錯誤資訊到 {appName} 的伺服器。這包括您的瀏覽器資訊、您使用的 {appName} WebUI 頁面、錯誤報告以及作業系統和執行階段版本。我們將使用這些資訊來優先處理功能和錯誤修正。",
|
||||||
"ApiKey": "API 金鑰",
|
"ApiKey": "API 金鑰",
|
||||||
"AppDataDirectory": "AppData 路徑",
|
"AppDataDirectory": "AppData 路徑",
|
||||||
"Applications": "應用程式",
|
"Applications": "應用程式",
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
"IndexerHDBitsSettingsCodecs": "編解碼器",
|
"IndexerHDBitsSettingsCodecs": "編解碼器",
|
||||||
"Directory": "目錄",
|
"Directory": "目錄",
|
||||||
"BuiltIn": "內建的",
|
"BuiltIn": "內建的",
|
||||||
"AllSearchResultsHiddenByFilter": "根據所使用的篩選器已將所有結果隱藏",
|
"AllSearchResultsHiddenByFilter": "根據所使用的篩選器已將所有結果隱藏。",
|
||||||
"AptUpdater": "使用apt安裝更新",
|
"AptUpdater": "使用apt安裝更新",
|
||||||
"Discord": "Discord",
|
"Discord": "Discord",
|
||||||
"Any": "任何",
|
"Any": "任何",
|
||||||
|
|||||||
@@ -6,23 +6,23 @@
|
|||||||
<PackageReference Include="AngleSharp.Xml" Version="1.0.0" />
|
<PackageReference Include="AngleSharp.Xml" Version="1.0.0" />
|
||||||
<PackageReference Include="Dapper" Version="2.1.66" />
|
<PackageReference Include="Dapper" Version="2.1.66" />
|
||||||
<PackageReference Include="Diacritical.Net" Version="1.0.4" />
|
<PackageReference Include="Diacritical.Net" Version="1.0.4" />
|
||||||
<PackageReference Include="MailKit" Version="4.12.1" />
|
<PackageReference Include="MailKit" Version="4.13.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="8.0.16" />
|
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="8.0.16" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.16" />
|
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.16" />
|
||||||
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.0.2" />
|
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.0.2" />
|
||||||
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||||
<PackageReference Include="Npgsql" Version="9.0.3" />
|
<PackageReference Include="Npgsql" Version="9.0.3" />
|
||||||
<PackageReference Include="Polly" Version="8.6.0" />
|
<PackageReference Include="Polly" Version="8.6.3" />
|
||||||
<PackageReference Include="Servarr.FluentMigrator.Runner" Version="3.3.2.9" />
|
<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.Postgres" Version="3.3.2.9" />
|
||||||
<PackageReference Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" />
|
<PackageReference Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" />
|
||||||
|
<PackageReference Include="System.Drawing.Common" Version="8.0.19" />
|
||||||
<PackageReference Include="System.Memory" Version="4.6.3" />
|
<PackageReference Include="System.Memory" Version="4.6.3" />
|
||||||
<PackageReference Include="System.ServiceModel.Syndication" Version="8.0.0" />
|
<PackageReference Include="System.ServiceModel.Syndication" Version="8.0.0" />
|
||||||
<PackageReference Include="FluentValidation" Version="9.5.4" />
|
<PackageReference Include="FluentValidation" Version="9.5.4" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="NLog" Version="5.4.0" />
|
<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="8.0.6" />
|
||||||
<PackageReference Include="System.Text.Json" Version="8.0.5" />
|
|
||||||
<PackageReference Include="MonoTorrent" Version="2.0.7" />
|
<PackageReference Include="MonoTorrent" Version="2.0.7" />
|
||||||
<PackageReference Include="YamlDotNet" Version="16.3.0" />
|
<PackageReference Include="YamlDotNet" Version="16.3.0" />
|
||||||
<PackageReference Include="AngleSharp" Version="1.3.0" />
|
<PackageReference Include="AngleSharp" Version="1.3.0" />
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<DataCollectors>
|
<DataCollectors>
|
||||||
<DataCollector friendlyName="XPlat code coverage">
|
<DataCollector friendlyName="XPlat code coverage">
|
||||||
<Configuration>
|
<Configuration>
|
||||||
<Format>opencover</Format>
|
<Format>cobertura</Format>
|
||||||
<Exclude>[Prowlarr.*.Test]*,[Prowlarr.Test.*]*,[Prowlarr.Api*]*</Exclude>
|
<Exclude>[Prowlarr.*.Test]*,[Prowlarr.Test.*]*,[Prowlarr.Api*]*</Exclude>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</DataCollector>
|
</DataCollector>
|
||||||
|
|||||||
Reference in New Issue
Block a user