mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2026-04-18 21:55:12 -04:00
Compare commits
115 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ab4d80faa6 | |||
| a2afcff6df | |||
| e4fb36e08f | |||
| ff22fdf7d3 | |||
| b3d46465ae | |||
| eb57d20545 | |||
| 775b716c0f | |||
| f7f3648dac | |||
| c669048767 | |||
| c282e4bef8 | |||
| 574721bfb5 | |||
| 3c7575b58e | |||
| 93d8f81750 | |||
| 364c7c9c7e | |||
| 54af7fd3d0 | |||
| e6bc7fa062 | |||
| 98608e75a6 | |||
| 160320f3a2 | |||
| c9baaf634e | |||
| 8bf2f68abe | |||
| 9434091912 | |||
| 2f7d821d45 | |||
| 471c9910a0 | |||
| 98ff2f5cb6 | |||
| 4d9982872a | |||
| ae9326480e | |||
| 624cbd548f | |||
| f5f98e4f53 | |||
| 8585dd447e | |||
| dfffb3aa4e | |||
| 7eb2d956cf | |||
| 8da493dbaf | |||
| f17cf6144f | |||
| 1b3adc4529 | |||
| 389f049a8b | |||
| 99b0fcd750 | |||
| 516b09ca91 | |||
| 770fd64013 | |||
| f67c672ec7 | |||
| 80425f5ea4 | |||
| 758cae3f40 | |||
| fbf4ff6777 | |||
| 98ee9c1703 | |||
| c537e94f0f | |||
| 9e5dd2a2e6 | |||
| f601ff98a2 | |||
| 540fafdebf | |||
| 532bffe772 | |||
| bf80f7916c | |||
| 2f6a9dfffb | |||
| 94477e9cf9 | |||
| 52e21b3dfc | |||
| cb4cc81ad0 | |||
| 7ada036480 | |||
| f1c9ba40c4 | |||
| 8664fc095d | |||
| 23b9973ef7 | |||
| d9f1d96e00 | |||
| d9d045a548 | |||
| c417c41133 | |||
| d5853735ac | |||
| dbc159f536 | |||
| 231cc91f97 | |||
| 1a075f201c | |||
| de7f42cf30 | |||
| fab74b58fa | |||
| 2b332a00d7 | |||
| a0b0c1555c | |||
| 86b81948af | |||
| 54918e0c30 | |||
| 01dd793c0a | |||
| 950949e4bc | |||
| fe198352a3 | |||
| 88502cd020 | |||
| 4924b45b56 | |||
| aea8b7cd7e | |||
| aafadb6111 | |||
| c82f904d49 | |||
| 60740fa259 | |||
| d36b32f414 | |||
| 14ccd6d2a5 | |||
| bdc3b63df2 | |||
| 8eec321a0e | |||
| 06de2313ab | |||
| a3f713bad8 | |||
| 7a1fca5e23 | |||
| 21c408a7da | |||
| 0e92108970 | |||
| 7d813ef97a | |||
| c87995250a | |||
| a9f7a376c7 | |||
| c3ee3f2320 | |||
| e8c26d0fea | |||
| 9c936121e8 | |||
| 40d2e40d94 | |||
| 837f50c91c | |||
| f0a0202e5c | |||
| 708c94bc56 | |||
| 5ed82eaf09 | |||
| 7d77ad68fd | |||
| 6725358db5 | |||
| c410e23460 | |||
| 903b86b9a2 | |||
| 52a49e6a34 | |||
| a7d99f351c | |||
| b0212dd780 | |||
| c8f5099423 | |||
| 5cc4c3f302 | |||
| c0d2cb42e9 | |||
| 8081f13052 | |||
| 84b672e617 | |||
| ed586c2d72 | |||
| 233176e321 | |||
| d1e3390bae | |||
| 1cd60c7a40 |
@@ -2,11 +2,11 @@
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/dotnet
|
||||
{
|
||||
"name": "Prowlarr",
|
||||
"image": "mcr.microsoft.com/devcontainers/dotnet:1-6.0",
|
||||
"image": "mcr.microsoft.com/devcontainers/dotnet:1-8.0",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/node:1": {
|
||||
"nodeGypDependencies": true,
|
||||
"version": "16",
|
||||
"version": "20",
|
||||
"nvmVersion": "latest"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -4,11 +4,18 @@ labels: ['Type: Bug', 'Status: Needs Triage']
|
||||
body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Is there an existing issue for this?
|
||||
label: I attest that there is not an existing issue for this?
|
||||
description: Please search to see if an open or closed issue already exists for the bug you encountered. If a bug exists and is closed note that it may only be fixed in an unstable branch.
|
||||
options:
|
||||
- label: I have searched the existing open and closed issues
|
||||
required: true
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: I attest this is not related to a Cardigann YML Indexer.
|
||||
description: Please search to see if this is for a tracker [that is yml-based (Cardigann)](https://github.com/Prowlarr/indexers) these are synced to Prowlarr/Indexers from Jackett/Jackett.
|
||||
options:
|
||||
- label: I confirm this is not related to a Cardigann YML Indexer
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Current Behavior
|
||||
@@ -73,8 +80,8 @@ body:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Trace Logs have been provided as applicable. Reports may be closed if the required logs are not provided.
|
||||
label: I attest that Trace Logs have been provided as applicable. Reports will be closed if the required logs are not provided.
|
||||
description: Trace logs are generally required for all bug reports and contain `trace`. Info logs are invalid for bug reports and do not contain `debug` nor `trace`
|
||||
options:
|
||||
- label: I have read and followed the steps in the wiki link above and provided the required trace logs - the logs contain `trace` - that are relevant and show this issue.
|
||||
- label: I attest that I have read and followed the steps in the wiki link above and provided the required trace logs - the logs contain `trace` - that are relevant and show this issue.
|
||||
required: true
|
||||
|
||||
Vendored
+1
-1
@@ -10,7 +10,7 @@
|
||||
"request": "launch",
|
||||
"preLaunchTask": "build dotnet",
|
||||
// If you have changed target frameworks, make sure to update the program path.
|
||||
"program": "${workspaceFolder}/_output/net6.0/Prowlarr",
|
||||
"program": "${workspaceFolder}/_output/net8.0/Prowlarr",
|
||||
"args": [],
|
||||
"cwd": "${workspaceFolder}",
|
||||
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
|
||||
|
||||
+37
-60
@@ -9,13 +9,13 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '1.35.1'
|
||||
majorVersion: '2.3.0'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
prowlarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
|
||||
sentryOrg: 'servarr'
|
||||
sentryUrl: 'https://sentry.servarr.com'
|
||||
dotnetVersion: '6.0.427'
|
||||
dotnetVersion: '8.0.405'
|
||||
nodeVersion: '20.X'
|
||||
innoVersion: '6.2.2'
|
||||
windowsImage: 'windows-2022'
|
||||
@@ -106,7 +106,7 @@ stages:
|
||||
echo "Extra platforms already enabled"
|
||||
else
|
||||
echo "Enabling extra platform support"
|
||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86/' $BUNDLEDVERSIONS
|
||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64/' "$BUNDLEDVERSIONS"
|
||||
fi
|
||||
displayName: Enable Extra Platform Support
|
||||
- bash: ./build.sh --backend --enable-extra-platforms
|
||||
@@ -122,27 +122,23 @@ stages:
|
||||
artifact: '$(osName)Backend'
|
||||
displayName: Publish Backend
|
||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
||||
- publish: '$(testsFolder)/net6.0/win-x64/publish'
|
||||
- publish: '$(testsFolder)/net8.0/win-x64/publish'
|
||||
artifact: win-x64-tests
|
||||
displayName: Publish win-x64 Test Package
|
||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
||||
- publish: '$(testsFolder)/net6.0/linux-x64/publish'
|
||||
- publish: '$(testsFolder)/net8.0/linux-x64/publish'
|
||||
artifact: linux-x64-tests
|
||||
displayName: Publish linux-x64 Test Package
|
||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
||||
- publish: '$(testsFolder)/net6.0/linux-x86/publish'
|
||||
artifact: linux-x86-tests
|
||||
displayName: Publish linux-x86 Test Package
|
||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
||||
- publish: '$(testsFolder)/net6.0/linux-musl-x64/publish'
|
||||
- publish: '$(testsFolder)/net8.0/linux-musl-x64/publish'
|
||||
artifact: linux-musl-x64-tests
|
||||
displayName: Publish linux-musl-x64 Test Package
|
||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
||||
- publish: '$(testsFolder)/net6.0/freebsd-x64/publish'
|
||||
- publish: '$(testsFolder)/net8.0/freebsd-x64/publish'
|
||||
artifact: freebsd-x64-tests
|
||||
displayName: Publish freebsd-x64 Test Package
|
||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
||||
- publish: '$(testsFolder)/net6.0/osx-x64/publish'
|
||||
- publish: '$(testsFolder)/net8.0/osx-x64/publish'
|
||||
artifact: osx-x64-tests
|
||||
displayName: Publish osx-x64 Test Package
|
||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
||||
@@ -259,21 +255,21 @@ stages:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x64.zip'
|
||||
archiveType: 'zip'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/win-x64/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/win-x64/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create win-x86 zip
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x86.zip'
|
||||
archiveType: 'zip'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/win-x86/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/win-x86/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create osx-x64 app
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-x64.zip'
|
||||
archiveType: 'zip'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-x64-app/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-x64-app/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create osx-x64 tar
|
||||
inputs:
|
||||
@@ -281,14 +277,14 @@ stages:
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-x64/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-x64/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create osx-arm64 app
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-arm64.zip'
|
||||
archiveType: 'zip'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-arm64-app/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-arm64-app/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create osx-arm64 tar
|
||||
inputs:
|
||||
@@ -296,7 +292,7 @@ stages:
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-arm64/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-arm64/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-x64 tar
|
||||
inputs:
|
||||
@@ -304,7 +300,7 @@ stages:
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-x64/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-x64/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-musl-x64 tar
|
||||
inputs:
|
||||
@@ -312,15 +308,7 @@ stages:
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-x86 tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).linux-core-x86.tar.gz'
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-x86/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-arm tar
|
||||
inputs:
|
||||
@@ -328,7 +316,7 @@ stages:
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-arm/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-arm/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-musl-arm tar
|
||||
inputs:
|
||||
@@ -336,7 +324,7 @@ stages:
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-arm64 tar
|
||||
inputs:
|
||||
@@ -344,7 +332,7 @@ stages:
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-arm64/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-arm64/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-musl-arm64 tar
|
||||
inputs:
|
||||
@@ -352,7 +340,7 @@ stages:
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net8.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create freebsd-x64 tar
|
||||
inputs:
|
||||
@@ -360,7 +348,7 @@ stages:
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net6.0
|
||||
rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net8.0
|
||||
- publish: $(Build.ArtifactStagingDirectory)
|
||||
artifact: 'Packages'
|
||||
displayName: Publish Packages
|
||||
@@ -476,6 +464,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(testName) Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: ne(variables['testName'], 'freebsd-x64')
|
||||
|
||||
- job: Unit_Docker
|
||||
displayName: Unit Docker
|
||||
@@ -487,10 +476,6 @@ stages:
|
||||
testName: 'Musl Net Core'
|
||||
artifactName: linux-musl-x64-tests
|
||||
containerImage: ghcr.io/servarr/testimages:alpine
|
||||
linux-x86:
|
||||
testName: 'linux-x86'
|
||||
artifactName: linux-x86-tests
|
||||
containerImage: ghcr.io/servarr/testimages:linux-x86
|
||||
|
||||
pool:
|
||||
vmImage: ${{ variables.linuxImage }}
|
||||
@@ -504,12 +489,6 @@ stages:
|
||||
displayName: 'Install .NET'
|
||||
inputs:
|
||||
version: $(dotnetVersion)
|
||||
condition: and(succeeded(), ne(variables['testName'], 'linux-x86'))
|
||||
- bash: |
|
||||
SDKURL=$(curl -s https://api.github.com/repos/Servarr/dotnet-linux-x86/releases | jq -rc '.[].assets[].browser_download_url' | grep sdk-${DOTNETVERSION}.*gz$)
|
||||
curl -fsSL $SDKURL | tar xzf - -C /opt/dotnet
|
||||
displayName: 'Install .NET'
|
||||
condition: and(succeeded(), eq(variables['testName'], 'linux-x86'))
|
||||
- checkout: none
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Test Artifact
|
||||
@@ -532,6 +511,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(testName) Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
|
||||
- job: Unit_LinuxCore_Postgres14
|
||||
displayName: Unit Native LinuxCore with Postgres14 Database
|
||||
@@ -585,6 +565,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 +619,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'LinuxCore Postgres15 Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
|
||||
- stage: Integration
|
||||
displayName: Integration
|
||||
@@ -720,6 +702,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(testName) Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
- job: Integration_LinuxCore_Postgres14
|
||||
@@ -782,6 +765,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'Integration LinuxCore Postgres14 Database Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
|
||||
@@ -845,6 +829,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 +876,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'FreeBSD Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: false
|
||||
displayName: Publish Test Results
|
||||
|
||||
- job: Integration_Docker
|
||||
@@ -904,11 +890,6 @@ stages:
|
||||
artifactName: linux-musl-x64-tests
|
||||
containerImage: ghcr.io/servarr/testimages:alpine
|
||||
pattern: 'Prowlarr.*.linux-musl-core-x64.tar.gz'
|
||||
linux-x86:
|
||||
testName: 'linux-x86'
|
||||
artifactName: linux-x86-tests
|
||||
containerImage: ghcr.io/servarr/testimages:linux-x86
|
||||
pattern: 'Prowlarr.*.linux-core-x86.tar.gz'
|
||||
pool:
|
||||
vmImage: ${{ variables.linuxImage }}
|
||||
|
||||
@@ -921,12 +902,6 @@ stages:
|
||||
displayName: 'Install .NET'
|
||||
inputs:
|
||||
version: $(dotnetVersion)
|
||||
condition: and(succeeded(), ne(variables['testName'], 'linux-x86'))
|
||||
- bash: |
|
||||
SDKURL=$(curl -s https://api.github.com/repos/Servarr/dotnet-linux-x86/releases | jq -rc '.[].assets[].browser_download_url' | grep sdk-${DOTNETVERSION}.*gz$)
|
||||
curl -fsSL $SDKURL | tar xzf - -C /opt/dotnet
|
||||
displayName: 'Install .NET'
|
||||
condition: and(succeeded(), eq(variables['testName'], 'linux-x86'))
|
||||
- checkout: none
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Test Artifact
|
||||
@@ -960,6 +935,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(testName) Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
failTaskOnMissingResultsFile: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
- stage: Automation
|
||||
@@ -1041,6 +1017,7 @@ stages:
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: '$(osName) Automation Tests'
|
||||
failTaskOnFailedTests: $(failBuild)
|
||||
failTaskOnMissingResultsFile: $(failBuild)
|
||||
displayName: Publish Test Results
|
||||
|
||||
- stage: Analyze
|
||||
@@ -1181,22 +1158,23 @@ stages:
|
||||
extraProperties: |
|
||||
sonar.exclusions=**/obj/**,**/*.dll,**/NzbDrone.Core.Test/Files/**/*,./frontend/**,**/ExternalModules/**,./src/Libraries/**
|
||||
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
|
||||
- bash: |
|
||||
./build.sh --backend -f net6.0 -r win-x64
|
||||
TEST_DIR=_tests/net6.0/win-x64/publish/ ./test.sh Windows Unit Coverage
|
||||
./build.sh --backend -f net8.0 -r win-x64
|
||||
TEST_DIR=_tests/net8.0/win-x64/publish/ ./test.sh Windows Unit Coverage
|
||||
displayName: Coverage Unit Tests
|
||||
- task: SonarCloudAnalyze@3
|
||||
condition: eq(variables['System.PullRequest.IsFork'], 'False')
|
||||
displayName: Publish SonarCloud Results
|
||||
- task: reportgenerator@5.3.11
|
||||
- task: reportgenerator@5
|
||||
displayName: Generate Coverage Report
|
||||
inputs:
|
||||
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'
|
||||
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.cobertura.xml'
|
||||
targetdir: '$(Build.SourcesDirectory)/CoverageResults/combined'
|
||||
reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
|
||||
publishCodeCoverageResults: true
|
||||
sourcedirs: src
|
||||
|
||||
- stage: Report_Out
|
||||
dependsOn:
|
||||
@@ -1228,4 +1206,3 @@ stages:
|
||||
DISCORDCHANNELID: $(discordChannelId)
|
||||
DISCORDWEBHOOKKEY: $(discordWebhookKey)
|
||||
DISCORDTHREADID: $(discordThreadId)
|
||||
|
||||
|
||||
@@ -33,14 +33,14 @@ EnableExtraPlatformsInSDK()
|
||||
echo "Extra platforms already enabled"
|
||||
else
|
||||
echo "Enabling extra platform support"
|
||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86/' $BUNDLEDVERSIONS
|
||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64/' "$BUNDLEDVERSIONS"
|
||||
fi
|
||||
}
|
||||
|
||||
EnableExtraPlatforms()
|
||||
{
|
||||
if grep -qv freebsd-x64 src/Directory.Build.props; then
|
||||
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64;linux-x86</RuntimeIdentifiers>^g" src/Directory.Build.props
|
||||
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64</RuntimeIdentifiers>^g" src/Directory.Build.props
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -79,9 +79,9 @@ Build()
|
||||
|
||||
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
||||
then
|
||||
dotnet msbuild -restore $slnFile -p:Configuration=Release -p:Platform=$platform -t:PublishAllRids
|
||||
dotnet msbuild -restore $slnFile -p:SelfContained=True -p:Configuration=Release -p:Platform=$platform -t:PublishAllRids
|
||||
else
|
||||
dotnet msbuild -restore $slnFile -p:Configuration=Release -p:Platform=$platform -p:RuntimeIdentifiers=$RID -t:PublishAllRids
|
||||
dotnet msbuild -restore $slnFile -p:SelfContained=True -p:Configuration=Release -p:Platform=$platform -p:RuntimeIdentifiers=$RID -t:PublishAllRids
|
||||
fi
|
||||
|
||||
ProgressEnd 'Build'
|
||||
@@ -137,7 +137,7 @@ PackageLinux()
|
||||
|
||||
echo "Adding Prowlarr.Mono to UpdatePackage"
|
||||
cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update
|
||||
if [ "$framework" = "net6.0" ]; then
|
||||
if [ "$framework" = "net8.0" ]; then
|
||||
cp $folder/Mono.Posix.NETStandard.* $folder/Prowlarr.Update
|
||||
cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update
|
||||
fi
|
||||
@@ -165,7 +165,7 @@ PackageMacOS()
|
||||
|
||||
echo "Adding Prowlarr.Mono to UpdatePackage"
|
||||
cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update
|
||||
if [ "$framework" = "net6.0" ]; then
|
||||
if [ "$framework" = "net8.0" ]; then
|
||||
cp $folder/Mono.Posix.NETStandard.* $folder/Prowlarr.Update
|
||||
cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update
|
||||
fi
|
||||
@@ -377,15 +377,14 @@ then
|
||||
Build
|
||||
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
||||
then
|
||||
PackageTests "net6.0" "win-x64"
|
||||
PackageTests "net6.0" "win-x86"
|
||||
PackageTests "net6.0" "linux-x64"
|
||||
PackageTests "net6.0" "linux-musl-x64"
|
||||
PackageTests "net6.0" "osx-x64"
|
||||
PackageTests "net8.0" "win-x64"
|
||||
PackageTests "net8.0" "win-x86"
|
||||
PackageTests "net8.0" "linux-x64"
|
||||
PackageTests "net8.0" "linux-musl-x64"
|
||||
PackageTests "net8.0" "osx-x64"
|
||||
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
|
||||
then
|
||||
PackageTests "net6.0" "freebsd-x64"
|
||||
PackageTests "net6.0" "linux-x86"
|
||||
PackageTests "net8.0" "freebsd-x64"
|
||||
fi
|
||||
else
|
||||
PackageTests "$FRAMEWORK" "$RID"
|
||||
@@ -413,20 +412,19 @@ then
|
||||
|
||||
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
||||
then
|
||||
Package "net6.0" "win-x64"
|
||||
Package "net6.0" "win-x86"
|
||||
Package "net6.0" "linux-x64"
|
||||
Package "net6.0" "linux-musl-x64"
|
||||
Package "net6.0" "linux-arm64"
|
||||
Package "net6.0" "linux-musl-arm64"
|
||||
Package "net6.0" "linux-arm"
|
||||
Package "net6.0" "linux-musl-arm"
|
||||
Package "net6.0" "osx-x64"
|
||||
Package "net6.0" "osx-arm64"
|
||||
Package "net8.0" "win-x64"
|
||||
Package "net8.0" "win-x86"
|
||||
Package "net8.0" "linux-x64"
|
||||
Package "net8.0" "linux-musl-x64"
|
||||
Package "net8.0" "linux-arm64"
|
||||
Package "net8.0" "linux-musl-arm64"
|
||||
Package "net8.0" "linux-arm"
|
||||
Package "net8.0" "linux-musl-arm"
|
||||
Package "net8.0" "osx-x64"
|
||||
Package "net8.0" "osx-arm64"
|
||||
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
|
||||
then
|
||||
Package "net6.0" "freebsd-x64"
|
||||
Package "net6.0" "linux-x86"
|
||||
Package "net8.0" "freebsd-x64"
|
||||
fi
|
||||
else
|
||||
Package "$FRAMEWORK" "$RID"
|
||||
@@ -436,7 +434,7 @@ fi
|
||||
if [ "$INSTALLER" = "YES" ];
|
||||
then
|
||||
InstallInno
|
||||
BuildInstaller "net6.0" "win-x64"
|
||||
BuildInstaller "net6.0" "win-x86"
|
||||
BuildInstaller "net8.0" "win-x64"
|
||||
BuildInstaller "net8.0" "win-x86"
|
||||
RemoveInno
|
||||
fi
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
FRAMEWORK="net6.0"
|
||||
FRAMEWORK="net8.0"
|
||||
PLATFORM=$1
|
||||
ARCHITECTURE="${2:-x64}"
|
||||
|
||||
@@ -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 7.3.2 Swashbuckle.AspNetCore.Cli
|
||||
dotnet tool install --version 8.1.4 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.41'
|
||||
corejs: '3.42'
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
.modal {
|
||||
position: relative;
|
||||
display: flex;
|
||||
max-width: 90%;
|
||||
max-height: 90%;
|
||||
border-radius: 6px;
|
||||
opacity: 1;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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];
|
||||
};
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
.scroller {
|
||||
flex: 1 1 auto;
|
||||
min-height: 400px;
|
||||
}
|
||||
|
||||
.filterRow {
|
||||
@@ -57,29 +58,68 @@
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $breakpointSmall) {
|
||||
.filterInput {
|
||||
margin-bottom: 5px;
|
||||
.filtersToggle {
|
||||
display: none;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid var(--borderColor);
|
||||
border-radius: 4px;
|
||||
background: transparent;
|
||||
color: var(--textColor);
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.alert {
|
||||
.filtersToggle:hover {
|
||||
background-color: var(--hoverBackgroundColor);
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $breakpointSmall) {
|
||||
.filterInput {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.notice {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.filtersToggle {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.filterRow {
|
||||
display: block;
|
||||
margin-bottom: 10px;
|
||||
padding: 10px;
|
||||
border: 1px solid var(--borderColor);
|
||||
border-radius: 4px;
|
||||
background-color: var(--cardBackgroundColor);
|
||||
}
|
||||
|
||||
.filterRowCollapsed {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.filterContainer {
|
||||
margin-right: 0;
|
||||
margin-bottom: 5px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.filterContainer:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.scroller {
|
||||
margin-right: -30px;
|
||||
margin-bottom: -30px;
|
||||
margin-left: -30px;
|
||||
margin-right: -15px;
|
||||
margin-bottom: -15px;
|
||||
margin-left: -15px;
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.modalBody {
|
||||
padding: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ interface CssExports {
|
||||
'filterInput': string;
|
||||
'filterLabel': string;
|
||||
'filterRow': string;
|
||||
'filterRowCollapsed': string;
|
||||
'filtersToggle': string;
|
||||
'indexers': string;
|
||||
'modalBody': string;
|
||||
'modalFooter': string;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import classNames from 'classnames';
|
||||
import { some } from 'lodash';
|
||||
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
@@ -7,6 +8,7 @@ import Alert from 'Components/Alert';
|
||||
import EnhancedSelectInput from 'Components/Form/EnhancedSelectInput';
|
||||
import NewznabCategorySelectInputConnector from 'Components/Form/NewznabCategorySelectInputConnector';
|
||||
import TextInput from 'Components/Form/TextInput';
|
||||
import Icon from 'Components/Icon';
|
||||
import Button from 'Components/Link/Button';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import ModalBody from 'Components/Modal/ModalBody';
|
||||
@@ -16,7 +18,7 @@ import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import Scroller from 'Components/Scroller/Scroller';
|
||||
import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import { kinds, scrollDirections } from 'Helpers/Props';
|
||||
import { icons, kinds, scrollDirections } from 'Helpers/Props';
|
||||
import Indexer, { IndexerCategory } from 'Indexer/Indexer';
|
||||
import {
|
||||
fetchIndexerSchema,
|
||||
@@ -152,6 +154,7 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
|
||||
const [filterLanguages, setFilterLanguages] = useState<string[]>([]);
|
||||
const [filterPrivacyLevels, setFilterPrivacyLevels] = useState<string[]>([]);
|
||||
const [filterCategories, setFilterCategories] = useState<number[]>([]);
|
||||
const [isFiltersCollapsed, setIsFiltersCollapsed] = useState(true);
|
||||
|
||||
useEffect(
|
||||
() => {
|
||||
@@ -196,6 +199,10 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
|
||||
[setFilterCategories]
|
||||
);
|
||||
|
||||
const handleToggleFilters = useCallback(() => {
|
||||
setIsFiltersCollapsed(!isFiltersCollapsed);
|
||||
}, [isFiltersCollapsed]);
|
||||
|
||||
const onIndexerSelect = useCallback(
|
||||
({
|
||||
implementation,
|
||||
@@ -322,7 +329,17 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
|
||||
onChange={onFilterChange}
|
||||
/>
|
||||
|
||||
<div className={styles.filterRow}>
|
||||
<Button className={styles.filtersToggle} onPress={handleToggleFilters}>
|
||||
<Icon name={isFiltersCollapsed ? icons.EXPAND : icons.COLLAPSE} />
|
||||
{translate('Filters')}
|
||||
</Button>
|
||||
|
||||
<div
|
||||
className={classNames(
|
||||
styles.filterRow,
|
||||
isFiltersCollapsed && styles.filterRowCollapsed
|
||||
)}
|
||||
>
|
||||
<div className={styles.filterContainer}>
|
||||
<label className={styles.filterLabel}>
|
||||
{translate('Protocol')}
|
||||
|
||||
@@ -21,7 +21,7 @@ function createMapStateToProps() {
|
||||
) => {
|
||||
|
||||
// If a release is deleted this selector may fire before the parent
|
||||
// selecors, which will result in an undefined release, if that happens
|
||||
// selectors, which will result in an undefined release, if that happens
|
||||
// we want to return early here and again in the render function to avoid
|
||||
// trying to show a release that has no information available.
|
||||
|
||||
|
||||
@@ -30,7 +30,9 @@ export const authenticationMethodOptions = [
|
||||
key: 'basic',
|
||||
get value() {
|
||||
return translate('AuthBasic');
|
||||
}
|
||||
},
|
||||
isDisabled: true,
|
||||
isHidden: true
|
||||
},
|
||||
{
|
||||
key: 'forms',
|
||||
|
||||
@@ -419,7 +419,7 @@ export const reducers = createHandleActions({
|
||||
const items = newState.items;
|
||||
const index = items.findIndex((item) => item.guid === guid);
|
||||
|
||||
// Don't try to update if there isnt a matching item (the user closed the modal)
|
||||
// Don't try to update if there isn't a matching item (the user closed the modal)
|
||||
if (index >= 0) {
|
||||
const item = Object.assign({}, items[index], payload);
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@ import { createSelector } from 'reselect';
|
||||
import { isCommandExecuting } from 'Utilities/Command';
|
||||
import createCommandSelector from './createCommandSelector';
|
||||
|
||||
function createCommandExecutingSelector(name: string, contraints = {}) {
|
||||
return createSelector(createCommandSelector(name, contraints), (command) => {
|
||||
function createCommandExecutingSelector(name: string, constraints = {}) {
|
||||
return createSelector(createCommandSelector(name, constraints), (command) => {
|
||||
return isCommandExecuting(command);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@ import { createSelector } from 'reselect';
|
||||
import { findCommand } from 'Utilities/Command';
|
||||
import createCommandsSelector from './createCommandsSelector';
|
||||
|
||||
function createCommandSelector(name: string, contraints = {}) {
|
||||
function createCommandSelector(name: string, constraints = {}) {
|
||||
return createSelector(createCommandsSelector(), (commands) => {
|
||||
return findCommand(commands, { name, ...contraints });
|
||||
return findCommand(commands, { name, ...constraints });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"sdk": {
|
||||
"version": "8.0.405"
|
||||
}
|
||||
}
|
||||
+16
-16
@@ -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",
|
||||
"@microsoft/signalr": "8.0.7",
|
||||
"@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.41.0",
|
||||
"core-js": "3.42.0",
|
||||
"css-loader": "6.7.3",
|
||||
"css-modules-typescript-loader": "4.0.1",
|
||||
"eslint": "8.57.1",
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
<Deterministic Condition="$(AssemblyVersion.EndsWith('*'))">False</Deterministic>
|
||||
|
||||
<PathMap>$(MSBuildProjectDirectory)=./$(MSBuildProjectName)/</PathMap>
|
||||
<PathMap>$(MSBuildThisFileDirectory)=./</PathMap>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Set the AssemblyConfiguration attribute for projects -->
|
||||
@@ -99,13 +99,6 @@
|
||||
<RootNamespace Condition="'$(ProwlarrProject)'=='true'">$(MSBuildProjectName.Replace('Prowlarr','NzbDrone'))</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TestProject)'!='true'">
|
||||
<!-- Annotates .NET assemblies with repository information including SHA -->
|
||||
<!-- Sentry uses this to link directly to GitHub at the exact version/file/line -->
|
||||
<!-- This is built-in on .NET 8 and can be removed once the project is updated -->
|
||||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Sentry specific configuration: Only in Release mode -->
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||
<!-- https://docs.sentry.io/platforms/dotnet/configuration/msbuild/ -->
|
||||
@@ -130,14 +123,11 @@
|
||||
|
||||
<!-- Standard testing packages -->
|
||||
<ItemGroup Condition="'$(TestProject)'=='true'">
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
||||
<PackageReference Include="NUnit" Version="3.14.0" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageReference Include="NunitXml.TestLogger" Version="3.0.131" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TestProject)'=='true' and '$(TargetFramework)'=='net6.0'">
|
||||
<PackageReference Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="5.1.0" />
|
||||
<PackageReference Include="NunitXml.TestLogger" Version="3.1.20" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(ProwlarrProject)'=='true' and '$(EnableAnalyzers)'=='false'">
|
||||
@@ -148,9 +138,9 @@
|
||||
<!-- Set up stylecop -->
|
||||
<ItemGroup Condition="'$(ProwlarrProject)'=='true' and '$(EnableAnalyzers)'!='false'">
|
||||
<!-- StyleCop analysis -->
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
|
||||
<PackageReference Include="StyleCop.Analyzers.Unstable" Version="1.2.0.556">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<AdditionalFiles Include="$(SolutionDir)stylecop.json" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
<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="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" />
|
||||
</packageSources>
|
||||
</configuration>
|
||||
|
||||
@@ -39,15 +39,16 @@ namespace NzbDrone.Automation.Test
|
||||
var service = ChromeDriverService.CreateDefaultService();
|
||||
|
||||
// Timeout as windows automation tests seem to take alot longer to get going
|
||||
driver = new ChromeDriver(service, options, new TimeSpan(0, 3, 0));
|
||||
driver = new ChromeDriver(service, options, TimeSpan.FromMinutes(3));
|
||||
|
||||
driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);
|
||||
driver.Manage().Window.FullScreen();
|
||||
|
||||
_runner = new NzbDroneRunner(LogManager.GetCurrentClassLogger(), null);
|
||||
_runner.KillAll();
|
||||
_runner.Start(true);
|
||||
|
||||
driver.Url = "http://localhost:9696";
|
||||
driver.Navigate().GoToUrl("http://localhost:9696");
|
||||
|
||||
var page = new PageBase(driver);
|
||||
page.WaitForNoSpinner();
|
||||
@@ -67,7 +68,7 @@ namespace NzbDrone.Automation.Test
|
||||
{
|
||||
try
|
||||
{
|
||||
var image = ((ITakesScreenshot)driver).GetScreenshot();
|
||||
var image = (driver as ITakesScreenshot).GetScreenshot();
|
||||
image.SaveAsFile($"./{name}_test_screenshot.png", ScreenshotImageFormat.Png);
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -7,12 +7,11 @@ namespace NzbDrone.Automation.Test.PageModel
|
||||
{
|
||||
public class PageBase
|
||||
{
|
||||
private readonly WebDriver _driver;
|
||||
private readonly IWebDriver _driver;
|
||||
|
||||
public PageBase(WebDriver driver)
|
||||
public PageBase(IWebDriver driver)
|
||||
{
|
||||
_driver = driver;
|
||||
driver.Manage().Window.Maximize();
|
||||
}
|
||||
|
||||
public IWebElement FindByClass(string className, int timeout = 5)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0</TargetFrameworks>
|
||||
<TargetFrameworks>net8.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Selenium.Support" Version="4.1.0" />
|
||||
|
||||
@@ -10,13 +10,13 @@ namespace NzbDrone.Common.Test.EnvironmentInfo
|
||||
[Test]
|
||||
public void should_return_version()
|
||||
{
|
||||
BuildInfo.Version.Major.Should().BeOneOf(0, 1, 10);
|
||||
BuildInfo.Version.Major.Should().BeOneOf(0, 2, 10);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_get_branch()
|
||||
{
|
||||
BuildInfo.Branch.Should().NotBe("unknow");
|
||||
BuildInfo.Branch.Should().NotBe("unknown");
|
||||
BuildInfo.Branch.Should().NotBeNullOrWhiteSpace();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0</TargetFrameworks>
|
||||
<TargetFrameworks>net8.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\NzbDrone.Host\Prowlarr.Host.csproj" />
|
||||
|
||||
@@ -14,7 +14,6 @@ namespace NzbDrone.Common.Composition
|
||||
static AssemblyLoader()
|
||||
{
|
||||
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ContainerResolveEventHandler);
|
||||
RegisterSQLiteResolver();
|
||||
}
|
||||
|
||||
public static IList<Assembly> Load(IList<string> assemblyNames)
|
||||
@@ -23,6 +22,10 @@ namespace NzbDrone.Common.Composition
|
||||
toLoad.Add("Prowlarr.Common");
|
||||
toLoad.Add(OsInfo.IsWindows ? "Prowlarr.Windows" : "Prowlarr.Mono");
|
||||
|
||||
var toRegisterResolver = new List<string> { "System.Data.SQLite" };
|
||||
toRegisterResolver.AddRange(assemblyNames.Intersect(new[] { "Prowlarr.Core" }));
|
||||
RegisterNativeResolver(toRegisterResolver);
|
||||
|
||||
var startupPath = AppDomain.CurrentDomain.BaseDirectory;
|
||||
|
||||
return toLoad
|
||||
@@ -43,16 +46,18 @@ namespace NzbDrone.Common.Composition
|
||||
return AssemblyLoadContext.Default.LoadFromAssemblyPath(assemblyPath);
|
||||
}
|
||||
|
||||
public static void RegisterSQLiteResolver()
|
||||
public static void RegisterNativeResolver(IEnumerable<string> assemblyNames)
|
||||
{
|
||||
foreach (var name in assemblyNames)
|
||||
{
|
||||
// This ensures we look for sqlite3 using libsqlite3.so.0 on Linux and not libsqlite3.so which
|
||||
// is less likely to exist.
|
||||
var sqliteAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(
|
||||
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "System.Data.SQLite.dll"));
|
||||
var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(
|
||||
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{name}.dll"));
|
||||
|
||||
try
|
||||
{
|
||||
NativeLibrary.SetDllImportResolver(sqliteAssembly, LoadSqliteNativeLib);
|
||||
NativeLibrary.SetDllImportResolver(assembly, LoadNativeLib);
|
||||
}
|
||||
catch (InvalidOperationException)
|
||||
{
|
||||
@@ -60,10 +65,27 @@ namespace NzbDrone.Common.Composition
|
||||
// Catch required for NzbDrone.Host tests
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IntPtr LoadSqliteNativeLib(string libraryName, Assembly assembly, DllImportSearchPath? dllImportSearchPath)
|
||||
private static IntPtr LoadNativeLib(string libraryName, Assembly assembly, DllImportSearchPath? dllImportSearchPath)
|
||||
{
|
||||
var mappedName = OsInfo.IsLinux && libraryName == "sqlite3" ? "libsqlite3.so.0" : libraryName;
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(libraryName);
|
||||
|
||||
var mappedName = libraryName;
|
||||
|
||||
if (libraryName is "sqlite3" or "e_sqlite3")
|
||||
{
|
||||
if (OsInfo.IsLinux)
|
||||
{
|
||||
if (NativeLibrary.TryLoad(libraryName, assembly, dllImportSearchPath, out var libHandle))
|
||||
{
|
||||
return libHandle;
|
||||
}
|
||||
|
||||
mappedName = "libsqlite3.so.0";
|
||||
}
|
||||
}
|
||||
|
||||
return NativeLibrary.Load(mappedName, assembly, dllImportSearchPath);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace NzbDrone.Common.Disk
|
||||
{
|
||||
@@ -24,10 +23,5 @@ namespace NzbDrone.Common.Disk
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
|
||||
protected DestinationAlreadyExistsException(SerializationInfo info, StreamingContext context)
|
||||
: base(info, context)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,6 +75,17 @@ namespace NzbDrone.Common.EnvironmentInfo
|
||||
{
|
||||
try
|
||||
{
|
||||
if (OsInfo.IsOsx)
|
||||
{
|
||||
var userAppDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile, Environment.SpecialFolderOption.DoNotVerify), ".config", "Prowlarr");
|
||||
|
||||
if (_diskProvider.FolderExists(userAppDataFolder) && !_diskProvider.FileExists(_appFolderInfo.GetConfigPath()))
|
||||
{
|
||||
_diskTransferService.MirrorFolder(userAppDataFolder, _appFolderInfo.AppDataFolder);
|
||||
_diskProvider.DeleteFolder(userAppDataFolder, true);
|
||||
}
|
||||
}
|
||||
|
||||
var oldDbFile = Path.Combine(_appFolderInfo.AppDataFolder, "nzbdrone.db");
|
||||
|
||||
if (_startupContext.Args.ContainsKey(StartupContext.APPDATA))
|
||||
@@ -115,7 +126,7 @@ namespace NzbDrone.Common.EnvironmentInfo
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Debug(ex, ex.Message);
|
||||
throw new ProwlarrStartupException("Unable to migrate DB from nzbdrone.db to {0}. Migrate manually", _appFolderInfo.GetDatabase());
|
||||
throw new ProwlarrStartupException(ex, "Unable to migrate DB from nzbdrone.db to {0}. Migrate manually", _appFolderInfo.GetDatabase());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace NzbDrone.Common.EnvironmentInfo
|
||||
|
||||
var attributes = assembly.GetCustomAttributes(true);
|
||||
|
||||
Branch = "unknow";
|
||||
Branch = "unknown";
|
||||
|
||||
var config = attributes.OfType<AssemblyConfigurationAttribute>().FirstOrDefault();
|
||||
if (config != null)
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace NzbDrone.Common.Extensions
|
||||
}
|
||||
|
||||
public static IDictionary<TNewKey, TNewValue> SelectDictionary<TKey, TValue, TNewKey, TNewValue>(this IDictionary<TKey, TValue> dictionary,
|
||||
Func<KeyValuePair<TKey, TValue>, ValueTuple<TNewKey, TNewValue>> selection)
|
||||
Func<KeyValuePair<TKey, TValue>, (TNewKey Item1, TNewValue Item2)> selection)
|
||||
{
|
||||
return dictionary.Select(selection).ToDictionary(t => t.Item1, t => t.Item2);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ namespace NzbDrone.Common.Http
|
||||
// Save to add to final response
|
||||
var responseCookies = response.Cookies;
|
||||
|
||||
// Update cookiecontainer for next request with any cookies recieved on last request
|
||||
// Update cookie container for next request with any cookies received on last request
|
||||
var responseContainer = HandleRedirectCookies(request, response);
|
||||
|
||||
response = await ExecuteRequestAsync(request, responseContainer);
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,6 +202,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
c.ForLogger("Microsoft.*").WriteToNil(LogLevel.Warn);
|
||||
c.ForLogger("Microsoft.Hosting.Lifetime*").WriteToNil(LogLevel.Info);
|
||||
c.ForLogger("Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware").WriteToNil(LogLevel.Fatal);
|
||||
c.ForLogger("Prowlarr.Http.Authentication.ApiKeyAuthenticationHandler").WriteToNil(LogLevel.Info);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,28 +1,30 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0</TargetFrameworks>
|
||||
<TargetFrameworks>net8.0</TargetFrameworks>
|
||||
<DefineConstants Condition="'$(RuntimeIdentifier)' == 'linux-musl-x64' or '$(RuntimeIdentifier)' == 'linux-musl-arm64'">ISMUSL</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DryIoc.dll" Version="5.4.3" />
|
||||
<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="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.1" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||
<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="Npgsql" Version="9.0.3" />
|
||||
<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.11" />
|
||||
<PackageReference Include="SourceGear.sqlite3" Version="3.50.4.2" />
|
||||
<PackageReference Include="System.Data.SQLite" Version="2.0.2" />
|
||||
<PackageReference Include="System.Private.Uri" Version="4.3.2" />
|
||||
<PackageReference Include="System.Text.Json" Version="8.0.6" />
|
||||
<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.2" />
|
||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.1" />
|
||||
<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" />
|
||||
<PackageReference Include="System.ServiceProcess.ServiceController" Version="8.0.1" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Update="EnsureThat\Resources\ExceptionMessages.Designer.cs">
|
||||
|
||||
@@ -94,7 +94,8 @@ namespace NzbDrone.Common.TPL
|
||||
{
|
||||
_currentThreadIsProcessingItems = false;
|
||||
}
|
||||
}, null);
|
||||
},
|
||||
null);
|
||||
}
|
||||
|
||||
/// <summary>Attempts to execute the specified task on the current thread.</summary>
|
||||
|
||||
@@ -20,7 +20,8 @@ namespace NzbDrone.Common.TPL
|
||||
Logger.Error(exception, "Task Error");
|
||||
}
|
||||
}
|
||||
}, TaskContinuationOptions.OnlyOnFaulted);
|
||||
},
|
||||
TaskContinuationOptions.OnlyOnFaulted);
|
||||
|
||||
return task;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFrameworks>net6.0</TargetFrameworks>
|
||||
<TargetFrameworks>net8.0</TargetFrameworks>
|
||||
|
||||
<ApplicationIcon>..\NzbDrone.Host\Prowlarr.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
|
||||
+192
@@ -0,0 +1,192 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Datastore.Migration;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.Datastore.Migration
|
||||
{
|
||||
[TestFixture]
|
||||
public class newznab_indexers_enable_redirectFixture : MigrationTest<newznab_indexers_enable_redirect>
|
||||
{
|
||||
[Test]
|
||||
public void should_update_redirect_setting_to_true_if_false()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
c.Insert.IntoTable("Indexers").Row(new
|
||||
{
|
||||
Id = 1,
|
||||
Name = "Test",
|
||||
Implementation = "Newznab",
|
||||
Settings = "{\"baseUrl\":\"https://example.com\",\"apiKey\":\"testapikey\"}",
|
||||
ConfigContract = "NewznabSettings",
|
||||
Enable = true,
|
||||
Priority = 1,
|
||||
Added = System.DateTime.UtcNow,
|
||||
Redirect = false,
|
||||
AppProfileId = 1,
|
||||
Tags = "[]",
|
||||
DownloadClientId = 0
|
||||
});
|
||||
});
|
||||
|
||||
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Implementation.Should().Be("Newznab");
|
||||
items.First().Redirect.Should().BeTrue(); // Validate Redirect is updated
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_change_redirect_setting_if_already_true()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
c.Insert.IntoTable("Indexers").Row(new
|
||||
{
|
||||
Id = 1,
|
||||
Name = "Test",
|
||||
Implementation = "Newznab",
|
||||
Settings = "{\"baseUrl\":\"https://example.com\",\"apiKey\":\"testapikey\"}",
|
||||
ConfigContract = "NewznabSettings",
|
||||
Enable = true,
|
||||
Priority = 2,
|
||||
Added = System.DateTime.UtcNow,
|
||||
Redirect = true,
|
||||
AppProfileId = 1,
|
||||
Tags = "[]",
|
||||
DownloadClientId = 0
|
||||
});
|
||||
});
|
||||
|
||||
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Implementation.Should().Be("Newznab");
|
||||
items.First().Redirect.Should().BeTrue(); // Validate Redirect remains true
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_affect_non_newznab_indexers()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
c.Insert.IntoTable("Indexers").Row(new
|
||||
{
|
||||
Id = 1,
|
||||
Name = "Test",
|
||||
Implementation = "OtherIndexer",
|
||||
Settings = "{\"baseUrl\":\"https://otherindexer.com\"}",
|
||||
ConfigContract = "OtherIndexerSettings",
|
||||
Enable = true,
|
||||
Priority = 3,
|
||||
Added = System.DateTime.UtcNow,
|
||||
Redirect = false,
|
||||
AppProfileId = 1,
|
||||
Tags = "[]",
|
||||
DownloadClientId = 0
|
||||
});
|
||||
});
|
||||
|
||||
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Implementation.Should().Be("OtherIndexer");
|
||||
items.First().Redirect.Should().BeFalse(); // Validate Redirect is not changed
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_handle_multiple_indexers()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
c.Insert.IntoTable("Indexers").Row(new
|
||||
{
|
||||
Id = 1,
|
||||
Name = "Test 1",
|
||||
Implementation = "Newznab",
|
||||
Settings = "{\"baseUrl\":\"https://example1.com\",\"apiKey\":\"testapikey1\"}",
|
||||
ConfigContract = "NewznabSettings",
|
||||
Enable = true,
|
||||
Priority = 4,
|
||||
Added = System.DateTime.UtcNow,
|
||||
Redirect = false,
|
||||
AppProfileId = 1,
|
||||
Tags = "[]",
|
||||
DownloadClientId = 0
|
||||
});
|
||||
c.Insert.IntoTable("Indexers").Row(new
|
||||
{
|
||||
Id = 2,
|
||||
Name = "Test 2",
|
||||
Implementation = "Newznab",
|
||||
Settings = "{\"baseUrl\":\"https://example2.com\",\"apiKey\":\"testapikey2\"}",
|
||||
ConfigContract = "NewznabSettings",
|
||||
Enable = true,
|
||||
Priority = 5,
|
||||
Added = System.DateTime.UtcNow,
|
||||
Redirect = false,
|
||||
AppProfileId = 1,
|
||||
Tags = "[]",
|
||||
DownloadClientId = 0
|
||||
});
|
||||
c.Insert.IntoTable("Indexers").Row(new
|
||||
{
|
||||
Id = 3,
|
||||
Name = "Test 3",
|
||||
Implementation = "Newznab",
|
||||
Settings = "{\"baseUrl\":\"https://example3.com\",\"apiKey\":\"testapikey3\"}",
|
||||
ConfigContract = "NewznabSettings",
|
||||
Enable = true,
|
||||
Priority = 6,
|
||||
Added = System.DateTime.UtcNow,
|
||||
Redirect = true,
|
||||
AppProfileId = 1,
|
||||
Tags = "[]",
|
||||
DownloadClientId = 0
|
||||
});
|
||||
c.Insert.IntoTable("Indexers").Row(new
|
||||
{
|
||||
Id = 4,
|
||||
Name = "Test 4",
|
||||
Implementation = "OtherIndexer",
|
||||
Settings = "{\"baseUrl\":\"https://otherindexer.com\"}",
|
||||
ConfigContract = "OtherIndexerSettings",
|
||||
Enable = true,
|
||||
Priority = 7,
|
||||
Added = System.DateTime.UtcNow,
|
||||
Redirect = false,
|
||||
AppProfileId = 1,
|
||||
Tags = "[]",
|
||||
DownloadClientId = 0
|
||||
});
|
||||
});
|
||||
|
||||
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
|
||||
|
||||
items.Should().HaveCount(4);
|
||||
items.First(i => i.Id == 1).Redirect.Should().BeTrue(); // Validate Redirect is updated
|
||||
items.First(i => i.Id == 2).Redirect.Should().BeTrue(); // Validate Redirect is updated
|
||||
items.First(i => i.Id == 3).Redirect.Should().BeTrue(); // Validate Redirect remains true
|
||||
items.First(i => i.Id == 4).Redirect.Should().BeFalse(); // Validate Redirect is not changed
|
||||
}
|
||||
}
|
||||
|
||||
public class IndexerDefinition043
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Implementation { get; set; }
|
||||
public string Settings { get; set; }
|
||||
public string ConfigContract { get; set; }
|
||||
public bool Enable { get; set; }
|
||||
public int Priority { get; set; }
|
||||
public DateTime Added { get; set; }
|
||||
public bool Redirect { get; set; }
|
||||
public int AppProfileId { get; set; }
|
||||
public string Tags { get; set; }
|
||||
public int DownloadClientId { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -149,7 +149,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 23:26:21"
|
||||
"created_at": "2021-11-14 23:26:21",
|
||||
"created_at_iso": "2021-11-14T23:26:21+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187239,
|
||||
@@ -195,7 +196,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 23:11:49"
|
||||
"created_at": "2021-11-14 23:11:49",
|
||||
"created_at_iso": "2021-11-14T23:11:49+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187238,
|
||||
@@ -241,7 +243,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 23:09:11"
|
||||
"created_at": "2021-11-14 23:09:11",
|
||||
"created_at_iso": "2021-11-14T23:09:11+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187237,
|
||||
@@ -287,7 +290,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 23:05:30"
|
||||
"created_at": "2021-11-14 23:05:30",
|
||||
"created_at_iso": "2021-11-14T23:05:30+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187236,
|
||||
@@ -333,7 +337,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 22:59:26"
|
||||
"created_at": "2021-11-14 22:59:26",
|
||||
"created_at_iso": "2021-11-14T22:59:26+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187234,
|
||||
@@ -379,7 +384,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 22:38:33"
|
||||
"created_at": "2021-11-14 22:38:33",
|
||||
"created_at_iso": "2021-11-14T22:38:33+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187233,
|
||||
@@ -425,7 +431,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 22:35:13"
|
||||
"created_at": "2021-11-14 22:35:13",
|
||||
"created_at_iso": "2021-11-14T22:35:13+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187231,
|
||||
@@ -452,7 +459,7 @@
|
||||
"imdb": "tt1143942",
|
||||
"tmdb": "83665",
|
||||
"tvdb": null,
|
||||
"title": "Kaiky\u00f4",
|
||||
"title": "Kaikyô",
|
||||
"tv_season": 1,
|
||||
"tv_episode": null,
|
||||
"tv_full_season": true,
|
||||
@@ -471,7 +478,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 18:02:28"
|
||||
"created_at": "2021-11-14 18:02:28",
|
||||
"created_at_iso": "2021-11-14T18:02:28+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187229,
|
||||
@@ -517,7 +525,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 15:41:55"
|
||||
"created_at": "2021-11-14 15:41:55",
|
||||
"created_at_iso": "2021-11-14T15:41:55+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187225,
|
||||
@@ -583,7 +592,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 13:49:11"
|
||||
"created_at": "2021-11-14 13:49:11",
|
||||
"created_at_iso": "2021-11-14T13:49:11+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187224,
|
||||
@@ -633,7 +643,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 13:15:51"
|
||||
"created_at": "2021-11-14 13:15:51",
|
||||
"created_at_iso": "2021-11-14T13:15:51+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187223,
|
||||
@@ -679,7 +690,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 12:56:09"
|
||||
"created_at": "2021-11-14 12:56:09",
|
||||
"created_at_iso": "2021-11-14T12:56:09+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187221,
|
||||
@@ -720,7 +732,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 11:47:24"
|
||||
"created_at": "2021-11-14 11:47:24",
|
||||
"created_at_iso": "2021-11-14T11:47:24+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187219,
|
||||
@@ -798,7 +811,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:59:37"
|
||||
"created_at": "2021-11-14 10:59:37",
|
||||
"created_at_iso": "2021-11-14T10:59:37+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187218,
|
||||
@@ -876,7 +890,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:58:36"
|
||||
"created_at": "2021-11-14 10:58:36",
|
||||
"created_at_iso": "2021-11-14T10:58:36+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187216,
|
||||
@@ -917,7 +932,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:31:45"
|
||||
"created_at": "2021-11-14 10:31:45",
|
||||
"created_at_iso": "2021-11-14T10:31:45+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187215,
|
||||
@@ -967,7 +983,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:31:44"
|
||||
"created_at": "2021-11-14 10:31:44",
|
||||
"created_at_iso": "2021-11-14T10:31:44+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187214,
|
||||
@@ -1008,7 +1025,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:31:43"
|
||||
"created_at": "2021-11-14 10:31:43",
|
||||
"created_at_iso": "2021-11-14T10:31:43+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187213,
|
||||
@@ -1049,7 +1067,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:31:42"
|
||||
"created_at": "2021-11-14 10:31:42",
|
||||
"created_at_iso": "2021-11-14T10:31:42+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187212,
|
||||
@@ -1095,7 +1114,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:28:11"
|
||||
"created_at": "2021-11-14 10:28:11",
|
||||
"created_at_iso": "2021-11-14T10:28:11+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187210,
|
||||
@@ -1136,7 +1156,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:28:10"
|
||||
"created_at": "2021-11-14 10:28:10",
|
||||
"created_at_iso": "2021-11-14T10:28:10+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187211,
|
||||
@@ -1182,7 +1203,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:28:10"
|
||||
"created_at": "2021-11-14 10:28:10",
|
||||
"created_at_iso": "2021-11-14T10:28:10+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187209,
|
||||
@@ -1223,7 +1245,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 10:28:09"
|
||||
"created_at": "2021-11-14 10:28:09",
|
||||
"created_at_iso": "2021-11-14T10:28:09+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187208,
|
||||
@@ -1269,7 +1292,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:24:47"
|
||||
"created_at": "2021-11-14 09:24:47",
|
||||
"created_at_iso": "2021-11-14T09:24:47+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187207,
|
||||
@@ -1319,7 +1343,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:24:46"
|
||||
"created_at": "2021-11-14 09:24:46",
|
||||
"created_at_iso": "2021-11-14T09:24:46+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187206,
|
||||
@@ -1360,7 +1385,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:24:45"
|
||||
"created_at": "2021-11-14 09:24:45",
|
||||
"created_at_iso": "2021-11-14T09:24:45+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187205,
|
||||
@@ -1401,7 +1427,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:24:44"
|
||||
"created_at": "2021-11-14 09:24:44",
|
||||
"created_at_iso": "2021-11-14T09:24:44+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187204,
|
||||
@@ -1447,7 +1474,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:20:56"
|
||||
"created_at": "2021-11-14 09:20:56",
|
||||
"created_at_iso": "2021-11-14T09:20:56+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187203,
|
||||
@@ -1488,7 +1516,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:20:55"
|
||||
"created_at": "2021-11-14 09:20:55",
|
||||
"created_at_iso": "2021-11-14T09:20:55+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187202,
|
||||
@@ -1529,7 +1558,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:20:54"
|
||||
"created_at": "2021-11-14 09:20:54",
|
||||
"created_at_iso": "2021-11-14T09:20:54+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187201,
|
||||
@@ -1570,7 +1600,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:20:53"
|
||||
"created_at": "2021-11-14 09:20:53",
|
||||
"created_at_iso": "2021-11-14T09:20:53+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187200,
|
||||
@@ -1611,7 +1642,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:17:35"
|
||||
"created_at": "2021-11-14 09:17:35",
|
||||
"created_at_iso": "2021-11-14T09:17:35+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187199,
|
||||
@@ -1652,7 +1684,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:17:34"
|
||||
"created_at": "2021-11-14 09:17:34",
|
||||
"created_at_iso": "2021-11-14T09:17:34+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187197,
|
||||
@@ -1718,7 +1751,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:14:24"
|
||||
"created_at": "2021-11-14 09:14:24",
|
||||
"created_at_iso": "2021-11-14T09:14:24+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187196,
|
||||
@@ -1764,7 +1798,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:08:42"
|
||||
"created_at": "2021-11-14 09:08:42",
|
||||
"created_at_iso": "2021-11-14T09:08:42+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187195,
|
||||
@@ -1805,7 +1840,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 09:08:29"
|
||||
"created_at": "2021-11-14 09:08:29",
|
||||
"created_at_iso": "2021-11-14T09:08:29+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187191,
|
||||
@@ -1814,7 +1850,7 @@
|
||||
"type_id": 2,
|
||||
"type": "TV-Show",
|
||||
"info_hash": "(removed)",
|
||||
"file_name": "Beware of Your Bosom Buddies \u78a7\u8840\u6d17\u94f6\u67aa (1984) 720p Complete WEB-DL AAC H.264-CARMEE",
|
||||
"file_name": "Beware of Your Bosom Buddies 碧血洗银枪 (1984) 720p Complete WEB-DL AAC H.264-CARMEE",
|
||||
"file_size": 4075094335,
|
||||
"file_count": 5,
|
||||
"seed": 7,
|
||||
@@ -1832,7 +1868,7 @@
|
||||
"imdb": null,
|
||||
"tmdb": "107936",
|
||||
"tvdb": null,
|
||||
"title": "\u78a7\u8840\u6d17\u94f6\u67aa",
|
||||
"title": "碧血洗银枪",
|
||||
"tv_season": null,
|
||||
"tv_episode": null,
|
||||
"tv_full_season": false,
|
||||
@@ -1859,7 +1895,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 07:34:25"
|
||||
"created_at": "2021-11-14 07:34:25",
|
||||
"created_at_iso": "2021-11-14T07:34:25+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187190,
|
||||
@@ -1929,7 +1966,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 07:24:31"
|
||||
"created_at": "2021-11-14 07:24:31",
|
||||
"created_at_iso": "2021-11-14T07:24:31+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187189,
|
||||
@@ -1999,7 +2037,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 07:24:26"
|
||||
"created_at": "2021-11-14 07:24:26",
|
||||
"created_at_iso": "2021-11-14T07:24:26+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187188,
|
||||
@@ -2073,7 +2112,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 07:12:25"
|
||||
"created_at": "2021-11-14 07:12:25",
|
||||
"created_at_iso": "2021-11-14T07:12:25+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187169,
|
||||
@@ -2147,7 +2187,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 01:18:23"
|
||||
"created_at": "2021-11-14 01:18:23",
|
||||
"created_at_iso": "2021-11-14T01:18:23+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187168,
|
||||
@@ -2193,7 +2234,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 00:57:43"
|
||||
"created_at": "2021-11-14 00:57:43",
|
||||
"created_at_iso": "2021-11-14T00:57:43+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187167,
|
||||
@@ -2239,7 +2281,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 00:42:20"
|
||||
"created_at": "2021-11-14 00:42:20",
|
||||
"created_at_iso": "2021-11-14T00:42:20+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187165,
|
||||
@@ -2285,7 +2328,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-14 00:03:50"
|
||||
"created_at": "2021-11-14 00:03:50",
|
||||
"created_at_iso": "2021-11-14T00:03:50+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187164,
|
||||
@@ -2355,7 +2399,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 23:07:25"
|
||||
"created_at": "2021-11-13 23:07:25",
|
||||
"created_at_iso": "2021-11-13T23:07:25+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187163,
|
||||
@@ -2382,7 +2427,7 @@
|
||||
"imdb": null,
|
||||
"tmdb": "138573",
|
||||
"tvdb": null,
|
||||
"title": "\u51b2\u51fb",
|
||||
"title": "冲击",
|
||||
"tv_season": null,
|
||||
"tv_episode": null,
|
||||
"tv_full_season": false,
|
||||
@@ -2396,7 +2441,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 22:46:14"
|
||||
"created_at": "2021-11-13 22:46:14",
|
||||
"created_at_iso": "2021-11-13T22:46:14+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187162,
|
||||
@@ -2454,7 +2500,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 22:10:28"
|
||||
"created_at": "2021-11-13 22:10:28",
|
||||
"created_at_iso": "2021-11-13T22:10:28+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187158,
|
||||
@@ -2500,7 +2547,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 20:58:54"
|
||||
"created_at": "2021-11-13 20:58:54",
|
||||
"created_at_iso": "2021-11-13T20:58:54+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187157,
|
||||
@@ -2546,7 +2594,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 20:58:52"
|
||||
"created_at": "2021-11-13 20:58:52",
|
||||
"created_at_iso": "2021-11-13T20:58:52+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187156,
|
||||
@@ -2592,7 +2641,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 20:58:49"
|
||||
"created_at": "2021-11-13 20:58:49",
|
||||
"created_at_iso": "2021-11-13T20:58:49+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187155,
|
||||
@@ -2638,7 +2688,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 19:53:29"
|
||||
"created_at": "2021-11-13 19:53:29",
|
||||
"created_at_iso": "2021-11-13T19:53:29+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187150,
|
||||
@@ -2684,7 +2735,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 17:04:28"
|
||||
"created_at": "2021-11-13 17:04:28",
|
||||
"created_at_iso": "2021-11-13T17:04:28+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187149,
|
||||
@@ -2730,7 +2782,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 17:04:26"
|
||||
"created_at": "2021-11-13 17:04:26",
|
||||
"created_at_iso": "2021-11-13T17:04:26+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187148,
|
||||
@@ -2776,7 +2829,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 17:04:23"
|
||||
"created_at": "2021-11-13 17:04:23",
|
||||
"created_at_iso": "2021-11-13T17:04:23+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187147,
|
||||
@@ -2822,7 +2876,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 17:04:11"
|
||||
"created_at": "2021-11-13 17:04:11",
|
||||
"created_at_iso": "2021-11-13T17:04:11+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187146,
|
||||
@@ -2868,7 +2923,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 16:59:50"
|
||||
"created_at": "2021-11-13 16:59:50",
|
||||
"created_at_iso": "2021-11-13T16:59:50+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187145,
|
||||
@@ -2914,7 +2970,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 16:57:51"
|
||||
"created_at": "2021-11-13 16:57:51",
|
||||
"created_at_iso": "2021-11-13T16:57:51+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187144,
|
||||
@@ -2960,7 +3017,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 16:54:53"
|
||||
"created_at": "2021-11-13 16:54:53",
|
||||
"created_at_iso": "2021-11-13T16:54:53+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187143,
|
||||
@@ -3006,7 +3064,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 16:54:51"
|
||||
"created_at": "2021-11-13 16:54:51",
|
||||
"created_at_iso": "2021-11-13T16:54:51+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187142,
|
||||
@@ -3052,7 +3111,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 16:54:49"
|
||||
"created_at": "2021-11-13 16:54:49",
|
||||
"created_at_iso": "2021-11-13T16:54:49+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187141,
|
||||
@@ -3098,7 +3158,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 16:54:46"
|
||||
"created_at": "2021-11-13 16:54:46",
|
||||
"created_at_iso": "2021-11-13T16:54:46+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187140,
|
||||
@@ -3144,7 +3205,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 16:54:43"
|
||||
"created_at": "2021-11-13 16:54:43",
|
||||
"created_at_iso": "2021-11-13T16:54:43+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187139,
|
||||
@@ -3190,7 +3252,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 16:03:36"
|
||||
"created_at": "2021-11-13 16:03:36",
|
||||
"created_at_iso": "2021-11-13T16:03:36+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187138,
|
||||
@@ -3236,7 +3299,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 16:03:31"
|
||||
"created_at": "2021-11-13 16:03:31",
|
||||
"created_at_iso": "2021-11-13T16:03:31+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187137,
|
||||
@@ -3282,7 +3346,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 14:47:56"
|
||||
"created_at": "2021-11-13 14:47:56",
|
||||
"created_at_iso": "2021-11-13T14:47:56+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187136,
|
||||
@@ -3328,7 +3393,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 13:54:18"
|
||||
"created_at": "2021-11-13 13:54:18",
|
||||
"created_at_iso": "2021-11-13T13:54:18+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187135,
|
||||
@@ -3378,7 +3444,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 13:01:47"
|
||||
"created_at": "2021-11-13 13:01:47",
|
||||
"created_at_iso": "2021-11-13T13:01:47+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187134,
|
||||
@@ -3424,7 +3491,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 12:57:53"
|
||||
"created_at": "2021-11-13 12:57:53",
|
||||
"created_at_iso": "2021-11-13T12:57:53+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187133,
|
||||
@@ -3470,7 +3538,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 12:48:57"
|
||||
"created_at": "2021-11-13 12:48:57",
|
||||
"created_at_iso": "2021-11-13T12:48:57+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187132,
|
||||
@@ -3528,7 +3597,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 12:10:57"
|
||||
"created_at": "2021-11-13 12:10:57",
|
||||
"created_at_iso": "2021-11-13T12:10:57+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187131,
|
||||
@@ -3569,7 +3639,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 11:35:53"
|
||||
"created_at": "2021-11-13 11:35:53",
|
||||
"created_at_iso": "2021-11-13T11:35:53+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187130,
|
||||
@@ -3615,7 +3686,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 11:03:19"
|
||||
"created_at": "2021-11-13 11:03:19",
|
||||
"created_at_iso": "2021-11-13T11:03:19+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187129,
|
||||
@@ -3656,7 +3728,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 11:02:54"
|
||||
"created_at": "2021-11-13 11:02:54",
|
||||
"created_at_iso": "2021-11-13T11:02:54+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187128,
|
||||
@@ -3706,7 +3779,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 11:00:29"
|
||||
"created_at": "2021-11-13 11:00:29",
|
||||
"created_at_iso": "2021-11-13T11:00:29+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187127,
|
||||
@@ -3752,7 +3826,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:57:36"
|
||||
"created_at": "2021-11-13 10:57:36",
|
||||
"created_at_iso": "2021-11-13T10:57:36+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187126,
|
||||
@@ -3802,7 +3877,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:55:31"
|
||||
"created_at": "2021-11-13 10:55:31",
|
||||
"created_at_iso": "2021-11-13T10:55:31+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187125,
|
||||
@@ -3848,7 +3924,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:53:16"
|
||||
"created_at": "2021-11-13 10:53:16",
|
||||
"created_at_iso": "2021-11-13T10:53:16+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187124,
|
||||
@@ -3889,7 +3966,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:23:32"
|
||||
"created_at": "2021-11-13 10:23:32",
|
||||
"created_at_iso": "2021-11-13T10:23:32+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187123,
|
||||
@@ -3939,7 +4017,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:23:31"
|
||||
"created_at": "2021-11-13 10:23:31",
|
||||
"created_at_iso": "2021-11-13T10:23:31+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187122,
|
||||
@@ -3980,7 +4059,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:23:30"
|
||||
"created_at": "2021-11-13 10:23:30",
|
||||
"created_at_iso": "2021-11-13T10:23:30+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187121,
|
||||
@@ -4021,7 +4101,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:23:29"
|
||||
"created_at": "2021-11-13 10:23:29",
|
||||
"created_at_iso": "2021-11-13T10:23:29+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187120,
|
||||
@@ -4067,7 +4148,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:15:29"
|
||||
"created_at": "2021-11-13 10:15:29",
|
||||
"created_at_iso": "2021-11-13T10:15:29+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187119,
|
||||
@@ -4113,7 +4195,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:15:28"
|
||||
"created_at": "2021-11-13 10:15:28",
|
||||
"created_at_iso": "2021-11-13T10:15:28+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187118,
|
||||
@@ -4154,7 +4237,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:15:27"
|
||||
"created_at": "2021-11-13 10:15:27",
|
||||
"created_at_iso": "2021-11-13T10:15:27+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187117,
|
||||
@@ -4195,7 +4279,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 10:15:26"
|
||||
"created_at": "2021-11-13 10:15:26",
|
||||
"created_at_iso": "2021-11-13T10:15:26+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187116,
|
||||
@@ -4236,7 +4321,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:54:52"
|
||||
"created_at": "2021-11-13 09:54:52",
|
||||
"created_at_iso": "2021-11-13T09:54:52+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187115,
|
||||
@@ -4286,7 +4372,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:54:51"
|
||||
"created_at": "2021-11-13 09:54:51",
|
||||
"created_at_iso": "2021-11-13T09:54:51+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187114,
|
||||
@@ -4327,7 +4414,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:54:50"
|
||||
"created_at": "2021-11-13 09:54:50",
|
||||
"created_at_iso": "2021-11-13T09:54:50+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187113,
|
||||
@@ -4368,7 +4456,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:54:48"
|
||||
"created_at": "2021-11-13 09:54:48",
|
||||
"created_at_iso": "2021-11-13T09:54:48+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187112,
|
||||
@@ -4409,7 +4498,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:50:35"
|
||||
"created_at": "2021-11-13 09:50:35",
|
||||
"created_at_iso": "2021-11-13T09:50:35+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187111,
|
||||
@@ -4463,7 +4553,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:50:34"
|
||||
"created_at": "2021-11-13 09:50:34",
|
||||
"created_at_iso": "2021-11-13T09:50:34+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187110,
|
||||
@@ -4504,7 +4595,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:50:32"
|
||||
"created_at": "2021-11-13 09:50:32",
|
||||
"created_at_iso": "2021-11-13T09:50:32+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187109,
|
||||
@@ -4545,7 +4637,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:50:31"
|
||||
"created_at": "2021-11-13 09:50:31",
|
||||
"created_at_iso": "2021-11-13T09:50:31+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187107,
|
||||
@@ -4586,7 +4679,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:44:55"
|
||||
"created_at": "2021-11-13 09:44:55",
|
||||
"created_at_iso": "2021-11-13T09:44:55+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187106,
|
||||
@@ -4632,7 +4726,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:44:54"
|
||||
"created_at": "2021-11-13 09:44:54",
|
||||
"created_at_iso": "2021-11-13T09:44:54+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187105,
|
||||
@@ -4673,7 +4768,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:44:53"
|
||||
"created_at": "2021-11-13 09:44:53",
|
||||
"created_at_iso": "2021-11-13T09:44:53+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187104,
|
||||
@@ -4714,7 +4810,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:44:51"
|
||||
"created_at": "2021-11-13 09:44:51",
|
||||
"created_at_iso": "2021-11-13T09:44:51+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187103,
|
||||
@@ -4760,7 +4857,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:40:07"
|
||||
"created_at": "2021-11-13 09:40:07",
|
||||
"created_at_iso": "2021-11-13T09:40:07+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187102,
|
||||
@@ -4810,7 +4908,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:39:53"
|
||||
"created_at": "2021-11-13 09:39:53",
|
||||
"created_at_iso": "2021-11-13T09:39:53+02:00"
|
||||
},
|
||||
{
|
||||
"id": 187101,
|
||||
@@ -4856,7 +4955,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-11-13 09:39:52"
|
||||
"created_at": "2021-11-13 09:39:52",
|
||||
"created_at_iso": "2021-11-13T09:39:52+02:00"
|
||||
}
|
||||
],
|
||||
"first_page_url": "https:\/\/avistaz.to\/api\/v1\/jackett\/torrents?type=2&page=1",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
{
|
||||
"current_page": 1,
|
||||
"data": [
|
||||
{
|
||||
@@ -50,7 +50,8 @@
|
||||
"images/torrent/1/4/0/mxgwdlpk4pt2.jpg"
|
||||
],
|
||||
"description": "<p>[SSIS-419] My first experience is Yua Mikami. From the day I lost my virginity, I was devoted to sex.</p>\n<p>Actress: Yua Mikami</p>\n<p>Studio: S1 NO.1 STYLE</p>\n<p>Runtime: 2:41:00</p>\n<p>Movies Genres: Minimal Mosaic,Cherry Boy,Documentary,Featured Actress,Idol & Celebrity</p>",
|
||||
"created_at": "2022-06-11 11:04:50"
|
||||
"created_at": "2022-06-11 11:04:50",
|
||||
"created_at_iso": "2022-06-11T11:04:50+02:00"
|
||||
},
|
||||
{
|
||||
"id": 61953,
|
||||
@@ -106,7 +107,8 @@
|
||||
"images/torrent/0/4/0/gsuctius9zw2.jpg"
|
||||
],
|
||||
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00338/</p>\n<p>SSIS-338</p>\n<p>Ultimate Lover Swamp. Ideal Sex-Only Relationship That Is Not Disturbed By Work Or Family With Yua Mikami</p>",
|
||||
"created_at": "2022-05-23 23:41:25"
|
||||
"created_at": "2022-05-23 23:41:25",
|
||||
"created_at_iso": "2022-05-23T23:41:25+02:00"
|
||||
},
|
||||
{
|
||||
"id": 61947,
|
||||
@@ -161,7 +163,8 @@
|
||||
"images/torrent/0/0/e/g6tquwvlmfdx.jpg"
|
||||
],
|
||||
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00313/</p>\n<p>SSIS-313</p>\n<p>Yua Mikami's Ecstasy Lotion Special. Offering The Best-ever Slick Servicing To Work Cum Loads Out.</p>",
|
||||
"created_at": "2022-05-23 08:34:34"
|
||||
"created_at": "2022-05-23 08:34:34",
|
||||
"created_at_iso": "2022-05-23T08:34:34+02:00"
|
||||
},
|
||||
{
|
||||
"id": 61630,
|
||||
@@ -223,7 +226,8 @@
|
||||
"images/torrent/f/2/5/kdihq6gibacb.jpg"
|
||||
],
|
||||
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00287/</p>\n<p>SSIS-287</p>\n<p>Drool, The Effects Of A Few Sips, Her Face During Sex, And Peeing Released All At Once. Yua Mikami Flies Indecently.</p>",
|
||||
"created_at": "2022-05-21 10:25:32"
|
||||
"created_at": "2022-05-21 10:25:32",
|
||||
"created_at_iso": "2022-05-21T10:25:32+02:00"
|
||||
},
|
||||
{
|
||||
"id": 61514,
|
||||
@@ -275,7 +279,8 @@
|
||||
"images/torrent/e/2/a/ujrvmtgjakko.jpg"
|
||||
],
|
||||
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00241/</p>\n<p>SSIS-241</p>\n<p>Forbidden Teacher Love. Yua Mikami</p>",
|
||||
"created_at": "2022-05-20 09:17:10"
|
||||
"created_at": "2022-05-20 09:17:10",
|
||||
"created_at_iso": "2022-05-20T09:17:10+02:00"
|
||||
},
|
||||
{
|
||||
"id": 59929,
|
||||
@@ -325,7 +330,8 @@
|
||||
"images/torrent/c/4/a/hycbduxlw3ei.jpg"
|
||||
],
|
||||
"description": "<p><strong>[SSIS-392] Let's Do It At A Men's Massage Parlor. Yua Mikami</strong></p>\n<p><strong>+++ [FHD] SSIS-392 メンエスでしようよ 三上悠亜</strong></p>\n<p><strong>ID:</strong> SSIS-392<br><strong>Release Date:</strong> May 6, 2022<br><strong>Runtime:</strong> 1 hour 58 minutes 59 seconds [01:59:00]<br><strong>Studio:</strong> S1 NO.1 STYLE<br><strong>Label:</strong> S1 NO.1 STYLE<br><strong>Director:</strong> TAKE-D<br><strong>Series:</strong> A Super Gorgeous Men's Massage Parlor<br><strong>Actresses:</strong> Yua Mikami<br><strong>Categories:</strong> Featured Actress, Idol & Celebrity, Massage Parlor, Lotion, Minimal Mosaic, Hi-Def, 4K<br><br></p>\n<p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS392/ <br><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00392/ <br><strong>DMM:</strong> https://www.dmm.co.jp/digital/videoa/-/detail/=/cid=ssis00392/</p>\n<p>Uploaded by a Bot</p>",
|
||||
"created_at": "2022-05-06 03:48:23"
|
||||
"created_at": "2022-05-06 03:48:23",
|
||||
"created_at_iso": "2022-05-06T03:48:23+02:00"
|
||||
},
|
||||
{
|
||||
"id": 58235,
|
||||
@@ -374,7 +380,8 @@
|
||||
"images/torrent/3/6/1/6fuhfb5kcbpz.jpg"
|
||||
],
|
||||
"description": "<p><strong>[SSIS-365] \"What!? We're Gonna Fuck Here?\" Sticking Close To Yua Mikami For A Whole Month, Taking Advantage Any Time There's A Chance For A Quick Fuck! Unprecedented Hidden Camera AV Primetime Challenge.</strong></p>\n <p><strong>+++ [HD] SSIS-365 「えっ!ここでヤルの?」三上悠亜に一ヶ月密着して隙あらばいきなり即ズボッ! 前代未聞ドッキリAV大作戦</strong></p>\n <p><strong>ID:</strong> SSIS-365<br>\n <strong>Release Date:</strong> Apr 8, 2022<br>\n <strong>Runtime:</strong> 2 hours 5 minutes 59 seconds\n [02:06:00]<br>\n <strong>Studio:</strong> S1 NO.1 STYLE<br>\n <strong>Label:</strong> S1 NO.1 STYLE<br>\n <strong>Director:</strong> Kyosei<br>\n <strong>Series:</strong> -<br>\n <strong>Actresses:</strong> Yua Mikami<br>\n <strong>Categories:</strong> Big Tits, Quickie, Featured Actress, Blowjob, Minimal Mosaic, Hi-Def<br><br>\n </p><p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS365/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00365/</p><p>Uploaded by a Bot</p>",
|
||||
"created_at": "2022-04-08 06:31:27"
|
||||
"created_at": "2022-04-08 06:31:27",
|
||||
"created_at_iso": "2022-04-08T06:31:27+02:00"
|
||||
},
|
||||
{
|
||||
"id": 57416,
|
||||
@@ -640,7 +647,8 @@
|
||||
"images/torrent/3/8/f/hxzly7alqt9f.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2022-03-29 20:58:49"
|
||||
"created_at": "2022-03-29 20:58:49",
|
||||
"created_at_iso": "2022-03-29T20:58:49+02:00"
|
||||
},
|
||||
{
|
||||
"id": 56332,
|
||||
@@ -690,7 +698,8 @@
|
||||
"images/torrent/2/9/6/bw4kyn1ckz5u.jpg"
|
||||
],
|
||||
"description": "<p>De-censored with AI algorithm. </p>\n<p>Originated from [OFJE-304] Gorgeous Big Tits Bouncing All Over The Place! All G-Cup And Bigger Actresses Ride Dick Until They Cum 50 Rounds</p>\n<p>+++ [HD] OFJE-304 縦横無尽に神乳が揺れまくりっ!オールGcup超えS1女優のおっぱい激揺れ激イキ激ピスSEX50本番</p>\n<p>https://www.r18.com/videos/vod/movies/detail/-/id=ofje00304/</p>",
|
||||
"created_at": "2022-03-10 09:06:27"
|
||||
"created_at": "2022-03-10 09:06:27",
|
||||
"created_at_iso": "2022-03-10T09:06:27+01:00"
|
||||
},
|
||||
{
|
||||
"id": 56108,
|
||||
@@ -742,7 +751,8 @@
|
||||
"images/torrent/d/6/b/gexzyognkxeb.jpg"
|
||||
],
|
||||
"description": "<p><strong>[SSIS-338] Ultimate Lover Swamp. Ideal Sex-Only Relationship That Is Not Disturbed By Work Or Family With Yua Mikami</strong></p>\n <p><strong>+++ [HD] SSIS-338 最高の愛人沼 仕事にも家庭にも干渉してこない、セックスだけの理想関係を三上悠亜と…。</strong></p>\n <p><strong>ID:</strong> SSIS-338<br>\n <strong>Release Date:</strong> Mar 4, 2022<br>\n <strong>Runtime:</strong> 2 hours 25 minutes 59 seconds\n [02:26:00]<br>\n <strong>Studio:</strong> S1 NO.1 STYLE<br>\n <strong>Label:</strong> S1 NO.1 STYLE<br>\n <strong>Director:</strong> Amazing Meat<br>\n <strong>Series:</strong> -<br>\n <strong>Actresses:</strong> Yua Mikami<br>\n <strong>Categories:</strong> Adultery, Featured Actress, Cheating Wife, Drama, Minimal Mosaic, Hi-Def, 4K<br><br>\n </p><p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS338/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00338/</p><p>Uploaded by a Bot</p>",
|
||||
"created_at": "2022-03-04 05:28:49"
|
||||
"created_at": "2022-03-04 05:28:49",
|
||||
"created_at_iso": "2022-03-04T05:28:49+01:00"
|
||||
},
|
||||
{
|
||||
"id": 54324,
|
||||
@@ -797,7 +807,8 @@
|
||||
"images/torrent/9/7/d/ujzu5he0deum.jpg"
|
||||
],
|
||||
"description": "<p><strong>[SSIS-313] Yua Mikami's Ecstasy Lotion Special. Offering The Best-ever Slick Servicing To Work Cum Loads Out.</strong></p>\n<p><strong>SSIS-313 三上悠亜の有頂天ローションSP 人生最高ヌルヌルご奉仕で射精させてあげる</strong></p>\n<p><strong>ID:</strong> SSIS-313<br><strong>Release Date:</strong> Feb 4, 2022<br><strong>Runtime:</strong> 2 hours 27 minutes 59 seconds [02:28:00]<br><strong>Studio:</strong> S1 NO.1 STYLE<br><strong>Label:</strong> S1 NO.1 STYLE<br><strong>Director:</strong> TAKE-D<br><strong>Series:</strong> Ecstatic Lotion SP<br><strong>Actresses:</strong> Yua Mikami<br><strong>Categories:</strong> Big Tits, Featured Actress, Idol & Celebrity, Titty Fuck, Lotion, Minimal Mosaic, Hi-Def, 4K<br><br></p>\n<p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS313/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00313/</p>",
|
||||
"created_at": "2022-02-04 07:02:14"
|
||||
"created_at": "2022-02-04 07:02:14",
|
||||
"created_at_iso": "2022-02-04T07:02:14+01:00"
|
||||
},
|
||||
{
|
||||
"id": 53526,
|
||||
@@ -864,7 +875,8 @@
|
||||
"images/torrent/7/d/0/w4lraenuqmos.jpg"
|
||||
],
|
||||
"description": "<p><strong>[OFJE-281] Yua Mikami x Shame Special This National-Grade Idol Is Getting Continuously Fucked 8 Hours</strong></p>\n <p><strong>+++ [HD] OFJE-281 三上悠亜×レ●プSpecial 国民的アイドルをひたすら犯し続ける8時間</strong></p>\n <p><strong>ID:</strong> OFJE-281<br>\n <strong>Release Date:</strong> Nov 6, 2020<br>\n <strong>Runtime:</strong> 7 hours 56 minutes 59 seconds\n [07:57:00]<br>\n <strong>Studio:</strong> S1 NO.1 STYLE<br>\n <strong>Label:</strong> S1 NO.1 STYLE<br>\n <strong>Director:</strong> <br>\n <strong>Series:</strong> S1 GIRLS COLLECTION<br>\n <strong>Actresses:</strong> Yua Mikami<br>\n <strong>Categories:</strong> Beautiful Girl, Featured Actress, Nymphomaniac, Idol & Celebrity, Over 4 Hours, Hi-Def, Actress Best Compilation<br><br>\n </p><p><strong>Website:</strong> https://s1s1s1.com/works/detail/OFJE281/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ofje00281/</p><p>Uploaded by a Bot</p>",
|
||||
"created_at": "2022-01-26 12:46:09"
|
||||
"created_at": "2022-01-26 12:46:09",
|
||||
"created_at_iso": "2022-01-26T12:46:09+01:00"
|
||||
},
|
||||
{
|
||||
"id": 52648,
|
||||
@@ -915,7 +927,8 @@
|
||||
"images/torrent/8/7/2/92ph60ekxpkx.jpg"
|
||||
],
|
||||
"description": "<p>Actresses: Yua Mikami<br>Categories<br>Big TitsFeatured ActressNymphomaniacIdol & CelebritySquirtingMinimal MosaicHi-Def4K<br>Studio: S1 NO.1 STYLE <br>Series: Release All At Once And Fly Vulgarly<br> Release date: Jan 7, 2022<br>Runtime: 150min<br>Director: Mon C<br>Label: S1 NO.1 STYLE<br>Content ID: ssis00287<br>DVD ID: SSIS-287<br>Languages: Japanese<br><br></p>",
|
||||
"created_at": "2022-01-07 13:01:13"
|
||||
"created_at": "2022-01-07 13:01:13",
|
||||
"created_at_iso": "2022-01-07T13:01:13+01:00"
|
||||
},
|
||||
{
|
||||
"id": 52438,
|
||||
@@ -972,7 +985,8 @@
|
||||
"images/torrent/0/9/2/yhdsjr2jrf2k.gif"
|
||||
],
|
||||
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&search=KnickerZ&uploader=&verifier=\"><img src=\"https://i.exoticaz.to/images/torrent/e/3/9/i7bfled2kuss.jpg\" width=\"824\" height=\"300\" alt=\"i7bfled2kuss.jpg\"></a></p>\n<p>[SSIS-270] Yua Mikami - Earnestly Small Devil Chikubiti All-round 200 Minutes Nipple Licking Blame Rolling (4K)</p>\n<p>Scene 1: Yua plays with a toy boob<br>Scene 2: Yua seduces teacher, missionary and cums on tits<br>Various Sex Acts Included : Oral, Doggy, One on One sex, MF sex, Facials, Cumshots, Missionary Sex, Handjob, Blowjobs, Blowbangs, Handjobs, Cowgirl & Reverse-Cowgirl, Deep-throat, Solo tease, Solo Masturbation, Toy/Dildo play, Kissing, etc</p>\n\n<p> <img src=\"https://i.exoticaz.to/images/torrent/0/9/2/yhdsjr2jrf2k.gif\" alt=\"yhdsjr2jrf2k.gif\"></p>",
|
||||
"created_at": "2022-01-03 12:59:46"
|
||||
"created_at": "2022-01-03 12:59:46",
|
||||
"created_at_iso": "2022-01-03T12:59:46+01:00"
|
||||
},
|
||||
{
|
||||
"id": 52436,
|
||||
@@ -1023,7 +1037,8 @@
|
||||
"images/torrent/1/0/9/rj8pemdpmdce.gif"
|
||||
],
|
||||
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&search=KnickerZ&uploader=&verifier=\"><img src=\"https://i.exoticaz.to/images/torrent/e/3/9/i7bfled2kuss.jpg\" width=\"824\" height=\"300\" alt=\"i7bfled2kuss.jpg\"></a></p>\n<p>[SSIS-211] Yua Mikami - You're At A Whore House, And One Of Japan's Top Pornstars Appears Right In Front Of You! Do You Fuck Her Or Fuck Off? (4K)</p>\n<p>Scene 1: Yua gives a handjob<br>Scene 2: Blowjob & doggy<br>Various Sex Acts Included : Oral, Doggy, One on One sex, MF sex, Facials, Cumshots, Missionary Sex, Handjob, Blowjobs, Blowbangs, Handjobs, Cowgirl & Reverse-Cowgirl, Deep-throat, Solo tease, Solo Masturbation, Toy/Dildo play, Kissing, etc</p>\n\n<p> <img src=\"https://i.exoticaz.to/images/torrent/1/0/9/rj8pemdpmdce.gif\" alt=\"rj8pemdpmdce.gif\"></p>",
|
||||
"created_at": "2022-01-03 12:55:28"
|
||||
"created_at": "2022-01-03 12:55:28",
|
||||
"created_at_iso": "2022-01-03T12:55:28+01:00"
|
||||
},
|
||||
{
|
||||
"id": 52434,
|
||||
@@ -1074,7 +1089,8 @@
|
||||
"images/torrent/9/0/6/jpoyeqdohhft.gif"
|
||||
],
|
||||
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&search=KnickerZ&uploader=&verifier=\"><img src=\"https://i.exoticaz.to/images/torrent/e/3/9/i7bfled2kuss.jpg\" width=\"824\" height=\"300\" alt=\"i7bfled2kuss.jpg\"></a></p>\n<p>[SSIS-181] Yua Mikami - Getting A Lick Down From Step-dad. 3 Full Days Indecency While The Husband Is Away (4K)</p>\n<p>Scene 1: Yua while asleep gets tits sucked, missionary<br>Scene 2: Yua plays with toothbrush<br>Scene 3: Blowjob<br>Various Sex Acts Included : Oral, Doggy, One on One sex, MF sex, Facials, Cumshots, Missionary Sex, Handjob, Blowjobs, Blowbangs, Handjobs, Cowgirl & Reverse-Cowgirl, Deep-throat, Solo tease, Solo Masturbation, Toy/Dildo play, Kissing, etc</p>\n\n<p> <img src=\"https://i.exoticaz.to/images/torrent/9/0/6/jpoyeqdohhft.gif\" alt=\"jpoyeqdohhft.gif\"></p>",
|
||||
"created_at": "2022-01-03 12:49:49"
|
||||
"created_at": "2022-01-03 12:49:49",
|
||||
"created_at_iso": "2022-01-03T12:49:49+01:00"
|
||||
},
|
||||
{
|
||||
"id": 51414,
|
||||
@@ -1125,7 +1141,8 @@
|
||||
"images/torrent/7/a/2/v4bbhqrhfaic.jpg"
|
||||
],
|
||||
"description": "<p>Yua Mikami's Devilish 200 Minutes of All Round Nipple Licking, Teasing and Kneading</p>\n<p>Actresses: Yua Mikami<br>Studio: S1 NO.1 STYLE<br>Series: Just A Little Devil Chick.<br>Release date: Dec 10, 2021<br>Runtime: 197min<br>Director: ZAMPA<br>Label: S1 NO.1 STYLE<br>Content ID: ssis00270<br>DVD ID: SSIS-270<br>Languages: Japanese</p>",
|
||||
"created_at": "2021-12-10 16:59:45"
|
||||
"created_at": "2021-12-10 16:59:45",
|
||||
"created_at_iso": "2021-12-10T16:59:45+01:00"
|
||||
},
|
||||
{
|
||||
"id": 50935,
|
||||
@@ -1178,7 +1195,8 @@
|
||||
"images/torrent/4/d/2/8ppl4ibq95se.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-27 21:51:25"
|
||||
"created_at": "2021-11-27 21:51:25",
|
||||
"created_at_iso": "2021-11-27T21:51:25+01:00"
|
||||
},
|
||||
{
|
||||
"id": 50154,
|
||||
@@ -1244,7 +1262,8 @@
|
||||
"images/torrent/a/7/7/t90zggbrwwf5.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-12 10:26:20"
|
||||
"created_at": "2021-11-12 10:26:20",
|
||||
"created_at_iso": "2021-11-12T10:26:20+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49718,
|
||||
@@ -1312,7 +1331,8 @@
|
||||
"images/torrent/5/9/9/7uo17medy6ib.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 11:39:32"
|
||||
"created_at": "2021-11-02 11:39:32",
|
||||
"created_at_iso": "2021-11-02T11:39:32+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49717,
|
||||
@@ -1368,7 +1388,8 @@
|
||||
"images/torrent/2/4/0/f99j7rtxwlni.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 11:25:47"
|
||||
"created_at": "2021-11-02 11:25:47",
|
||||
"created_at_iso": "2021-11-02T11:25:47+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49715,
|
||||
@@ -1423,7 +1444,8 @@
|
||||
"images/torrent/7/3/5/6e8mmocet7pq.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 11:16:12"
|
||||
"created_at": "2021-11-02 11:16:12",
|
||||
"created_at_iso": "2021-11-02T11:16:12+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49714,
|
||||
@@ -1477,7 +1499,8 @@
|
||||
"images/torrent/5/a/b/bchwfgrs4jm4.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 11:06:08"
|
||||
"created_at": "2021-11-02 11:06:08",
|
||||
"created_at_iso": "2021-11-02T11:06:08+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49712,
|
||||
@@ -1532,7 +1555,8 @@
|
||||
"images/torrent/d/8/0/n8wlosqiuz92.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 10:46:18"
|
||||
"created_at": "2021-11-02 10:46:18",
|
||||
"created_at_iso": "2021-11-02T10:46:18+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49647,
|
||||
@@ -1588,7 +1612,8 @@
|
||||
"images/torrent/c/5/f/nc1q6ejlvyqu.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 10:29:43"
|
||||
"created_at": "2021-11-02 10:29:43",
|
||||
"created_at_iso": "2021-11-02T10:29:43+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49646,
|
||||
@@ -1640,7 +1665,8 @@
|
||||
"images/torrent/c/5/8/c1wfncbm1eve.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-31 14:28:38"
|
||||
"created_at": "2021-10-31 14:28:38",
|
||||
"created_at_iso": "2021-10-31T14:28:38+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49645,
|
||||
@@ -1696,7 +1722,8 @@
|
||||
"images/torrent/8/4/e/wc4toojco9dx.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-31 14:17:13"
|
||||
"created_at": "2021-10-31 14:17:13",
|
||||
"created_at_iso": "2021-10-31T14:17:13+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49644,
|
||||
@@ -1752,7 +1779,8 @@
|
||||
"images/torrent/7/7/c/4qp3mqsokrnw.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-31 14:02:50"
|
||||
"created_at": "2021-10-31 14:02:50",
|
||||
"created_at_iso": "2021-10-31T14:02:50+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49643,
|
||||
@@ -1804,7 +1832,8 @@
|
||||
"images/torrent/0/9/f/fgwbfeqmzftr.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-31 13:50:27"
|
||||
"created_at": "2021-10-31 13:50:27",
|
||||
"created_at_iso": "2021-10-31T13:50:27+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49079,
|
||||
@@ -1858,7 +1887,8 @@
|
||||
"images/torrent/7/d/d/xe1gcbp5acwx.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 16:50:12"
|
||||
"created_at": "2021-10-16 16:50:12",
|
||||
"created_at_iso": "2021-10-16T16:50:12+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49056,
|
||||
@@ -1912,7 +1942,8 @@
|
||||
"images/torrent/e/1/1/yv3ablrdkgfv.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 07:10:29"
|
||||
"created_at": "2021-10-16 07:10:29",
|
||||
"created_at_iso": "2021-10-16T07:10:29+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49050,
|
||||
@@ -1963,7 +1994,8 @@
|
||||
"images/torrent/3/3/1/uorz1hpm1hld.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 02:11:54"
|
||||
"created_at": "2021-10-16 02:11:54",
|
||||
"created_at_iso": "2021-10-16T02:11:54+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49049,
|
||||
@@ -2018,7 +2050,8 @@
|
||||
"images/torrent/9/6/e/bahbhr2gaqeq.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 00:06:39"
|
||||
"created_at": "2021-10-16 00:06:39",
|
||||
"created_at_iso": "2021-10-16T00:06:39+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49048,
|
||||
@@ -2073,7 +2106,8 @@
|
||||
"images/torrent/7/8/b/eq1jkrz8icoi.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 00:01:42"
|
||||
"created_at": "2021-10-16 00:01:42",
|
||||
"created_at_iso": "2021-10-16T00:01:42+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49038,
|
||||
@@ -2129,7 +2163,8 @@
|
||||
"images/torrent/0/1/7/c2hcjiknuv26.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-15 14:15:16"
|
||||
"created_at": "2021-10-15 14:15:16",
|
||||
"created_at_iso": "2021-10-15T14:15:16+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49037,
|
||||
@@ -2185,7 +2220,8 @@
|
||||
"images/torrent/f/c/c/sir7gae1bnjv.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-15 13:58:51"
|
||||
"created_at": "2021-10-15 13:58:51",
|
||||
"created_at_iso": "2021-10-15T13:58:51+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48883,
|
||||
@@ -2234,7 +2270,8 @@
|
||||
"images/torrent/1/5/7/myv4v8tpa6d6.jpg"
|
||||
],
|
||||
"description": "<p>ISO: https://exoticaz.to/torrent/48124</p>",
|
||||
"created_at": "2021-10-12 07:11:18"
|
||||
"created_at": "2021-10-12 07:11:18",
|
||||
"created_at_iso": "2021-10-12T07:11:18+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48364,
|
||||
@@ -2276,7 +2313,8 @@
|
||||
"images/torrent/f/b/f/lw6fcsf6fz9z.jpg"
|
||||
],
|
||||
"description": "<p>Somebody requested this separately from pack that is already on here.</p>",
|
||||
"created_at": "2021-09-29 03:12:14"
|
||||
"created_at": "2021-09-29 03:12:14",
|
||||
"created_at_iso": "2021-09-29T03:12:14+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48189,
|
||||
@@ -2331,7 +2369,8 @@
|
||||
"images/torrent/6/3/2/5yvhovuhybyd.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 14:32:49"
|
||||
"created_at": "2021-09-24 14:32:49",
|
||||
"created_at_iso": "2021-09-24T14:32:49+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48186,
|
||||
@@ -2388,7 +2427,8 @@
|
||||
"images/torrent/6/0/8/e6jahgfjtvkf.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 14:17:46"
|
||||
"created_at": "2021-09-24 14:17:46",
|
||||
"created_at_iso": "2021-09-24T14:17:46+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48184,
|
||||
@@ -2444,7 +2484,8 @@
|
||||
"images/torrent/9/a/b/msjcjdcarxj2.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 13:59:44"
|
||||
"created_at": "2021-09-24 13:59:44",
|
||||
"created_at_iso": "2021-09-24T13:59:44+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48181,
|
||||
@@ -2500,7 +2541,8 @@
|
||||
"images/torrent/f/c/c/hkmy2iaaessw.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 13:46:50"
|
||||
"created_at": "2021-09-24 13:46:50",
|
||||
"created_at_iso": "2021-09-24T13:46:50+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48179,
|
||||
@@ -2555,7 +2597,8 @@
|
||||
"images/torrent/9/8/3/fw84szdvrmk4.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 13:34:17"
|
||||
"created_at": "2021-09-24 13:34:17",
|
||||
"created_at_iso": "2021-09-24T13:34:17+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48178,
|
||||
@@ -2611,7 +2654,8 @@
|
||||
"images/torrent/5/c/5/y7fjqvupby01.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 13:22:30"
|
||||
"created_at": "2021-09-24 13:22:30",
|
||||
"created_at_iso": "2021-09-24T13:22:30+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48125,
|
||||
@@ -2666,7 +2710,8 @@
|
||||
"images/torrent/f/2/1/wj8axuerttva.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-23 06:34:55"
|
||||
"created_at": "2021-09-23 06:34:55",
|
||||
"created_at_iso": "2021-09-23T06:34:55+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48124,
|
||||
@@ -2721,7 +2766,8 @@
|
||||
"images/torrent/b/6/8/qa5nfh9blige.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-23 05:38:43"
|
||||
"created_at": "2021-09-23 05:38:43",
|
||||
"created_at_iso": "2021-09-23T05:38:43+02:00"
|
||||
},
|
||||
{
|
||||
"id": 46870,
|
||||
@@ -2770,7 +2816,8 @@
|
||||
"images/torrent/d/4/1/rpn5ywrgch3m.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-01 13:28:55"
|
||||
"created_at": "2021-09-01 13:28:55",
|
||||
"created_at_iso": "2021-09-01T13:28:55+02:00"
|
||||
},
|
||||
{
|
||||
"id": 46193,
|
||||
@@ -2826,7 +2873,8 @@
|
||||
"images/torrent/7/6/8/o87ujrsbmehp.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-08-19 09:44:36"
|
||||
"created_at": "2021-08-19 09:44:36",
|
||||
"created_at_iso": "2021-08-19T09:44:36+02:00"
|
||||
},
|
||||
{
|
||||
"id": 45171,
|
||||
@@ -2874,7 +2922,8 @@
|
||||
"images/torrent/6/d/b/wm8ikfbzpecs.jpg"
|
||||
],
|
||||
"description": "<p>I don't know why the source was 25 fps</p>",
|
||||
"created_at": "2021-07-30 14:34:43"
|
||||
"created_at": "2021-07-30 14:34:43",
|
||||
"created_at_iso": "2021-07-30T14:34:43+02:00"
|
||||
},
|
||||
{
|
||||
"id": 43663,
|
||||
@@ -2923,7 +2972,8 @@
|
||||
"images/torrent/b/7/d/qswq8vdshnyb.jpg"
|
||||
],
|
||||
"description": "<p>Yua Mikami 4th Anniversary Memorial Best - Her 12 Latest Titles In Full, 72 Scenes, 480 Minutes Special</p>\n<p>Release Date: Mar. 06, 2021<br>Runtime: 477min. (HD: 477min.)<br>Director: ----<br>Studio: S1 NO.1 STYLE<br>Label: S1 NO.1 STYLE</p>\n<p>Channel: ----<br>Content ID: ofje00300<br>DVD ID: OFJE-300<br>Series: S1 GIRLS COLLECTION<br>Languages: Japanese</p>\n<p>Actress(es): Yua Mikami</p>",
|
||||
"created_at": "2021-07-04 16:17:44"
|
||||
"created_at": "2021-07-04 16:17:44",
|
||||
"created_at_iso": "2021-07-04T16:17:44+02:00"
|
||||
},
|
||||
{
|
||||
"id": 39515,
|
||||
@@ -3001,7 +3051,8 @@
|
||||
"images/torrent/a/0/c/5dgyfrjx6x7p.png"
|
||||
],
|
||||
"description": "<pre>+++ [HD] SSIS-013 アナタの五感を刺激する三上悠亜のシコシコサポートラグジュアリー 脳をエロスで満たす6つの癒され勃起シチュエーション</pre>\n<p><strong>Full title:</strong> <em>Yua Mikami Will Stimulate Your Five Senses In A Soothing, Stroking, Masturbatory Luxury Support Role 6 Soothing Erection Situations Of Fully Satisfying Eros Company Excitement To Blow Your Mind</em></p>\n<p><strong>Release Date:</strong> Mar. 18, 2021</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00013/</p>\n<p><strong>Studio:</strong> https://www.s1s1s1.com/works/detail/ssis013/</p>",
|
||||
"created_at": "2021-03-22 14:40:56"
|
||||
"created_at": "2021-03-22 14:40:56",
|
||||
"created_at_iso": "2021-03-22T14:40:56+01:00"
|
||||
},
|
||||
{
|
||||
"id": 39245,
|
||||
@@ -3049,7 +3100,8 @@
|
||||
"images/torrent/f/5/1/nqjy8fpqskdj.jpg"
|
||||
],
|
||||
"description": "<p>BDISO: https://exoticaz.to/torrent/34023</p>",
|
||||
"created_at": "2021-03-17 01:27:10"
|
||||
"created_at": "2021-03-17 01:27:10",
|
||||
"created_at_iso": "2021-03-17T01:27:10+01:00"
|
||||
},
|
||||
{
|
||||
"id": 38628,
|
||||
@@ -3098,7 +3150,8 @@
|
||||
"images/torrent/6/f/e/juc07vprbndp.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-02-28 08:42:42"
|
||||
"created_at": "2021-02-28 08:42:42",
|
||||
"created_at_iso": "2021-02-28T08:42:42+01:00"
|
||||
},
|
||||
{
|
||||
"id": 38281,
|
||||
@@ -3159,7 +3212,8 @@
|
||||
"images/torrent/8/6/8/vazvb4ycnmb8.jpg"
|
||||
],
|
||||
"description": "<p><strong>During Her Business Trip, To Her Surprise, She Was Booked Into The Same Hotel Room With Her Asshole Boss (Whom She Hates With A Passion) ... So He Banged Her With Excessive Lust And Relentless Piston-Pounding Thrusts And Kept This Big Tits Office Lady Cumming All Night Long Yua Mikami</strong></p>\n<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni989/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00989/</p>\n<p>+++ [HD] SSNI-989 出張先の旅館で大嫌いなセクハラ上司とまさかの相部屋に…絶倫過ぎる粘着ピストンで一晩中イカされ続けた巨乳OL 三上悠亜</p>",
|
||||
"created_at": "2021-02-17 22:42:58"
|
||||
"created_at": "2021-02-17 22:42:58",
|
||||
"created_at_iso": "2021-02-17T22:42:58+01:00"
|
||||
},
|
||||
{
|
||||
"id": 37072,
|
||||
@@ -3215,7 +3269,8 @@
|
||||
"images/torrent/6/6/9/1ms8yiiif82h.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni963/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00963/</p>\n<p>+++ [HD] SSNI-963 日本一のSEXコスプレイヤー 三上悠亜</p>",
|
||||
"created_at": "2021-01-16 02:52:11"
|
||||
"created_at": "2021-01-16 02:52:11",
|
||||
"created_at_iso": "2021-01-16T02:52:11+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36791,
|
||||
@@ -3269,7 +3324,8 @@
|
||||
"images/torrent/b/b/4/pampaacdzpoa.jpg"
|
||||
],
|
||||
"description": "<p>credits to perfectcanary</p>",
|
||||
"created_at": "2021-01-09 03:44:31"
|
||||
"created_at": "2021-01-09 03:44:31",
|
||||
"created_at_iso": "2021-01-09T03:44:31+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36790,
|
||||
@@ -3324,7 +3380,8 @@
|
||||
"images/torrent/a/a/c/hyaed34gxuic.jpg"
|
||||
],
|
||||
"description": "<p>credits to perfectcanary</p>",
|
||||
"created_at": "2021-01-09 03:44:02"
|
||||
"created_at": "2021-01-09 03:44:02",
|
||||
"created_at_iso": "2021-01-09T03:44:02+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36789,
|
||||
@@ -3379,7 +3436,8 @@
|
||||
"images/torrent/7/8/6/3uotc2hw7s6l.jpg"
|
||||
],
|
||||
"description": "<p>credits to perfectcanary</p>",
|
||||
"created_at": "2021-01-09 03:42:52"
|
||||
"created_at": "2021-01-09 03:42:52",
|
||||
"created_at_iso": "2021-01-09T03:42:52+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36465,
|
||||
@@ -3436,7 +3494,8 @@
|
||||
"images/torrent/1/1/a/x6yztt33psfz.jpg"
|
||||
],
|
||||
"description": "<p>配信開始日: 2020/02/07<br>商品発売日: 2020/02/07<br>収録時間: 87分 (HQ版:87分)<br>出演者: 三上悠亜<br>監督: ZAMPA<br>シリーズ: S1 VR<br>メーカー: エスワン ナンバーワンスタイル<br>レーベル: S1 VR<br>コンテンツタイプ: 3D<br>ジャンル: ハイクオリティVR 独占配信 単体作品 VR専用 騎乗位 巨乳 アイドル・芸能人 主観<br>品番: sivr00067</p>\n<p>待望のHQ超なめらか高画質VRで三上悠亜とボクのエッチで可愛すぎる神同棲生活!「僕の彼女はトップAVアイドルの、あの三上悠亜.・」超多忙なトップAVアイドルでありながら、実はこっそりボクと付き合っている夢のような展開!愛されて、心配されて、嫉妬されて、普段は見れない等身大のアイドルの素顔を完全独占!最高の距離感で四六時中SEXに明け暮れる究極同棲VR</p>",
|
||||
"created_at": "2020-12-30 13:29:53"
|
||||
"created_at": "2020-12-30 13:29:53",
|
||||
"created_at_iso": "2020-12-30T13:29:53+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36096,
|
||||
@@ -3491,7 +3550,8 @@
|
||||
"images/torrent/1/9/e/dtxkxrwdpf3m.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni939/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00939/</p>\n<p><strong>1080p</strong> : https://exoticaz.to/torrent/35862</p>",
|
||||
"created_at": "2020-12-22 00:57:11"
|
||||
"created_at": "2020-12-22 00:57:11",
|
||||
"created_at_iso": "2020-12-22T00:57:11+01:00"
|
||||
},
|
||||
{
|
||||
"id": 35862,
|
||||
@@ -3546,7 +3606,8 @@
|
||||
"images/torrent/a/9/4/ksgywpxmjg9h.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni939/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00939/</p>\n<p>+++ [HD] SSNI-939 執拗な焦らしと寸止めで極限まで感度を高めた恍惚キメセク大絶頂FUCK 三上悠亜</p>",
|
||||
"created_at": "2020-12-17 03:16:29"
|
||||
"created_at": "2020-12-17 03:16:29",
|
||||
"created_at_iso": "2020-12-17T03:16:29+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34686,
|
||||
@@ -3608,7 +3669,8 @@
|
||||
"images/torrent/3/0/4/dtb70p4cfkhi.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni916/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00916/</p>\n<p>+++ [HD] SSNI-916 スク水巨乳の水泳部顧問は元グラビアアイドル…濡れ透ける先生の巨乳に我慢できなくて、じっとり汗だくひたすら密着交尾 三上悠亜</p>\n<p>Play with the water in the classroom or in the pool.... Wet nipples, spilling god milk, high leg that eats into the crotch. Meat feeling Sk water dynamite to nail the students! Healthy BODY and Rodro Special SEX Bathed In The Shining Midsummer Sun! Unstoppable sexual desire of the unending men flocking to the squiring big that attach perfectly with dripping sweat! The Swimsuit Big That Shake Violently Is While Wearing It! All boys love their teachers.</p>\n<p>Release Date:<br>Nov. 19, 2020</p>\n<p>Runtime:<br>145min. (HD: 145min.)</p>\n<p>Director:<br>ZAMPA</p>\n<p>Studio:<br>S1 NO.1 STYLE</p>\n<p>Label:<br>S1 NO.1 STYLE</p>\n<p>Channel:<br>----</p>\n<p>Content ID:<br>ssni00916</p>\n<p>DVD ID:<br>SSNI-916</p>\n<p>Series:<br>----</p>\n<p>Languages:<br>Japanese</p>",
|
||||
"created_at": "2020-11-18 23:55:07"
|
||||
"created_at": "2020-11-18 23:55:07",
|
||||
"created_at_iso": "2020-11-18T23:55:07+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34051,
|
||||
@@ -3660,7 +3722,8 @@
|
||||
"images/torrent/9/e/9/0ocpe6n3lsc6.jpg"
|
||||
],
|
||||
"description": "<p>Title: Ever Since That Day When My Father-In-Law Raped Me… Yua Mikami</p>\n<p>Date: October 22, 2019 </p>\n<p>Time: 02:29:00<br><br>Pornstars: Yua Mikami</p>\n<p>Studio: S1 NO.1 Style</p>",
|
||||
"created_at": "2020-11-03 06:16:30"
|
||||
"created_at": "2020-11-03 06:16:30",
|
||||
"created_at_iso": "2020-11-03T06:16:30+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34049,
|
||||
@@ -3713,7 +3776,8 @@
|
||||
"images/torrent/9/0/4/5yho2mvumies.jpg"
|
||||
],
|
||||
"description": "<p>Title: TEK-072 Climax x 4 Hardcore Scenes Yua Mikami</p>\n<p>Date: August 1, 2020</p>\n<p>Time: 02:55:00</p>\n<p>Pornstars: Yua Mikami</p>\n<p>Studio: MUTEKI</p>\n<p>https://www.javlibrary.com/en/?v=javlild2tm</p>",
|
||||
"created_at": "2020-11-03 06:06:51"
|
||||
"created_at": "2020-11-03 06:06:51",
|
||||
"created_at_iso": "2020-11-03T06:06:51+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34024,
|
||||
@@ -3764,7 +3828,8 @@
|
||||
"images/torrent/d/3/2/qeylkbizibzy.jpg"
|
||||
],
|
||||
"description": "<p>Titile: Yua Mikami Is Completely Tied Down And Unable To Move Unlimited Piston Pounding Fucks That</p>\n<p>Date: October 22, 2019 </p>\n<p>Time: 02:34:00</p>\n<p>Pornstars: Yua Mikami</p>\n<p>Studio: S1 NO.1 Style</p>",
|
||||
"created_at": "2020-11-02 05:13:10"
|
||||
"created_at": "2020-11-02 05:13:10",
|
||||
"created_at_iso": "2020-11-02T05:13:10+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34023,
|
||||
@@ -3813,7 +3878,8 @@
|
||||
"images/torrent/c/0/2/pvoql1zscpdl.jpg"
|
||||
],
|
||||
"description": "<p>Title: SSNI-388 Yua Mikami In A 16-Consecutive Cum Shot Slut Assault She’s Tied Up Men For Some</p>\n<p>Date: October 22, 2019</p>\n<p>Pornstars: Yua Mikami</p>\n<p>Studio: S1 NO.1 Style</p>\n<p>Time: 02:04:00</p>",
|
||||
"created_at": "2020-11-02 04:57:51"
|
||||
"created_at": "2020-11-02 04:57:51",
|
||||
"created_at_iso": "2020-11-02T04:57:51+01:00"
|
||||
},
|
||||
{
|
||||
"id": 33466,
|
||||
@@ -3870,7 +3936,8 @@
|
||||
"images/torrent/1/6/0/bwivpujoltwr.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni888/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00888/</p>\n<p>+++ [HD] SSNI-888 絶頂の向こう側でイッてイッてイキまくる確変オーガズム状態のまま48時間耐久で一生分ハメまくった三上悠亜のヤバい性交</p>",
|
||||
"created_at": "2020-10-17 01:29:36"
|
||||
"created_at": "2020-10-17 01:29:36",
|
||||
"created_at_iso": "2020-10-17T01:29:36+02:00"
|
||||
},
|
||||
{
|
||||
"id": 32469,
|
||||
@@ -3925,7 +3992,8 @@
|
||||
"images/torrent/7/f/4/qn6q2w8bgjzg.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni865/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00865/</p>\n<p>+++ [HD] SSNI-865 巨乳OLと絶倫童貞上司の毎週エスカレートする週末のセックス残業 三上悠亜</p>",
|
||||
"created_at": "2020-09-17 03:27:12"
|
||||
"created_at": "2020-09-17 03:27:12",
|
||||
"created_at_iso": "2020-09-17T03:27:12+02:00"
|
||||
},
|
||||
{
|
||||
"id": 31490,
|
||||
@@ -4118,7 +4186,8 @@
|
||||
"images/torrent/1/0/d/9wmpejovzbg7.jpg"
|
||||
],
|
||||
"description": "<p>A quarter terabyte of Yua Mikami videos. Pretty close to a complete solo discography as of this date. Mostly 1080p, a few 720p. No super loud Chinese language ads at the beginnings of any videos, mostly unobtrusive watermarks. A few of the Muteki vids are decensored with the sorta annoying JAVPlayer watermark.</p>",
|
||||
"created_at": "2020-08-20 00:49:29"
|
||||
"created_at": "2020-08-20 00:49:29",
|
||||
"created_at_iso": "2020-08-20T00:49:29+02:00"
|
||||
},
|
||||
{
|
||||
"id": 31465,
|
||||
@@ -4175,7 +4244,8 @@
|
||||
"images/torrent/7/4/f/npjdewgqw8bj.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni802/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00802/</p>\n<p>+++ [HD] SSNI-802 『教師失格』帰宅困難になったあの日、嵐が過ぎるまでひたすら男子生徒とハメまくりました…。 三上悠亜</p>\n<p>Release Date: June 14, 2020<br>Runtime: 117min. (HD: 117min.)<br>Director: Amazing Meat<br>Studio: S1 NO.1 STYLE<br>Label: S1 NO.1 STYLE</p>\n<p>I'm a slut priest... On that day when a large typhoon hit directly, the two broke their line... On the night when it was difficult to return home, the unstoppable desire of a female teacher who shakes her big tits until the morning and gets turbulent like a storm. \"Much more... messed up... Ah... No... Iku...!!!\" \"Before I am a teacher, I am a woman...\"</p>",
|
||||
"created_at": "2020-08-19 12:04:41"
|
||||
"created_at": "2020-08-19 12:04:41",
|
||||
"created_at_iso": "2020-08-19T12:04:41+02:00"
|
||||
},
|
||||
{
|
||||
"id": 30383,
|
||||
@@ -4220,7 +4290,8 @@
|
||||
"images/torrent/9/9/9/i3ciw7xmwson.jpg"
|
||||
],
|
||||
"description": "<p>[SSNI-826] Yua Mikami 三上悠亜のPLATINUM SOAP 三上悠亞</p>\n<p>The finest customs to serve with the best body and best service! No matter how many times I ejaculate, the full erection doesn’t stop… I just ejaculated, but I’m jealous of any number of shots! Unlimited firing within the time. “Please give out as many shots as you want today.” Yua’s awesome technique will fulfill all your desires. For a while, Onakura, men’s esthetic, pin salo, SM club, finest soap. Platinum BODY and the finest service a total of 15 shots will ejaculate a special sex custom!</p>",
|
||||
"created_at": "2020-07-27 10:51:58"
|
||||
"created_at": "2020-07-27 10:51:58",
|
||||
"created_at_iso": "2020-07-27T10:51:58+02:00"
|
||||
},
|
||||
{
|
||||
"id": 29815,
|
||||
@@ -4269,7 +4340,8 @@
|
||||
"images/torrent/b/9/3/wvu3uhkwmxbz.jpg"
|
||||
],
|
||||
"description": "<p>【VR】エスワン15周年スペシャル共演 日本一のAV女優2人と超豪華ハーレム逆3P体験</p>\n<p>【VR】 15th Anniversary Of Esuan Special Co-starring 2 Best AV Actresses In Japan And A Super Luxury Harem Reverse 3P Experience</p>",
|
||||
"created_at": "2020-07-14 07:28:09"
|
||||
"created_at": "2020-07-14 07:28:09",
|
||||
"created_at_iso": "2020-07-14T07:28:09+02:00"
|
||||
},
|
||||
{
|
||||
"id": 29356,
|
||||
@@ -4315,7 +4387,8 @@
|
||||
"images/torrent/5/6/4/kdkmgw9mxjiy.jpg"
|
||||
],
|
||||
"description": "<p>Title: TEK-067 Princess Peach Mikami YuA</p>\n<p>ID: TEK-067<br>Release Date: 2015-06-01<br>Length: 180 min(s)<br>Director: ----<br>Maker: Muteki <br>Label: Muteki </p>\n<p>Ps: It was claimed to be the first real porn that Yua Mikami participated.</p>",
|
||||
"created_at": "2020-07-08 01:32:21"
|
||||
"created_at": "2020-07-08 01:32:21",
|
||||
"created_at_iso": "2020-07-08T01:32:21+02:00"
|
||||
},
|
||||
{
|
||||
"id": 29261,
|
||||
@@ -4366,7 +4439,8 @@
|
||||
"images/torrent/9/a/c/hocvufnx1xxg.jpg"
|
||||
],
|
||||
"description": "<p><span style=\"font-size:20px;\"><strong>Full Title</strong></span>: <span style=\"font-size:20px;\"><strong>Massive Cocks x Follow-Up Fucks x Large Orgies These 24 Massive Cocks Will Relentlessly Pump These Twitching And Cumming Pussies In A Furious Follow-Up Piston Pumping Ultra Large Orgies Special Yua Mikami<br></strong><br><span style=\"font-size:18px;\">Release Date: Oct. 18, 2018</span><br><span style=\"font-size:18px;\">Runtime: 117min. (HD: 117min.)</span><br><span style=\"font-size:18px;\">Director: ZAMPA</span><br><span style=\"font-size:18px;\">Studio: S1 NO.1 STYLE</span><br><span style=\"font-size:18px;\">Label: S1 NO.1 STYLE<br>Channel: S1 NO.1 STYLE, PRIME<br>Content ID: ssni00322<br>DVD ID: SSNI-322<br><br><a href=\"https://awscc3001.r18.com/litevideo/freepv/s/ssn/ssni00322/ssni00322_dmb_w.mp4\">Trailer</a></span></span></p>",
|
||||
"created_at": "2020-07-06 02:25:40"
|
||||
"created_at": "2020-07-06 02:25:40",
|
||||
"created_at_iso": "2020-07-06T02:25:40+02:00"
|
||||
},
|
||||
{
|
||||
"id": 27208,
|
||||
@@ -4419,7 +4493,8 @@
|
||||
"images/torrent/8/6/3/br1smc0lvdfy.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2020-05-31 03:07:27"
|
||||
"created_at": "2020-05-31 03:07:27",
|
||||
"created_at_iso": "2020-05-31T03:07:27+02:00"
|
||||
},
|
||||
{
|
||||
"id": 26018,
|
||||
@@ -4464,7 +4539,8 @@
|
||||
"images/torrent/c/e/d/fjzmigqdm3qt.jpg"
|
||||
],
|
||||
"description": "<p><strong>Yua Mikami in awesome POV scene working as a 5star soapland popstar girI</strong></p>\n<p><strong>Infiltrate the soapland where the strongest national idol you have ever dreamed of works! ! Immediate scale blowjob & immediate etch of greeting unwashed cock! Full body lip to anal & toes! Vacuum periscope Blow while bathing in the bath! Adhesive slimy mat that will serve hard! Full charter feeling full course 180 minutes unlimited firing! \"Please go and enjoy today!\"</strong></p>\n<p><a href=\"https://www.r18.com/videos/vod/movies/detail/-/id=tek00076/?i3_ref=search&i3_ord=1\">https://www.r18.com/videos/vod/movies/detail/-/id=tek00076/?i3_ref=search&i3_ord=1</a></p>",
|
||||
"created_at": "2020-03-16 20:11:31"
|
||||
"created_at": "2020-03-16 20:11:31",
|
||||
"created_at_iso": "2020-03-16T20:11:31+01:00"
|
||||
},
|
||||
{
|
||||
"id": 26005,
|
||||
@@ -4510,7 +4586,8 @@
|
||||
"images/torrent/6/5/4/lhkdfbqlsqlu.jpg"
|
||||
],
|
||||
"description": "<p>One day before summer vacation, I had a crazy sex in the classroom at sunset when no one was there. Push down to the bed in the nurse's room, fill the face in the skirt, and rub the young and tender big tits and peach ass. Titty fuck and fellatio into school swimsuit. The best girl in school, take off the uniform of a national idol school girl who is too angelic and roll up after school! Youth school sex! \"It's a secret to everyone.\"</p>\n<p><a href=\"https://www.r18.com/videos/vod/movies/detail/-/id=tek00079/\">https://www.r18.com/videos/vod/movies/detail/-/id=tek00079/</a></p>",
|
||||
"created_at": "2020-03-16 05:22:31"
|
||||
"created_at": "2020-03-16 05:22:31",
|
||||
"created_at_iso": "2020-03-16T05:22:31+01:00"
|
||||
},
|
||||
{
|
||||
"id": 26004,
|
||||
@@ -4553,7 +4630,8 @@
|
||||
"images/torrent/c/5/d/n5ciceiboq1l.jpg"
|
||||
],
|
||||
"description": "<p>\"More ... more kiss ...\" The obscene and hot sexy Kiss that the national idol Yua Mikami shows for the first time and the passion SEX that burns up! Temptation hot Licking Handjob & Footjob With A Lot Of drips. Saliva and pussy juice are intertwined and the pussy gets wet so shamefully! The climax FUCK of an odious kiss that licks the whole body of the idol! The most erotic idol of the strongest idol who pulls a string in love popularity sweaty kissing sex! !</p>\n<p><a href=\"https://www.r18.com/videos/vod/movies/detail/-/id=tek00080/\">https://www.r18.com/videos/vod/movies/detail/-/id=tek00080/</a></p>",
|
||||
"created_at": "2020-03-16 05:15:51"
|
||||
"created_at": "2020-03-16 05:15:51",
|
||||
"created_at_iso": "2020-03-16T05:15:51+01:00"
|
||||
},
|
||||
{
|
||||
"id": 25958,
|
||||
@@ -4598,7 +4676,8 @@
|
||||
"images/torrent/e/5/b/dtmfbfmqsekh.jpg"
|
||||
],
|
||||
"description": "<p>Yua Mikami is my one of my favourite JAV Actress, she is so pretty and have killer body. In this video she acts as your girlfriend.<br>she waits you at home, wash your dick and handjob it. she likes to kiss. in the bedroom she HJ you and you fingering her then she rides you cow girl style, missionary and doggy style. she likes travelling with you and give you nice service in the bathroom during vacation and fucks around in the bathtub then continue fucking in the bedroom hotels.</p>",
|
||||
"created_at": "2020-03-10 04:08:49"
|
||||
"created_at": "2020-03-10 04:08:49",
|
||||
"created_at_iso": "2020-03-10T04:08:49+01:00"
|
||||
},
|
||||
{
|
||||
"id": 25204,
|
||||
@@ -4646,7 +4725,8 @@
|
||||
"images/torrent/f/c/a/5rsj5fnyw7sy.jpg"
|
||||
],
|
||||
"description": "<p>Release Date: Oct. 12, 2019<br>Runtime: 149min. (HD: 149min.)<br>Director: Mon C<br>Studio: S1 NO.1 STYLE<br>Label: S1 NO.1 STYLE<br>Content ID: ssni00589<br>DVD ID: SSNI-589<br>Series: Full-Power Cumming Cowgirl<br>Languages: Japanese</p>\n<p>三上悠亜の全力イクイク騎乗位マニアックス 三上悠亜</p>\n<p>「ほら、おま●こに挿ってるの丸見えだよ…」国民的アイドルの大胆!騎乗位マニアックス!前後左右360°尻肉揺れまくり徹底アングル!クビレ腰と肉弾ヒップを一心不乱に振りまくる!男根を咥え込む騎乗位の乱舞!イッてもイッても止めない高速グラインド!!イキまくるクビレ、尻肉大迫力神アングル!絶頂汁を撒き散らしそれでも振り続けるアグレッシブFUCK!! ※こちらはBlu-ray Disc専用ソフトです。対応プレイヤー以外では再生できませんのでご注意ください。 ★アダルトブック「三上悠亜写真集」の商品ご購入はこちらから★ 「コンビニ受取」対象商品です。詳しくはこちらをご覧ください。</p>",
|
||||
"created_at": "2019-12-13 00:30:33"
|
||||
"created_at": "2019-12-13 00:30:33",
|
||||
"created_at_iso": "2019-12-13T00:30:33+01:00"
|
||||
},
|
||||
{
|
||||
"id": 24777,
|
||||
@@ -4729,7 +4809,8 @@
|
||||
"images/torrent/4/0/1/qiq9l0g9b4lb.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2019-10-12 07:37:42"
|
||||
"created_at": "2019-10-12 07:37:42",
|
||||
"created_at_iso": "2019-10-12T07:37:42+02:00"
|
||||
},
|
||||
{
|
||||
"id": 24714,
|
||||
@@ -4793,7 +4874,8 @@
|
||||
"images/torrent/0/0/c/pz6a1om1zcj6.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2019-10-03 07:22:22"
|
||||
"created_at": "2019-10-03 07:22:22",
|
||||
"created_at_iso": "2019-10-03T07:22:22+02:00"
|
||||
},
|
||||
{
|
||||
"id": 24432,
|
||||
@@ -4832,7 +4914,8 @@
|
||||
"images/torrent/c/3/e/ivi2v3xvuxvf.png"
|
||||
],
|
||||
"description": "<p>Yua mikami (mosaic removed) not exactly more like digitally altered person seems to have done a good job albeit the quality is not the greatest.</p>",
|
||||
"created_at": "2019-08-06 05:01:10"
|
||||
"created_at": "2019-08-06 05:01:10",
|
||||
"created_at_iso": "2019-08-06T05:01:10+02:00"
|
||||
},
|
||||
{
|
||||
"id": 22633,
|
||||
@@ -4880,7 +4963,8 @@
|
||||
"images/torrent/d/1/d/siepkvzdjdjm.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2019-02-16 01:52:32"
|
||||
"created_at": "2019-02-16 01:52:32",
|
||||
"created_at_iso": "2019-02-16T01:52:32+01:00"
|
||||
},
|
||||
{
|
||||
"id": 22606,
|
||||
@@ -4926,7 +5010,8 @@
|
||||
"images/torrent/f/9/9/scjrral5midb.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2019-02-14 09:58:29"
|
||||
"created_at": "2019-02-14 09:58:29",
|
||||
"created_at_iso": "2019-02-14T09:58:29+01:00"
|
||||
},
|
||||
{
|
||||
"id": 21647,
|
||||
@@ -4975,7 +5060,8 @@
|
||||
"images/torrent/1/e/9/zb4gphrposw0.gif"
|
||||
],
|
||||
"description": "<p>no sexual activity in the show.</p>\n<p>for details : http://www.r18.com/videos/vod/movies/detail/-/id=oae00165/?i3_ref=search&i3_ord=1</p>",
|
||||
"created_at": "2018-12-16 20:31:03"
|
||||
"created_at": "2018-12-16 20:31:03",
|
||||
"created_at_iso": "2018-12-16T20:31:03+01:00"
|
||||
},
|
||||
{
|
||||
"id": 21564,
|
||||
@@ -5021,7 +5107,8 @@
|
||||
"images/torrent/b/5/f/r0ml2pj3xrvq.jpg"
|
||||
],
|
||||
"description": "<p>MUTEKI 10th Anniversary Special Project.</p>",
|
||||
"created_at": "2018-12-06 02:16:35"
|
||||
"created_at": "2018-12-06 02:16:35",
|
||||
"created_at_iso": "2018-12-06T02:16:35+01:00"
|
||||
},
|
||||
{
|
||||
"id": 21561,
|
||||
@@ -5075,7 +5162,8 @@
|
||||
"images/torrent/7/c/3/kvjyuskn3mkf.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-12-05 19:43:15"
|
||||
"created_at": "2018-12-05 19:43:15",
|
||||
"created_at_iso": "2018-12-05T19:43:15+01:00"
|
||||
},
|
||||
{
|
||||
"id": 20515,
|
||||
@@ -5200,7 +5288,8 @@
|
||||
"images/torrent/a/1/9/5ngcygiazvrv.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-09-07 07:56:21"
|
||||
"created_at": "2018-09-07 07:56:21",
|
||||
"created_at_iso": "2018-09-07T07:56:21+02:00"
|
||||
},
|
||||
{
|
||||
"id": 15261,
|
||||
@@ -5241,7 +5330,8 @@
|
||||
"images/torrent/e/f/6/ubgilv5db5mo.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-06-02 17:44:49"
|
||||
"created_at": "2018-06-02 17:44:49",
|
||||
"created_at_iso": "2018-06-02T17:44:49+02:00"
|
||||
},
|
||||
{
|
||||
"id": 4333,
|
||||
@@ -5282,7 +5372,8 @@
|
||||
"images/torrent/c/9/c/3qxdyhvuefwu.jpg"
|
||||
],
|
||||
"description": "<pre><br>General<br>Complete name : Tek081.mp4<br>Format : MPEG-4<br>Format profile : Base Media / Version 2<br>Codec ID : mp42 (isom/iso2/mp41)<br>File size : 1.49 GiB<br>Duration : 2 h 51 min<br>Overall bit rate mode : Variable<br>Overall bit rate : 1 243 kb/s<br>Encoded date : UTC 2017-02-12 20:24:00<br>Tagged date : UTC 2017-02-12 20:24:00<br>Writing application : HandBrake 1.0.2 2017012200<br><br>Video<br>ID : 1<br>Format : HEVC<br>Format/Info : High Efficiency Video Coding<br>Format profile : Main@L3.1@Main<br>Codec ID : hev1<br>Codec ID/Info : High Efficiency Video Coding<br>Duration : 2 h 51 min<br>Bit rate : 1 139 kb/s<br>Width : 1 280 pixels<br>Height : 720 pixels<br>Display aspect ratio : 16:9<br>Frame rate mode : Variable<br>Frame rate : 28.707 FPS<br>Minimum frame rate : 11.446 FPS<br>Maximum frame rate : 195.652 FPS<br>Color space : YUV<br>Chroma subsampling : 4:2:0<br>Bit depth : 8 bits<br>Bits/(Pixel*Frame) : 0.043<br>Stream size : 1.36 GiB (92%)<br>Writing library : x265 2.1:[Windows][GCC 5.4.0][64 bit] 8bit<br>Encoding settings : wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=1 / tu-inter-depth=1 / me=1 / subme=2 / merange=57 / no-rect / no-amp / max-merge=2 / temporal-mvp / no-early-skip / rskip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu-lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=290 / min-keyint=29 / scenecut=40 / rc-lookahead=20 / lookahead-slices=4 / bframes=4 / bframe-bias=0 / b-adapt=2 / ref=3 / limit-refs=3 / no-limit-modes / weightp / no-weightb / aq-mode=1 / qg-size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=3 / psy-rd=2.00 / rdoq-level=0 / psy-rdoq=0.00 / log2-max-poc-lsb=8 / no-rd-refine / signhide / deblock=0:0 / sao / no-sao-non-deblock / b-pyramid / cutree / no-intra-refresh / rc=crf / crf=22.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ipratio=1.40 / pbratio=1.30<br>Encoded date : UTC 2017-02-12 20:24:00<br>Tagged date : UTC 2017-02-12 20:24:00<br>Color range : Limited<br>Color primaries : BT.709<br>Transfer characteristics : BT.709<br>Matrix coefficients : BT.709<br><br>Audio<br>ID : 2<br>Format : AAC<br>Format/Info : Advanced Audio Codec<br>Format profile : LC<br>Codec ID : mp4a-40-2<br>Duration : 2 h 51 min<br>Bit rate mode : Variable<br>Bit rate : 96.0 kb/s<br>Channel(s) : 2 channels<br>Channel positions : Front: L R<br>Sampling rate : 48.0 kHz<br>Frame rate : 46.875 FPS (1024 SPF)<br>Compression mode : Lossy<br>Stream size : 118 MiB (8%)<br>Title : Stereo / Stereo<br>Language : English<br>Default : Yes<br>Alternate group : 1<br>Encoded date : UTC 2017-02-12 20:24:00<br>Tagged date : UTC 2017-02-12 20:24:00<br><br></pre>",
|
||||
"created_at": "2018-03-19 06:01:40"
|
||||
"created_at": "2018-03-19 06:01:40",
|
||||
"created_at_iso": "2018-03-19T06:01:40+01:00"
|
||||
},
|
||||
{
|
||||
"id": 4241,
|
||||
@@ -5323,7 +5414,8 @@
|
||||
"images/torrent/c/4/4/o8jsphfh7rr9.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-02-20 02:46:45"
|
||||
"created_at": "2018-02-20 02:46:45",
|
||||
"created_at_iso": "2018-02-20T02:46:45+01:00"
|
||||
},
|
||||
{
|
||||
"id": 4191,
|
||||
@@ -5364,7 +5456,8 @@
|
||||
"images/torrent/9/6/1/c1szrkxbf6fn.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-02-05 05:39:41"
|
||||
"created_at": "2018-02-05 05:39:41",
|
||||
"created_at_iso": "2018-02-05T05:39:41+01:00"
|
||||
},
|
||||
{
|
||||
"id": 4101,
|
||||
@@ -5405,7 +5498,8 @@
|
||||
"images/torrent/7/4/6/9r3ars6pa9cn.jpg"
|
||||
],
|
||||
"description": "<pre><br><br>General<br>Complete name : snis896.mp4<br>Format : MPEG-4<br>Format profile : Base Media / Version 2<br>Codec ID : mp42 (isom/iso2/mp41)<br>File size : 1.40 GiB<br>Duration : 1 h 58 min<br>Overall bit rate mode : Variable<br>Overall bit rate : 1 691 kb/s<br>Encoded date : UTC 2017-05-31 19:30:00<br>Tagged date : UTC 2017-05-31 19:30:00<br>Writing application : HandBrake 1.0.7 2017040900<br><br>Video<br>ID : 1<br>Format : HEVC<br>Format/Info : High Efficiency Video Coding<br>Format profile : Main@L3.1@Main<br>Codec ID : hev1<br>Codec ID/Info : High Efficiency Video Coding<br>Duration : 1 h 58 min<br>Bit rate : 1 588 kb/s<br>Width : 1 280 pixels<br>Height : 720 pixels<br>Display aspect ratio : 16:9<br>Frame rate mode : Constant<br>Frame rate : 30.000 FPS<br>Color space : YUV<br>Chroma subsampling : 4:2:0<br>Bit depth : 8 bits<br>Bits/(Pixel*Frame) : 0.057<br>Stream size : 1.32 GiB (94%)<br>Writing library : x265 2.1:[Windows][GCC 5.3.1][64 bit] 8bit<br>Encoding settings : wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=1 / tu-inter-depth=1 / me=1 / subme=2 / merange=57 / no-rect / no-amp / max-merge=2 / temporal-mvp / no-early-skip / rskip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu-lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=300 / min-keyint=30 / scenecut=40 / rc-lookahead=20 / lookahead-slices=4 / bframes=4 / bframe-bias=0 / b-adapt=2 / ref=3 / limit-refs=3 / no-limit-modes / weightp / no-weightb / aq-mode=1 / qg-size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=3 / psy-rd=2.00 / rdoq-level=0 / psy-rdoq=0.00 / log2-max-poc-lsb=8 / no-rd-refine / signhide / deblock=0:0 / sao / no-sao-non-deblock / b-pyramid / cutree / no-intra-refresh / rc=crf / crf=20.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ipratio=1.40 / pbratio=1.30<br>Encoded date : UTC 2017-05-31 19:30:00<br>Tagged date : UTC 2017-05-31 19:30:00<br>Color range : Limited<br>Color primaries : BT.709<br>Transfer characteristics : BT.709<br>Matrix coefficients : BT.709<br><br>Audio<br>ID : 2<br>Format : AAC<br>Format/Info : Advanced Audio Codec<br>Format profile : LC<br>Codec ID : 40<br>Duration : 1 h 58 min<br>Bit rate mode : Variable<br>Bit rate : 96.0 kb/s<br>Channel(s) : 2 channels<br>Channel positions : Front: L R<br>Sampling rate : 48.0 kHz<br>Frame rate : 46.875 FPS (1024 spf)<br>Compression mode : Lossy<br>Stream size : 81.6 MiB (6%)<br>Title : Stereo / Stereo<br>Default : Yes<br>Alternate group : 1<br>Encoded date : UTC 2017-05-31 19:30:00<br>Tagged date : UTC 2017-05-31 19:30:00<br><br></pre>",
|
||||
"created_at": "2017-12-24 02:51:02"
|
||||
"created_at": "2017-12-24 02:51:02",
|
||||
"created_at_iso": "2017-12-24T02:51:02+01:00"
|
||||
},
|
||||
{
|
||||
"id": 4002,
|
||||
@@ -5446,7 +5540,8 @@
|
||||
"images/torrent/7/d/3/wj64npz8aizr.jpg"
|
||||
],
|
||||
"description": "<p>三上悠亜<br>TEK-071 快感(MUTEKI-2016年1月1日)</p>",
|
||||
"created_at": "2017-11-16 03:02:55"
|
||||
"created_at": "2017-11-16 03:02:55",
|
||||
"created_at_iso": "2017-11-16T03:02:55+01:00"
|
||||
},
|
||||
{
|
||||
"id": 3951,
|
||||
@@ -5487,7 +5582,8 @@
|
||||
"images/torrent/c/1/7/herqbzuq6jj4.jpg"
|
||||
],
|
||||
"description": "<p>三上悠亜<br>TEK-067 Princess Peach(MUTEKI-2015年6月1日)</p>",
|
||||
"created_at": "2017-11-12 14:47:18"
|
||||
"created_at": "2017-11-12 14:47:18",
|
||||
"created_at_iso": "2017-11-12T14:47:18+01:00"
|
||||
},
|
||||
{
|
||||
"id": 16896,
|
||||
@@ -5535,7 +5631,8 @@
|
||||
"images/torrent/8/a/a/ena0fdra1rif.jpg"
|
||||
],
|
||||
"description": "<p>[SSNI-030] Mikami Yua Fan Thanksgiving National Idol x General Users 20 People 'Guttyfan and SEX Economy' Hime Meakuri Special<br><br></p>\n<pre><br><br></pre>",
|
||||
"created_at": "2017-10-15 06:46:48"
|
||||
"created_at": "2017-10-15 06:46:48",
|
||||
"created_at_iso": "2017-10-15T06:46:48+02:00"
|
||||
},
|
||||
{
|
||||
"id": 15273,
|
||||
@@ -5577,7 +5674,8 @@
|
||||
"images/torrent/f/6/5/srlry3vu9kas.jpg"
|
||||
],
|
||||
"description": "<p>SSNI-009 National Idol Life First First Freak!Big Caps 23 Endless Unlimited Sex - Yua Mikami<br><br></p>",
|
||||
"created_at": "2017-10-11 02:33:59"
|
||||
"created_at": "2017-10-11 02:33:59",
|
||||
"created_at_iso": "2017-10-11T02:33:59+02:00"
|
||||
},
|
||||
{
|
||||
"id": 17757,
|
||||
@@ -5623,7 +5721,8 @@
|
||||
"images/torrent/3/1/6/21sudpyouj3f.jpg"
|
||||
],
|
||||
"description": "SSNI-009 Our National Idol First Gangbang! Three raw scenes. 23 big cocks endless unlimited sex ~ Yua Mikami<br><br><pre><br><br></pre>",
|
||||
"created_at": "2017-09-14 01:19:43"
|
||||
"created_at": "2017-09-14 01:19:43",
|
||||
"created_at_iso": "2017-09-14T01:19:43+02:00"
|
||||
},
|
||||
{
|
||||
"id": 17364,
|
||||
@@ -5668,7 +5767,8 @@
|
||||
"images/torrent/f/a/b/tvqctziuy8k2.jpg"
|
||||
],
|
||||
"description": "SNIS-964 Covered In Sweat, ?**, And Saliva: Dripping Wet Sex With A National Pop Star ~ YuA Mikami<br><br><pre><br><br></pre>",
|
||||
"created_at": "2017-09-01 22:56:53"
|
||||
"created_at": "2017-09-01 22:56:53",
|
||||
"created_at_iso": "2017-09-01T22:56:53+02:00"
|
||||
}
|
||||
],
|
||||
"first_page_url": "https://exoticaz.to/api/v1/jackett/torrents?search=yua%20mikami&page=1",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -109,7 +109,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-21 00:24:49"
|
||||
"created_at": "2021-03-21 00:24:49",
|
||||
"created_at_iso": "2021-03-21T00:24:49-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78501,
|
||||
@@ -159,7 +160,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-19 21:52:21"
|
||||
"created_at": "2021-03-19 21:52:21",
|
||||
"created_at_iso": "2021-03-19T21:52:21-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78496,
|
||||
@@ -209,7 +211,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-19 01:57:43"
|
||||
"created_at": "2021-03-19 01:57:43",
|
||||
"created_at_iso": "2021-03-19T01:57:43-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78494,
|
||||
@@ -259,7 +262,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-18 14:36:10"
|
||||
"created_at": "2021-03-18 14:36:10",
|
||||
"created_at_iso": "2021-03-18T14:36:10-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78491,
|
||||
@@ -305,7 +309,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-18 09:26:08"
|
||||
"created_at": "2021-03-18 09:26:08",
|
||||
"created_at_iso": "2021-03-18T09:26:08-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78490,
|
||||
@@ -351,7 +356,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-18 09:05:55"
|
||||
"created_at": "2021-03-18 09:05:55",
|
||||
"created_at_iso": "2021-03-18T09:05:55-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78488,
|
||||
@@ -465,7 +471,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-18 07:29:18"
|
||||
"created_at": "2021-03-18 07:29:18",
|
||||
"created_at_iso": "2021-03-18T07:29:18-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78486,
|
||||
@@ -511,7 +518,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-18 07:09:34"
|
||||
"created_at": "2021-03-18 07:09:34",
|
||||
"created_at_iso": "2021-03-18T07:09:34-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78485,
|
||||
@@ -569,7 +577,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-18 06:22:28"
|
||||
"created_at": "2021-03-18 06:22:28",
|
||||
"created_at_iso": "2021-03-18T06:22:28-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78483,
|
||||
@@ -615,7 +624,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-18 04:28:51"
|
||||
"created_at": "2021-03-18 04:28:51",
|
||||
"created_at_iso": "2021-03-18T04:28:51-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78481,
|
||||
@@ -801,7 +811,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-18 03:25:16"
|
||||
"created_at": "2021-03-18 03:25:16",
|
||||
"created_at_iso": "2021-03-18T03:25:16-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78480,
|
||||
@@ -855,7 +866,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-18 02:02:22"
|
||||
"created_at": "2021-03-18 02:02:22",
|
||||
"created_at_iso": "2021-03-18T02:02:22-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78476,
|
||||
@@ -909,7 +921,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-17 20:31:08"
|
||||
"created_at": "2021-03-17 20:31:08",
|
||||
"created_at_iso": "2021-03-17T20:31:08-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78472,
|
||||
@@ -995,7 +1008,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-17 12:01:05"
|
||||
"created_at": "2021-03-17 12:01:05",
|
||||
"created_at_iso": "2021-03-17T12:01:05-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78468,
|
||||
@@ -1045,7 +1059,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-16 22:47:11"
|
||||
"created_at": "2021-03-16 22:47:11",
|
||||
"created_at_iso": "2021-03-16T22:47:11-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78467,
|
||||
@@ -1099,7 +1114,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-16 22:20:53"
|
||||
"created_at": "2021-03-16 22:20:53",
|
||||
"created_at_iso": "2021-03-16T22:20:53-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78466,
|
||||
@@ -1153,7 +1169,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-16 22:01:24"
|
||||
"created_at": "2021-03-16 22:01:24",
|
||||
"created_at_iso": "2021-03-16T22:01:24-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78465,
|
||||
@@ -1203,7 +1220,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-16 21:55:29"
|
||||
"created_at": "2021-03-16 21:55:29",
|
||||
"created_at_iso": "2021-03-16T21:55:29-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78460,
|
||||
@@ -1257,7 +1275,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-16 14:51:45"
|
||||
"created_at": "2021-03-16 14:51:45",
|
||||
"created_at_iso": "2021-03-16T14:51:45-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78459,
|
||||
@@ -1311,7 +1330,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-16 12:44:15"
|
||||
"created_at": "2021-03-16 12:44:15",
|
||||
"created_at_iso": "2021-03-16T12:44:15-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78458,
|
||||
@@ -1361,7 +1381,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-16 10:18:22"
|
||||
"created_at": "2021-03-16 10:18:22",
|
||||
"created_at_iso": "2021-03-16T10:18:22-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78453,
|
||||
@@ -1415,7 +1436,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-15 20:10:22"
|
||||
"created_at": "2021-03-15 20:10:22",
|
||||
"created_at_iso": "2021-03-15T20:10:22-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78446,
|
||||
@@ -1477,7 +1499,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-15 16:37:11"
|
||||
"created_at": "2021-03-15 16:37:11",
|
||||
"created_at_iso": "2021-03-15T16:37:11-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78445,
|
||||
@@ -1523,7 +1546,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-15 15:18:32"
|
||||
"created_at": "2021-03-15 15:18:32",
|
||||
"created_at_iso": "2021-03-15T15:18:32-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78412,
|
||||
@@ -1569,7 +1593,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-14 17:15:26"
|
||||
"created_at": "2021-03-14 17:15:26",
|
||||
"created_at_iso": "2021-03-14T17:15:26-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78408,
|
||||
@@ -1610,7 +1635,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-14 09:19:49"
|
||||
"created_at": "2021-03-14 09:19:49",
|
||||
"created_at_iso": "2021-03-14T09:19:49-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78406,
|
||||
@@ -1656,7 +1682,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-14 05:47:02"
|
||||
"created_at": "2021-03-14 05:47:02",
|
||||
"created_at_iso": "2021-03-14T05:47:02-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78398,
|
||||
@@ -1742,7 +1769,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 16:17:07"
|
||||
"created_at": "2021-03-13 16:17:07",
|
||||
"created_at_iso": "2021-03-13T16:17:07-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78396,
|
||||
@@ -1828,7 +1856,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 15:44:33"
|
||||
"created_at": "2021-03-13 15:44:33",
|
||||
"created_at_iso": "2021-03-13T15:44:33-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78395,
|
||||
@@ -1958,7 +1987,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 15:22:23"
|
||||
"created_at": "2021-03-13 15:22:23",
|
||||
"created_at_iso": "2021-03-13T15:22:23-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78393,
|
||||
@@ -2044,7 +2074,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 14:50:50"
|
||||
"created_at": "2021-03-13 14:50:50",
|
||||
"created_at_iso": "2021-03-13T14:50:50-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78391,
|
||||
@@ -2098,7 +2129,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 12:35:34"
|
||||
"created_at": "2021-03-13 12:35:34",
|
||||
"created_at_iso": "2021-03-13T12:35:34-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78390,
|
||||
@@ -2144,7 +2176,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 12:11:32"
|
||||
"created_at": "2021-03-13 12:11:32",
|
||||
"created_at_iso": "2021-03-13T12:11:32-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78389,
|
||||
@@ -2190,7 +2223,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 11:43:17"
|
||||
"created_at": "2021-03-13 11:43:17",
|
||||
"created_at_iso": "2021-03-13T11:43:17-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78388,
|
||||
@@ -2336,7 +2370,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 11:37:52"
|
||||
"created_at": "2021-03-13 11:37:52",
|
||||
"created_at_iso": "2021-03-13T11:37:52-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78387,
|
||||
@@ -2390,7 +2425,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 11:24:07"
|
||||
"created_at": "2021-03-13 11:24:07",
|
||||
"created_at_iso": "2021-03-13T11:24:07-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78386,
|
||||
@@ -2436,7 +2472,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 09:18:58"
|
||||
"created_at": "2021-03-13 09:18:58",
|
||||
"created_at_iso": "2021-03-13T09:18:58-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78385,
|
||||
@@ -2622,7 +2659,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 08:57:00"
|
||||
"created_at": "2021-03-13 08:57:00",
|
||||
"created_at_iso": "2021-03-13T08:57:00-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78384,
|
||||
@@ -2808,7 +2846,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 07:51:16"
|
||||
"created_at": "2021-03-13 07:51:16",
|
||||
"created_at_iso": "2021-03-13T07:51:16-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78379,
|
||||
@@ -2854,7 +2893,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 00:49:43"
|
||||
"created_at": "2021-03-13 00:49:43",
|
||||
"created_at_iso": "2021-03-13T00:49:43-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78378,
|
||||
@@ -2972,7 +3012,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-13 00:41:28"
|
||||
"created_at": "2021-03-13 00:41:28",
|
||||
"created_at_iso": "2021-03-13T00:41:28-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78374,
|
||||
@@ -3050,7 +3091,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-12 15:14:14"
|
||||
"created_at": "2021-03-12 15:14:14",
|
||||
"created_at_iso": "2021-03-12T15:14:14-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78373,
|
||||
@@ -3212,7 +3254,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-12 14:43:58"
|
||||
"created_at": "2021-03-12 14:43:58",
|
||||
"created_at_iso": "2021-03-12T14:43:58-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78339,
|
||||
@@ -3262,7 +3305,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-11 18:48:35"
|
||||
"created_at": "2021-03-11 18:48:35",
|
||||
"created_at_iso": "2021-03-11T18:48:35-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78332,
|
||||
@@ -3303,7 +3347,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-11 13:46:59"
|
||||
"created_at": "2021-03-11 13:46:59",
|
||||
"created_at_iso": "2021-03-11T13:46:59-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78329,
|
||||
@@ -3353,7 +3398,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-11 12:31:05"
|
||||
"created_at": "2021-03-11 12:31:05",
|
||||
"created_at_iso": "2021-03-11T12:31:05-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78328,
|
||||
@@ -3394,7 +3440,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-11 12:28:38"
|
||||
"created_at": "2021-03-11 12:28:38",
|
||||
"created_at_iso": "2021-03-11T12:28:38-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78320,
|
||||
@@ -3464,7 +3511,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 20:38:19"
|
||||
"created_at": "2021-03-10 20:38:19",
|
||||
"created_at_iso": "2021-03-10T20:38:19-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78319,
|
||||
@@ -3510,7 +3558,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 19:26:47"
|
||||
"created_at": "2021-03-10 19:26:47",
|
||||
"created_at_iso": "2021-03-10T19:26:47-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78318,
|
||||
@@ -3588,7 +3637,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 18:26:23"
|
||||
"created_at": "2021-03-10 18:26:23",
|
||||
"created_at_iso": "2021-03-10T18:26:23-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78317,
|
||||
@@ -3674,7 +3724,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 16:26:24"
|
||||
"created_at": "2021-03-10 16:26:24",
|
||||
"created_at_iso": "2021-03-10T16:26:24-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78315,
|
||||
@@ -3724,7 +3775,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 13:15:55"
|
||||
"created_at": "2021-03-10 13:15:55",
|
||||
"created_at_iso": "2021-03-10T13:15:55-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78313,
|
||||
@@ -3774,7 +3826,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 11:37:21"
|
||||
"created_at": "2021-03-10 11:37:21",
|
||||
"created_at_iso": "2021-03-10T11:37:21-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78309,
|
||||
@@ -3828,7 +3881,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 06:26:47"
|
||||
"created_at": "2021-03-10 06:26:47",
|
||||
"created_at_iso": "2021-03-10T06:26:47-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78308,
|
||||
@@ -3890,7 +3944,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 06:19:15"
|
||||
"created_at": "2021-03-10 06:19:15",
|
||||
"created_at_iso": "2021-03-10T06:19:15-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78307,
|
||||
@@ -3972,7 +4027,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 06:08:57"
|
||||
"created_at": "2021-03-10 06:08:57",
|
||||
"created_at_iso": "2021-03-10T06:08:57-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78305,
|
||||
@@ -4018,7 +4074,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 04:45:48"
|
||||
"created_at": "2021-03-10 04:45:48",
|
||||
"created_at_iso": "2021-03-10T04:45:48-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78304,
|
||||
@@ -4059,7 +4116,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 04:45:25"
|
||||
"created_at": "2021-03-10 04:45:25",
|
||||
"created_at_iso": "2021-03-10T04:45:25-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78292,
|
||||
@@ -4109,7 +4167,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-10 02:20:29"
|
||||
"created_at": "2021-03-10 02:20:29",
|
||||
"created_at_iso": "2021-03-10T02:20:29-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78291,
|
||||
@@ -4159,7 +4218,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-09 21:07:52"
|
||||
"created_at": "2021-03-09 21:07:52",
|
||||
"created_at_iso": "2021-03-09T21:07:52-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78290,
|
||||
@@ -4209,7 +4269,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-09 12:35:54"
|
||||
"created_at": "2021-03-09 12:35:54",
|
||||
"created_at_iso": "2021-03-09T12:35:54-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78289,
|
||||
@@ -4259,7 +4320,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-09 11:39:51"
|
||||
"created_at": "2021-03-09 11:39:51",
|
||||
"created_at_iso": "2021-03-09T11:39:51-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78287,
|
||||
@@ -4300,7 +4362,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-09 09:12:02"
|
||||
"created_at": "2021-03-09 09:12:02",
|
||||
"created_at_iso": "2021-03-09T09:12:02-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78279,
|
||||
@@ -4346,7 +4409,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-08 11:47:40"
|
||||
"created_at": "2021-03-08 11:47:40",
|
||||
"created_at_iso": "2021-03-08T11:47:40-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78278,
|
||||
@@ -4392,7 +4456,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-08 10:31:18"
|
||||
"created_at": "2021-03-08 10:31:18",
|
||||
"created_at_iso": "2021-03-08T10:31:18-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78252,
|
||||
@@ -4442,7 +4507,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 22:14:12"
|
||||
"created_at": "2021-03-07 22:14:12",
|
||||
"created_at_iso": "2021-03-07T22:14:12-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78251,
|
||||
@@ -4488,7 +4554,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 19:17:10"
|
||||
"created_at": "2021-03-07 19:17:10",
|
||||
"created_at_iso": "2021-03-07T19:17:10-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78250,
|
||||
@@ -4534,7 +4601,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 17:45:21"
|
||||
"created_at": "2021-03-07 17:45:21",
|
||||
"created_at_iso": "2021-03-07T17:45:21-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78247,
|
||||
@@ -4580,7 +4648,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 16:30:21"
|
||||
"created_at": "2021-03-07 16:30:21",
|
||||
"created_at_iso": "2021-03-07T16:30:21-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78246,
|
||||
@@ -4726,7 +4795,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 16:06:55"
|
||||
"created_at": "2021-03-07 16:06:55",
|
||||
"created_at_iso": "2021-03-07T16:06:55-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78244,
|
||||
@@ -4780,7 +4850,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 15:33:16"
|
||||
"created_at": "2021-03-07 15:33:16",
|
||||
"created_at_iso": "2021-03-07T15:33:16-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78243,
|
||||
@@ -4830,7 +4901,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 15:27:18"
|
||||
"created_at": "2021-03-07 15:27:18",
|
||||
"created_at_iso": "2021-03-07T15:27:18-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78240,
|
||||
@@ -4876,7 +4948,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 14:26:53"
|
||||
"created_at": "2021-03-07 14:26:53",
|
||||
"created_at_iso": "2021-03-07T14:26:53-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78239,
|
||||
@@ -4922,7 +4995,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 14:21:46"
|
||||
"created_at": "2021-03-07 14:21:46",
|
||||
"created_at_iso": "2021-03-07T14:21:46-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78238,
|
||||
@@ -4968,7 +5042,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 13:32:16"
|
||||
"created_at": "2021-03-07 13:32:16",
|
||||
"created_at_iso": "2021-03-07T13:32:16-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78237,
|
||||
@@ -5014,7 +5089,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 12:49:22"
|
||||
"created_at": "2021-03-07 12:49:22",
|
||||
"created_at_iso": "2021-03-07T12:49:22-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78236,
|
||||
@@ -5060,7 +5136,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 09:58:14"
|
||||
"created_at": "2021-03-07 09:58:14",
|
||||
"created_at_iso": "2021-03-07T09:58:14-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78235,
|
||||
@@ -5110,7 +5187,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-07 06:23:54"
|
||||
"created_at": "2021-03-07 06:23:54",
|
||||
"created_at_iso": "2021-03-07T06:23:54-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78216,
|
||||
@@ -5156,7 +5234,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 15:51:20"
|
||||
"created_at": "2021-03-06 15:51:20",
|
||||
"created_at_iso": "2021-03-06T15:51:20-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78215,
|
||||
@@ -5202,7 +5281,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 14:47:47"
|
||||
"created_at": "2021-03-06 14:47:47",
|
||||
"created_at_iso": "2021-03-06T14:47:47-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78214,
|
||||
@@ -5248,7 +5328,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 14:03:22"
|
||||
"created_at": "2021-03-06 14:03:22",
|
||||
"created_at_iso": "2021-03-06T14:03:22-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78213,
|
||||
@@ -5294,7 +5375,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 13:39:59"
|
||||
"created_at": "2021-03-06 13:39:59",
|
||||
"created_at_iso": "2021-03-06T13:39:59-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78212,
|
||||
@@ -5344,7 +5426,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 12:44:05"
|
||||
"created_at": "2021-03-06 12:44:05",
|
||||
"created_at_iso": "2021-03-06T12:44:05-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78210,
|
||||
@@ -5530,7 +5613,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 11:15:35"
|
||||
"created_at": "2021-03-06 11:15:35",
|
||||
"created_at_iso": "2021-03-06T11:15:35-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78208,
|
||||
@@ -5576,7 +5660,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 10:01:38"
|
||||
"created_at": "2021-03-06 10:01:38",
|
||||
"created_at_iso": "2021-03-06T10:01:38-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78206,
|
||||
@@ -5666,7 +5751,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 07:31:39"
|
||||
"created_at": "2021-03-06 07:31:39",
|
||||
"created_at_iso": "2021-03-06T07:31:39-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78204,
|
||||
@@ -5764,7 +5850,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 02:05:40"
|
||||
"created_at": "2021-03-06 02:05:40",
|
||||
"created_at_iso": "2021-03-06T02:05:40-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78203,
|
||||
@@ -5810,7 +5897,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-06 01:01:33"
|
||||
"created_at": "2021-03-06 01:01:33",
|
||||
"created_at_iso": "2021-03-06T01:01:33-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78201,
|
||||
@@ -5860,7 +5948,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-05 21:38:15"
|
||||
"created_at": "2021-03-05 21:38:15",
|
||||
"created_at_iso": "2021-03-05T21:38:15-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78197,
|
||||
@@ -5910,7 +5999,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-05 15:09:48"
|
||||
"created_at": "2021-03-05 15:09:48",
|
||||
"created_at_iso": "2021-03-05T15:09:48-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78185,
|
||||
@@ -5956,7 +6046,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-05 09:22:10"
|
||||
"created_at": "2021-03-05 09:22:10",
|
||||
"created_at_iso": "2021-03-05T09:22:10-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78184,
|
||||
@@ -6046,7 +6137,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-05 08:09:13"
|
||||
"created_at": "2021-03-05 08:09:13",
|
||||
"created_at_iso": "2021-03-05T08:09:13-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78182,
|
||||
@@ -6092,7 +6184,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-05 06:56:38"
|
||||
"created_at": "2021-03-05 06:56:38",
|
||||
"created_at_iso": "2021-03-05T06:56:38-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78181,
|
||||
@@ -6138,7 +6231,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-05 06:55:19"
|
||||
"created_at": "2021-03-05 06:55:19",
|
||||
"created_at_iso": "2021-03-05T06:55:19-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78177,
|
||||
@@ -6184,7 +6278,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-05 05:35:07"
|
||||
"created_at": "2021-03-05 05:35:07",
|
||||
"created_at_iso": "2021-03-05T05:35:07-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78176,
|
||||
@@ -6230,7 +6325,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-05 05:26:24"
|
||||
"created_at": "2021-03-05 05:26:24",
|
||||
"created_at_iso": "2021-03-05T05:26:24-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78159,
|
||||
@@ -6271,7 +6367,8 @@
|
||||
],
|
||||
"subtitle": null,
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-04 23:08:06"
|
||||
"created_at": "2021-03-04 23:08:06",
|
||||
"created_at_iso": "2021-03-04T23:08:06-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78158,
|
||||
@@ -6409,7 +6506,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-04 21:55:45"
|
||||
"created_at": "2021-03-04 21:55:45",
|
||||
"created_at_iso": "2021-03-04T21:55:45-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78157,
|
||||
@@ -6547,7 +6645,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-04 21:32:31"
|
||||
"created_at": "2021-03-04 21:32:31",
|
||||
"created_at_iso": "2021-03-04T21:32:31-04:00"
|
||||
},
|
||||
{
|
||||
"id": 78153,
|
||||
@@ -6593,7 +6692,8 @@
|
||||
}
|
||||
],
|
||||
"music_type": null,
|
||||
"created_at": "2021-03-04 09:22:51"
|
||||
"created_at": "2021-03-04 09:22:51",
|
||||
"created_at_iso": "2021-03-04T09:22:51-04:00"
|
||||
}
|
||||
],
|
||||
"first_page_url": "https:\/\/privatehd.to\/api\/v1\/jackett\/torrents?type=1&page=1",
|
||||
|
||||
@@ -11,5 +11,6 @@
|
||||
</searching>
|
||||
<categories>
|
||||
<category id="5070" name="Anime" description="Anime" />
|
||||
<category id="2020" name="Movies/Other" description="Movies (Anime)" />
|
||||
</categories>
|
||||
</caps>
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_bypass_proxy()
|
||||
[TestCase("http://eu.httpbin.org/get")]
|
||||
[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();
|
||||
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://eu.httpbin.org/get")).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();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri(url)).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_bypass_proxy()
|
||||
[TestCase("http://bing.com/get")]
|
||||
[TestCase("http://172.3.0.1:8989/api/v3/indexer/schema")]
|
||||
public void should_not_bypass_proxy(string url)
|
||||
{
|
||||
var settings = GetProxySettings();
|
||||
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://bing.com/get")).Should().BeFalse();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.3.0.1:8989/api/v3/indexer/schema")).Should().BeFalse();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri(url)).Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -140,7 +140,7 @@ namespace NzbDrone.Core.Test.IndexerTests.BroadcastheNetTests
|
||||
query.Tvrage.Should().BeNull();
|
||||
query.Search.Should().BeNull();
|
||||
query.Category.Should().Be("Episode");
|
||||
query.Name.Should().Be("2023.01.03");
|
||||
query.Name.Should().Be("2023.01.03%");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -275,7 +275,7 @@ namespace NzbDrone.Core.Test.IndexerTests.BroadcastheNetTests
|
||||
query.Tvrage.Should().BeNull();
|
||||
query.Search.Should().Be("The%Late%Show%with%Stephen%Colbert");
|
||||
query.Category.Should().Be("Episode");
|
||||
query.Name.Should().Be("2023.01.03");
|
||||
query.Name.Should().Be("2023.01.03%");
|
||||
}
|
||||
|
||||
private static BroadcastheNetTorrentQuery ParseTorrentQueryFromRequest(HttpRequest httpRequest)
|
||||
|
||||
+6
-5
@@ -83,17 +83,18 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests
|
||||
bookCats.Should().Contain("8000");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_find_sub_categories_as_main_categories()
|
||||
[TestCase(5070)]
|
||||
[TestCase(2020)]
|
||||
public void should_find_sub_categories_as_main_categories(int category)
|
||||
{
|
||||
GivenCapsResponse(ReadAllText("Files/Indexers/Torznab/torznab_animetosho_caps.xml"));
|
||||
|
||||
var caps = Subject.GetCapabilities(_settings, _definition);
|
||||
|
||||
var bookCats = caps.Categories.MapTrackerCatToNewznab("5070");
|
||||
var indexerCategories = caps.Categories.MapTrackerCatToNewznab(category.ToString());
|
||||
|
||||
bookCats.Count.Should().Be(2);
|
||||
bookCats.First().Id.Should().Be(5070);
|
||||
indexerCategories.Count.Should().Be(2);
|
||||
indexerCategories.First().Id.Should().Be(category);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0</TargetFrameworks>
|
||||
<TargetFrameworks>net8.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Dapper" Version="2.0.151" />
|
||||
<PackageReference Include="Dapper" Version="2.1.66" />
|
||||
<PackageReference Include="NBuilder" Version="6.1.0" />
|
||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||
<PackageReference Include="YamlDotNet" Version="13.1.1" />
|
||||
<PackageReference Include="YamlDotNet" Version="16.3.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\NzbDrone.Test.Common\Prowlarr.Test.Common.csproj" />
|
||||
|
||||
@@ -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 && !indexerCapabilities.SearchAvailable)
|
||||
{
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing movie 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;
|
||||
}
|
||||
@@ -176,7 +183,8 @@ namespace NzbDrone.Core.Applications.Radarr
|
||||
|
||||
if (!radarrIndexer.Equals(remoteIndexer) || forceSync)
|
||||
{
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
if ((indexerCapabilities.MovieSearchAvailable || indexerCapabilities.SearchAvailable) &&
|
||||
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 +210,8 @@ namespace NzbDrone.Core.Applications.Radarr
|
||||
{
|
||||
_appIndexerMapService.Delete(indexerMapping.Id);
|
||||
|
||||
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
|
||||
if ((indexerCapabilities.MovieSearchAvailable || indexerCapabilities.SearchAvailable) &&
|
||||
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 && !indexerCapabilities.SearchAvailable)
|
||||
{
|
||||
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing TV or basic 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,8 @@ 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.SearchAvailable) &&
|
||||
(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 +218,8 @@ 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.SearchAvailable) &&
|
||||
(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;
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
using System;
|
||||
|
||||
namespace NzbDrone.Core.Authentication
|
||||
{
|
||||
public enum AuthenticationType
|
||||
{
|
||||
None = 0,
|
||||
[Obsolete("Use Forms authentication instead")]
|
||||
Basic = 1,
|
||||
Forms = 2,
|
||||
External = 3
|
||||
|
||||
@@ -207,13 +207,24 @@ namespace NzbDrone.Core.Configuration
|
||||
|
||||
if (enabled)
|
||||
{
|
||||
SetValue("AuthenticationMethod", AuthenticationType.Basic);
|
||||
return AuthenticationType.Basic;
|
||||
SetValue("AuthenticationMethod", AuthenticationType.Forms);
|
||||
return AuthenticationType.Forms;
|
||||
}
|
||||
|
||||
return Enum.TryParse<AuthenticationType>(_authOptions.Method, out var enumValue)
|
||||
var value = Enum.TryParse<AuthenticationType>(_authOptions.Method, out var enumValue)
|
||||
? enumValue
|
||||
: GetValueEnum("AuthenticationMethod", AuthenticationType.None);
|
||||
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
if (value == AuthenticationType.Basic)
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
{
|
||||
SetValue("AuthenticationMethod", AuthenticationType.Forms);
|
||||
|
||||
return AuthenticationType.Forms;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -389,6 +400,12 @@ namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
SetValue("EnableSsl", false);
|
||||
}
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
if (AuthenticationMethod == AuthenticationType.Basic)
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
{
|
||||
SetValue("AuthenticationMethod", AuthenticationType.Forms);
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteOldValues()
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SQLite;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using Dapper;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Instrumentation;
|
||||
using NzbDrone.Core.Datastore.Events;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using Polly;
|
||||
using Polly.Retry;
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
@@ -40,12 +45,31 @@ namespace NzbDrone.Core.Datastore
|
||||
public class BasicRepository<TModel> : IBasicRepository<TModel>
|
||||
where TModel : ModelBase, new()
|
||||
{
|
||||
private static readonly ILogger Logger = NzbDroneLogger.GetLogger(typeof(BasicRepository<TModel>));
|
||||
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly PropertyInfo _keyProperty;
|
||||
private readonly List<PropertyInfo> _properties;
|
||||
private readonly string _updateSql;
|
||||
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 string _table;
|
||||
|
||||
@@ -186,7 +210,9 @@ namespace NzbDrone.Core.Datastore
|
||||
private TModel Insert(IDbConnection connection, IDbTransaction transaction, TModel 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 id = (int)(multiRead.First().id ?? multiRead.First().Id);
|
||||
_keyProperty.SetValue(model, id);
|
||||
@@ -383,7 +409,7 @@ namespace NzbDrone.Core.Datastore
|
||||
|
||||
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)
|
||||
@@ -395,7 +421,7 @@ namespace NzbDrone.Core.Datastore
|
||||
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();
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace NzbDrone.Core.Datastore
|
||||
switch (expression.NodeType)
|
||||
{
|
||||
case ExpressionType.Lambda:
|
||||
return VisitLamda((LambdaExpression)expression);
|
||||
return VisitLambda((LambdaExpression)expression);
|
||||
case ExpressionType.ArrayLength:
|
||||
case ExpressionType.Convert:
|
||||
case ExpressionType.ConvertChecked:
|
||||
@@ -87,7 +87,7 @@ namespace NzbDrone.Core.Datastore
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Visits the memeber access expression. To be implemented by user.
|
||||
/// Visits the member access expression. To be implemented by user.
|
||||
/// </summary>
|
||||
/// <param name="expression"></param>
|
||||
/// <returns></returns>
|
||||
@@ -130,11 +130,11 @@ namespace NzbDrone.Core.Datastore
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Visits the lamda expression.
|
||||
/// Visits the lambda expression.
|
||||
/// </summary>
|
||||
/// <param name="lambdaExpression"></param>
|
||||
/// <returns></returns>
|
||||
protected virtual Expression VisitLamda(LambdaExpression lambdaExpression)
|
||||
protected virtual Expression VisitLambda(LambdaExpression lambdaExpression)
|
||||
{
|
||||
Visit(lambdaExpression.Body);
|
||||
return lambdaExpression;
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
using System.Data;
|
||||
using Dapper;
|
||||
using FluentMigrator;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(043)]
|
||||
public class newznab_indexers_enable_redirect : NzbDroneMigrationBase
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Execute.WithConnection(UpdateNewznabRedirectSetting);
|
||||
}
|
||||
|
||||
private void UpdateNewznabRedirectSetting(IDbConnection conn, IDbTransaction tran)
|
||||
{
|
||||
var updateSql = "UPDATE \"Indexers\" SET \"Redirect\" = @Redirect WHERE \"Implementation\" = 'Newznab' AND \"Redirect\" = false";
|
||||
conn.Execute(updateSql, new { Redirect = true }, transaction: tran);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -424,8 +424,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
}
|
||||
catch (HttpException ex)
|
||||
{
|
||||
_logger.Debug("qbitTorrent authentication failed.");
|
||||
if (ex.Response.StatusCode == HttpStatusCode.Forbidden)
|
||||
_logger.Debug(ex, "qbitTorrent authentication failed.");
|
||||
if (ex.Response.StatusCode is HttpStatusCode.Unauthorized or HttpStatusCode.Forbidden)
|
||||
{
|
||||
throw new DownloadClientAuthenticationException("Failed to authenticate with qBittorrent.", ex);
|
||||
}
|
||||
@@ -437,9 +437,9 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
throw new DownloadClientUnavailableException("Failed to connect to qBittorrent, please check your settings.", ex);
|
||||
}
|
||||
|
||||
if (response.Content != "Ok.")
|
||||
{
|
||||
// returns "Fails." on bad login
|
||||
if (response.Content.IsNotNullOrWhiteSpace() && response.Content != "Ok.")
|
||||
{
|
||||
_logger.Debug("qbitTorrent authentication failed.");
|
||||
throw new DownloadClientAuthenticationException("Failed to authenticate with qBittorrent.");
|
||||
}
|
||||
|
||||
@@ -237,13 +237,13 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
return _categories.MapTrackerCatDescToNewznab("OVA/ONA/Special");
|
||||
}
|
||||
|
||||
// Check movies then, cause some of releases could be movies dorama and should go to movies category
|
||||
// Check movies then, cause some of the releases could be movies dorama and should go to movies category
|
||||
if (CategorieMovieRegex.IsMatch(rName) || CategorieMovieRegex.IsMatch(rDesc))
|
||||
{
|
||||
return _categories.MapTrackerCatDescToNewznab("Movies");
|
||||
}
|
||||
|
||||
// Check dorama. Most of doramas are flaged as doramas in type info, but type info could have a lot of types at same time (movie, etc)
|
||||
// Check dorama. Most of doramas are flagged as doramas in type info, but type info could have a lot of types at same time (movie, etc)
|
||||
if (CategorieDoramaRegex.IsMatch(rName) || CategorieDoramaRegex.IsMatch(type))
|
||||
{
|
||||
return _categories.MapTrackerCatDescToNewznab("Dorama");
|
||||
|
||||
@@ -37,11 +37,6 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
};
|
||||
}
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
{
|
||||
return new AvistaZParser();
|
||||
}
|
||||
|
||||
protected override IndexerCapabilities SetCapabilities()
|
||||
{
|
||||
var caps = new IndexerCapabilities
|
||||
@@ -81,9 +76,4 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
: $"{searchCriteria.EpisodeSearchString}";
|
||||
}
|
||||
}
|
||||
|
||||
public class AvistaZParser : AvistazParserBase
|
||||
{
|
||||
protected override string TimezoneOffset => "+02:00";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,9 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
[JsonPropertyName("created_at")]
|
||||
public string CreatedAt { get; set; }
|
||||
|
||||
[JsonPropertyName("created_at_iso")]
|
||||
public string CreatedAtIso { get; set; }
|
||||
|
||||
[JsonPropertyName("file_name")]
|
||||
public string FileName { get; set; }
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
{
|
||||
public class AvistazParserBase : IParseIndexerResponse
|
||||
{
|
||||
protected virtual string TimezoneOffset => "-04:00"; // Avistaz does not specify a timezone & returns server time
|
||||
private readonly HashSet<string> _hdResolutions = new() { "1080p", "1080i", "720p" };
|
||||
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
@@ -66,7 +65,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
InfoUrl = details,
|
||||
Guid = details,
|
||||
Categories = cats,
|
||||
PublishDate = DateTime.Parse($"{row.CreatedAt} {TimezoneOffset}", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
|
||||
PublishDate = DateTime.Parse(row.CreatedAtIso, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
|
||||
Size = row.FileSize,
|
||||
Files = row.FileCount,
|
||||
Grabs = row.Completed,
|
||||
|
||||
@@ -255,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}");
|
||||
|
||||
+1
-1
@@ -74,7 +74,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||
else if (DateTime.TryParseExact($"{searchCriteria.Season} {searchCriteria.Episode}", "yyyy MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var showDate))
|
||||
{
|
||||
// Daily Episode
|
||||
parameters.Name = showDate.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture);
|
||||
parameters.Name = showDate.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture) + "%";
|
||||
parameters.Category = "Episode";
|
||||
pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset));
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers.Definitions.Gazelle;
|
||||
@@ -5,6 +6,7 @@ using NzbDrone.Core.Messaging.Events;
|
||||
|
||||
namespace NzbDrone.Core.Indexers.Definitions;
|
||||
|
||||
[Obsolete("Moved to YML for Cardigann")]
|
||||
public class CGPeers : GazelleBase<GazelleSettings>
|
||||
{
|
||||
public override string Name => "CGPeers";
|
||||
|
||||
@@ -710,15 +710,15 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
var diacriticsOp = (string)filter.Args;
|
||||
if (diacriticsOp == "replace")
|
||||
{
|
||||
// Should replace diacritics charcaters with their base character
|
||||
// Should replace diacritics characters with their base character
|
||||
// It's not perfect, e.g. "ŠĐĆŽ - šđčćž" becomes "SĐCZ-sđccz"
|
||||
var stFormD = data.Normalize(NormalizationForm.FormD);
|
||||
var len = stFormD.Length;
|
||||
var sb = new StringBuilder();
|
||||
for (var i = 0; i < len; i++)
|
||||
{
|
||||
var uc = System.Globalization.CharUnicodeInfo.GetUnicodeCategory(stFormD[i]);
|
||||
if (uc != System.Globalization.UnicodeCategory.NonSpacingMark)
|
||||
var uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[i]);
|
||||
if (uc != UnicodeCategory.NonSpacingMark)
|
||||
{
|
||||
sb.Append(stFormD[i]);
|
||||
}
|
||||
@@ -779,7 +779,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
return headers;
|
||||
}
|
||||
|
||||
// FIXME: fix jackett header handling (allow it to specifiy the same header multipe times)
|
||||
// FIXME: fix jackett header handling (allow it to specify the same header multiple times)
|
||||
foreach (var header in customHeaders)
|
||||
{
|
||||
headers.Add(header.Key, ApplyGoTemplateText(header.Value[0], variables));
|
||||
|
||||
@@ -426,6 +426,12 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
{
|
||||
((TorrentInfo)c).InfoHash = MagnetLinkBuilder.GetInfoHashFromMagnet(((TorrentInfo)c).MagnetUrl);
|
||||
}
|
||||
|
||||
// Add Internal flag if description starts with Internal
|
||||
if (c.Description.IsNotNullOrWhiteSpace() && c.Description.StartsWith("Internal"))
|
||||
{
|
||||
c.IndexerFlags.Add(IndexerFlag.Internal);
|
||||
}
|
||||
});
|
||||
|
||||
_logger.Trace("Cardigann ({0}): Got {1} releases", _definition.Id, releases.Count);
|
||||
|
||||
@@ -1203,7 +1203,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
Encoding = _encoding
|
||||
};
|
||||
|
||||
// Add FormData for searchs that POST
|
||||
// Add FormData for searches that POST
|
||||
if (method == HttpMethod.Post)
|
||||
{
|
||||
foreach (var param in queryCollection)
|
||||
|
||||
@@ -54,8 +54,6 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
private readonly IndexerCapabilitiesCategories _categories;
|
||||
|
||||
protected override string TimezoneOffset => "+02:00";
|
||||
|
||||
public ExoticaZParser(IndexerCapabilitiesCategories categories)
|
||||
{
|
||||
_categories = categories;
|
||||
|
||||
@@ -11,10 +11,17 @@ namespace NzbDrone.Core.Indexers.Definitions.FileList;
|
||||
public class FileList : TorrentIndexerBase<FileListSettings>
|
||||
{
|
||||
public override string Name => "FileList.io";
|
||||
public override string[] IndexerUrls => new[] { "https://filelist.io/" };
|
||||
public override string[] IndexerUrls => new[]
|
||||
{
|
||||
"https://filelist.io/",
|
||||
"https://thefl.org/",
|
||||
};
|
||||
public override string[] LegacyUrls => new[]
|
||||
{
|
||||
"https://filelist.io",
|
||||
"https://filelist.ro/",
|
||||
"http://filelist.ro/",
|
||||
"http://flro.org/",
|
||||
"https://flro.org/"
|
||||
};
|
||||
public override string Description => "FileList (FL) is a ROMANIAN Private Torrent Tracker for 0DAY / GENERAL";
|
||||
@@ -105,6 +112,7 @@ public class FileList : TorrentIndexerBase<FileListSettings>
|
||||
caps.Categories.AddCategoryMapping(27, NewznabStandardCategory.TVUHD, "Seriale 4K");
|
||||
caps.Categories.AddCategoryMapping(28, NewznabStandardCategory.MoviesForeign, "RO Dubbed");
|
||||
caps.Categories.AddCategoryMapping(28, NewznabStandardCategory.TVForeign, "RO Dubbed");
|
||||
caps.Categories.AddCategoryMapping(31, NewznabStandardCategory.TVForeign, "K-Drama");
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
yield return GetDefinition("Miatrix", GetSettings("https://www.miatrix.com"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("Newz69", GetSettings("https://newz69.keagaming.com"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("NinjaCentral", GetSettings("https://ninjacentral.co.za"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("Nzb.su", GetSettings("https://api.nzb.su"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("Nzb.life", GetSettings("https://api.nzb.life"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("NZBCat", GetSettings("https://nzb.cat"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000 });
|
||||
yield return GetDefinition("NZBFinder", GetSettings("https://nzbfinder.ws"), categories: new[] { 2000, 3000, 5000, 6000, 7000 });
|
||||
yield return GetDefinition("NZBgeek", GetSettings("https://api.nzbgeek.info"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
|
||||
@@ -224,24 +224,28 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
foreach (var xmlCategory in xmlCategories.Elements("category"))
|
||||
{
|
||||
var parentName = xmlCategory.Attribute("name").Value;
|
||||
var parentNameLower = parentName?.ToLowerInvariant();
|
||||
var parentId = int.Parse(xmlCategory.Attribute("id").Value);
|
||||
|
||||
var mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => parentNameLower.Contains(x.Name.ToLower()));
|
||||
var mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => parentName.Equals(x.Name, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (mappedCat == null)
|
||||
if (mappedCat is null)
|
||||
{
|
||||
// Try to find name and Id in AllCats for sub cats that are mapped as parents
|
||||
mappedCat = NewznabStandardCategory.AllCats.FirstOrDefault(x => x.Id == parentId && x.Name.ToLower().Contains(parentNameLower));
|
||||
// Try to find name and ID in AllCats for sub cats that are mapped as parents
|
||||
mappedCat = NewznabStandardCategory.AllCats.FirstOrDefault(x => x.Id == parentId && x.Name.Contains(parentName, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
if (mappedCat == null)
|
||||
if (mappedCat is null)
|
||||
{
|
||||
mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => parentName.Contains(x.Name, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
if (mappedCat is null)
|
||||
{
|
||||
// Try by parent id if name fails
|
||||
mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => x.Id == parentId);
|
||||
}
|
||||
|
||||
if (mappedCat == null)
|
||||
if (mappedCat is null)
|
||||
{
|
||||
// Fallback to Other
|
||||
mappedCat = NewznabStandardCategory.Other;
|
||||
|
||||
@@ -9,10 +9,10 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
{
|
||||
public class NewznabSettingsValidator : AbstractValidator<NewznabSettings>
|
||||
{
|
||||
private static readonly string[] ApiKeyWhiteList =
|
||||
private static readonly string[] ApiKeyAllowList =
|
||||
{
|
||||
"nzbs.org",
|
||||
"nzb.su",
|
||||
"nzb.life",
|
||||
"dognzb.cr",
|
||||
"nzbplanet.net",
|
||||
"nzbid.org",
|
||||
@@ -22,7 +22,7 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
|
||||
private static bool ShouldHaveApiKey(NewznabSettings settings)
|
||||
{
|
||||
return settings.BaseUrl != null && ApiKeyWhiteList.Any(c => settings.BaseUrl.ToLowerInvariant().Contains(c));
|
||||
return settings.BaseUrl != null && ApiKeyAllowList.Any(c => settings.BaseUrl.ToLowerInvariant().Contains(c));
|
||||
}
|
||||
|
||||
private static readonly Regex AdditionalParametersRegex = new Regex(@"(&.+?\=.+?)+", RegexOptions.Compiled);
|
||||
|
||||
@@ -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()
|
||||
@@ -59,7 +73,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
|
||||
caps.Categories.AddCategoryMapping(1, NewznabStandardCategory.Movies, "Feature Film");
|
||||
caps.Categories.AddCategoryMapping(2, NewznabStandardCategory.Movies, "Short Film");
|
||||
caps.Categories.AddCategoryMapping(3, NewznabStandardCategory.TV, "Miniseries");
|
||||
caps.Categories.AddCategoryMapping(3, NewznabStandardCategory.Movies, "Miniseries");
|
||||
caps.Categories.AddCategoryMapping(4, NewznabStandardCategory.Movies, "Stand-up Comedy");
|
||||
caps.Categories.AddCategoryMapping(5, NewznabStandardCategory.Movies, "Live Performance");
|
||||
caps.Categories.AddCategoryMapping(6, NewznabStandardCategory.Movies, "Movie Collection");
|
||||
|
||||
@@ -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,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
@@ -13,10 +14,12 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
public class PassThePopcornParser : IParseIndexerResponse
|
||||
{
|
||||
private readonly PassThePopcornSettings _settings;
|
||||
private readonly IndexerCapabilitiesCategories _categories;
|
||||
|
||||
public PassThePopcornParser(PassThePopcornSettings settings)
|
||||
public PassThePopcornParser(PassThePopcornSettings settings, IndexerCapabilitiesCategories categories)
|
||||
{
|
||||
_settings = settings;
|
||||
_categories = categories;
|
||||
}
|
||||
|
||||
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
|
||||
@@ -32,6 +35,16 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
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");
|
||||
}
|
||||
|
||||
@@ -93,8 +106,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 = new List<IndexerCategory> { NewznabStandardCategory.Movies },
|
||||
DownloadUrl = GetDownloadUrl(id),
|
||||
Categories = _categories.MapTrackerCatToNewznab(result.CategoryId),
|
||||
Size = long.Parse(torrent.Size),
|
||||
Grabs = int.Parse(torrent.Snatched),
|
||||
Seeders = int.Parse(torrent.Seeders),
|
||||
@@ -107,7 +120,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
UploadVolumeFactor = uploadVolumeFactor,
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 345600,
|
||||
Genres = result.Tags ?? new List<string>(),
|
||||
Genres = result.Tags?.ToList() ?? new List<string>(),
|
||||
PosterUrl = GetPosterUrl(result.Cover)
|
||||
});
|
||||
}
|
||||
@@ -118,14 +131,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;
|
||||
}
|
||||
|
||||
+4
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
@@ -78,6 +79,8 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
{ "action", "advanced" },
|
||||
{ "json", "noredirect" },
|
||||
{ "grouping", "0" },
|
||||
{ "order_by", "time" },
|
||||
{ "order_way", "desc" },
|
||||
{ "searchstr", searchTerm }
|
||||
};
|
||||
|
||||
@@ -113,6 +116,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
var request = new IndexerRequest(searchUrl, HttpAccept.Json);
|
||||
request.HttpRequest.Headers.Add("ApiUser", _settings.APIUser);
|
||||
request.HttpRequest.Headers.Add("ApiKey", _settings.APIKey);
|
||||
request.HttpRequest.SuppressHttpErrorStatusCodes = new[] { HttpStatusCode.TooManyRequests };
|
||||
|
||||
yield return request;
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
@@ -23,7 +23,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
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";
|
||||
private string LoginUrl => Settings.BaseUrl + "takelogin.php";
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
||||
|
||||
@@ -1541,7 +1541,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
if (season != 0)
|
||||
{
|
||||
searchString += " Сезон: " + season;
|
||||
searchString += " ТВ | Сезон: " + season;
|
||||
}
|
||||
|
||||
parameters.Set("nm", searchString);
|
||||
@@ -1712,6 +1712,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
private readonly Regex _tvTitleRusSeasonRegex = new(@"Сезон\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleRusEpisodeOfRegex = new(@"(?:Серии|Эпизод|Выпуски)+\s*[:]*\s+(\d+(?:-\d+)?)\s*из\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleRusEpisodeRegex = new(@"(?:Серии|Эпизод|Выпуски)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleRusSeasonAnimeRegex = new(@"ТВ[-]*(?:(\d+))", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleRusEpisodeAnimeOfRegex = new(@"\[(\d+(\+\d+)?)\s+из\s+(\d+(\+\d+)?)\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
public string Parse(string title,
|
||||
ICollection<IndexerCategory> categories,
|
||||
@@ -1736,6 +1738,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
title = _tvTitleRusSeasonRegex.Replace(title, "S$1");
|
||||
title = _tvTitleRusEpisodeOfRegex.Replace(title, "E$1 of $2");
|
||||
title = _tvTitleRusEpisodeRegex.Replace(title, "E$1");
|
||||
title = _tvTitleRusSeasonAnimeRegex.Replace(title, "S$1");
|
||||
title = _tvTitleRusEpisodeAnimeOfRegex.Replace(title, "E$1 of $3");
|
||||
}
|
||||
else if (IsAnyMovieCategory(categories))
|
||||
{
|
||||
@@ -1749,7 +1753,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
// rutracker movies titles look like: russian name / english name (russian director / english director) other stuff
|
||||
// Ирландец / The Irishman (Мартин Скорсезе / Martin Scorsese) [2019, США, криминал, драма, биография, WEB-DL 1080p] Dub (Пифагор) + MVO (Jaskier) + AVO (Юрий Сербин) + Sub Rus, Eng + Original Eng
|
||||
// this part should be removed: (Мартин Скорсезе / Martin Scorsese)
|
||||
title = Regex.Replace(title, @"(\([\p{IsCyrillic}\W]+)\s/\s(.+?)\)", string.Empty, RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
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(@"((?:\dx\s)?(?:[A-Z])?VO\s\(.+?\))");
|
||||
|
||||
@@ -27,7 +27,8 @@ namespace NzbDrone.Core.Indexers.Definitions;
|
||||
public class Shazbat : TorrentIndexerBase<ShazbatSettings>
|
||||
{
|
||||
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 Language => "en-US";
|
||||
public override Encoding Encoding => Encoding.UTF8;
|
||||
|
||||
@@ -448,11 +448,11 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
private readonly Regex _tvTitleMultipleSeasonsRegex = new(@"(?:Сезон|Seasons?)\s*[:]*\s+(\d+-\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
private readonly Regex _tvTitleUkrSeasonEpisodeOfRegex = new (@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrSeasonEpisodeRegex = new (@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrSeasonEpisodeOfRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrSeasonEpisodeRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrSeasonRegex = new(@"Сезон\s*[:]*\s+(\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrEpisodeOfRegex = new (@"(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrEpisodeRegex = new (@"(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrEpisodeOfRegex = new(@"(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrEpisodeRegex = new(@"(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
private readonly Regex _tvTitleEngSeasonEpisodeOfRegex = new(@"Season\s*[:]*\s+(\d+).+(?:Episodes?)+\s*[:]*\s+(\d+(?:-\d+)?)\s*of\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleEngSeasonEpisodeRegex = new(@"Season\s*[:]*\s+(\d+).+(?:Episodes?)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
@@ -506,7 +506,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
title = Regex.Replace(title, @"[\[\(]\s*[\)\]]", "", RegexOptions.Compiled);
|
||||
|
||||
title = title.Trim(' ', '&', ',', '.', '!', '?', '+', '-', '_', '|', '/', '\\', ':');
|
||||
title = title.Trim(' ', '&', ',', '.', '!', '?', '+', '-', '_', '|', '/', '\\', ':', ';', 'ʼ', '`');
|
||||
|
||||
// replace multiple spaces with a single space
|
||||
title = Regex.Replace(title, @"\s+", " ");
|
||||
@@ -521,7 +521,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
private static string MoveFirstTagsToEndOfReleaseTitle(string input)
|
||||
{
|
||||
var output = input;
|
||||
var output = input.Trim(' ', '&', ',', '.', '!', '?', '+', '-', '_', '|', '/', '\\', ':', ';', 'ʼ', '`');
|
||||
foreach (var findTagsRegex in FindTagsInTitlesRegexList)
|
||||
{
|
||||
var expectedIndex = 0;
|
||||
|
||||
@@ -138,7 +138,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(searchString))
|
||||
{
|
||||
// Suffix the first occurence of `s01` surrounded by whitespace with *
|
||||
// Suffix the first occurrence of `s01` surrounded by whitespace with *
|
||||
// That way we also search for single episodes in a whole season search
|
||||
var regex = new Regex(@"(^|\s)(s\d{2})(\s|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
queryCollection.Add("searchstring", regex.Replace(searchString.Trim(), @"$1$2*$3"));
|
||||
|
||||
@@ -11,11 +11,11 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
{
|
||||
public class TorznabSettingsValidator : AbstractValidator<TorznabSettings>
|
||||
{
|
||||
private static readonly string[] ApiKeyWhiteList = Array.Empty<string>();
|
||||
private static readonly string[] ApiKeyAllowList = Array.Empty<string>();
|
||||
|
||||
private static bool ShouldHaveApiKey(TorznabSettings settings)
|
||||
{
|
||||
return settings.BaseUrl != null && ApiKeyWhiteList.Any(c => settings.BaseUrl.ToLowerInvariant().Contains(c));
|
||||
return settings.BaseUrl != null && ApiKeyAllowList.Any(c => settings.BaseUrl.ToLowerInvariant().Contains(c));
|
||||
}
|
||||
|
||||
private static readonly Regex AdditionalParametersRegex = new Regex(@"(&.+?\=.+?)+", RegexOptions.Compiled);
|
||||
|
||||
@@ -121,53 +121,49 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
|
||||
caps.Categories.AddCategoryMapping(112, NewznabStandardCategory.MoviesOther, "Anime Movies");
|
||||
caps.Categories.AddCategoryMapping(111, NewznabStandardCategory.MoviesOther, "Anime TV");
|
||||
caps.Categories.AddCategoryMapping(150, NewznabStandardCategory.PC, "Apps");
|
||||
caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.TV, "AV1");
|
||||
caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.Movies, "AV1");
|
||||
caps.Categories.AddCategoryMapping(159, NewznabStandardCategory.Movies, "Movie Boxsets AV1");
|
||||
caps.Categories.AddCategoryMapping(158, NewznabStandardCategory.Movies, "Movies AV1");
|
||||
caps.Categories.AddCategoryMapping(157, NewznabStandardCategory.TV, "TV AV1");
|
||||
caps.Categories.AddCategoryMapping(160, NewznabStandardCategory.TV, "TV Boxsets AV1");
|
||||
caps.Categories.AddCategoryMapping(153, NewznabStandardCategory.Books, "Books");
|
||||
caps.Categories.AddCategoryMapping(154, NewznabStandardCategory.AudioAudiobook, "Audiobooks");
|
||||
caps.Categories.AddCategoryMapping(155, NewznabStandardCategory.Books, "Books & Magazines");
|
||||
caps.Categories.AddCategoryMapping(154, NewznabStandardCategory.AudioAudiobook, "Books Audiobooks");
|
||||
caps.Categories.AddCategoryMapping(155, NewznabStandardCategory.Books, "Books eBooks & Magazines");
|
||||
caps.Categories.AddCategoryMapping(68, NewznabStandardCategory.MoviesOther, "Cams/TS");
|
||||
caps.Categories.AddCategoryMapping(140, NewznabStandardCategory.TVDocumentary, "Documentary");
|
||||
caps.Categories.AddCategoryMapping(10, NewznabStandardCategory.MoviesDVD, "DVDR");
|
||||
caps.Categories.AddCategoryMapping(109, NewznabStandardCategory.MoviesBluRay, "Bluray Disc");
|
||||
caps.Categories.AddCategoryMapping(109, NewznabStandardCategory.MoviesBluRay, "DVDR Bluray Disc");
|
||||
caps.Categories.AddCategoryMapping(131, NewznabStandardCategory.TVSport, "Fighting");
|
||||
caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.TVSport, "Fighting/Boxing");
|
||||
caps.Categories.AddCategoryMapping(133, NewznabStandardCategory.TVSport, "Fighting/MMA");
|
||||
caps.Categories.AddCategoryMapping(132, NewznabStandardCategory.TVSport, "Fighting/Wrestling");
|
||||
caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.TVSport, "Fighting Boxing");
|
||||
caps.Categories.AddCategoryMapping(133, NewznabStandardCategory.TVSport, "Fighting MMA");
|
||||
caps.Categories.AddCategoryMapping(132, NewznabStandardCategory.TVSport, "Fighting Wrestling");
|
||||
caps.Categories.AddCategoryMapping(72, NewznabStandardCategory.MoviesForeign, "Foreign");
|
||||
caps.Categories.AddCategoryMapping(116, NewznabStandardCategory.TVForeign, "Foreign Boxsets");
|
||||
caps.Categories.AddCategoryMapping(114, NewznabStandardCategory.MoviesForeign, "Foreign Movies");
|
||||
caps.Categories.AddCategoryMapping(115, NewznabStandardCategory.TVForeign, "Foreign TV");
|
||||
caps.Categories.AddCategoryMapping(103, NewznabStandardCategory.ConsoleOther, "Games Console");
|
||||
caps.Categories.AddCategoryMapping(105, NewznabStandardCategory.ConsoleOther, "Games Console/Nintendo");
|
||||
caps.Categories.AddCategoryMapping(104, NewznabStandardCategory.ConsolePS4, "Games Console/Playstation");
|
||||
caps.Categories.AddCategoryMapping(106, NewznabStandardCategory.ConsoleXBox, "Games Console/XBOX");
|
||||
caps.Categories.AddCategoryMapping(105, NewznabStandardCategory.ConsoleOther, "Games Console Nintendo");
|
||||
caps.Categories.AddCategoryMapping(104, NewznabStandardCategory.ConsolePS4, "Games Console Playstation");
|
||||
caps.Categories.AddCategoryMapping(106, NewznabStandardCategory.ConsoleXBox, "Games Console XBOX");
|
||||
caps.Categories.AddCategoryMapping(6, NewznabStandardCategory.PCGames, "Games PC");
|
||||
caps.Categories.AddCategoryMapping(108, NewznabStandardCategory.PC, "Games PC/Linux");
|
||||
caps.Categories.AddCategoryMapping(107, NewznabStandardCategory.PCMac, "Games PC/Mac");
|
||||
caps.Categories.AddCategoryMapping(108, NewznabStandardCategory.PC, "Games PC Linux");
|
||||
caps.Categories.AddCategoryMapping(107, NewznabStandardCategory.PCMac, "Games PC Mac");
|
||||
caps.Categories.AddCategoryMapping(11, NewznabStandardCategory.Movies, "Movie Boxsets");
|
||||
caps.Categories.AddCategoryMapping(118, NewznabStandardCategory.MoviesUHD, "Movie Boxsets/Boxset 4K");
|
||||
caps.Categories.AddCategoryMapping(143, NewznabStandardCategory.MoviesHD, "Movie Boxsets/Boxset HD");
|
||||
caps.Categories.AddCategoryMapping(119, NewznabStandardCategory.MoviesHD, "Movie Boxsets/Boxset HEVC");
|
||||
caps.Categories.AddCategoryMapping(144, NewznabStandardCategory.MoviesSD, "Movie Boxsets/Boxset SD");
|
||||
caps.Categories.AddCategoryMapping(118, NewznabStandardCategory.MoviesUHD, "Movie Boxsets 4K");
|
||||
caps.Categories.AddCategoryMapping(162, NewznabStandardCategory.MoviesHD, "Movie Boxsets AV1");
|
||||
caps.Categories.AddCategoryMapping(143, NewznabStandardCategory.MoviesHD, "Movie Boxsets HD");
|
||||
caps.Categories.AddCategoryMapping(119, NewznabStandardCategory.MoviesHD, "Movie Boxsets HEVC");
|
||||
caps.Categories.AddCategoryMapping(144, NewznabStandardCategory.MoviesSD, "Movie Boxsets SD");
|
||||
caps.Categories.AddCategoryMapping(12, NewznabStandardCategory.Movies, "Movies");
|
||||
caps.Categories.AddCategoryMapping(117, NewznabStandardCategory.MoviesUHD, "Movies 4K");
|
||||
caps.Categories.AddCategoryMapping(163, NewznabStandardCategory.MoviesHD, "Movies AV1");
|
||||
caps.Categories.AddCategoryMapping(145, NewznabStandardCategory.MoviesHD, "Movies HD");
|
||||
caps.Categories.AddCategoryMapping(100, NewznabStandardCategory.MoviesHD, "Movies HEVC");
|
||||
caps.Categories.AddCategoryMapping(146, NewznabStandardCategory.MoviesSD, "Movies SD");
|
||||
caps.Categories.AddCategoryMapping(13, NewznabStandardCategory.Audio, "Music");
|
||||
caps.Categories.AddCategoryMapping(135, NewznabStandardCategory.AudioLossless, "Music/FLAC");
|
||||
caps.Categories.AddCategoryMapping(151, NewznabStandardCategory.Audio, "Karaoke");
|
||||
caps.Categories.AddCategoryMapping(135, NewznabStandardCategory.AudioLossless, "Music FLAC");
|
||||
caps.Categories.AddCategoryMapping(151, NewznabStandardCategory.Audio, "Music Karaoke");
|
||||
caps.Categories.AddCategoryMapping(136, NewznabStandardCategory.Audio, "Music Boxset");
|
||||
caps.Categories.AddCategoryMapping(148, NewznabStandardCategory.AudioVideo, "Music Videos");
|
||||
caps.Categories.AddCategoryMapping(9, NewznabStandardCategory.Other, "Other");
|
||||
caps.Categories.AddCategoryMapping(125, NewznabStandardCategory.Other, "Other/Pictures");
|
||||
caps.Categories.AddCategoryMapping(54, NewznabStandardCategory.TVOther, "Soaps");
|
||||
caps.Categories.AddCategoryMapping(83, NewznabStandardCategory.TVOther, "Specials");
|
||||
caps.Categories.AddCategoryMapping(125, NewznabStandardCategory.Other, "Other Pictures");
|
||||
caps.Categories.AddCategoryMapping(54, NewznabStandardCategory.TVOther, "Other Soaps");
|
||||
caps.Categories.AddCategoryMapping(83, NewznabStandardCategory.TVOther, "Other Specials");
|
||||
caps.Categories.AddCategoryMapping(139, NewznabStandardCategory.TV, "TOTM (Freeleech)");
|
||||
caps.Categories.AddCategoryMapping(138, NewznabStandardCategory.TV, "TOTW (x2 upload)");
|
||||
caps.Categories.AddCategoryMapping(139, NewznabStandardCategory.Movies, "TOTM (Freeleech)");
|
||||
@@ -177,16 +173,18 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
|
||||
caps.Categories.AddCategoryMapping(86, NewznabStandardCategory.TVSport, "Sports/MotorSports");
|
||||
caps.Categories.AddCategoryMapping(89, NewznabStandardCategory.TVSport, "Sports/Olympics");
|
||||
caps.Categories.AddCategoryMapping(126, NewznabStandardCategory.TV, "TV");
|
||||
caps.Categories.AddCategoryMapping(149, NewznabStandardCategory.TV, "TV Specials");
|
||||
caps.Categories.AddCategoryMapping(127, NewznabStandardCategory.TVUHD, "TV 4K");
|
||||
caps.Categories.AddCategoryMapping(164, NewznabStandardCategory.TVHD, "TV AV1");
|
||||
caps.Categories.AddCategoryMapping(129, NewznabStandardCategory.TVHD, "TV HD");
|
||||
caps.Categories.AddCategoryMapping(130, NewznabStandardCategory.TVHD, "TV HEVC");
|
||||
caps.Categories.AddCategoryMapping(128, NewznabStandardCategory.TVSD, "TV SD");
|
||||
caps.Categories.AddCategoryMapping(149, NewznabStandardCategory.TV, "TV Specials");
|
||||
caps.Categories.AddCategoryMapping(21, NewznabStandardCategory.TVSD, "TV Boxsets");
|
||||
caps.Categories.AddCategoryMapping(120, NewznabStandardCategory.TVUHD, "Boxset TV 4K");
|
||||
caps.Categories.AddCategoryMapping(76, NewznabStandardCategory.TVHD, "Boxset TV HD");
|
||||
caps.Categories.AddCategoryMapping(97, NewznabStandardCategory.TVHD, "Boxset TV HEVC");
|
||||
caps.Categories.AddCategoryMapping(147, NewznabStandardCategory.TVSD, "Boxset TV SD");
|
||||
caps.Categories.AddCategoryMapping(120, NewznabStandardCategory.TVUHD, "TV Boxset 4K");
|
||||
caps.Categories.AddCategoryMapping(165, NewznabStandardCategory.TVUHD, "TV Boxset AV1");
|
||||
caps.Categories.AddCategoryMapping(76, NewznabStandardCategory.TVHD, "TV Boxset HD");
|
||||
caps.Categories.AddCategoryMapping(97, NewznabStandardCategory.TVHD, "TV Boxset HEVC");
|
||||
caps.Categories.AddCategoryMapping(147, NewznabStandardCategory.TVSD, "TV Boxset SD");
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
@@ -503,14 +503,14 @@ namespace NzbDrone.Core.Indexers
|
||||
catch (IndexerAuthException ex)
|
||||
{
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
_logger.Warn(ex, "Invalid Credentials for {0} {1}", this, url);
|
||||
_logger.Warn(ex, "Invalid Credentials for {0} [{1}]", this, url);
|
||||
}
|
||||
catch (CloudFlareProtectionException ex)
|
||||
{
|
||||
result.Queries.Add(new IndexerQueryResult { Response = ex.Response });
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
ex.WithData("FeedUrl", url);
|
||||
_logger.Error(ex, "Cloudflare protection detected for {0}, Flaresolverr may be required.", this);
|
||||
_logger.Error(ex, "Cloudflare protection detected for [{0}], Flaresolverr may be required.", this);
|
||||
}
|
||||
catch (IndexerException ex)
|
||||
{
|
||||
@@ -521,18 +521,18 @@ namespace NzbDrone.Core.Indexers
|
||||
catch (HttpRequestException ex)
|
||||
{
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
_logger.Warn(ex, "Unable to connect to indexer, please check your DNS settings and ensure IPv6 is working or disabled. {0}", url);
|
||||
_logger.Warn(ex, "Unable to connect to indexer [{0}]. This is typically caused by DNS/SSL issues. Check DNS settings, ensure IPv6 is working or disabled, and consider using different DNS servers or a VPN. See: 'https://wiki.servarr.com/prowlarr/troubleshooting#dns-ssl-connection-issues'", url);
|
||||
}
|
||||
catch (TaskCanceledException ex)
|
||||
{
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
_logger.Warn(ex, "Unable to connect to indexer, possibly due to a timeout. {0}", url);
|
||||
_logger.Warn(ex, "Unable to connect to indexer, possibly due to a timeout. [{0}]", url);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
ex.WithData("FeedUrl", url);
|
||||
_logger.Error(ex, "An error occurred while processing indexer feed. {0}", url);
|
||||
_logger.Error(ex, "An error occurred while processing indexer feed. [{0}]", url);
|
||||
}
|
||||
|
||||
result.Releases = CleanupReleases(releases, searchCriteria);
|
||||
@@ -816,7 +816,7 @@ namespace NzbDrone.Core.Indexers
|
||||
{
|
||||
_logger.Warn(ex, "Unable to connect to indexer");
|
||||
|
||||
return new NzbDroneValidationFailure(string.Empty, "Unable to connect to indexer, please check your DNS settings and ensure IPv6 is working or disabled. " + ex.Message)
|
||||
return new NzbDroneValidationFailure(string.Empty, "Unable to connect to indexer. This is typically caused by DNS/SSL issues. Check DNS settings, ensure IPv6 is working or disabled, consider using different DNS servers, or try a VPN/proxy if needed. See: 'https://wiki.servarr.com/prowlarr/troubleshooting#dns-ssl-connection-issues' " + ex.Message)
|
||||
{
|
||||
DetailedDescription = ex.InnerException?.Message
|
||||
};
|
||||
|
||||
@@ -92,7 +92,6 @@ namespace NzbDrone.Core.Indexers
|
||||
|
||||
public static readonly IndexerCategory[] ParentCats =
|
||||
{
|
||||
ZedOther,
|
||||
Console,
|
||||
Movies,
|
||||
Audio,
|
||||
@@ -100,7 +99,8 @@ namespace NzbDrone.Core.Indexers
|
||||
TV,
|
||||
XXX,
|
||||
Books,
|
||||
Other
|
||||
Other,
|
||||
ZedOther
|
||||
};
|
||||
|
||||
public static readonly IndexerCategory[] AllCats =
|
||||
|
||||
@@ -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}",
|
||||
@@ -496,7 +496,7 @@
|
||||
"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",
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
"Title": "Titul",
|
||||
"Today": "Dnes",
|
||||
"Tomorrow": "Zítra",
|
||||
"Torrent": "Torrenty",
|
||||
"Torrent": "Torrent",
|
||||
"Torrents": "Torrenty",
|
||||
"Type": "Typ",
|
||||
"UI": "UI",
|
||||
@@ -491,7 +491,7 @@
|
||||
"EnableRssHelpText": "Povolit kanál RSS pro indexer",
|
||||
"DeleteApplication": "Odstranit aplikaci",
|
||||
"DeleteSelectedApplications": "Odstranit vybrané aplikace",
|
||||
"DeleteSelectedIndexers": "Odstranit vybrané indexery",
|
||||
"DeleteSelectedIndexers": "Smazat vybrané indexery",
|
||||
"DevelopmentSettings": "Nastavení pro vývoj",
|
||||
"DisabledUntil": "Zakázáno do",
|
||||
"DownloadClientCategory": "Kategorie klienta pro stahování",
|
||||
@@ -639,5 +639,10 @@
|
||||
"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"
|
||||
"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",
|
||||
"OnApplicationUpdateHelpText": "Při aktualizaci aplikace",
|
||||
"SeedTime": "Doba sdílení",
|
||||
"OnHealthRestoredHelpText": "Při obnovení zdraví",
|
||||
"SeedRatio": "Poměr sdílení",
|
||||
"ThemeHelpText": "Změnit motiv UI, možnost „Auto“ kopíruje nastavení OS pro výběr tmavého nebo světlého režimu. Inspirováno {inspiredBy}."
|
||||
}
|
||||
|
||||
@@ -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": "Βιβλίο",
|
||||
|
||||
@@ -668,7 +668,7 @@
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "Freebox-liittymän portti. Oletus on {port}.",
|
||||
"DownloadClientPneumaticSettingsNzbFolder": "NZB-kansio",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrder": "Peräkkäinen järjestys",
|
||||
"CustomFilter": "Oma suodatin",
|
||||
"CustomFilter": "Mukautettu suodatin",
|
||||
"DownloadClientFreeboxSettingsAppIdHelpText": "Freebox-rajapinnan käyttöoikeutta määritettäessä käytettävä App ID -sovellustunniste.",
|
||||
"DownloadClientFreeboxSettingsAppToken": "Sovellustietue",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Tämä vaatii vähintään NzbGetin version 16.0.",
|
||||
@@ -710,7 +710,7 @@
|
||||
"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}\"?",
|
||||
@@ -807,5 +807,5 @@
|
||||
"IndexerSettingsFreeleechOnly": "Vain \"Freeleech\"",
|
||||
"IndexerSettingsCookieHelpText": "Jos sivusto vaatii kirjautumisevästeen, on se noudettava selaimen avulla.",
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Sivuston salasana",
|
||||
"DownloadClientUTorrentProviderMessage": "Koska uTorrent on tunnettu crypto-, haitta- and mainossisällöstä ja sovelluksista, suosittelemme qBittorrentin, Delugen ja ruTorrentin kaltaisten vaihtoehtojen käyttämistä."
|
||||
"DownloadClientUTorrentProviderMessage": "Koska uTorrent on tullut tunnetuksi kryptolouhinnasta sekä haitta- ja mainossisällöstä, suosittelemme valitsemaan jonkin muun työkalun."
|
||||
}
|
||||
|
||||
@@ -785,7 +785,7 @@
|
||||
"Logout": "Se déconnecter",
|
||||
"NoEventsFound": "Aucun événement trouvé",
|
||||
"RestartReloadNote": "Remarque : {appName} redémarrera et rechargera automatiquement l'interface utilisateur pendant le processus de restauration.",
|
||||
"TheLogLevelDefault": "Le niveau de journalisation est par défaut à « Information » et peut être modifié dans les [paramètres généraux](/settings/general)",
|
||||
"TheLogLevelDefault": "Le niveau de journalisation est par défaut à «Debug» et peut être modifié dans les [paramètres généraux](/settings/general)",
|
||||
"UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName},",
|
||||
"UpdaterLogFiles": "Journaux du programme de mise à jour",
|
||||
"WouldYouLikeToRestoreBackup": "Souhaitez-vous restaurer la sauvegarde « {name} » ?",
|
||||
|
||||
@@ -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",
|
||||
@@ -661,5 +661,11 @@
|
||||
"InstallLatest": "Installa il più recente",
|
||||
"CurrentlyInstalled": "Attualmente Installato",
|
||||
"PreviouslyInstalled": "Precedentemente Installato",
|
||||
"Mixed": "Fissato"
|
||||
"Mixed": "Fissato",
|
||||
"ApplicationTagsHelpText": "Sincronizza gli indexer con questa applicazione se hanno uno o più tag corrispondenti. Se non sono elencati tag, nessun indexer verrà escluso dalla sincronizzazione a causa dei propri tag.",
|
||||
"ApplicationTagsHelpTextWarning": "I tag devono essere usati con cautela, poiché possono avere effetti indesiderati. Un'app con un tag si sincronizzerà solo con gli indexer che hanno lo stesso tag.",
|
||||
"AuthQueries": "Query di autenticazione",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Se un torrent è bloccato tramite hash, potrebbe non essere correttamente rifiutato durante l’uso di RSS/Ricerca con alcuni indexer. Abilitando questa opzione, il torrent verrà rifiutato dopo essere stato acquisito, ma prima di essere inviato al client.",
|
||||
"AppsMinimumSeedersHelpText": "Numero minimo di seeders richiesti dall’applicazione affinché l’indexer possa acquisire il torrent; se vuoto, viene utilizzato il valore predefinito del profilo di sincronizzazione",
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "Numero minimo di seeders richiesti dall’applicazione affinché l’indexer possa acquisire il torrent; se vuoto, viene utilizzato il valore predefinito del profilo di sincronizzazione"
|
||||
}
|
||||
|
||||
@@ -88,13 +88,13 @@
|
||||
"Delete": "Verwijder",
|
||||
"DeleteAppProfile": "App-profiel verwijderen",
|
||||
"DeleteApplication": "Applicatie verwijderen",
|
||||
"DeleteApplicationMessageText": "Weet u zeker dat u de applicatie '{0}' wilt verwijderen?",
|
||||
"DeleteApplicationMessageText": "Weet u zeker dat u de applicatie '{name}' wilt verwijderen?",
|
||||
"DeleteBackup": "Verwijder Backup",
|
||||
"DeleteBackupMessageText": "Bent u zeker dat u de veiligheidskopie '{name}' wilt verwijderen?",
|
||||
"DeleteDownloadClient": "Verwijder Downloader",
|
||||
"DeleteDownloadClientMessageText": "Bent u zeker dat u de downloader '{name}' wilt verwijderen?",
|
||||
"DeleteIndexerProxy": "Indexeerproxy verwijderen",
|
||||
"DeleteIndexerProxyMessageText": "Weet u zeker dat u de proxy '{0}' wilt verwijderen?",
|
||||
"DeleteIndexerProxyMessageText": "Weet u zeker dat u de proxy '{name}' wilt verwijderen?",
|
||||
"DeleteNotification": "Verwijder Notificatie",
|
||||
"DeleteNotificationMessageText": "Weet je zeker dat je de notificatie ‘{name}’ wil verwijderen?",
|
||||
"DeleteTag": "Verwijder Tag",
|
||||
@@ -123,7 +123,7 @@
|
||||
"EnableInteractiveSearch": "Schakel interactief zoeken in",
|
||||
"EnableInteractiveSearchHelpText": "Zal worden gebruikt wanneer interactief zoeken wordt gebruikt",
|
||||
"EnableRss": "RSS inschakelen",
|
||||
"EnableRssHelpText": "Rss-feed voor Indexer inschakelen",
|
||||
"EnableRssHelpText": "RSS-feed voor Indexeerder inschakelen",
|
||||
"EnableSSL": "Activeer SSL",
|
||||
"EnableSslHelpText": " Vereist herstart als administrator om in werking te treden",
|
||||
"Enabled": "Ingeschakeld",
|
||||
@@ -149,7 +149,7 @@
|
||||
"FullSync": "Volledige synchronisatie",
|
||||
"General": "Algemeen",
|
||||
"GeneralSettings": "Algemene Instellingen",
|
||||
"GeneralSettingsSummary": "Poort, SSL, gebruikersnaam/wachtwoord, proxy, statistieken en updates",
|
||||
"GeneralSettingsSummary": "Poort, SSL, gebruikersnaam/wachtwoord, proxy, analytics en updates",
|
||||
"GrabReleases": "Uitgave Ophalen",
|
||||
"Grabbed": "Opgehaalde",
|
||||
"Grabs": "Gegrepen",
|
||||
@@ -162,7 +162,7 @@
|
||||
"HomePage": "Startpagina",
|
||||
"Host": "Host",
|
||||
"Hostname": "Hostnaam",
|
||||
"Id": "Id",
|
||||
"Id": "ID",
|
||||
"IgnoredAddresses": "Genegeerde Adressen",
|
||||
"IllRestartLater": "Ik zal later herstarten",
|
||||
"IncludeHealthWarningsHelpText": "Voeg Gezondheidswaarschuwingen Toe",
|
||||
@@ -180,7 +180,7 @@
|
||||
"IndexerProxyStatusAllUnavailableHealthCheckMessage": "Alle proxy's zijn niet beschikbaar vanwege storingen",
|
||||
"IndexerProxyStatusUnavailableHealthCheckMessage": "Proxy's niet beschikbaar vanwege storingen: {indexerProxyNames}",
|
||||
"IndexerQuery": "Indexeer zoekopdracht",
|
||||
"IndexerRss": "Indexeer RSS",
|
||||
"IndexerRss": "Indexeerder RSS",
|
||||
"IndexerSettingsSummary": "Configureer verschillende globale Indexer-instellingen, waaronder proxy's.",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Alle indexeerders zijn onbeschikbaar wegens fouten",
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Indexeerders onbeschikbaar wegens fouten: {indexerNames}",
|
||||
@@ -426,19 +426,19 @@
|
||||
"ApplyTagsHelpTextRemove": "Verwijderen: Verwijder de ingevoerde tags",
|
||||
"ApplyTagsHelpTextReplace": "Vervangen: Vervang de tags met de ingevoerde tags (vul geen tags in om alle tags te wissen)",
|
||||
"CountIndexersSelected": "{count} Indexer(s) Geselecteerd",
|
||||
"DeleteSelectedApplicationsMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
|
||||
"DeleteSelectedApplicationsMessageText": "Bent u zeker dat u de indexeerder '{count}' wilt verwijderen?",
|
||||
"DeleteSelectedDownloadClients": "Verwijder Downloader",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Bent u zeker dat u de indexeerder '{count}' wilt verwijderen?",
|
||||
"Season": "Seizoen",
|
||||
"SelectIndexers": "Zoek indexeerders",
|
||||
"More": "Meer",
|
||||
"Theme": "Thema",
|
||||
"Track": "Spoor",
|
||||
"DeleteSelectedIndexersMessageText": "Bent u zeker dat u de indexeerder '{0}' wilt verwijderen?",
|
||||
"DeleteSelectedIndexersMessageText": "Bent u zeker dat u de indexeerder '{count}' wilt verwijderen?",
|
||||
"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",
|
||||
@@ -512,5 +512,163 @@
|
||||
"Download": "Downloaden",
|
||||
"InstallLatest": "Installeer Nieuwste Versie",
|
||||
"CurrentlyInstalled": "Momenteel Geïnstalleerd",
|
||||
"Mixed": "Opgelost"
|
||||
"Mixed": "Opgelost",
|
||||
"AverageQueries": "Gemiddelde Queries",
|
||||
"AverageGrabs": "Gemiddeld aantal downloads",
|
||||
"AverageResponseTimesMs": "Gemiddelde Indexer Responsetijden (ms)",
|
||||
"Book": "Boek",
|
||||
"CountIndexersAvailable": "{count} indexer(s) beschikbaar",
|
||||
"Donate": "Doneer",
|
||||
"DownloadClientFreeboxSettingsHostHelpText": "Hostnaam of IP-adres van de Freebox, standaard '{url}' (werkt alleen als je op hetzelfde netwerk zit)",
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "Poort die wordt gebruikt om toegang te krijgen tot de Freebox-interface, standaard '{port}'",
|
||||
"DefaultCategory": "Standaardcategorie",
|
||||
"DownloadClientRTorrentSettingsUrlPathHelpText": "Pad naar het XMLRPC-eindpunt, zie {url}. Dit is meestal RPC2 of [pad naar ruTorrent]{url2} bij gebruik van ruTorrent.",
|
||||
"DownloadClientSettingsAddPaused": "Toevoegen gepauzeerd",
|
||||
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Doorzoek freeleech releases",
|
||||
"IndexerId": "Indexeerder ID",
|
||||
"EditCategory": "Categorie bewerken",
|
||||
"ApplicationsLoadError": "Kan de applicatielijst niet laden",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Optionele locatie om downloads op te slaan, leeg laten om de standaardlocatie van Aria2 te gebruiken",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de Deluge JSON-URL, zie {url}",
|
||||
"FailedToFetchSettings": "Instellingen ophalen mislukt",
|
||||
"HistoryCleanup": "Geschiedenis opschonen",
|
||||
"Implementation": "Implementatie",
|
||||
"IndexerHDBitsSettingsOrigins": "Herkomst",
|
||||
"IndexerMTeamTpSettingsApiKeyHelpText": "API-sleutel van de site (te vinden in Gebruikerspaneel => Beveiliging => Laboratorium)",
|
||||
"IndexerFileListSettingsFreeleechOnlyHelpText": "Alleen freeleech-releases doorzoeken",
|
||||
"Default": "Standaard",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de Flood API, zoals {url}",
|
||||
"DownloadClientRTorrentSettingsAddStoppedHelpText": "Als je dit inschakelt, worden torrents en magnet-links in rTorrent in een gestopte staat toegevoegd. Dit kan magnet-bestanden laten mislukken.",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Indexeerders hebben geen definitie en zullen niet werken: {indexerNames}. Verwijder ze alstublieft en voeg ze opnieuw toe aan {appName}.",
|
||||
"AppsMinimumSeedersHelpText": "Minimum aantal vereiste seeders door de applicaties voordat de indexer iets ophaalt. Leeg laten gebruikt de standaardwaarde van het synchronisatieprofiel",
|
||||
"Author": "Auteur",
|
||||
"BookSearch": "Boek zoeken",
|
||||
"IndexerSettingsCookieHelpText": "Site Cookie",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Optionele locatie om downloads op te slaan, laat leeg om de standaardlocatie van Transmission te gebruiken",
|
||||
"DeleteSelectedIndexers": "Verwijder geselecteerde indexeerders",
|
||||
"Destination": "Bestemming",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Optionele gedeelde map om downloads in te plaatsen, leeg laten om de standaardlocatie van Download Station te gebruiken",
|
||||
"DownloadClientFloodSettingsAdditionalTags": "Additionele Tags",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "API URL",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Stel de basis-URL van de Freebox API in met API-versie, bijvoorbeeld '{url}', standaard is '{defaultApiUrl}'",
|
||||
"DownloadClientFreeboxSettingsAppId": "App ID",
|
||||
"DownloadClientFreeboxSettingsAppToken": "App Token",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Deze optie vereist minimaal NzbGet versie 16.0",
|
||||
"DownloadClientPneumaticSettingsNzbFolder": "Nzb map",
|
||||
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Deze map moet bereikbaar zijn vanuit XBMC",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Inhoudsindeling",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Download eerste en laatste stukjes eerst (qBittorrent 4.1.0+)",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Download in opeenvolgende volgorde (qBittorrent 4.1.0+)",
|
||||
"DownloadClientRTorrentSettingsAddStopped": "Toevoegen gestopt",
|
||||
"DownloadClientRTorrentSettingsDirectoryHelpText": "Optionele locatie om downloads op te slaan, leeg laten om de standaardlocatie van rTorrent te gebruiken",
|
||||
"DownloadClientRTorrentSettingsUrlPath": "Url pad",
|
||||
"ElapsedTime": "Verstreken tijd",
|
||||
"External": "Extern",
|
||||
"FailedToFetchUpdates": "Updates ophalen mislukt",
|
||||
"FoundCountReleases": "{itemCount} releases gevonden",
|
||||
"IndexerAlphaRatioSettingsExcludeSceneHelpText": "SCENE-releases uitsluiten van resultaten",
|
||||
"IndexerBeyondHDSettingsApiKeyHelpText": "API-sleutel van de site (te vinden onder Mijn Beveiliging => API-sleutel)",
|
||||
"IndexerBeyondHDSettingsLimitedOnly": "Alleen beperkt",
|
||||
"IndexerBeyondHDSettingsSearchTypesHelpText": "Selecteer de soorten releases waarin je geïnteresseerd bent. Als er geen selectie is gemaakt, worden alle opties gebruikt.",
|
||||
"IndexerFileListSettingsPasskeyHelpText": "Site Passkey (Dit is de alfanumerieke reeks in de tracker-URL die in je downloadclient wordt weergegeven)",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNames": "Zoek groepnamen",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgent": "Cookie User-Agent",
|
||||
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Doorzoek alleen freeleech releases",
|
||||
"IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Doorzoek alleen freeleech releases",
|
||||
"IndexerNewznabSettingsApiKeyHelpText": "Site API-sleutel",
|
||||
"IndexerRedactedSettingsApiKeyHelpText": "API-sleutel van de site (te vinden onder Instellingen => Toegangsinstellingen)",
|
||||
"IndexerSettingsFreeleechOnly": "Alleen Freeleech",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Eerste en laatste eerst",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Voegt een voorvoegsel toe aan de {clientName} RPC-URL, bijvoorbeeld {url}, standaard is '{defaultUrl}'",
|
||||
"AreYouSureYouWantToDeleteCategory": "Weet je zeker dat je de gekoppelde categorie wilt verwijderen?",
|
||||
"DownloadClientCategory": "Downloadclientcategorie",
|
||||
"DeleteSelectedIndexer": "Verwijder geselecteerde indexeerder",
|
||||
"EditSelectedDownloadClients": "Geselecteerde downloadclients bewerken",
|
||||
"IndexerDownloadClientHelpText": "Geef aan welke downloadclient wordt gebruikt voor downloads die binnen {appName} van deze indexer worden opgehaald",
|
||||
"GoToApplication": "Ga naar applicatie",
|
||||
"IndexerName": "Indexeerdernaam",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Weet je zeker dat je '{name}' uit {appName} wilt verwijderen?",
|
||||
"AuthQueries": "Autorisatiequeries",
|
||||
"IndexerAlreadySetup": "Tenminste één instantie van de indexeerder is al ingesteld",
|
||||
"IndexerCategories": "Indexeerdercategorieën",
|
||||
"ApplicationTagsHelpText": "Sync indexers met deze applicatie die één of meer overeenkomende tags hebben. Als er hier geen tags worden opgegeven, worden er geen indexers van synchronisatie uitgesloten op basis van hun tags.",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Of de ingestelde inhoudsindeling van qBittorrent gebruikt moet worden, de originele indeling van de torrent, of altijd een submap moet worden aangemaakt (qBittorrent 4.3.2+)",
|
||||
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Begintoestand voor torrents die aan qBittorrent worden toegevoegd. Let op: Gedwongen torrents houden zich niet aan seeding-beperkingen",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrder": "Opeenvolgende volgorde",
|
||||
"DownloadClientSettingsDestinationHelpText": "Geef handmatig de downloadbestemming op, laat leeg om de standaardlocatie te gebruiken",
|
||||
"DownloadClientSettingsInitialState": "Initiële staat",
|
||||
"DownloadClientSettingsUseSslHelpText": "Gebruik een beveiligde verbinding bij het verbinden met {clientName}",
|
||||
"EnabledRedirected": "Ingeschakeld, Omgeleid",
|
||||
"HistoryDetails": "Geschiedenis details",
|
||||
"IndexerHDBitsSettingsUsernameHelpText": "Site Gebruikersnaam",
|
||||
"IndexerDetails": "Indexeerder details",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Als een torrent wordt geblokkeerd op basis van de hash, kan het zijn dat deze niet correct wordt geweigerd tijdens RSS/Search bij sommige indexers. Als je deze optie inschakelt, wordt de torrent alsnog geweigerd nadat hij is opgehaald, maar voordat hij naar de client wordt gestuurd.",
|
||||
"BasicSearch": "Basiszoekopdracht",
|
||||
"DefaultNameCopiedProfile": "{name} - Kopie",
|
||||
"DeleteClientCategory": "Categorie van downloadclient verwijderen",
|
||||
"DisabledUntil": "Uitgeschakeld tot",
|
||||
"DownloadClientFreeboxSettingsAppIdHelpText": "App ID die wordt gegeven bij het aanmaken van toegang tot de Freebox API (bijv. 'app_id')",
|
||||
"DownloadClientPneumaticSettingsStrmFolder": "Strm Map",
|
||||
"EditSelectedIndexers": "Geselecteerde indexeerders bewerken",
|
||||
"GrabTitle": "Grijp Titel",
|
||||
"IndexerHDBitsSettingsMediumsHelpText": "Als niet gespecificeerd, worden alle opties gebruikt.",
|
||||
"IndexerHDBitsSettingsUseFilenames": "Gebruik bestandsnamen",
|
||||
"IndexerHDBitsSettingsPasskeyHelpText": "Passkey vanuit gebruikerdetails",
|
||||
"ClickToChangeQueryOptions": "Klik om zoekopties te wijzigen",
|
||||
"DownloadClientFreeboxSettingsAppTokenHelpText": "App token dat wordt verkregen bij het aanmaken van toegang tot de Freebox API (bijv. 'app_token')",
|
||||
"DownloadClientSettingsInitialStateHelpText": "Begintoestand voor torrents die aan {clientName} worden toegevoegd",
|
||||
"DownloadClientSettingsPriorityItemHelpText": "Prioriteit om te gebruiken bij het ophalen van items",
|
||||
"IncludeManualGrabsHelpText": "Handmatige downloads uitgevoerd binnen {appName} meenemen",
|
||||
"IndexerDisabled": "Indexeerder Uitgeschakeld",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexeerders met ongeldige downloadclients: {indexerNames}.",
|
||||
"IndexerFailureRate": "Faalpercentage van de indexeerder",
|
||||
"IndexerFileListSettingsUsernameHelpText": "Site Gebruikersnaam",
|
||||
"IndexerHDBitsSettingsUseFilenamesHelpText": "Vink deze optie aan als je torrentbestandsnamen als releasetitels wilt gebruiken",
|
||||
"IndexerHistoryLoadError": "Fout bij het laden van de indexeerder-geschiedenis",
|
||||
"IndexerInfo": "Indexeerder info",
|
||||
"IndexerAlphaRatioSettingsExcludeScene": "SCENE uitsluiten",
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Zoek types",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpText": "API-sleutel van de site (te vinden onder Instellingen => Toegangsinstellingen)",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Moet over Gebruikers- en Torrents-machtigingen beschikken",
|
||||
"IndexerHDBitsSettingsCodecsHelpText": "Als niet gespecificeerd, worden alle opties gebruikt.",
|
||||
"IndexerIPTorrentsSettingsCookieUserAgentHelpText": "User-Agent die gekoppeld is aan de cookie gebruikt vanuit de browser",
|
||||
"IndexerNewznabSettingsAdditionalParametersHelpText": "Aanvullende Newznab-parameters",
|
||||
"IndexerNzbIndexSettingsApiKeyHelpText": "Site API-sleutel",
|
||||
"IndexerPassThePopcornSettingsApiKeyHelpText": "Site API-sleutel",
|
||||
"IndexerOrpheusSettingsApiKeyHelpText": "API-sleutel van de site (te vinden onder Instellingen => Toegangsinstellingen)",
|
||||
"IndexerSettingsBaseUrlHelpText": "Selecteer welke basis-URL {appName} gebruikt voor verzoeken aan de site",
|
||||
"IndexerSettingsApiPathHelpText": "Pad naar de API, meestal {url}",
|
||||
"IndexerSettingsApiUser": "API Gebruiker",
|
||||
"IndexerSettingsBaseUrl": "Basisurl",
|
||||
"IndexerSettingsCookie": "Cookie",
|
||||
"IndexerSettingsAdditionalParameters": "Aanvullende parameters",
|
||||
"IndexerSettingsApiPath": "API pad",
|
||||
"IndexerAvistazSettingsPidHelpText": "PID van de pagina Mijn Account of Mijn Profiel",
|
||||
"IndexerAvistazSettingsUsernameHelpText": "Site Gebruikersnaam",
|
||||
"IndexerAvistazSettingsUsernameHelpTextWarning": "Alleen leden met de rang 'member' of hoger kunnen de API van deze indexeerder gebruiken.",
|
||||
"IndexerBeyondHDSettingsRssKeyHelpText": "RSS-sleutel van de site (te vinden onder Mijn Beveiliging => RSS-sleutel)",
|
||||
"IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Zoek releases op groepsnaam",
|
||||
"IndexerAvistazSettingsPasswordHelpText": "Site Wachtwoord",
|
||||
"IndexerHDBitsSettingsOriginsHelpText": "Als niet gespecificeerd, worden alle opties gebruikt.",
|
||||
"ApplicationTagsHelpTextWarning": "Gebruik tags met voorzichtigheid, ze kunnen onbedoelde effecten hebben. Een app met een tag zal alleen synchroniseren met indexers die dezelfde tag hebben.",
|
||||
"DownloadClientQbittorrentSettingsUseSslHelpText": "Gebruik een beveiligde verbinding. Zie Opties -> Web UI -> 'Gebruik HTTPS in plaats van HTTP' in qBittorrent.",
|
||||
"DeleteSelectedApplications": "Verwijder geselecteerde applicaties",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent heeft een geschiedenis van het bevatten van cryptominers, malware en advertenties. We raden je sterk aan om een andere client te kiezen.",
|
||||
"HealthMessagesInfoBox": "Je kunt meer informatie over de oorzaak van deze gezondheidscontroleberichten vinden door op de wiki-link (boekicoon) aan het einde van de rij te klikken, of door je [logboeken]({link}) te bekijken. Als je moeite hebt met het interpreteren van deze berichten, kun je contact opnemen met onze ondersteuning via de onderstaande links",
|
||||
"IndexerNebulanceSettingsApiKeyHelpText": "API-sleutel te vinden onder Gebruikersinstellingen > API-sleutels. De sleutel moet de machtigingen Lijst en Download hebben",
|
||||
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Voegt eigenschappen van media toe als tags. Hints zijn voorbeelden.",
|
||||
"DownloadClientPneumaticSettingsStrmFolderHelpText": ".strm-bestanden in deze map worden geïmporteerd door Drone",
|
||||
"DownloadClientSettingsDefaultCategoryHelpText": "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 van andere applicaties dan {appName}. Het gebruik van een categorie is optioneel, maar wordt sterk aanbevolen.",
|
||||
"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",
|
||||
"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).",
|
||||
"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"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user