mirror of
https://github.com/Radarr/Radarr.git
synced 2026-04-18 21:35:51 -04:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6683c88bb9 |
+9
-26
@@ -15,7 +15,7 @@ variables:
|
|||||||
buildName: '$(Build.SourceBranchName).$(radarrVersion)'
|
buildName: '$(Build.SourceBranchName).$(radarrVersion)'
|
||||||
sentryOrg: 'servarr'
|
sentryOrg: 'servarr'
|
||||||
sentryUrl: 'https://sentry.servarr.com'
|
sentryUrl: 'https://sentry.servarr.com'
|
||||||
dotnetVersion: '6.0.300'
|
dotnetVersion: '6.0.202'
|
||||||
nodeVersion: '16.X'
|
nodeVersion: '16.X'
|
||||||
innoVersion: '6.2.0'
|
innoVersion: '6.2.0'
|
||||||
windowsImage: 'windows-2022'
|
windowsImage: 'windows-2022'
|
||||||
@@ -95,24 +95,15 @@ stages:
|
|||||||
inputs:
|
inputs:
|
||||||
version: $(dotnetVersion)
|
version: $(dotnetVersion)
|
||||||
- bash: |
|
- bash: |
|
||||||
SDK_PATH="${AGENT_TOOLSDIRECTORY}/dotnet/sdk/${DOTNETVERSION}"
|
BUNDLEDVERSIONS=${AGENT_TOOLSDIRECTORY}/dotnet/sdk/${DOTNETVERSION}/Microsoft.NETCoreSdk.BundledVersions.props
|
||||||
BUNDLEDVERSIONS="${SDK_PATH}/Microsoft.NETCoreSdk.BundledVersions.props"
|
echo $BUNDLEDVERSIONS
|
||||||
|
if grep -q freebsd-x64 $BUNDLEDVERSIONS; then
|
||||||
if ! grep -q freebsd-x64 $BUNDLEDVERSIONS; then
|
echo "Extra platforms already enabled"
|
||||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86;linux-arm-vfpv3d16/' $BUNDLEDVERSIONS
|
else
|
||||||
|
echo "Enabling extra platform support"
|
||||||
|
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86/' $BUNDLEDVERSIONS
|
||||||
fi
|
fi
|
||||||
grep freebsd-x64 $BUNDLEDVERSIONS
|
displayName: Enable Extra Platform Support
|
||||||
displayName: Extra Platform Support - Generic
|
|
||||||
- bash: |
|
|
||||||
SDK_PATH="${AGENT_TOOLSDIRECTORY}/dotnet/sdk/${DOTNETVERSION}"
|
|
||||||
RUNTIMEIDENTIFIERGRAPH="${SDK_PATH}/RuntimeIdentifierGraph.json"
|
|
||||||
|
|
||||||
if ! grep -q linux-arm-vfpv3d16 "${RUNTIMEIDENTIFIERGRAPH}"; then
|
|
||||||
sed -i.ORI '/"runtimes":/a \ \ \ \ "linux-arm-vfpv3d16": {"#import": ["linux-arm"]},' "${RUNTIMEIDENTIFIERGRAPH}"
|
|
||||||
fi
|
|
||||||
grep -A5 -B5 linux-arm-vfpv3d16 $RUNTIMEIDENTIFIERGRAPH
|
|
||||||
displayName: Enable Extra Platform Support - Windows
|
|
||||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
|
||||||
- bash: ./build.sh --backend --enable-extra-platforms
|
- bash: ./build.sh --backend --enable-extra-platforms
|
||||||
displayName: Build Radarr Backend
|
displayName: Build Radarr Backend
|
||||||
- bash: |
|
- bash: |
|
||||||
@@ -335,14 +326,6 @@ stages:
|
|||||||
tarCompression: 'gz'
|
tarCompression: 'gz'
|
||||||
includeRootFolder: false
|
includeRootFolder: false
|
||||||
rootFolderOrFile: $(artifactsFolder)/linux-arm/net6.0
|
rootFolderOrFile: $(artifactsFolder)/linux-arm/net6.0
|
||||||
- task: ArchiveFiles@2
|
|
||||||
displayName: Create linux-arm-vfpv3d16 tar
|
|
||||||
inputs:
|
|
||||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux-core-arm-vfpv3d16.tar.gz'
|
|
||||||
archiveType: 'tar'
|
|
||||||
tarCompression: 'gz'
|
|
||||||
includeRootFolder: false
|
|
||||||
rootFolderOrFile: $(artifactsFolder)/linux-arm-vfpv3d16/net6.0
|
|
||||||
- task: ArchiveFiles@2
|
- task: ArchiveFiles@2
|
||||||
displayName: Create linux-musl-arm tar
|
displayName: Create linux-musl-arm tar
|
||||||
inputs:
|
inputs:
|
||||||
|
|||||||
@@ -27,24 +27,20 @@ UpdateVersionNumber()
|
|||||||
|
|
||||||
EnableExtraPlatformsInSDK()
|
EnableExtraPlatformsInSDK()
|
||||||
{
|
{
|
||||||
SDK_PATH=$(dotnet --list-sdks | grep '6\.[0-9]\.[0-9]\{3\}' | tail -1 | sed 's/\(6\.[0-9]*\.[0-9]*\).*\[\(.*\)\]/\2\/\1/g')
|
SDK_PATH=$(dotnet --list-sdks | grep -P '6\.\d\.\d+' | head -1 | sed 's/\(6\.[0-9]*\.[0-9]*\).*\[\(.*\)\]/\2\/\1/g')
|
||||||
|
|
||||||
BUNDLEDVERSIONS="${SDK_PATH}/Microsoft.NETCoreSdk.BundledVersions.props"
|
BUNDLEDVERSIONS="${SDK_PATH}/Microsoft.NETCoreSdk.BundledVersions.props"
|
||||||
if ! grep -q freebsd-x64 "${BUNDLEDVERSIONS}"; then
|
if grep -q freebsd-x64 $BUNDLEDVERSIONS; then
|
||||||
|
echo "Extra platforms already enabled"
|
||||||
|
else
|
||||||
echo "Enabling extra platform support"
|
echo "Enabling extra platform support"
|
||||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86;linux-arm-vfpv3d16/' "${BUNDLEDVERSIONS}"
|
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86/' $BUNDLEDVERSIONS
|
||||||
fi
|
|
||||||
|
|
||||||
RUNTIMEIDENTIFIERGRAPH="${SDK_PATH}/RuntimeIdentifierGraph.json"
|
|
||||||
if ! grep -q linux-arm-vfpv3d16 "${RUNTIMEIDENTIFIERGRAPH}"; then
|
|
||||||
sed -i.ORI '/"runtimes":/a \ \ \ \ "linux-arm-vfpv3d16": {"#import": ["linux-arm"]},' "${RUNTIMEIDENTIFIERGRAPH}"
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
EnableExtraPlatforms()
|
EnableExtraPlatforms()
|
||||||
{
|
{
|
||||||
if ! grep -q freebsd-x64 src/Directory.Build.props; then
|
if grep -qv freebsd-x64 src/Directory.Build.props; then
|
||||||
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64;linux-x86;linux-arm-vfpv3d16</RuntimeIdentifiers>^g" src/Directory.Build.props
|
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64;linux-x86</RuntimeIdentifiers>^g" src/Directory.Build.props
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,8 +74,8 @@ Build()
|
|||||||
platform=Posix
|
platform=Posix
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#dotnet clean $slnFile -c Debug
|
dotnet clean $slnFile -c Debug
|
||||||
#dotnet clean $slnFile -c Release
|
dotnet clean $slnFile -c Release
|
||||||
|
|
||||||
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
||||||
then
|
then
|
||||||
@@ -432,7 +428,6 @@ then
|
|||||||
then
|
then
|
||||||
Package "net6.0" "freebsd-x64"
|
Package "net6.0" "freebsd-x64"
|
||||||
Package "net6.0" "linux-x86"
|
Package "net6.0" "linux-x86"
|
||||||
Package "net6.0" "linux-arm-vfpv3d16"
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
Package "$FRAMEWORK" "$RID"
|
Package "$FRAMEWORK" "$RID"
|
||||||
|
|||||||
@@ -179,16 +179,6 @@ class HistoryRow extends Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name === 'sourceTitle') {
|
|
||||||
return (
|
|
||||||
<TableRowCell
|
|
||||||
key={name}
|
|
||||||
>
|
|
||||||
{sourceTitle}
|
|
||||||
</TableRowCell>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (name === 'details') {
|
if (name === 'details') {
|
||||||
return (
|
return (
|
||||||
<TableRowCell
|
<TableRowCell
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import AppRoutes from './AppRoutes';
|
|||||||
|
|
||||||
function App({ store, history }) {
|
function App({ store, history }) {
|
||||||
return (
|
return (
|
||||||
<DocumentTitle title={window.Radarr.instanceName}>
|
<DocumentTitle title="Radarr">
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<ConnectedRouter history={history}>
|
<ConnectedRouter history={history}>
|
||||||
<PageConnector>
|
<PageConnector>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ function PageContent(props) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<ErrorBoundary errorComponent={PageContentError}>
|
<ErrorBoundary errorComponent={PageContentError}>
|
||||||
<DocumentTitle title={title ? `${title} - ${window.Radarr.instanceName}` : window.Radarr.instanceName}>
|
<DocumentTitle title={title ? `${title} - Radarr` : 'Radarr'}>
|
||||||
<div className={className}>
|
<div className={className}>
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -65,10 +65,10 @@ function DownloadClientOptions(props) {
|
|||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
type={inputTypes.NUMBER}
|
type={inputTypes.NUMBER}
|
||||||
name="checkForFinishedDownloadInterval"
|
name="checkForFinishedDownloadInterval"
|
||||||
min={1}
|
min={0}
|
||||||
max={120}
|
max={120}
|
||||||
unit="minutes"
|
unit="minutes"
|
||||||
helpText={translate('RefreshMonitoredIntervalHelpText')}
|
helpText={translate('HelpText')}
|
||||||
onChange={onInputChange}
|
onChange={onInputChange}
|
||||||
{...settings.checkForFinishedDownloadInterval}
|
{...settings.checkForFinishedDownloadInterval}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ function HostSettings(props) {
|
|||||||
bindAddress,
|
bindAddress,
|
||||||
port,
|
port,
|
||||||
urlBase,
|
urlBase,
|
||||||
instanceName,
|
|
||||||
enableSsl,
|
enableSsl,
|
||||||
sslPort,
|
sslPort,
|
||||||
sslCertPath,
|
sslCertPath,
|
||||||
@@ -74,22 +73,6 @@ function HostSettings(props) {
|
|||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
|
||||||
<FormGroup
|
|
||||||
advancedSettings={advancedSettings}
|
|
||||||
isAdvanced={true}
|
|
||||||
>
|
|
||||||
<FormLabel>{translate('InstanceName')}</FormLabel>
|
|
||||||
|
|
||||||
<FormInputGroup
|
|
||||||
type={inputTypes.TEXT}
|
|
||||||
name="instanceName"
|
|
||||||
helpText={translate('InstanceNameHelpText')}
|
|
||||||
helpTextWarning={translate('RestartRequiredHelpTextWarning')}
|
|
||||||
onChange={onInputChange}
|
|
||||||
{...instanceName}
|
|
||||||
/>
|
|
||||||
</FormGroup>
|
|
||||||
|
|
||||||
<FormGroup
|
<FormGroup
|
||||||
advancedSettings={advancedSettings}
|
advancedSettings={advancedSettings}
|
||||||
isAdvanced={true}
|
isAdvanced={true}
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ function IndexerOptions(props) {
|
|||||||
min={0}
|
min={0}
|
||||||
max={120}
|
max={120}
|
||||||
unit="minutes"
|
unit="minutes"
|
||||||
helpText={translate('RssSyncHelpText')}
|
helpText={translate('HelpText')}
|
||||||
helpTextWarning={translate('RSSSyncIntervalHelpTextWarning')}
|
helpTextWarning={translate('RSSSyncIntervalHelpTextWarning')}
|
||||||
helpLink="https://wiki.servarr.com/radarr/faq#how-does-radarr-work"
|
helpLink="https://wiki.servarr.com/radarr/faq#how-does-radarr-work"
|
||||||
onChange={onInputChange}
|
onChange={onInputChange}
|
||||||
|
|||||||
@@ -79,11 +79,6 @@ export const defaultState = {
|
|||||||
label: translate('ReleaseGroup'),
|
label: translate('ReleaseGroup'),
|
||||||
isVisible: false
|
isVisible: false
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'sourceTitle',
|
|
||||||
label: translate('SourceTitle'),
|
|
||||||
isVisible: false
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: 'details',
|
name: 'details',
|
||||||
columnLabel: translate('Details'),
|
columnLabel: translate('Details'),
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@
|
|||||||
"@fortawesome/free-regular-svg-icons": "6.1.0",
|
"@fortawesome/free-regular-svg-icons": "6.1.0",
|
||||||
"@fortawesome/free-solid-svg-icons": "6.1.0",
|
"@fortawesome/free-solid-svg-icons": "6.1.0",
|
||||||
"@fortawesome/react-fontawesome": "0.1.18",
|
"@fortawesome/react-fontawesome": "0.1.18",
|
||||||
"@microsoft/signalr": "6.0.5",
|
"@microsoft/signalr": "6.0.3",
|
||||||
"@sentry/browser": "6.18.2",
|
"@sentry/browser": "6.18.2",
|
||||||
"@sentry/integrations": "6.18.2",
|
"@sentry/integrations": "6.18.2",
|
||||||
"classnames": "2.3.1",
|
"classnames": "2.3.1",
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
|
|
||||||
<!-- Standard testing packages -->
|
<!-- Standard testing packages -->
|
||||||
<ItemGroup Condition="'$(TestProject)'=='true'">
|
<ItemGroup Condition="'$(TestProject)'=='true'">
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
|
||||||
<PackageReference Include="NUnit" Version="3.13.2" />
|
<PackageReference Include="NUnit" Version="3.13.2" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="4.1.0" />
|
||||||
<PackageReference Include="NunitXml.TestLogger" Version="3.0.117" />
|
<PackageReference Include="NunitXml.TestLogger" Version="3.0.117" />
|
||||||
@@ -154,9 +154,4 @@
|
|||||||
<RuntimeIdentifier>osx-x64</RuntimeIdentifier>
|
<RuntimeIdentifier>osx-x64</RuntimeIdentifier>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<!-- Define constant so we can identify the non-standard arch arm-vfpv3d16 -->
|
|
||||||
<PropertyGroup Condition="'$(RuntimeIdentifier)' == 'linux-arm-vfpv3d16'">
|
|
||||||
<DefineConstants>ARM_VFPV3D16</DefineConstants>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -320,7 +320,6 @@ namespace NzbDrone.Common.Processes
|
|||||||
processInfo = new ProcessInfo();
|
processInfo = new ProcessInfo();
|
||||||
processInfo.Id = process.Id;
|
processInfo.Id = process.Id;
|
||||||
processInfo.Name = process.ProcessName;
|
processInfo.Name = process.ProcessName;
|
||||||
processInfo.StartPath = GetExeFileName(process);
|
|
||||||
|
|
||||||
if (process.Id != GetCurrentProcessId() && process.HasExited)
|
if (process.Id != GetCurrentProcessId() && process.HasExited)
|
||||||
{
|
{
|
||||||
@@ -335,16 +334,6 @@ namespace NzbDrone.Common.Processes
|
|||||||
return processInfo;
|
return processInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetExeFileName(Process process)
|
|
||||||
{
|
|
||||||
if (process.MainModule.FileName != "mono.exe")
|
|
||||||
{
|
|
||||||
return process.MainModule.FileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
return process.Modules.Cast<ProcessModule>().FirstOrDefault(module => module.ModuleName.ToLower().EndsWith(".exe")).FileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<Process> GetProcessesByName(string name)
|
private List<Process> GetProcessesByName(string name)
|
||||||
{
|
{
|
||||||
var processes = Process.GetProcessesByName(name).ToList();
|
var processes = Process.GetProcessesByName(name).ToList();
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<PackageReference Include="Sentry" Version="3.15.0" />
|
<PackageReference Include="Sentry" Version="3.15.0" />
|
||||||
<PackageReference Include="NLog.Targets.Syslog" Version="6.0.3" />
|
<PackageReference Include="NLog.Targets.Syslog" Version="6.0.3" />
|
||||||
<PackageReference Include="SharpZipLib" Version="1.3.3" />
|
<PackageReference Include="SharpZipLib" Version="1.3.3" />
|
||||||
<PackageReference Include="System.Text.Json" Version="6.0.4" />
|
<PackageReference Include="System.Text.Json" Version="6.0.2" />
|
||||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
||||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />
|
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
<rss xmlns:atom="http://www.w3.org/2005/Atom"
|
|
||||||
xmlns:nyaa="https://nyaa.si/xmlns/nyaa" version="2.0">
|
|
||||||
<channel>
|
|
||||||
<title>Nyaa - Home - Torrent File RSS</title>
|
|
||||||
<description>RSS Feed for Home</description>
|
|
||||||
<link>https://nyaa.si/</link>
|
|
||||||
<atom:link href="https://nyaa.si/?page=rss" rel="self" type="application/rss+xml"/>
|
|
||||||
<item>
|
|
||||||
<title>[Foxy-Subs] Mahouka Koukou no Yuutousei - 08 [720p] [3194D881].mkv</title>
|
|
||||||
<link>https://nyaa.si/download/1424896.torrent</link>
|
|
||||||
<guid isPermaLink="true">https://nyaa.si/view/1424896</guid>
|
|
||||||
<pubDate>Tue, 24 Aug 2021 22:18:46 -0000</pubDate>
|
|
||||||
<nyaa:seeders>4</nyaa:seeders>
|
|
||||||
<nyaa:leechers>3</nyaa:leechers>
|
|
||||||
<nyaa:downloads>2</nyaa:downloads>
|
|
||||||
<nyaa:infoHash>e8ca5e20eca876339f41c3d9e95ea66c1d7caaee</nyaa:infoHash>
|
|
||||||
<nyaa:categoryId>1_3</nyaa:categoryId>
|
|
||||||
<nyaa:category>Anime - Non-English-translated</nyaa:category>
|
|
||||||
<nyaa:size>609.6 MiB</nyaa:size>
|
|
||||||
<nyaa:comments>0</nyaa:comments>
|
|
||||||
<nyaa:trusted>No</nyaa:trusted>
|
|
||||||
<nyaa:remake>No</nyaa:remake>
|
|
||||||
<description>
|
|
||||||
<![CDATA[ <a href="https://nyaa.si/view/1424896">#1424896 | [Foxy-Subs] Mahouka Koukou no Yuutousei - 08 [720p] [3194D881].mkv</a> | 609.6 MiB | Anime - Non-English-translated | E8CA5E20ECA876339F41C3D9E95EA66C1D7CAAEE ]]>
|
|
||||||
</description>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<title>Macross Zero (BDRip 1920x1080p x265 HEVC TrueHD, FLAC 5.1+2.0)[sxales]</title>
|
|
||||||
<link>https://nyaa.si/download/1424895.torrent</link>
|
|
||||||
<guid isPermaLink="true">https://nyaa.si/view/1424895</guid>
|
|
||||||
<pubDate>Tue, 24 Aug 2021 22:03:11 -0000</pubDate>
|
|
||||||
<nyaa:seeders>23</nyaa:seeders>
|
|
||||||
<nyaa:leechers>32</nyaa:leechers>
|
|
||||||
<nyaa:downloads>17</nyaa:downloads>
|
|
||||||
<nyaa:infoHash>26f37f26d5b3475b41a98dc575fabfa6f8d32a76</nyaa:infoHash>
|
|
||||||
<nyaa:categoryId>1_2</nyaa:categoryId>
|
|
||||||
<nyaa:category>Anime - English-translated</nyaa:category>
|
|
||||||
<nyaa:size>5.7 GiB</nyaa:size>
|
|
||||||
<nyaa:comments>2</nyaa:comments>
|
|
||||||
<nyaa:trusted>No</nyaa:trusted>
|
|
||||||
<nyaa:remake>No</nyaa:remake>
|
|
||||||
<description>
|
|
||||||
<![CDATA[ <a href="https://nyaa.si/view/1424895">#1424895 | Macross Zero (BDRip 1920x1080p x265 HEVC TrueHD, FLAC 5.1+2.0)[sxales]</a> | 5.7 GiB | Anime - English-translated | 26F37F26D5B3475B41A98DC575FABFA6F8D32A76 ]]>
|
|
||||||
</description>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<title>Fumetsu no Anata e - 19 [WEBDL 1080p] Ukr DVO</title>
|
|
||||||
<link>https://nyaa.si/download/1424887.torrent</link>
|
|
||||||
<guid isPermaLink="true">https://nyaa.si/view/1424887</guid>
|
|
||||||
<pubDate>Tue, 24 Aug 2021 21:23:06 -0000</pubDate>
|
|
||||||
<nyaa:seeders>5</nyaa:seeders>
|
|
||||||
<nyaa:leechers>4</nyaa:leechers>
|
|
||||||
<nyaa:downloads>4</nyaa:downloads>
|
|
||||||
<nyaa:infoHash>3e4300e24b39983802162877755aab4380bd137a</nyaa:infoHash>
|
|
||||||
<nyaa:categoryId>1_3</nyaa:categoryId>
|
|
||||||
<nyaa:category>Anime - Non-English-translated</nyaa:category>
|
|
||||||
<nyaa:size>1.4 GiB</nyaa:size>
|
|
||||||
<nyaa:comments>0</nyaa:comments>
|
|
||||||
<nyaa:trusted>No</nyaa:trusted>
|
|
||||||
<nyaa:remake>No</nyaa:remake>
|
|
||||||
<description>
|
|
||||||
<![CDATA[ <a href="https://nyaa.si/view/1424887">#1424887 | Fumetsu no Anata e - 19 [WEBDL 1080p] Ukr DVO</a> | 1.4 GiB | Anime - Non-English-translated | 3E4300E24B39983802162877755AAB4380BD137A ]]>
|
|
||||||
</description>
|
|
||||||
</item>
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
||||||
@@ -25,9 +25,7 @@ namespace NzbDrone.Core.Test.IndexerTests.NyaaTests
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [Test]
|
[Test]
|
||||||
// Legacy Nyaa feed test
|
|
||||||
|
|
||||||
public void should_parse_recent_feed_from_Nyaa()
|
public void should_parse_recent_feed_from_Nyaa()
|
||||||
{
|
{
|
||||||
var recentFeed = ReadAllText(@"Files/Indexers/Nyaa/Nyaa.xml");
|
var recentFeed = ReadAllText(@"Files/Indexers/Nyaa/Nyaa.xml");
|
||||||
@@ -55,35 +53,6 @@ namespace NzbDrone.Core.Test.IndexerTests.NyaaTests
|
|||||||
torrentInfo.MagnetUrl.Should().Be(null);
|
torrentInfo.MagnetUrl.Should().Be(null);
|
||||||
torrentInfo.Peers.Should().Be(2 + 1);
|
torrentInfo.Peers.Should().Be(2 + 1);
|
||||||
torrentInfo.Seeders.Should().Be(1);
|
torrentInfo.Seeders.Should().Be(1);
|
||||||
}*/
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_parse_2021_recent_feed_from_Nyaa()
|
|
||||||
{
|
|
||||||
var recentFeed = ReadAllText(@"Files/Indexers/Nyaa/Nyaa2021.xml");
|
|
||||||
|
|
||||||
Mocker.GetMock<IHttpClient>()
|
|
||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get)))
|
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
|
||||||
|
|
||||||
var releases = Subject.FetchRecent();
|
|
||||||
|
|
||||||
releases.Should().HaveCount(3);
|
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
|
||||||
|
|
||||||
var torrentInfo = releases.First() as TorrentInfo;
|
|
||||||
|
|
||||||
torrentInfo.Title.Should().Be("[Foxy-Subs] Mahouka Koukou no Yuutousei - 08 [720p] [3194D881].mkv");
|
|
||||||
torrentInfo.DownloadProtocol.Should().Be(DownloadProtocol.Torrent);
|
|
||||||
torrentInfo.DownloadUrl.Should().Be("https://nyaa.si/download/1424896.torrent");
|
|
||||||
torrentInfo.InfoUrl.Should().Be("https://nyaa.si/view/1424896");
|
|
||||||
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
|
|
||||||
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
|
|
||||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("Tue, 24 Aug 2021 22:18:46"));
|
|
||||||
torrentInfo.Size.Should().Be(639211930); //609.6 MiB
|
|
||||||
torrentInfo.MagnetUrl.Should().Be(null);
|
|
||||||
torrentInfo.Seeders.Should().Be(4);
|
|
||||||
torrentInfo.Peers.Should().Be(3 + 4);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,6 @@ namespace NzbDrone.Core.Test.ParserTests
|
|||||||
[TestCase("Crappy Anime Movie Name 2017 [RH] [Blu-ray][MKV][h264 10-bit][1080p][FLAC 5.1][Dual Audio][Softsubs (RH)]", "RH")]
|
[TestCase("Crappy Anime Movie Name 2017 [RH] [Blu-ray][MKV][h264 10-bit][1080p][FLAC 5.1][Dual Audio][Softsubs (RH)]", "RH")]
|
||||||
[TestCase("Yet Another Anime Movie 2012 [Kametsu] [Blu-ray][MKV][h264 10-bit][1080p][FLAC 5.1][Dual Audio][Softsubs (Kametsu)]", "Kametsu")]
|
[TestCase("Yet Another Anime Movie 2012 [Kametsu] [Blu-ray][MKV][h264 10-bit][1080p][FLAC 5.1][Dual Audio][Softsubs (Kametsu)]", "Kametsu")]
|
||||||
[TestCase("Another.Anime.Film.Name.2016.JPN.Blu-Ray.Remux.AVC.DTS-MA.BluDragon", "BluDragon")]
|
[TestCase("Another.Anime.Film.Name.2016.JPN.Blu-Ray.Remux.AVC.DTS-MA.BluDragon", "BluDragon")]
|
||||||
[TestCase("A Movie in the Name (1964) (1080p BluRay x265 r00t)", "r00t")]
|
|
||||||
public void should_parse_exception_release_group(string title, string expected)
|
public void should_parse_exception_release_group(string title, string expected)
|
||||||
{
|
{
|
||||||
Parser.Parser.ParseReleaseGroup(title).Should().Be(expected);
|
Parser.Parser.ParseReleaseGroup(title).Should().Be(expected);
|
||||||
|
|||||||
@@ -45,13 +45,11 @@ namespace NzbDrone.Core.Configuration
|
|||||||
string SslCertPassword { get; }
|
string SslCertPassword { get; }
|
||||||
string UrlBase { get; }
|
string UrlBase { get; }
|
||||||
string UiFolder { get; }
|
string UiFolder { get; }
|
||||||
string InstanceName { get; }
|
|
||||||
bool UpdateAutomatically { get; }
|
bool UpdateAutomatically { get; }
|
||||||
UpdateMechanism UpdateMechanism { get; }
|
UpdateMechanism UpdateMechanism { get; }
|
||||||
string UpdateScriptPath { get; }
|
string UpdateScriptPath { get; }
|
||||||
string SyslogServer { get; }
|
string SyslogServer { get; }
|
||||||
int SyslogPort { get; }
|
int SyslogPort { get; }
|
||||||
string SyslogLevel { get; }
|
|
||||||
string PostgresHost { get; }
|
string PostgresHost { get; }
|
||||||
int PostgresPort { get; }
|
int PostgresPort { get; }
|
||||||
string PostgresUser { get; }
|
string PostgresUser { get; }
|
||||||
@@ -225,7 +223,6 @@ namespace NzbDrone.Core.Configuration
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string UiFolder => BuildInfo.IsDebug ? Path.Combine("..", "UI") : "UI";
|
public string UiFolder => BuildInfo.IsDebug ? Path.Combine("..", "UI") : "UI";
|
||||||
public string InstanceName => GetValue("InstanceName", BuildInfo.AppName);
|
|
||||||
|
|
||||||
public bool UpdateAutomatically => GetValueBoolean("UpdateAutomatically", false, false);
|
public bool UpdateAutomatically => GetValueBoolean("UpdateAutomatically", false, false);
|
||||||
|
|
||||||
@@ -234,11 +231,8 @@ namespace NzbDrone.Core.Configuration
|
|||||||
public string UpdateScriptPath => GetValue("UpdateScriptPath", "", false);
|
public string UpdateScriptPath => GetValue("UpdateScriptPath", "", false);
|
||||||
|
|
||||||
public string SyslogServer => GetValue("SyslogServer", "", persist: false);
|
public string SyslogServer => GetValue("SyslogServer", "", persist: false);
|
||||||
|
|
||||||
public int SyslogPort => GetValueInt("SyslogPort", 514, persist: false);
|
public int SyslogPort => GetValueInt("SyslogPort", 514, persist: false);
|
||||||
|
|
||||||
public string SyslogLevel => GetValue("SyslogLevel", LogLevel, false).ToLowerInvariant();
|
|
||||||
|
|
||||||
public int GetValueInt(string key, int defaultValue, bool persist = true)
|
public int GetValueInt(string key, int defaultValue, bool persist = true)
|
||||||
{
|
{
|
||||||
return Convert.ToInt32(GetValue(key, defaultValue, persist));
|
return Convert.ToInt32(GetValue(key, defaultValue, persist));
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ namespace NzbDrone.Core.Download
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var importResults = _downloadedMovieImportService.ProcessPath(outputPath, ImportMode.Auto, trackedDownload.RemoteMovie.Movie, trackedDownload.ImportItem);
|
var importResults = _downloadedMovieImportService.ProcessPath(outputPath, ImportMode.Auto, trackedDownload.RemoteMovie.Movie, trackedDownload.DownloadItem);
|
||||||
|
|
||||||
if (VerifyImport(trackedDownload, importResults))
|
if (VerifyImport(trackedDownload, importResults))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -178,12 +178,12 @@ namespace NzbDrone.Core.ImportLists
|
|||||||
{
|
{
|
||||||
var mappedMovie = _movieSearch.MapMovieToTmdbMovie(new MovieMetadata { Title = report.Title, TmdbId = report.TmdbId, ImdbId = report.ImdbId, Year = report.Year });
|
var mappedMovie = _movieSearch.MapMovieToTmdbMovie(new MovieMetadata { Title = report.Title, TmdbId = report.TmdbId, ImdbId = report.ImdbId, Year = report.Year });
|
||||||
|
|
||||||
|
_movieMetadataService.Upsert(mappedMovie);
|
||||||
|
|
||||||
var mappedListMovie = new ImportListMovie { ListId = report.ListId };
|
var mappedListMovie = new ImportListMovie { ListId = report.ListId };
|
||||||
|
|
||||||
if (mappedMovie != null)
|
if (mappedMovie != null)
|
||||||
{
|
{
|
||||||
_movieMetadataService.Upsert(mappedMovie);
|
|
||||||
|
|
||||||
mappedListMovie.MovieMetadata = mappedMovie;
|
mappedListMovie.MovieMetadata = mappedMovie;
|
||||||
mappedListMovie.MovieMetadataId = mappedMovie.Id;
|
mappedListMovie.MovieMetadataId = mappedMovie.Id;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,6 @@ namespace NzbDrone.Core.Indexers
|
|||||||
UseGuidInfoUrl = true;
|
UseGuidInfoUrl = true;
|
||||||
UseEnclosureLength = false;
|
UseEnclosureLength = false;
|
||||||
UseEnclosureUrl = true;
|
UseEnclosureUrl = true;
|
||||||
SeedsElementName = "seeds";
|
|
||||||
InfoHashElementName = "infoHash";
|
|
||||||
SizeElementName = "contentLength";
|
|
||||||
MagnetElementName = "magnetURI";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool PreProcess(IndexerResponse indexerResponse)
|
protected override bool PreProcess(IndexerResponse indexerResponse)
|
||||||
@@ -30,5 +26,51 @@ namespace NzbDrone.Core.Indexers
|
|||||||
|
|
||||||
return base.PreProcess(indexerResponse);
|
return base.PreProcess(indexerResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override long GetSize(XElement item)
|
||||||
|
{
|
||||||
|
var contentLength = item.FindDecendants("contentLength").SingleOrDefault();
|
||||||
|
|
||||||
|
if (contentLength != null)
|
||||||
|
{
|
||||||
|
return (long)contentLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.GetSize(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string GetInfoHash(XElement item)
|
||||||
|
{
|
||||||
|
var infoHash = item.FindDecendants("infoHash").SingleOrDefault();
|
||||||
|
return (string)infoHash;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string GetMagnetUrl(XElement item)
|
||||||
|
{
|
||||||
|
var magnetURI = item.FindDecendants("magnetURI").SingleOrDefault();
|
||||||
|
return (string)magnetURI;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override int? GetSeeders(XElement item)
|
||||||
|
{
|
||||||
|
var seeds = item.FindDecendants("seeds").SingleOrDefault();
|
||||||
|
if (seeds != null)
|
||||||
|
{
|
||||||
|
return (int)seeds;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.GetSeeders(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override int? GetPeers(XElement item)
|
||||||
|
{
|
||||||
|
var peers = item.FindDecendants("peers").SingleOrDefault();
|
||||||
|
if (peers != null)
|
||||||
|
{
|
||||||
|
return (int)peers;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.GetPeers(item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace NzbDrone.Core.Indexers.Nyaa
|
|||||||
|
|
||||||
public override IParseIndexerResponse GetParser()
|
public override IParseIndexerResponse GetParser()
|
||||||
{
|
{
|
||||||
return new TorrentRssParser() { UseGuidInfoUrl = true, SizeElementName = "size", InfoHashElementName = "infoHash", PeersElementName = "leechers", CalculatePeersAsSum = true, SeedsElementName = "seeders" };
|
return new TorrentRssParser() { UseGuidInfoUrl = true, ParseSizeInDescription = true, ParseSeedersInDescription = true };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using MonoTorrent;
|
using MonoTorrent;
|
||||||
@@ -10,27 +9,12 @@ namespace NzbDrone.Core.Indexers
|
|||||||
{
|
{
|
||||||
public class TorrentRssParser : RssParser
|
public class TorrentRssParser : RssParser
|
||||||
{
|
{
|
||||||
// Use to sum/calculate Peers as Leechers+Seeders
|
|
||||||
public bool CalculatePeersAsSum { get; set; } = false;
|
|
||||||
|
|
||||||
// Use the specified element name to determine the Infohash
|
|
||||||
public string InfoHashElementName { get; set; }
|
|
||||||
|
|
||||||
// Parse various seeder/leecher/peers formats in the description element to determine number of seeders.
|
// Parse various seeder/leecher/peers formats in the description element to determine number of seeders.
|
||||||
public bool ParseSeedersInDescription { get; set; }
|
public bool ParseSeedersInDescription { get; set; }
|
||||||
|
|
||||||
// Use the specified element name to determine the Peers
|
// Use the specified element name to determine the size
|
||||||
public string PeersElementName { get; set; }
|
|
||||||
|
|
||||||
// Use the specified element name to determine the Seeds
|
|
||||||
public string SeedsElementName { get; set; }
|
|
||||||
|
|
||||||
// Use the specified element name to determine the Size
|
|
||||||
public string SizeElementName { get; set; }
|
public string SizeElementName { get; set; }
|
||||||
|
|
||||||
// Use the specified element name to determine the Magnet link
|
|
||||||
public string MagnetElementName { get; set; }
|
|
||||||
|
|
||||||
public TorrentRssParser()
|
public TorrentRssParser()
|
||||||
{
|
{
|
||||||
PreferredEnclosureMimeTypes = TorrentEnclosureMimeTypes;
|
PreferredEnclosureMimeTypes = TorrentEnclosureMimeTypes;
|
||||||
@@ -56,28 +40,14 @@ namespace NzbDrone.Core.Indexers
|
|||||||
result.InfoHash = GetInfoHash(item);
|
result.InfoHash = GetInfoHash(item);
|
||||||
result.MagnetUrl = GetMagnetUrl(item);
|
result.MagnetUrl = GetMagnetUrl(item);
|
||||||
result.Seeders = GetSeeders(item);
|
result.Seeders = GetSeeders(item);
|
||||||
|
result.Peers = GetPeers(item);
|
||||||
if (CalculatePeersAsSum)
|
|
||||||
{
|
|
||||||
result.Peers = GetPeers(item) + result.Seeders;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result.Peers = GetPeers(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual string GetInfoHash(XElement item)
|
protected virtual string GetInfoHash(XElement item)
|
||||||
{
|
{
|
||||||
if (InfoHashElementName.IsNotNullOrWhiteSpace())
|
|
||||||
{
|
|
||||||
return item.FindDecendants(InfoHashElementName).FirstOrDefault().Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
var magnetUrl = GetMagnetUrl(item);
|
var magnetUrl = GetMagnetUrl(item);
|
||||||
|
|
||||||
if (magnetUrl.IsNotNullOrWhiteSpace())
|
if (magnetUrl.IsNotNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -94,21 +64,10 @@ namespace NzbDrone.Core.Indexers
|
|||||||
|
|
||||||
protected virtual string GetMagnetUrl(XElement item)
|
protected virtual string GetMagnetUrl(XElement item)
|
||||||
{
|
{
|
||||||
if (MagnetElementName.IsNotNullOrWhiteSpace())
|
var downloadUrl = GetDownloadUrl(item);
|
||||||
|
if (downloadUrl.IsNotNullOrWhiteSpace() && downloadUrl.StartsWith("magnet:"))
|
||||||
{
|
{
|
||||||
var magnetURL = item.FindDecendants(MagnetElementName).FirstOrDefault().Value;
|
return downloadUrl;
|
||||||
if (magnetURL.IsNotNullOrWhiteSpace() && magnetURL.StartsWith("magnet:"))
|
|
||||||
{
|
|
||||||
return magnetURL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var downloadUrl = GetDownloadUrl(item);
|
|
||||||
if (downloadUrl.IsNotNullOrWhiteSpace() && downloadUrl.StartsWith("magnet:"))
|
|
||||||
{
|
|
||||||
return downloadUrl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -116,8 +75,6 @@ namespace NzbDrone.Core.Indexers
|
|||||||
|
|
||||||
protected virtual int? GetSeeders(XElement item)
|
protected virtual int? GetSeeders(XElement item)
|
||||||
{
|
{
|
||||||
// safe to always use the element if it's present (and valid)
|
|
||||||
// fall back to description if ParseSeedersInDescription is enabled
|
|
||||||
if (ParseSeedersInDescription && item.Element("description") != null)
|
if (ParseSeedersInDescription && item.Element("description") != null)
|
||||||
{
|
{
|
||||||
var matchSeeders = ParseSeedersRegex.Match(item.Element("description").Value);
|
var matchSeeders = ParseSeedersRegex.Match(item.Element("description").Value);
|
||||||
@@ -136,12 +93,6 @@ namespace NzbDrone.Core.Indexers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var seeds = item.FindDecendants(SeedsElementName).SingleOrDefault();
|
|
||||||
if (seeds != null)
|
|
||||||
{
|
|
||||||
return (int)seeds;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,12 +116,6 @@ namespace NzbDrone.Core.Indexers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PeersElementName.IsNotNullOrWhiteSpace())
|
|
||||||
{
|
|
||||||
var itempeers = item.FindDecendants(PeersElementName).SingleOrDefault();
|
|
||||||
return int.Parse(itempeers.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,10 +124,9 @@ namespace NzbDrone.Core.Indexers
|
|||||||
var size = base.GetSize(item);
|
var size = base.GetSize(item);
|
||||||
if (size == 0 && SizeElementName.IsNotNullOrWhiteSpace())
|
if (size == 0 && SizeElementName.IsNotNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
var itemsize = item.FindDecendants(SizeElementName).SingleOrDefault();
|
if (item.Element(SizeElementName) != null)
|
||||||
if (itemsize != null)
|
|
||||||
{
|
{
|
||||||
size = ParseSize(itemsize.Value, true);
|
size = ParseSize(item.Element(SizeElementName).Value, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,8 +44,7 @@ namespace NzbDrone.Core.Instrumentation
|
|||||||
|
|
||||||
if (_configFileProvider.SyslogServer.IsNotNullOrWhiteSpace())
|
if (_configFileProvider.SyslogServer.IsNotNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
var syslogLevel = LogLevel.FromString(_configFileProvider.SyslogLevel);
|
SetSyslogParameters(_configFileProvider.SyslogServer, _configFileProvider.SyslogPort, minimumLogLevel);
|
||||||
SetSyslogParameters(_configFileProvider.SyslogServer, _configFileProvider.SyslogPort, syslogLevel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var rules = LogManager.Configuration.LoggingRules;
|
var rules = LogManager.Configuration.LoggingRules;
|
||||||
@@ -119,7 +118,7 @@ namespace NzbDrone.Core.Instrumentation
|
|||||||
syslogTarget.MessageSend.Udp.Server = syslogServer;
|
syslogTarget.MessageSend.Udp.Server = syslogServer;
|
||||||
syslogTarget.MessageSend.Udp.ReconnectInterval = 500;
|
syslogTarget.MessageSend.Udp.ReconnectInterval = 500;
|
||||||
syslogTarget.MessageCreation.Rfc = RfcNumber.Rfc5424;
|
syslogTarget.MessageCreation.Rfc = RfcNumber.Rfc5424;
|
||||||
syslogTarget.MessageCreation.Rfc5424.AppName = _configFileProvider.InstanceName;
|
syslogTarget.MessageCreation.Rfc5424.AppName = BuildInfo.AppName;
|
||||||
|
|
||||||
var loggingRule = new LoggingRule("*", minimumLogLevel, syslogTarget);
|
var loggingRule = new LoggingRule("*", minimumLogLevel, syslogTarget);
|
||||||
|
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ namespace NzbDrone.Core.Jobs
|
|||||||
|
|
||||||
new ScheduledTask
|
new ScheduledTask
|
||||||
{
|
{
|
||||||
Interval = GetRefreshMonitoredInterval(),
|
Interval = Math.Max(_configService.CheckForFinishedDownloadInterval, 1),
|
||||||
TypeName = typeof(RefreshMonitoredDownloadsCommand).FullName,
|
TypeName = typeof(RefreshMonitoredDownloadsCommand).FullName,
|
||||||
Priority = CommandPriority.High
|
Priority = CommandPriority.High
|
||||||
}
|
}
|
||||||
@@ -192,18 +192,6 @@ namespace NzbDrone.Core.Jobs
|
|||||||
return interval;
|
return interval;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int GetRefreshMonitoredInterval()
|
|
||||||
{
|
|
||||||
var interval = _configService.CheckForFinishedDownloadInterval;
|
|
||||||
|
|
||||||
if (interval < 1)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return interval;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int GetImportListSyncInterval()
|
private int GetImportListSyncInterval()
|
||||||
{
|
{
|
||||||
//Enforce 6 hour min on list sync
|
//Enforce 6 hour min on list sync
|
||||||
@@ -240,14 +228,13 @@ namespace NzbDrone.Core.Jobs
|
|||||||
backup.Interval = GetBackupInterval();
|
backup.Interval = GetBackupInterval();
|
||||||
|
|
||||||
var refreshMonitoredDownloads = _scheduledTaskRepository.GetDefinition(typeof(RefreshMonitoredDownloadsCommand));
|
var refreshMonitoredDownloads = _scheduledTaskRepository.GetDefinition(typeof(RefreshMonitoredDownloadsCommand));
|
||||||
refreshMonitoredDownloads.Interval = GetRefreshMonitoredInterval();
|
refreshMonitoredDownloads.Interval = _configService.CheckForFinishedDownloadInterval;
|
||||||
|
|
||||||
_scheduledTaskRepository.UpdateMany(new List<ScheduledTask> { rss, importList, refreshMonitoredDownloads, backup });
|
_scheduledTaskRepository.UpdateMany(new List<ScheduledTask> { rss, importList, refreshMonitoredDownloads, backup });
|
||||||
|
|
||||||
_cache.Find(rss.TypeName).Interval = rss.Interval;
|
_cache.Find(rss.TypeName).Interval = rss.Interval;
|
||||||
_cache.Find(importList.TypeName).Interval = importList.Interval;
|
_cache.Find(importList.TypeName).Interval = importList.Interval;
|
||||||
_cache.Find(backup.TypeName).Interval = backup.Interval;
|
_cache.Find(backup.TypeName).Interval = backup.Interval;
|
||||||
_cache.Find(refreshMonitoredDownloads.TypeName).Interval = refreshMonitoredDownloads.Interval;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1117
-1120
File diff suppressed because it is too large
Load Diff
@@ -135,7 +135,7 @@ namespace NzbDrone.Core.Parser
|
|||||||
|
|
||||||
//Handle Exception Release Groups that don't follow -RlsGrp; Manual List
|
//Handle Exception Release Groups that don't follow -RlsGrp; Manual List
|
||||||
//groups whose releases end with RlsGroup) or RlsGroup]
|
//groups whose releases end with RlsGroup) or RlsGroup]
|
||||||
private static readonly Regex ExceptionReleaseGroupRegex = new Regex(@"(?<releasegroup>(Tigole|Joy|YIFY|YTS.MX|YTS.LT|FreetheFish|afm72|Anna|Bandi|Ghost|Kappa|MONOLITH|Qman|RZeroX|SAMPA|Silence|theincognito|t3nzin|Vyndros|HDO|DusIctv|DHD|SEV|CtrlHD|-ZR-|ADC|XZVN|RH|Kametsu|r00t)(?=\]|\)))", RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
private static readonly Regex ExceptionReleaseGroupRegex = new Regex(@"(?<releasegroup>(Tigole|Joy|YIFY|YTS.MX|YTS.LT|FreetheFish|afm72|Anna|Bandi|Ghost|Kappa|MONOLITH|Qman|RZeroX|SAMPA|Silence|theincognito|t3nzin|Vyndros|HDO|DusIctv|DHD|SEV|CtrlHD|-ZR-|ADC|XZVN|RH|Kametsu)(?=\]|\)))", RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||||
|
|
||||||
//Handle Exception Release Groups that don't follow -RlsGrp; Manual List
|
//Handle Exception Release Groups that don't follow -RlsGrp; Manual List
|
||||||
// name only...BE VERY CAREFUL WITH THIS, HIGH CHANCE OF FALSE POSITIVES
|
// name only...BE VERY CAREFUL WITH THIS, HIGH CHANCE OF FALSE POSITIVES
|
||||||
|
|||||||
@@ -21,8 +21,8 @@
|
|||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||||
<PackageReference Include="NLog" Version="4.7.14" />
|
<PackageReference Include="NLog" Version="4.7.14" />
|
||||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||||
|
<PackageReference Include="System.Text.Json" Version="6.0.2" />
|
||||||
<PackageReference Include="MonoTorrent" Version="2.0.5" />
|
<PackageReference Include="MonoTorrent" Version="2.0.5" />
|
||||||
<PackageReference Include="System.Text.Json" Version="6.0.4" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Common\Radarr.Common.csproj" />
|
<ProjectReference Include="..\NzbDrone.Common\Radarr.Common.csproj" />
|
||||||
|
|||||||
@@ -34,17 +34,11 @@ namespace NzbDrone.Core.Update
|
|||||||
|
|
||||||
public UpdatePackage GetLatestUpdate(string branch, Version currentVersion)
|
public UpdatePackage GetLatestUpdate(string branch, Version currentVersion)
|
||||||
{
|
{
|
||||||
#if ARM_VFPV3D16
|
|
||||||
var arch = "arm-vfpv3d16";
|
|
||||||
#else
|
|
||||||
var arch = RuntimeInformation.OSArchitecture.ToString();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
var request = _requestBuilder.Create()
|
var request = _requestBuilder.Create()
|
||||||
.Resource("/update/{branch}")
|
.Resource("/update/{branch}")
|
||||||
.AddQueryParam("version", currentVersion)
|
.AddQueryParam("version", currentVersion)
|
||||||
.AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant())
|
.AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant())
|
||||||
.AddQueryParam("arch", arch)
|
.AddQueryParam("arch", RuntimeInformation.OSArchitecture)
|
||||||
.AddQueryParam("runtime", PlatformInfo.Platform.ToString().ToLowerInvariant())
|
.AddQueryParam("runtime", PlatformInfo.Platform.ToString().ToLowerInvariant())
|
||||||
.AddQueryParam("runtimeVer", _platformInfo.Version)
|
.AddQueryParam("runtimeVer", _platformInfo.Version)
|
||||||
.AddQueryParam("dbType", _mainDatabase.DatabaseType)
|
.AddQueryParam("dbType", _mainDatabase.DatabaseType)
|
||||||
|
|||||||
@@ -61,11 +61,5 @@ namespace NzbDrone.Core.Validation
|
|||||||
{
|
{
|
||||||
return ruleBuilder.WithState(v => NzbDroneValidationState.Warning);
|
return ruleBuilder.WithState(v => NzbDroneValidationState.Warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IRuleBuilderOptions<T, string> ContainsRadarr<T>(this IRuleBuilder<T, string> ruleBuilder)
|
|
||||||
{
|
|
||||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
|
||||||
return ruleBuilder.SetValidator(new RegularExpressionValidator("radarr", RegexOptions.IgnoreCase)).WithMessage("Must contain Radarr");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ namespace NzbDrone.Host
|
|||||||
|
|
||||||
services.AddRouting(options => options.LowercaseUrls = true);
|
services.AddRouting(options => options.LowercaseUrls = true);
|
||||||
|
|
||||||
|
services.AddResponseCompression(options => options.EnableForHttps = true);
|
||||||
|
|
||||||
services.AddCors(options =>
|
services.AddCors(options =>
|
||||||
{
|
{
|
||||||
options.AddPolicy(VersionedApiControllerAttribute.API_CORS_POLICY,
|
options.AddPolicy(VersionedApiControllerAttribute.API_CORS_POLICY,
|
||||||
@@ -253,6 +255,7 @@ namespace NzbDrone.Host
|
|||||||
app.UseCors();
|
app.UseCors();
|
||||||
app.UseAuthentication();
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
app.UseResponseCompression();
|
||||||
app.Properties["host.AppName"] = BuildInfo.AppName;
|
app.Properties["host.AppName"] = BuildInfo.AppName;
|
||||||
|
|
||||||
app.UseMiddleware<VersionMiddleware>();
|
app.UseMiddleware<VersionMiddleware>();
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.5" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Test.Common\Radarr.Test.Common.csproj" />
|
<ProjectReference Include="..\NzbDrone.Test.Common\Radarr.Test.Common.csproj" />
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
See https://github.com/xamarin/XamarinComponents/issues/282
|
See https://github.com/xamarin/XamarinComponents/issues/282
|
||||||
-->
|
-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr22" />
|
<PackageReference Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr20" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Common.Test\Radarr.Common.Test.csproj" />
|
<ProjectReference Include="..\NzbDrone.Common.Test\Radarr.Common.Test.csproj" />
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
See https://github.com/xamarin/XamarinComponents/issues/282
|
See https://github.com/xamarin/XamarinComponents/issues/282
|
||||||
-->
|
-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr22" />
|
<PackageReference Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr20" />
|
||||||
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
|
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ namespace Radarr.Api.V3.Config
|
|||||||
SharedValidator.RuleFor(c => c.Port).ValidPort();
|
SharedValidator.RuleFor(c => c.Port).ValidPort();
|
||||||
|
|
||||||
SharedValidator.RuleFor(c => c.UrlBase).ValidUrlBase();
|
SharedValidator.RuleFor(c => c.UrlBase).ValidUrlBase();
|
||||||
SharedValidator.RuleFor(c => c.InstanceName).ContainsRadarr().When(c => c.InstanceName.IsNotNullOrWhiteSpace());
|
|
||||||
|
|
||||||
SharedValidator.RuleFor(c => c.Username).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None);
|
SharedValidator.RuleFor(c => c.Username).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None);
|
||||||
SharedValidator.RuleFor(c => c.Password).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None);
|
SharedValidator.RuleFor(c => c.Password).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None);
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ namespace Radarr.Api.V3.Config
|
|||||||
public string SslCertPath { get; set; }
|
public string SslCertPath { get; set; }
|
||||||
public string SslCertPassword { get; set; }
|
public string SslCertPassword { get; set; }
|
||||||
public string UrlBase { get; set; }
|
public string UrlBase { get; set; }
|
||||||
public string InstanceName { get; set; }
|
|
||||||
public bool UpdateAutomatically { get; set; }
|
public bool UpdateAutomatically { get; set; }
|
||||||
public UpdateMechanism UpdateMechanism { get; set; }
|
public UpdateMechanism UpdateMechanism { get; set; }
|
||||||
public string UpdateScriptPath { get; set; }
|
public string UpdateScriptPath { get; set; }
|
||||||
@@ -67,7 +66,6 @@ namespace Radarr.Api.V3.Config
|
|||||||
SslCertPath = model.SslCertPath,
|
SslCertPath = model.SslCertPath,
|
||||||
SslCertPassword = model.SslCertPassword,
|
SslCertPassword = model.SslCertPassword,
|
||||||
UrlBase = model.UrlBase,
|
UrlBase = model.UrlBase,
|
||||||
InstanceName = model.InstanceName,
|
|
||||||
UpdateAutomatically = model.UpdateAutomatically,
|
UpdateAutomatically = model.UpdateAutomatically,
|
||||||
UpdateMechanism = model.UpdateMechanism,
|
UpdateMechanism = model.UpdateMechanism,
|
||||||
UpdateScriptPath = model.UpdateScriptPath,
|
UpdateScriptPath = model.UpdateScriptPath,
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ namespace Radarr.Api.V3.System
|
|||||||
return new
|
return new
|
||||||
{
|
{
|
||||||
AppName = BuildInfo.AppName,
|
AppName = BuildInfo.AppName,
|
||||||
InstanceName = _configFileProvider.InstanceName,
|
|
||||||
Version = BuildInfo.Version.ToString(),
|
Version = BuildInfo.Version.ToString(),
|
||||||
BuildTime = BuildInfo.BuildDateTime,
|
BuildTime = BuildInfo.BuildDateTime,
|
||||||
IsDebug = BuildInfo.IsDebug,
|
IsDebug = BuildInfo.IsDebug,
|
||||||
|
|||||||
@@ -9175,10 +9175,6 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"nullable": true
|
"nullable": true
|
||||||
},
|
},
|
||||||
"instanceName": {
|
|
||||||
"type": "string",
|
|
||||||
"nullable": true
|
|
||||||
},
|
|
||||||
"updateAutomatically": {
|
"updateAutomatically": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ namespace Radarr.Http.Frontend
|
|||||||
builder.AppendLine($" apiKey: '{_apiKey}',");
|
builder.AppendLine($" apiKey: '{_apiKey}',");
|
||||||
builder.AppendLine($" release: '{BuildInfo.Release}',");
|
builder.AppendLine($" release: '{BuildInfo.Release}',");
|
||||||
builder.AppendLine($" version: '{BuildInfo.Version.ToString()}',");
|
builder.AppendLine($" version: '{BuildInfo.Version.ToString()}',");
|
||||||
builder.AppendLine($" instanceName: '{_configFileProvider.InstanceName.ToString()}',");
|
|
||||||
builder.AppendLine($" branch: '{_configFileProvider.Branch.ToLower()}',");
|
builder.AppendLine($" branch: '{_configFileProvider.Branch.ToLower()}',");
|
||||||
builder.AppendLine($" analytics: {_analyticsService.IsEnabled.ToString().ToLowerInvariant()},");
|
builder.AppendLine($" analytics: {_analyticsService.IsEnabled.ToString().ToLowerInvariant()},");
|
||||||
builder.AppendLine($" userHash: '{HashUtil.AnonymousToken()}',");
|
builder.AppendLine($" userHash: '{HashUtil.AnonymousToken()}',");
|
||||||
|
|||||||
@@ -1168,15 +1168,15 @@
|
|||||||
"@jridgewell/resolve-uri" "^3.0.3"
|
"@jridgewell/resolve-uri" "^3.0.3"
|
||||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||||
|
|
||||||
"@microsoft/signalr@6.0.5":
|
"@microsoft/signalr@6.0.3":
|
||||||
version "6.0.5"
|
version "6.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/@microsoft/signalr/-/signalr-6.0.5.tgz#219f7fa10e94a75a841d3d7140d939fd2c2657e9"
|
resolved "https://registry.yarnpkg.com/@microsoft/signalr/-/signalr-6.0.3.tgz#9904efd48cd488e3c1c80930ff9fbb3c9f55895d"
|
||||||
integrity sha512-Y6Mny+z71wv2/FiuoqLcraojQRIbyeF/Ao4y+tcZK28JzGGieoulXBJIVQhoxzeM15Xe8xGOX0/5pVlOpwrI8Q==
|
integrity sha512-wWGVC2xi8OxNjyir8iQWuyxWHy3Dkakk2Q3VreCE7pDzFAgZ4pId6abJlRPMVIQxkUvUGc8knMW5l3sv2bJ/yw==
|
||||||
dependencies:
|
dependencies:
|
||||||
abort-controller "^3.0.0"
|
abort-controller "^3.0.0"
|
||||||
eventsource "^1.0.7"
|
eventsource "^1.0.7"
|
||||||
fetch-cookie "^0.11.0"
|
fetch-cookie "^0.11.0"
|
||||||
node-fetch "^2.6.7"
|
node-fetch "^2.6.1"
|
||||||
ws "^7.4.5"
|
ws "^7.4.5"
|
||||||
|
|
||||||
"@mrmlnc/readdir-enhanced@^2.2.1":
|
"@mrmlnc/readdir-enhanced@^2.2.1":
|
||||||
@@ -4798,7 +4798,7 @@ no-case@^3.0.4:
|
|||||||
lower-case "^2.0.2"
|
lower-case "^2.0.2"
|
||||||
tslib "^2.0.3"
|
tslib "^2.0.3"
|
||||||
|
|
||||||
node-fetch@^2.6.7:
|
node-fetch@^2.6.1:
|
||||||
version "2.6.7"
|
version "2.6.7"
|
||||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||||
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||||
|
|||||||
Reference in New Issue
Block a user