Compare commits

...

41 Commits

Author SHA1 Message Date
bakerboy448
b9b28c2a19 Improve UX of indexer urls error logging 2025-08-23 15:44:47 -05:00
bakerboy448
bfac2b81f0 New: Improve Indexer Connection Failure Messaging (#2473) 2025-08-23 15:44:47 -05:00
Weblate
65397c1f03 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Jeremi Florczyk <j.m.florczyk@gmail.com>
Co-authored-by: Marcin <ml.cichy@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pl/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
ilike2burnthing
416a00340c Fixed:(toloka) improve episode regex & trim (#2471)
toloka: improve episode regex & trim
2025-08-23 15:44:47 -05:00
Eugene Shatilo
4553ffe08b Fixed:(RuTracker) corrected regexp for director’s name in the title to cover cases for Russian directors (#2470)
Corrected regexp for rutracker director's name in the title to cover cases for russian directors
2025-08-23 15:44:47 -05:00
bakerboy448
4350b6ce70 Fixed: Mobile add indexer modal layout (#2464)
* New: Add Indexer Filters are Collapsible

fixes #2431

* Fixed: Rename onToggleFilters to handleToggleFilters

* fix css lint
2025-08-23 15:44:47 -05:00
bakerboy448
04a6bba76b Bump to 2.0.5 2025-08-23 15:44:47 -05:00
Mark McDowall
6a09998cd2 New: Move auth success logging to debug
Closes #7978
2025-08-23 15:44:47 -05:00
Mark McDowall
044558b7f8 Don't log debug messages for API key validation
(cherry picked from commit 78ca30d1f81361a2dabaddd0036b764859b858af)
2025-08-23 15:44:47 -05:00
Weblate
2d20a08782 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Tim81 <tvdham@hotmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nl/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
bakerboy448
d0572fecdc Bump version to 2.0.4 2025-08-23 15:44:47 -05:00
Robin Dadswell
dadfb8d008 Fixed: Saving Newznab indexer when redirect was true 2025-08-23 15:44:47 -05:00
Weblate
063666a7c9 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: ArLab1 <arnaud.laberge@hotmail.com>
Co-authored-by: Oleksii Ilienko <assada.ua@gmail.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/uk/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
Robin Dadswell
aba69901c9 New: Force all usenet indexers to use Redirection 2025-08-23 15:44:47 -05:00
Robin Dadswell
cbfec3df3c New: Updated all newznab indexers to be redirect 2025-08-23 15:44:47 -05:00
Mike Miller
448140fa9d Fixed: (Xpseeds) Update categories (#2458)
Sync with Jackett
2025-08-23 15:44:47 -05:00
bakerboy448
eb7ff5479b Bump version to 2.0.3 2025-08-23 15:44:47 -05:00
bakerboy448
e3012ab218 New: (Avistaz Sites) Use created_at_iso for release create date (#2437)
* New: (Avistaz Sites) Use created_at_iso for release create date

no longer have timezone headaches
all Staz sites except animetorrents support this new field.

* fix tests

* Remove AvistaZ TimezoneOffset
2025-08-23 15:44:47 -05:00
bakerboy448
070d522bd7 Bump version to 2.0.2 2025-08-23 15:44:47 -05:00
Weblate
fc855cdb8c Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: averyv86 <averyv86@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
bakerboy448
93a1fd0759 Sync UiAuthorizationPolicyProvider with upstream
* Revert "Fixed: Fallback to Forms for removed Basic auth method"

This reverts commit fe198352a3.

* AuthPolicy Var fixes
2025-08-23 15:44:47 -05:00
Mark McDowall
83754ff349 Change authentication to Forms if set to Basic
(cherry picked from commit 8e08b0cc3df904d39da5be38bc345cc701412a9d)
2025-08-23 15:44:47 -05:00
Bogdan
fa5a9b22c8 Bump version to 2.0.1 2025-08-23 15:44:47 -05:00
Bogdan
32793a1d05 Bump Polly to 8.6.0 2025-08-23 15:44:47 -05:00
Bogdan
99184b5596 Fixed: Fallback to Forms for removed Basic auth method 2025-08-23 15:44:47 -05:00
Bogdan
8fc116cab6 Fixed: (AnimeTosho) Mapping of Subcategory as Parent 2025-08-23 15:44:47 -05:00
Bogdan
ef04db854e Fix various typos 2025-08-23 15:44:47 -05:00
Bogdan
bee3e61f53 Fixed: Redirect loop for removed basic auth method 2025-08-23 15:44:47 -05:00
Bogdan
47a7b15161 Fix fullscreen automation screenshots 2025-08-23 15:44:47 -05:00
Mark McDowall
11e38ca570 New: Add exception to SSL Certificate validation message
(cherry picked from commit d84c4500949a530fac92d73f7f2f8e8462b37244)
2025-08-23 15:44:47 -05:00
Servarr
cb0d0bcdbe Automated API Docs update 2025-08-23 15:44:47 -05:00
Mark McDowall
57b4a9eb7b New: Remove Basic Auth
(cherry picked from commit 0f9e063e2146812f6e963363eee70a524612f354)
2025-08-23 15:44:47 -05:00
Bogdan
3aed39dd52 Fixed: Validation for tags label 2025-08-23 15:44:47 -05:00
Bogdan
cd680a47b5 Upgrade StyleCop.Analyzers to Unstable 1.2.0.556 2025-08-23 15:44:47 -05:00
Bogdan
cbcefa41ab Bump Swashbuckle to 8.1.4 2025-08-23 15:44:47 -05:00
Bogdan
5716094758 Bump version to 2.0.0 2025-08-23 15:44:47 -05:00
Bogdan
d25f974778 New: Support removed for linux-x86 2025-08-23 15:44:47 -05:00
Bogdan
d48fd4b8eb New: Migrate appdata folder for .NET 8 on OSX 2025-08-23 15:44:47 -05:00
Bogdan
86fb118d84 New: Bump to .NET 8 2025-08-23 15:44:47 -05:00
Weblate
0d53609607 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Ilbebino <tommasobellandi08@gmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_CN/
Translation: Servarr/Prowlarr
2025-08-23 15:44:47 -05:00
Bogdan
e2c6f2fc57 Bump version to 1.38.0 2025-08-23 15:44:47 -05:00
206 changed files with 2236 additions and 1129 deletions

View File

@@ -2,11 +2,11 @@
// README at: https://github.com/devcontainers/templates/tree/main/src/dotnet // README at: https://github.com/devcontainers/templates/tree/main/src/dotnet
{ {
"name": "Prowlarr", "name": "Prowlarr",
"image": "mcr.microsoft.com/devcontainers/dotnet:1-6.0", "image": "mcr.microsoft.com/devcontainers/dotnet:1-8.0",
"features": { "features": {
"ghcr.io/devcontainers/features/node:1": { "ghcr.io/devcontainers/features/node:1": {
"nodeGypDependencies": true, "nodeGypDependencies": true,
"version": "16", "version": "20",
"nvmVersion": "latest" "nvmVersion": "latest"
} }
}, },

2
.vscode/launch.json vendored
View File

@@ -10,7 +10,7 @@
"request": "launch", "request": "launch",
"preLaunchTask": "build dotnet", "preLaunchTask": "build dotnet",
// If you have changed target frameworks, make sure to update the program path. // 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": [], "args": [],
"cwd": "${workspaceFolder}", "cwd": "${workspaceFolder}",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console

View File

@@ -9,13 +9,13 @@ variables:
testsFolder: './_tests' testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
majorVersion: '1.37.0' majorVersion: '2.0.5'
minorVersion: $[counter('minorVersion', 1)] minorVersion: $[counter('minorVersion', 1)]
prowlarrVersion: '$(majorVersion).$(minorVersion)' prowlarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
sentryOrg: 'servarr' sentryOrg: 'servarr'
sentryUrl: 'https://sentry.servarr.com' sentryUrl: 'https://sentry.servarr.com'
dotnetVersion: '6.0.427' dotnetVersion: '8.0.405'
nodeVersion: '20.X' nodeVersion: '20.X'
innoVersion: '6.2.2' innoVersion: '6.2.2'
windowsImage: 'windows-2022' windowsImage: 'windows-2022'
@@ -106,7 +106,7 @@ stages:
echo "Extra platforms already enabled" echo "Extra platforms already enabled"
else else
echo "Enabling extra platform support" 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 fi
displayName: Enable Extra Platform Support displayName: Enable Extra Platform Support
- bash: ./build.sh --backend --enable-extra-platforms - bash: ./build.sh --backend --enable-extra-platforms
@@ -122,27 +122,23 @@ stages:
artifact: '$(osName)Backend' artifact: '$(osName)Backend'
displayName: Publish Backend displayName: Publish Backend
condition: and(succeeded(), eq(variables['osName'], 'Windows')) 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 artifact: win-x64-tests
displayName: Publish win-x64 Test Package displayName: Publish win-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) 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 artifact: linux-x64-tests
displayName: Publish linux-x64 Test Package displayName: Publish linux-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/linux-x86/publish' - publish: '$(testsFolder)/net8.0/linux-musl-x64/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'
artifact: linux-musl-x64-tests artifact: linux-musl-x64-tests
displayName: Publish linux-musl-x64 Test Package displayName: Publish linux-musl-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) 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 artifact: freebsd-x64-tests
displayName: Publish freebsd-x64 Test Package displayName: Publish freebsd-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) 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 artifact: osx-x64-tests
displayName: Publish osx-x64 Test Package displayName: Publish osx-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
@@ -189,7 +185,7 @@ stages:
artifact: '$(osName)Frontend' artifact: '$(osName)Frontend'
displayName: Publish Frontend displayName: Publish Frontend
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- stage: Installer - stage: Installer
dependsOn: dependsOn:
- Build_Backend - Build_Backend
@@ -259,21 +255,21 @@ stages:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x64.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x64.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/win-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/win-x64/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create win-x86 zip displayName: Create win-x86 zip
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x86.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x86.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/win-x86/net6.0 rootFolderOrFile: $(artifactsFolder)/win-x86/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create osx-x64 app displayName: Create osx-x64 app
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-x64.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-x64.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-x64-app/net6.0 rootFolderOrFile: $(artifactsFolder)/osx-x64-app/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create osx-x64 tar displayName: Create osx-x64 tar
inputs: inputs:
@@ -281,14 +277,14 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/osx-x64/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create osx-arm64 app displayName: Create osx-arm64 app
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-arm64.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-arm64.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-arm64-app/net6.0 rootFolderOrFile: $(artifactsFolder)/osx-arm64-app/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create osx-arm64 tar displayName: Create osx-arm64 tar
inputs: inputs:
@@ -296,7 +292,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-arm64/net6.0 rootFolderOrFile: $(artifactsFolder)/osx-arm64/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create linux-x64 tar displayName: Create linux-x64 tar
inputs: inputs:
@@ -304,7 +300,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-x64/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create linux-musl-x64 tar displayName: Create linux-musl-x64 tar
inputs: inputs:
@@ -312,15 +308,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net8.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
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create linux-arm tar displayName: Create linux-arm tar
inputs: inputs:
@@ -328,7 +316,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-arm/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-arm/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create linux-musl-arm tar displayName: Create linux-musl-arm tar
inputs: inputs:
@@ -336,7 +324,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-musl-arm/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create linux-arm64 tar displayName: Create linux-arm64 tar
inputs: inputs:
@@ -344,7 +332,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-arm64/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-arm64/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create linux-musl-arm64 tar displayName: Create linux-musl-arm64 tar
inputs: inputs:
@@ -352,7 +340,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net8.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create freebsd-x64 tar displayName: Create freebsd-x64 tar
inputs: inputs:
@@ -360,7 +348,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net8.0
- publish: $(Build.ArtifactStagingDirectory) - publish: $(Build.ArtifactStagingDirectory)
artifact: 'Packages' artifact: 'Packages'
displayName: Publish Packages displayName: Publish Packages
@@ -391,7 +379,7 @@ stages:
SENTRY_AUTH_TOKEN: $(sentryAuthTokenServarr) SENTRY_AUTH_TOKEN: $(sentryAuthTokenServarr)
SENTRY_ORG: $(sentryOrg) SENTRY_ORG: $(sentryOrg)
SENTRY_URL: $(sentryUrl) SENTRY_URL: $(sentryUrl)
- stage: Unit_Test - stage: Unit_Test
displayName: Unit Tests displayName: Unit Tests
dependsOn: Build_Backend dependsOn: Build_Backend
@@ -488,29 +476,19 @@ stages:
testName: 'Musl Net Core' testName: 'Musl Net Core'
artifactName: linux-musl-x64-tests artifactName: linux-musl-x64-tests
containerImage: ghcr.io/servarr/testimages:alpine containerImage: ghcr.io/servarr/testimages:alpine
linux-x86:
testName: 'linux-x86'
artifactName: linux-x86-tests
containerImage: ghcr.io/servarr/testimages:linux-x86
pool: pool:
vmImage: ${{ variables.linuxImage }} vmImage: ${{ variables.linuxImage }}
container: $[ variables['containerImage'] ] container: $[ variables['containerImage'] ]
timeoutInMinutes: 10 timeoutInMinutes: 10
steps: steps:
- task: UseDotNet@2 - task: UseDotNet@2
displayName: 'Install .NET' displayName: 'Install .NET'
inputs: inputs:
version: $(dotnetVersion) 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 - checkout: none
- task: DownloadPipelineArtifact@2 - task: DownloadPipelineArtifact@2
displayName: Download Test Artifact displayName: Download Test Artifact
@@ -551,7 +529,7 @@ stages:
vmImage: ${{ variables.linuxImage }} vmImage: ${{ variables.linuxImage }}
timeoutInMinutes: 10 timeoutInMinutes: 10
steps: steps:
- task: UseDotNet@2 - task: UseDotNet@2
displayName: 'Install .net core' displayName: 'Install .net core'
@@ -600,12 +578,12 @@ stages:
Prowlarr__Postgres__Port: '5432' Prowlarr__Postgres__Port: '5432'
Prowlarr__Postgres__User: 'prowlarr' Prowlarr__Postgres__User: 'prowlarr'
Prowlarr__Postgres__Password: 'prowlarr' Prowlarr__Postgres__Password: 'prowlarr'
pool: pool:
vmImage: ${{ variables.linuxImage }} vmImage: ${{ variables.linuxImage }}
timeoutInMinutes: 10 timeoutInMinutes: 10
steps: steps:
- task: UseDotNet@2 - task: UseDotNet@2
displayName: 'Install .net core' displayName: 'Install .net core'
@@ -685,7 +663,7 @@ stages:
pool: pool:
vmImage: $(imageName) vmImage: $(imageName)
steps: steps:
- task: UseDotNet@2 - task: UseDotNet@2
displayName: 'Install .net core' displayName: 'Install .net core'
@@ -707,7 +685,7 @@ stages:
targetPath: $(Build.ArtifactStagingDirectory) targetPath: $(Build.ArtifactStagingDirectory)
- task: ExtractFiles@1 - task: ExtractFiles@1
inputs: inputs:
archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)' archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)'
destinationFolder: '$(Build.ArtifactStagingDirectory)/bin' destinationFolder: '$(Build.ArtifactStagingDirectory)/bin'
displayName: Extract Package displayName: Extract Package
- bash: | - bash: |
@@ -762,7 +740,7 @@ stages:
targetPath: $(Build.ArtifactStagingDirectory) targetPath: $(Build.ArtifactStagingDirectory)
- task: ExtractFiles@1 - task: ExtractFiles@1
inputs: inputs:
archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)' archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)'
destinationFolder: '$(Build.ArtifactStagingDirectory)/bin' destinationFolder: '$(Build.ArtifactStagingDirectory)/bin'
displayName: Extract Package displayName: Extract Package
- bash: | - bash: |
@@ -826,7 +804,7 @@ stages:
targetPath: $(Build.ArtifactStagingDirectory) targetPath: $(Build.ArtifactStagingDirectory)
- task: ExtractFiles@1 - task: ExtractFiles@1
inputs: inputs:
archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)' archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)'
destinationFolder: '$(Build.ArtifactStagingDirectory)/bin' destinationFolder: '$(Build.ArtifactStagingDirectory)/bin'
displayName: Extract Package displayName: Extract Package
- bash: | - bash: |
@@ -912,29 +890,18 @@ stages:
artifactName: linux-musl-x64-tests artifactName: linux-musl-x64-tests
containerImage: ghcr.io/servarr/testimages:alpine containerImage: ghcr.io/servarr/testimages:alpine
pattern: 'Prowlarr.*.linux-musl-core-x64.tar.gz' 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: pool:
vmImage: ${{ variables.linuxImage }} vmImage: ${{ variables.linuxImage }}
container: $[ variables['containerImage'] ] container: $[ variables['containerImage'] ]
timeoutInMinutes: 15 timeoutInMinutes: 15
steps: steps:
- task: UseDotNet@2 - task: UseDotNet@2
displayName: 'Install .NET' displayName: 'Install .NET'
inputs: inputs:
version: $(dotnetVersion) 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 - checkout: none
- task: DownloadPipelineArtifact@2 - task: DownloadPipelineArtifact@2
displayName: Download Test Artifact displayName: Download Test Artifact
@@ -951,7 +918,7 @@ stages:
targetPath: $(Build.ArtifactStagingDirectory) targetPath: $(Build.ArtifactStagingDirectory)
- task: ExtractFiles@1 - task: ExtractFiles@1
inputs: inputs:
archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)' archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)'
destinationFolder: '$(Build.ArtifactStagingDirectory)/bin' destinationFolder: '$(Build.ArtifactStagingDirectory)/bin'
displayName: Extract Package displayName: Extract Package
- bash: | - bash: |
@@ -974,7 +941,7 @@ stages:
- stage: Automation - stage: Automation
displayName: Automation displayName: Automation
dependsOn: Packages dependsOn: Packages
jobs: jobs:
- job: Automation - job: Automation
strategy: strategy:
@@ -1000,7 +967,7 @@ stages:
pool: pool:
vmImage: $(imageName) vmImage: $(imageName)
steps: steps:
- task: UseDotNet@2 - task: UseDotNet@2
displayName: 'Install .net core' displayName: 'Install .net core'
@@ -1022,7 +989,7 @@ stages:
targetPath: $(Build.ArtifactStagingDirectory) targetPath: $(Build.ArtifactStagingDirectory)
- task: ExtractFiles@1 - task: ExtractFiles@1
inputs: inputs:
archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)' archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)'
destinationFolder: '$(Build.ArtifactStagingDirectory)/bin' destinationFolder: '$(Build.ArtifactStagingDirectory)/bin'
displayName: Extract Package displayName: Extract Package
- bash: | - bash: |
@@ -1126,7 +1093,7 @@ stages:
- checkout: self - checkout: self
submodules: true submodules: true
persistCredentials: true persistCredentials: true
fetchDepth: 1 fetchDepth: 1
- bash: ./docs.sh Windows - bash: ./docs.sh Windows
displayName: Create openapi.json displayName: Create openapi.json
- bash: | - bash: |
@@ -1194,13 +1161,13 @@ stages:
sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml
sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml
- bash: | - bash: |
./build.sh --backend -f net6.0 -r win-x64 ./build.sh --backend -f net8.0 -r win-x64
TEST_DIR=_tests/net6.0/win-x64/publish/ ./test.sh Windows Unit Coverage TEST_DIR=_tests/net8.0/win-x64/publish/ ./test.sh Windows Unit Coverage
displayName: Coverage Unit Tests displayName: Coverage Unit Tests
- task: SonarCloudAnalyze@3 - task: SonarCloudAnalyze@3
condition: eq(variables['System.PullRequest.IsFork'], 'False') condition: eq(variables['System.PullRequest.IsFork'], 'False')
displayName: Publish SonarCloud Results displayName: Publish SonarCloud Results
- task: reportgenerator@5.3.11 - task: reportgenerator@5
displayName: Generate Coverage Report displayName: Generate Coverage Report
inputs: inputs:
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml' reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'
@@ -1238,4 +1205,3 @@ stages:
DISCORDCHANNELID: $(discordChannelId) DISCORDCHANNELID: $(discordChannelId)
DISCORDWEBHOOKKEY: $(discordWebhookKey) DISCORDWEBHOOKKEY: $(discordWebhookKey)
DISCORDTHREADID: $(discordThreadId) DISCORDTHREADID: $(discordThreadId)

View File

@@ -33,14 +33,14 @@ EnableExtraPlatformsInSDK()
echo "Extra platforms already enabled" echo "Extra platforms already enabled"
else else
echo "Enabling extra platform support" 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 fi
} }
EnableExtraPlatforms() EnableExtraPlatforms()
{ {
if grep -qv freebsd-x64 src/Directory.Build.props; then if grep -qv freebsd-x64 src/Directory.Build.props; then
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64;linux-x86</RuntimeIdentifiers>^g" src/Directory.Build.props sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64</RuntimeIdentifiers>^g" src/Directory.Build.props
fi fi
} }
@@ -79,9 +79,9 @@ Build()
if [[ -z "$RID" || -z "$FRAMEWORK" ]]; if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then 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 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 fi
ProgressEnd 'Build' ProgressEnd 'Build'
@@ -137,7 +137,7 @@ PackageLinux()
echo "Adding Prowlarr.Mono to UpdatePackage" echo "Adding Prowlarr.Mono to UpdatePackage"
cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update 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/Mono.Posix.NETStandard.* $folder/Prowlarr.Update
cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update
fi fi
@@ -165,7 +165,7 @@ PackageMacOS()
echo "Adding Prowlarr.Mono to UpdatePackage" echo "Adding Prowlarr.Mono to UpdatePackage"
cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update 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/Mono.Posix.NETStandard.* $folder/Prowlarr.Update
cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update
fi fi
@@ -377,15 +377,14 @@ then
Build Build
if [[ -z "$RID" || -z "$FRAMEWORK" ]]; if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then then
PackageTests "net6.0" "win-x64" PackageTests "net8.0" "win-x64"
PackageTests "net6.0" "win-x86" PackageTests "net8.0" "win-x86"
PackageTests "net6.0" "linux-x64" PackageTests "net8.0" "linux-x64"
PackageTests "net6.0" "linux-musl-x64" PackageTests "net8.0" "linux-musl-x64"
PackageTests "net6.0" "osx-x64" PackageTests "net8.0" "osx-x64"
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ]; if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
then then
PackageTests "net6.0" "freebsd-x64" PackageTests "net8.0" "freebsd-x64"
PackageTests "net6.0" "linux-x86"
fi fi
else else
PackageTests "$FRAMEWORK" "$RID" PackageTests "$FRAMEWORK" "$RID"
@@ -413,20 +412,19 @@ then
if [[ -z "$RID" || -z "$FRAMEWORK" ]]; if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then then
Package "net6.0" "win-x64" Package "net8.0" "win-x64"
Package "net6.0" "win-x86" Package "net8.0" "win-x86"
Package "net6.0" "linux-x64" Package "net8.0" "linux-x64"
Package "net6.0" "linux-musl-x64" Package "net8.0" "linux-musl-x64"
Package "net6.0" "linux-arm64" Package "net8.0" "linux-arm64"
Package "net6.0" "linux-musl-arm64" Package "net8.0" "linux-musl-arm64"
Package "net6.0" "linux-arm" Package "net8.0" "linux-arm"
Package "net6.0" "linux-musl-arm" Package "net8.0" "linux-musl-arm"
Package "net6.0" "osx-x64" Package "net8.0" "osx-x64"
Package "net6.0" "osx-arm64" Package "net8.0" "osx-arm64"
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ]; if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
then then
Package "net6.0" "freebsd-x64" Package "net8.0" "freebsd-x64"
Package "net6.0" "linux-x86"
fi fi
else else
Package "$FRAMEWORK" "$RID" Package "$FRAMEWORK" "$RID"
@@ -436,7 +434,7 @@ fi
if [ "$INSTALLER" = "YES" ]; if [ "$INSTALLER" = "YES" ];
then then
InstallInno InstallInno
BuildInstaller "net6.0" "win-x64" BuildInstaller "net8.0" "win-x64"
BuildInstaller "net6.0" "win-x86" BuildInstaller "net8.0" "win-x86"
RemoveInno RemoveInno
fi fi

View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
set -e set -e
FRAMEWORK="net6.0" FRAMEWORK="net8.0"
PLATFORM=$1 PLATFORM=$1
ARCHITECTURE="${2:-x64}" 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 msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p:RuntimeIdentifiers=$RUNTIME -t:PublishAllRids
dotnet new tool-manifest 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 & dotnet tool run swagger tofile --output ./src/Prowlarr.Api.V1/openapi.json "$outputFolder/$FRAMEWORK/$RUNTIME/$application" v1 &

View File

@@ -33,6 +33,7 @@
.scroller { .scroller {
flex: 1 1 auto; flex: 1 1 auto;
min-height: 400px;
} }
.filterRow { .filterRow {
@@ -57,29 +58,68 @@
font-weight: bold; font-weight: bold;
} }
.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;
}
.filtersToggle:hover {
background-color: var(--hoverBackgroundColor);
}
.filterRowCollapsed {
display: none !important;
}
@media only screen and (max-width: $breakpointSmall) { @media only screen and (max-width: $breakpointSmall) {
.filterInput { .filterInput {
margin-bottom: 5px; margin-bottom: 8px;
} }
.alert { .notice {
display: none; display: none;
} }
.filtersToggle {
display: flex;
}
.filterRow { .filterRow {
display: block; display: block;
margin-bottom: 10px; margin-bottom: 10px;
padding: 10px;
border: 1px solid var(--borderColor);
border-radius: 4px;
background-color: var(--cardBackgroundColor);
} }
.filterContainer { .filterContainer {
margin-right: 0; margin-right: 0;
margin-bottom: 5px; margin-bottom: 8px;
}
.filterContainer:last-child {
margin-bottom: 0;
} }
.scroller { .scroller {
margin-right: -30px; margin-right: -15px;
margin-bottom: -30px; margin-bottom: -15px;
margin-left: -30px; margin-left: -15px;
min-height: 300px;
}
.modalBody {
padding: 15px;
} }
} }

View File

@@ -7,6 +7,8 @@ interface CssExports {
'filterInput': string; 'filterInput': string;
'filterLabel': string; 'filterLabel': string;
'filterRow': string; 'filterRow': string;
'filterRowCollapsed': string;
'filtersToggle': string;
'indexers': string; 'indexers': string;
'modalBody': string; 'modalBody': string;
'modalFooter': string; 'modalFooter': string;

View File

@@ -1,3 +1,4 @@
import classNames from 'classnames';
import { some } from 'lodash'; import { some } from 'lodash';
import React, { useCallback, useEffect, useMemo, useState } from 'react'; import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
@@ -7,6 +8,7 @@ import Alert from 'Components/Alert';
import EnhancedSelectInput from 'Components/Form/EnhancedSelectInput'; import EnhancedSelectInput from 'Components/Form/EnhancedSelectInput';
import NewznabCategorySelectInputConnector from 'Components/Form/NewznabCategorySelectInputConnector'; import NewznabCategorySelectInputConnector from 'Components/Form/NewznabCategorySelectInputConnector';
import TextInput from 'Components/Form/TextInput'; import TextInput from 'Components/Form/TextInput';
import Icon from 'Components/Icon';
import Button from 'Components/Link/Button'; import Button from 'Components/Link/Button';
import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import ModalBody from 'Components/Modal/ModalBody'; import ModalBody from 'Components/Modal/ModalBody';
@@ -16,7 +18,7 @@ import ModalHeader from 'Components/Modal/ModalHeader';
import Scroller from 'Components/Scroller/Scroller'; import Scroller from 'Components/Scroller/Scroller';
import Table from 'Components/Table/Table'; import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody'; 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 Indexer, { IndexerCategory } from 'Indexer/Indexer';
import { import {
fetchIndexerSchema, fetchIndexerSchema,
@@ -25,6 +27,7 @@ import {
} from 'Store/Actions/indexerActions'; } from 'Store/Actions/indexerActions';
import createAllIndexersSelector from 'Store/Selectors/createAllIndexersSelector'; import createAllIndexersSelector from 'Store/Selectors/createAllIndexersSelector';
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector'; import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import { SortCallback } from 'typings/callbacks'; import { SortCallback } from 'typings/callbacks';
import sortByProp from 'Utilities/Array/sortByProp'; import sortByProp from 'Utilities/Array/sortByProp';
import getErrorMessage from 'Utilities/Object/getErrorMessage'; import getErrorMessage from 'Utilities/Object/getErrorMessage';
@@ -111,7 +114,8 @@ function createAddIndexersSelector() {
return createSelector( return createSelector(
createClientSideCollectionSelector('indexers.schema'), createClientSideCollectionSelector('indexers.schema'),
createAllIndexersSelector(), createAllIndexersSelector(),
(indexers: IndexerAppState, allIndexers) => { createDimensionsSelector(),
(indexers: IndexerAppState, allIndexers, dimensions) => {
const { isFetching, isPopulated, error, items, sortDirection, sortKey } = const { isFetching, isPopulated, error, items, sortDirection, sortKey } =
indexers; indexers;
@@ -130,6 +134,7 @@ function createAddIndexersSelector() {
indexers: indexerList, indexers: indexerList,
sortKey, sortKey,
sortDirection, sortDirection,
isSmallScreen: dimensions.isSmallScreen,
}; };
} }
); );
@@ -143,8 +148,15 @@ interface AddIndexerModalContentProps {
function AddIndexerModalContent(props: AddIndexerModalContentProps) { function AddIndexerModalContent(props: AddIndexerModalContentProps) {
const { onSelectIndexer, onModalClose } = props; const { onSelectIndexer, onModalClose } = props;
const { isFetching, isPopulated, error, indexers, sortKey, sortDirection } = const {
useSelector(createAddIndexersSelector()); isFetching,
isPopulated,
error,
indexers,
sortKey,
sortDirection,
isSmallScreen,
} = useSelector(createAddIndexersSelector());
const dispatch = useDispatch(); const dispatch = useDispatch();
const [filter, setFilter] = useState(''); const [filter, setFilter] = useState('');
@@ -152,6 +164,7 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
const [filterLanguages, setFilterLanguages] = useState<string[]>([]); const [filterLanguages, setFilterLanguages] = useState<string[]>([]);
const [filterPrivacyLevels, setFilterPrivacyLevels] = useState<string[]>([]); const [filterPrivacyLevels, setFilterPrivacyLevels] = useState<string[]>([]);
const [filterCategories, setFilterCategories] = useState<number[]>([]); const [filterCategories, setFilterCategories] = useState<number[]>([]);
const [isFiltersCollapsed, setIsFiltersCollapsed] = useState(isSmallScreen);
useEffect( useEffect(
() => { () => {
@@ -196,6 +209,10 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
[setFilterCategories] [setFilterCategories]
); );
const handleToggleFilters = useCallback(() => {
setIsFiltersCollapsed(!isFiltersCollapsed);
}, [isFiltersCollapsed]);
const onIndexerSelect = useCallback( const onIndexerSelect = useCallback(
({ ({
implementation, implementation,
@@ -322,7 +339,17 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
onChange={onFilterChange} 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}> <div className={styles.filterContainer}>
<label className={styles.filterLabel}> <label className={styles.filterLabel}>
{translate('Protocol')} {translate('Protocol')}

View File

@@ -21,7 +21,7 @@ function createMapStateToProps() {
) => { ) => {
// If a release is deleted this selector may fire before the parent // 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 // we want to return early here and again in the render function to avoid
// trying to show a release that has no information available. // trying to show a release that has no information available.

View File

@@ -30,7 +30,9 @@ export const authenticationMethodOptions = [
key: 'basic', key: 'basic',
get value() { get value() {
return translate('AuthBasic'); return translate('AuthBasic');
} },
isDisabled: true,
isHidden: true
}, },
{ {
key: 'forms', key: 'forms',

View File

@@ -419,7 +419,7 @@ export const reducers = createHandleActions({
const items = newState.items; const items = newState.items;
const index = items.findIndex((item) => item.guid === guid); 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) { if (index >= 0) {
const item = Object.assign({}, items[index], payload); const item = Object.assign({}, items[index], payload);

View File

@@ -2,8 +2,8 @@ import { createSelector } from 'reselect';
import { isCommandExecuting } from 'Utilities/Command'; import { isCommandExecuting } from 'Utilities/Command';
import createCommandSelector from './createCommandSelector'; import createCommandSelector from './createCommandSelector';
function createCommandExecutingSelector(name: string, contraints = {}) { function createCommandExecutingSelector(name: string, constraints = {}) {
return createSelector(createCommandSelector(name, contraints), (command) => { return createSelector(createCommandSelector(name, constraints), (command) => {
return isCommandExecuting(command); return isCommandExecuting(command);
}); });
} }

View File

@@ -2,9 +2,9 @@ import { createSelector } from 'reselect';
import { findCommand } from 'Utilities/Command'; import { findCommand } from 'Utilities/Command';
import createCommandsSelector from './createCommandsSelector'; import createCommandsSelector from './createCommandsSelector';
function createCommandSelector(name: string, contraints = {}) { function createCommandSelector(name: string, constraints = {}) {
return createSelector(createCommandsSelector(), (commands) => { return createSelector(createCommandsSelector(), (commands) => {
return findCommand(commands, { name, ...contraints }); return findCommand(commands, { name, ...constraints });
}); });
} }

5
global.json Normal file
View File

@@ -0,0 +1,5 @@
{
"sdk": {
"version": "8.0.405"
}
}

View File

@@ -29,7 +29,7 @@
"@fortawesome/free-solid-svg-icons": "6.7.2", "@fortawesome/free-solid-svg-icons": "6.7.2",
"@fortawesome/react-fontawesome": "0.2.2", "@fortawesome/react-fontawesome": "0.2.2",
"@juggle/resize-observer": "3.4.0", "@juggle/resize-observer": "3.4.0",
"@microsoft/signalr": "6.0.25", "@microsoft/signalr": "8.0.7",
"@sentry/browser": "7.119.1", "@sentry/browser": "7.119.1",
"@sentry/integrations": "7.119.1", "@sentry/integrations": "7.119.1",
"@types/node": "20.16.11", "@types/node": "20.16.11",

View File

@@ -99,13 +99,6 @@
<RootNamespace Condition="'$(ProwlarrProject)'=='true'">$(MSBuildProjectName.Replace('Prowlarr','NzbDrone'))</RootNamespace> <RootNamespace Condition="'$(ProwlarrProject)'=='true'">$(MSBuildProjectName.Replace('Prowlarr','NzbDrone'))</RootNamespace>
</PropertyGroup> </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 --> <!-- Sentry specific configuration: Only in Release mode -->
<PropertyGroup Condition="'$(Configuration)' == 'Release'"> <PropertyGroup Condition="'$(Configuration)' == 'Release'">
<!-- https://docs.sentry.io/platforms/dotnet/configuration/msbuild/ --> <!-- https://docs.sentry.io/platforms/dotnet/configuration/msbuild/ -->
@@ -136,7 +129,7 @@
<PackageReference Include="NunitXml.TestLogger" Version="3.0.131" /> <PackageReference Include="NunitXml.TestLogger" Version="3.0.131" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TestProject)'=='true' and '$(TargetFramework)'=='net6.0'"> <ItemGroup Condition="'$(TestProject)'=='true' and '$(TargetFramework)'=='net8.0'">
<PackageReference Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" /> <PackageReference Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" />
</ItemGroup> </ItemGroup>
@@ -148,9 +141,9 @@
<!-- Set up stylecop --> <!-- Set up stylecop -->
<ItemGroup Condition="'$(ProwlarrProject)'=='true' and '$(EnableAnalyzers)'!='false'"> <ItemGroup Condition="'$(ProwlarrProject)'=='true' and '$(EnableAnalyzers)'!='false'">
<!-- StyleCop analysis --> <!-- StyleCop analysis -->
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118"> <PackageReference Include="StyleCop.Analyzers.Unstable" Version="1.2.0.556">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<AdditionalFiles Include="$(SolutionDir)stylecop.json" /> <AdditionalFiles Include="$(SolutionDir)stylecop.json" />
</ItemGroup> </ItemGroup>

View File

@@ -39,15 +39,16 @@ namespace NzbDrone.Automation.Test
var service = ChromeDriverService.CreateDefaultService(); var service = ChromeDriverService.CreateDefaultService();
// Timeout as windows automation tests seem to take alot longer to get going // 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.Size = new System.Drawing.Size(1920, 1080);
driver.Manage().Window.FullScreen();
_runner = new NzbDroneRunner(LogManager.GetCurrentClassLogger(), null); _runner = new NzbDroneRunner(LogManager.GetCurrentClassLogger(), null);
_runner.KillAll(); _runner.KillAll();
_runner.Start(true); _runner.Start(true);
driver.Url = "http://localhost:9696"; driver.Navigate().GoToUrl("http://localhost:9696");
var page = new PageBase(driver); var page = new PageBase(driver);
page.WaitForNoSpinner(); page.WaitForNoSpinner();
@@ -67,7 +68,7 @@ namespace NzbDrone.Automation.Test
{ {
try try
{ {
var image = ((ITakesScreenshot)driver).GetScreenshot(); var image = (driver as ITakesScreenshot).GetScreenshot();
image.SaveAsFile($"./{name}_test_screenshot.png", ScreenshotImageFormat.Png); image.SaveAsFile($"./{name}_test_screenshot.png", ScreenshotImageFormat.Png);
} }
catch (Exception ex) catch (Exception ex)

View File

@@ -7,12 +7,11 @@ namespace NzbDrone.Automation.Test.PageModel
{ {
public class PageBase public class PageBase
{ {
private readonly WebDriver _driver; private readonly IWebDriver _driver;
public PageBase(WebDriver driver) public PageBase(IWebDriver driver)
{ {
_driver = driver; _driver = driver;
driver.Manage().Window.Maximize();
} }
public IWebElement FindByClass(string className, int timeout = 5) public IWebElement FindByClass(string className, int timeout = 5)

View File

@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks> <TargetFrameworks>net8.0</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Selenium.Support" Version="4.1.0" /> <PackageReference Include="Selenium.Support" Version="4.1.0" />

View File

@@ -10,13 +10,13 @@ namespace NzbDrone.Common.Test.EnvironmentInfo
[Test] [Test]
public void should_return_version() public void should_return_version()
{ {
BuildInfo.Version.Major.Should().BeOneOf(0, 1, 10); BuildInfo.Version.Major.Should().BeOneOf(0, 2, 10);
} }
[Test] [Test]
public void should_get_branch() public void should_get_branch()
{ {
BuildInfo.Branch.Should().NotBe("unknow"); BuildInfo.Branch.Should().NotBe("unknown");
BuildInfo.Branch.Should().NotBeNullOrWhiteSpace(); BuildInfo.Branch.Should().NotBeNullOrWhiteSpace();
} }
} }

View File

@@ -35,7 +35,7 @@ namespace NzbDrone.Common.Test.Http
private string _httpBinHost; private string _httpBinHost;
private string _httpBinHost2; private string _httpBinHost2;
private System.Net.Http.HttpClient _httpClient = new (); private System.Net.Http.HttpClient _httpClient = new();
[OneTimeSetUp] [OneTimeSetUp]
public void FixtureSetUp() public void FixtureSetUp()

View File

@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks> <TargetFrameworks>net8.0</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\NzbDrone.Host\Prowlarr.Host.csproj" /> <ProjectReference Include="..\NzbDrone.Host\Prowlarr.Host.csproj" />

View File

@@ -1,6 +1,5 @@
using System; using System;
using System.IO; using System.IO;
using System.Runtime.Serialization;
namespace NzbDrone.Common.Disk namespace NzbDrone.Common.Disk
{ {
@@ -24,10 +23,5 @@ namespace NzbDrone.Common.Disk
: base(message, innerException) : base(message, innerException)
{ {
} }
protected DestinationAlreadyExistsException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
} }
} }

View File

@@ -295,7 +295,7 @@ namespace NzbDrone.Common.Disk
return _path.Split(new char[] { '\\', '/' }, StringSplitOptions.RemoveEmptyEntries); return _path.Split(new char[] { '\\', '/' }, StringSplitOptions.RemoveEmptyEntries);
} }
public static OsPath Null => new (null); public static OsPath Null => new(null);
public override string ToString() public override string ToString()
{ {

View File

@@ -75,6 +75,17 @@ namespace NzbDrone.Common.EnvironmentInfo
{ {
try 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"); var oldDbFile = Path.Combine(_appFolderInfo.AppDataFolder, "nzbdrone.db");
if (_startupContext.Args.ContainsKey(StartupContext.APPDATA)) if (_startupContext.Args.ContainsKey(StartupContext.APPDATA))
@@ -115,7 +126,7 @@ namespace NzbDrone.Common.EnvironmentInfo
catch (Exception ex) catch (Exception ex)
{ {
_logger.Debug(ex, ex.Message); _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());
} }
} }

View File

@@ -15,7 +15,7 @@ namespace NzbDrone.Common.EnvironmentInfo
var attributes = assembly.GetCustomAttributes(true); var attributes = assembly.GetCustomAttributes(true);
Branch = "unknow"; Branch = "unknown";
var config = attributes.OfType<AssemblyConfigurationAttribute>().FirstOrDefault(); var config = attributes.OfType<AssemblyConfigurationAttribute>().FirstOrDefault();
if (config != null) if (config != null)

View File

@@ -31,7 +31,7 @@ namespace NzbDrone.Common.Extensions
} }
public static IDictionary<TNewKey, TNewValue> SelectDictionary<TKey, TValue, TNewKey, TNewValue>(this IDictionary<TKey, TValue> dictionary, 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); return dictionary.Select(selection).ToDictionary(t => t.Item1, t => t.Item2);
} }

View File

@@ -9,7 +9,7 @@ namespace NzbDrone.Common.Http
{ {
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie
// NOTE: we are not checking non-ascii characters and we should // NOTE: we are not checking non-ascii characters and we should
private static readonly Regex CookieRegex = new (@"([^\(\)<>@,;:\\""/\[\]\?=\{\}\s]+)=([^,;\\""\s]+)"); private static readonly Regex CookieRegex = new(@"([^\(\)<>@,;:\\""/\[\]\?=\{\}\s]+)=([^,;\\""\s]+)");
private static readonly string[] FilterProps = { "COMMENT", "COMMENTURL", "DISCORD", "DOMAIN", "EXPIRES", "MAX-AGE", "PATH", "PORT", "SECURE", "VERSION", "HTTPONLY", "SAMESITE" }; private static readonly string[] FilterProps = { "COMMENT", "COMMENTURL", "DISCORD", "DOMAIN", "EXPIRES", "MAX-AGE", "PATH", "PORT", "SECURE", "VERSION", "HTTPONLY", "SAMESITE" };
private static readonly char[] InvalidKeyChars = { '(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', '/', '[', ']', '?', '=', '{', '}', ' ', '\t', '\n' }; private static readonly char[] InvalidKeyChars = { '(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', '/', '[', ']', '?', '=', '{', '}', ' ', '\t', '\n' };
private static readonly char[] InvalidValueChars = { '"', ',', ';', '\\', ' ', '\t', '\n' }; private static readonly char[] InvalidValueChars = { '"', ',', ';', '\\', ' ', '\t', '\n' };

View File

@@ -97,7 +97,7 @@ namespace NzbDrone.Common.Http
// Save to add to final response // Save to add to final response
var responseCookies = response.Cookies; 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); var responseContainer = HandleRedirectCookies(request, response);
response = await ExecuteRequestAsync(request, responseContainer); response = await ExecuteRequestAsync(request, responseContainer);

View File

@@ -9,7 +9,7 @@ namespace NzbDrone.Common.Http
{ {
public class HttpResponse public class HttpResponse
{ {
private static readonly Regex RegexRefresh = new ("^(.*?url)=(.*?)(?:;|$)", RegexOptions.Compiled); private static readonly Regex RegexRefresh = new("^(.*?url)=(.*?)(?:;|$)", RegexOptions.Compiled);
public HttpResponse(HttpRequest request, HttpHeader headers, CookieCollection cookies, byte[] binaryData, long elapsedTime = 0, HttpStatusCode statusCode = HttpStatusCode.OK, Version version = null) public HttpResponse(HttpRequest request, HttpHeader headers, CookieCollection cookies, byte[] binaryData, long elapsedTime = 0, HttpStatusCode statusCode = HttpStatusCode.OK, Version version = null)
{ {

View File

@@ -5,7 +5,7 @@ namespace NzbDrone.Common.Http
{ {
public static class UserAgentParser public static class UserAgentParser
{ {
private static readonly Regex AppSourceRegex = new (@"^(?<agent>[a-z0-9]+)(?:\/.+(?:\(.*\))?|$)", private static readonly Regex AppSourceRegex = new(@"^(?<agent>[a-z0-9]+)(?:\/.+(?:\(.*\))?|$)",
RegexOptions.IgnoreCase | RegexOptions.Compiled); RegexOptions.IgnoreCase | RegexOptions.Compiled);
public static string SimplifyUserAgent(string userAgent) public static string SimplifyUserAgent(string userAgent)

View File

@@ -10,64 +10,64 @@ namespace NzbDrone.Common.Instrumentation
private static readonly Regex[] CleansingRules = private static readonly Regex[] CleansingRules =
{ {
// Url // Url
new (@"(?<=[?&: ;])(apikey|api_key|(?:(?:access|api)[-_]?)?token|pass(?:key|wd)?|auth|authkey|rsskey|user|u?id|api|[a-z_]*apikey|account|pid|pwd)=(?<secret>[^&=""]+?)(?=[ ""&=]|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?<=[?&: ;])(apikey|api_key|(?:(?:access|api)[-_]?)?token|pass(?:key|wd)?|auth|authkey|rsskey|user|u?id|api|[a-z_]*apikey|account|pid|pwd)=(?<secret>[^&=""]+?)(?=[ ""&=]|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"(?<=[?& ;])[^=]*?(_?(?<!use|get_)token|username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$|;)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?<=[?& ;])[^=]*?(_?(?<!use|get_)token|username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$|;)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"rss(24h)?\.torrentleech\.org/(?!rss)(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"rss(24h)?\.torrentleech\.org/(?!rss)(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"torrentleech\.org/rss/download/[0-9]+/(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"torrentleech\.org/rss/download/[0-9]+/(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"iptorrents\.com/[/a-z0-9?&;]*?(?:[?&;](u|tp)=(?<secret>[^&=;]+?))+(?= |;|&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"iptorrents\.com/[/a-z0-9?&;]*?(?:[?&;](u|tp)=(?<secret>[^&=;]+?))+(?= |;|&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"/fetch/[a-z0-9]{32}/(?<secret>[a-z0-9]{32})", RegexOptions.Compiled), new(@"/fetch/[a-z0-9]{32}/(?<secret>[a-z0-9]{32})", RegexOptions.Compiled),
new (@"getnzb.*?(?<=\?|&)(r)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"getnzb.*?(?<=\?|&)(r)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"\b(\w*)?(_?(?<!use|get_)token|username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$|;)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"\b(\w*)?(_?(?<!use|get_)token|username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$|;)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"(?<=authkey = "")(?<secret>[^&=]+?)(?="")", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?<=authkey = "")(?<secret>[^&=]+?)(?="")", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"(?<=beyond-hd\.[a-z]+/api/torrents/)(?<secret>[^&=][a-z0-9]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?<=beyond-hd\.[a-z]+/api/torrents/)(?<secret>[^&=][a-z0-9]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"(?<=beyond-hd\.[a-z]+/torrent/download/[\w\d-]+[.]\d+[.])(?<secret>[a-z0-9]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?<=beyond-hd\.[a-z]+/torrent/download/[\w\d-]+[.]\d+[.])(?<secret>[a-z0-9]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"(?:sharewood)\.[a-z]{2,3}/api/(?<secret>[a-z0-9]{16,})/", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?:sharewood)\.[a-z]{2,3}/api/(?<secret>[a-z0-9]{16,})/", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// UNIT3D // UNIT3D
new (@"(?<=[a-z0-9-]+\.[a-z]+/torrent/download/\d+\.)(?<secret>[^&=][a-z0-9]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?<=[a-z0-9-]+\.[a-z]+/torrent/download/\d+\.)(?<secret>[^&=][a-z0-9]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// Path // Path
new (@"""C:\\Users\\(?<secret>[^\""]+?)(\\|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"""C:\\Users\\(?<secret>[^\""]+?)(\\|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"""/(home|Users)/(?<secret>[^/""]+?)(/|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"""/(home|Users)/(?<secret>[^/""]+?)(/|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// Trackers Announce Keys; Designed for Qbit Json; should work for all in theory // Trackers Announce Keys; Designed for Qbit Json; should work for all in theory
new (@"announce(\.php)?(/|%2f|%3fpasskey%3d)(?<secret>[a-z0-9]{16,})|(?<secret>[a-z0-9]{16,})(/|%2f)announce", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"announce(\.php)?(/|%2f|%3fpasskey%3d)(?<secret>[a-z0-9]{16,})|(?<secret>[a-z0-9]{16,})(/|%2f)announce", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// NzbGet // NzbGet
new (@"""Name""\s*:\s*""[^""]*(username|password)""\s*,\s*""Value""\s*:\s*""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"""Name""\s*:\s*""[^""]*(username|password)""\s*,\s*""Value""\s*:\s*""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// Sabnzbd // Sabnzbd
new (@"""[^""]*(username|password|api_?key|nzb_key)""\s*:\s*""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"""[^""]*(username|password|api_?key|nzb_key)""\s*:\s*""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"""email_(account|to|from|pwd)""\s*:\s*""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"""email_(account|to|from|pwd)""\s*:\s*""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// uTorrent // uTorrent
new (@"\[""[a-z._]*(username|password)"",\d,""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"\[""[a-z._]*(username|password)"",\d,""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"\[""(boss_key|boss_key_salt|proxy\.proxy)"",\d,""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"\[""(boss_key|boss_key_salt|proxy\.proxy)"",\d,""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// Deluge // Deluge
new (@"auth.login\(""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"auth.login\(""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// BroadcastheNet (;torrent_pass|torrents_notify_ is for MTV) // BroadcastheNet (;torrent_pass|torrents_notify_ is for MTV)
new (@"""?method""?\s*:\s*""(getTorrents)"",\s*""?params""?\s*:\s*\[\s*""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"""?method""?\s*:\s*""(getTorrents)"",\s*""?params""?\s*:\s*\[\s*""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"getTorrents\(""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"getTorrents\(""(?<secret>[^""]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"(?<=\?|&|;|=)(authkey|torrent_pass|torrents_notify)[_=](?<secret>[^&=]+?)(?=""|&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?<=\?|&|;|=)(authkey|torrent_pass|torrents_notify)[_=](?<secret>[^&=]+?)(?=""|&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// Plex // Plex
new (@"(?<=\?|&)(X-Plex-Client-Identifier|X-Plex-Token)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?<=\?|&)(X-Plex-Client-Identifier|X-Plex-Token)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// Indexer Responses // Indexer Responses
new (@"(?:avistaz|exoticaz|cinemaz|privatehd)\.[a-z]{2,3}/rss/download/(?<secret>[^&=]+?)/(?<secret>[^&=]+?)\.torrent", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?:avistaz|exoticaz|cinemaz|privatehd)\.[a-z]{2,3}/rss/download/(?<secret>[^&=]+?)/(?<secret>[^&=]+?)\.torrent", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"(?:animebytes)\.[a-z]{2,3}/torrent/[0-9]+/download/(?<secret>[^&=]+?)[""]", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"(?:animebytes)\.[a-z]{2,3}/torrent/[0-9]+/download/(?<secret>[^&=]+?)[""]", RegexOptions.Compiled | RegexOptions.IgnoreCase),
new (@"""(info_hash|token|((pass|rss)[- _]?key))"":""(?<secret>[^&=]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"""(info_hash|token|((pass|rss)[- _]?key))"":""(?<secret>[^&=]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// Applications // Applications
new (@"""name"":""apikey"",""value"":""(?<secret>[^&=]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase), new(@"""name"":""apikey"",""value"":""(?<secret>[^&=]+?)""", RegexOptions.Compiled | RegexOptions.IgnoreCase),
// Discord // Discord
new (@"discord.com/api/webhooks/((?<secret>[\w-]+)/)?(?<secret>[\w-]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase) new(@"discord.com/api/webhooks/((?<secret>[\w-]+)/)?(?<secret>[\w-]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase)
}; };
private static readonly Regex CleanseRemoteIPRegex = new (@"(?:Auth-\w+(?<!Failure|Unauthorized) ip|from) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", RegexOptions.Compiled); private static readonly Regex CleanseRemoteIPRegex = new(@"(?:Auth-\w+(?<!Failure|Unauthorized) ip|from) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", RegexOptions.Compiled);
public static string Cleanse(string message) public static string Cleanse(string message)
{ {

View File

@@ -15,8 +15,8 @@ namespace NzbDrone.Common.Instrumentation
private const string FileLogLayout = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; private const string FileLogLayout = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
private const string ConsoleFormat = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; private const string ConsoleFormat = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
private static readonly CleansingConsoleLogLayout CleansingConsoleLayout = new (ConsoleFormat); private static readonly CleansingConsoleLogLayout CleansingConsoleLayout = new(ConsoleFormat);
private static readonly CleansingClefLogLayout ClefLogLayout = new (); private static readonly CleansingClefLogLayout ClefLogLayout = new();
private static bool _isConfigured; private static bool _isConfigured;
@@ -202,6 +202,7 @@ namespace NzbDrone.Common.Instrumentation
c.ForLogger("Microsoft.*").WriteToNil(LogLevel.Warn); c.ForLogger("Microsoft.*").WriteToNil(LogLevel.Warn);
c.ForLogger("Microsoft.Hosting.Lifetime*").WriteToNil(LogLevel.Info); c.ForLogger("Microsoft.Hosting.Lifetime*").WriteToNil(LogLevel.Info);
c.ForLogger("Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware").WriteToNil(LogLevel.Fatal); c.ForLogger("Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware").WriteToNil(LogLevel.Fatal);
c.ForLogger("Prowlarr.Http.Authentication.ApiKeyAuthenticationHandler").WriteToNil(LogLevel.Info);
}); });
} }

View File

@@ -1,28 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks> <TargetFrameworks>net8.0</TargetFrameworks>
<DefineConstants Condition="'$(RuntimeIdentifier)' == 'linux-musl-x64' or '$(RuntimeIdentifier)' == 'linux-musl-arm64'">ISMUSL</DefineConstants> <DefineConstants Condition="'$(RuntimeIdentifier)' == 'linux-musl-x64' or '$(RuntimeIdentifier)' == 'linux-musl-arm64'">ISMUSL</DefineConstants>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DryIoc.dll" Version="5.4.3" /> <PackageReference Include="DryIoc.dll" Version="5.4.3" />
<PackageReference Include="IPAddressRange" Version="6.2.0" /> <PackageReference Include="IPAddressRange" Version="6.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.2" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.3" /> <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.4.0" /> <PackageReference Include="NLog" Version="5.4.0" />
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.3" /> <PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.3" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" /> <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="Sentry" Version="4.0.2" />
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" /> <PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
<PackageReference Include="SharpZipLib" Version="1.4.2" /> <PackageReference Include="SharpZipLib" Version="1.4.2" />
<PackageReference Include="System.Text.Json" Version="6.0.11" /> <PackageReference Include="System.Text.Json" Version="8.0.5" />
<PackageReference Include="System.ValueTuple" Version="4.6.1" /> <PackageReference Include="System.ValueTuple" Version="4.6.1" />
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" /> <PackageReference Include="System.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.IO.FileSystem.AccessControl" Version="5.0.0" />
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" /> <PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="6.0.1" /> <PackageReference Include="System.ServiceProcess.ServiceController" Version="8.0.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Update="EnsureThat\Resources\ExceptionMessages.Designer.cs"> <Compile Update="EnsureThat\Resources\ExceptionMessages.Designer.cs">

View File

@@ -94,7 +94,8 @@ namespace NzbDrone.Common.TPL
{ {
_currentThreadIsProcessingItems = false; _currentThreadIsProcessingItems = false;
} }
}, null); },
null);
} }
/// <summary>Attempts to execute the specified task on the current thread.</summary> /// <summary>Attempts to execute the specified task on the current thread.</summary>

View File

@@ -20,7 +20,8 @@ namespace NzbDrone.Common.TPL
Logger.Error(exception, "Task Error"); Logger.Error(exception, "Task Error");
} }
} }
}, TaskContinuationOptions.OnlyOnFaulted); },
TaskContinuationOptions.OnlyOnFaulted);
return task; return task;
} }

View File

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFrameworks>net6.0</TargetFrameworks> <TargetFrameworks>net8.0</TargetFrameworks>
<ApplicationIcon>..\NzbDrone.Host\Prowlarr.ico</ApplicationIcon> <ApplicationIcon>..\NzbDrone.Host\Prowlarr.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>

View File

@@ -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; }
}
}

View File

@@ -149,7 +149,8 @@
} }
], ],
"music_type": null, "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, "id": 187239,
@@ -195,7 +196,8 @@
} }
], ],
"music_type": null, "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, "id": 187238,
@@ -241,7 +243,8 @@
} }
], ],
"music_type": null, "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, "id": 187237,
@@ -287,7 +290,8 @@
} }
], ],
"music_type": null, "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, "id": 187236,
@@ -333,7 +337,8 @@
} }
], ],
"music_type": null, "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, "id": 187234,
@@ -379,7 +384,8 @@
} }
], ],
"music_type": null, "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, "id": 187233,
@@ -425,7 +431,8 @@
} }
], ],
"music_type": null, "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, "id": 187231,
@@ -452,7 +459,7 @@
"imdb": "tt1143942", "imdb": "tt1143942",
"tmdb": "83665", "tmdb": "83665",
"tvdb": null, "tvdb": null,
"title": "Kaiky\u00f4", "title": "Kaikyô",
"tv_season": 1, "tv_season": 1,
"tv_episode": null, "tv_episode": null,
"tv_full_season": true, "tv_full_season": true,
@@ -471,7 +478,8 @@
} }
], ],
"music_type": null, "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, "id": 187229,
@@ -517,7 +525,8 @@
} }
], ],
"music_type": null, "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, "id": 187225,
@@ -583,7 +592,8 @@
} }
], ],
"music_type": null, "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, "id": 187224,
@@ -633,7 +643,8 @@
} }
], ],
"music_type": null, "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, "id": 187223,
@@ -679,7 +690,8 @@
} }
], ],
"music_type": null, "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, "id": 187221,
@@ -720,7 +732,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187219,
@@ -798,7 +811,8 @@
} }
], ],
"music_type": null, "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, "id": 187218,
@@ -876,7 +890,8 @@
} }
], ],
"music_type": null, "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, "id": 187216,
@@ -917,7 +932,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187215,
@@ -967,7 +983,8 @@
} }
], ],
"music_type": null, "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, "id": 187214,
@@ -1008,7 +1025,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187213,
@@ -1049,7 +1067,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187212,
@@ -1095,7 +1114,8 @@
} }
], ],
"music_type": null, "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, "id": 187210,
@@ -1136,7 +1156,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187211,
@@ -1182,7 +1203,8 @@
} }
], ],
"music_type": 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": 187209, "id": 187209,
@@ -1223,7 +1245,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187208,
@@ -1269,7 +1292,8 @@
} }
], ],
"music_type": null, "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, "id": 187207,
@@ -1319,7 +1343,8 @@
} }
], ],
"music_type": null, "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, "id": 187206,
@@ -1360,7 +1385,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187205,
@@ -1401,7 +1427,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187204,
@@ -1447,7 +1474,8 @@
} }
], ],
"music_type": null, "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, "id": 187203,
@@ -1488,7 +1516,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187202,
@@ -1529,7 +1558,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187201,
@@ -1570,7 +1600,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187200,
@@ -1611,7 +1642,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187199,
@@ -1652,7 +1684,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187197,
@@ -1718,7 +1751,8 @@
} }
], ],
"music_type": null, "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, "id": 187196,
@@ -1764,7 +1798,8 @@
} }
], ],
"music_type": null, "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, "id": 187195,
@@ -1805,7 +1840,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187191,
@@ -1814,7 +1850,7 @@
"type_id": 2, "type_id": 2,
"type": "TV-Show", "type": "TV-Show",
"info_hash": "(removed)", "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_size": 4075094335,
"file_count": 5, "file_count": 5,
"seed": 7, "seed": 7,
@@ -1832,7 +1868,7 @@
"imdb": null, "imdb": null,
"tmdb": "107936", "tmdb": "107936",
"tvdb": null, "tvdb": null,
"title": "\u78a7\u8840\u6d17\u94f6\u67aa", "title": "碧血洗银枪",
"tv_season": null, "tv_season": null,
"tv_episode": null, "tv_episode": null,
"tv_full_season": false, "tv_full_season": false,
@@ -1859,7 +1895,8 @@
} }
], ],
"music_type": null, "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, "id": 187190,
@@ -1929,7 +1966,8 @@
} }
], ],
"music_type": null, "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, "id": 187189,
@@ -1999,7 +2037,8 @@
} }
], ],
"music_type": null, "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, "id": 187188,
@@ -2073,7 +2112,8 @@
} }
], ],
"music_type": null, "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, "id": 187169,
@@ -2147,7 +2187,8 @@
} }
], ],
"music_type": null, "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, "id": 187168,
@@ -2193,7 +2234,8 @@
} }
], ],
"music_type": null, "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, "id": 187167,
@@ -2239,7 +2281,8 @@
} }
], ],
"music_type": null, "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, "id": 187165,
@@ -2285,7 +2328,8 @@
} }
], ],
"music_type": null, "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, "id": 187164,
@@ -2355,7 +2399,8 @@
} }
], ],
"music_type": null, "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, "id": 187163,
@@ -2382,7 +2427,7 @@
"imdb": null, "imdb": null,
"tmdb": "138573", "tmdb": "138573",
"tvdb": null, "tvdb": null,
"title": "\u51b2\u51fb", "title": "冲击",
"tv_season": null, "tv_season": null,
"tv_episode": null, "tv_episode": null,
"tv_full_season": false, "tv_full_season": false,
@@ -2396,7 +2441,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187162,
@@ -2454,7 +2500,8 @@
} }
], ],
"music_type": null, "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, "id": 187158,
@@ -2500,7 +2547,8 @@
} }
], ],
"music_type": null, "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, "id": 187157,
@@ -2546,7 +2594,8 @@
} }
], ],
"music_type": null, "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, "id": 187156,
@@ -2592,7 +2641,8 @@
} }
], ],
"music_type": null, "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, "id": 187155,
@@ -2638,7 +2688,8 @@
} }
], ],
"music_type": null, "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, "id": 187150,
@@ -2684,7 +2735,8 @@
} }
], ],
"music_type": null, "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, "id": 187149,
@@ -2730,7 +2782,8 @@
} }
], ],
"music_type": null, "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, "id": 187148,
@@ -2776,7 +2829,8 @@
} }
], ],
"music_type": null, "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, "id": 187147,
@@ -2822,7 +2876,8 @@
} }
], ],
"music_type": null, "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, "id": 187146,
@@ -2868,7 +2923,8 @@
} }
], ],
"music_type": null, "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, "id": 187145,
@@ -2914,7 +2970,8 @@
} }
], ],
"music_type": null, "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, "id": 187144,
@@ -2960,7 +3017,8 @@
} }
], ],
"music_type": null, "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, "id": 187143,
@@ -3006,7 +3064,8 @@
} }
], ],
"music_type": null, "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, "id": 187142,
@@ -3052,7 +3111,8 @@
} }
], ],
"music_type": null, "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, "id": 187141,
@@ -3098,7 +3158,8 @@
} }
], ],
"music_type": null, "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, "id": 187140,
@@ -3144,7 +3205,8 @@
} }
], ],
"music_type": null, "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, "id": 187139,
@@ -3190,7 +3252,8 @@
} }
], ],
"music_type": null, "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, "id": 187138,
@@ -3236,7 +3299,8 @@
} }
], ],
"music_type": null, "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, "id": 187137,
@@ -3282,7 +3346,8 @@
} }
], ],
"music_type": null, "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, "id": 187136,
@@ -3328,7 +3393,8 @@
} }
], ],
"music_type": null, "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, "id": 187135,
@@ -3378,7 +3444,8 @@
} }
], ],
"music_type": null, "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, "id": 187134,
@@ -3424,7 +3491,8 @@
} }
], ],
"music_type": null, "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, "id": 187133,
@@ -3470,7 +3538,8 @@
} }
], ],
"music_type": null, "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, "id": 187132,
@@ -3528,7 +3597,8 @@
} }
], ],
"music_type": null, "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, "id": 187131,
@@ -3569,7 +3639,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187130,
@@ -3615,7 +3686,8 @@
} }
], ],
"music_type": null, "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, "id": 187129,
@@ -3656,7 +3728,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187128,
@@ -3706,7 +3779,8 @@
} }
], ],
"music_type": null, "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, "id": 187127,
@@ -3752,7 +3826,8 @@
} }
], ],
"music_type": null, "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, "id": 187126,
@@ -3802,7 +3877,8 @@
} }
], ],
"music_type": null, "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, "id": 187125,
@@ -3848,7 +3924,8 @@
} }
], ],
"music_type": null, "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, "id": 187124,
@@ -3889,7 +3966,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187123,
@@ -3939,7 +4017,8 @@
} }
], ],
"music_type": null, "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, "id": 187122,
@@ -3980,7 +4059,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187121,
@@ -4021,7 +4101,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187120,
@@ -4067,7 +4148,8 @@
} }
], ],
"music_type": null, "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, "id": 187119,
@@ -4113,7 +4195,8 @@
} }
], ],
"music_type": null, "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, "id": 187118,
@@ -4154,7 +4237,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187117,
@@ -4195,7 +4279,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187116,
@@ -4236,7 +4321,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187115,
@@ -4286,7 +4372,8 @@
} }
], ],
"music_type": null, "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, "id": 187114,
@@ -4327,7 +4414,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187113,
@@ -4368,7 +4456,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187112,
@@ -4409,7 +4498,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187111,
@@ -4463,7 +4553,8 @@
} }
], ],
"music_type": null, "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, "id": 187110,
@@ -4504,7 +4595,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187109,
@@ -4545,7 +4637,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187107,
@@ -4586,7 +4679,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187106,
@@ -4632,7 +4726,8 @@
} }
], ],
"music_type": null, "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, "id": 187105,
@@ -4673,7 +4768,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187104,
@@ -4714,7 +4810,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 187103,
@@ -4760,7 +4857,8 @@
} }
], ],
"music_type": null, "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, "id": 187102,
@@ -4810,7 +4908,8 @@
} }
], ],
"music_type": null, "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, "id": 187101,
@@ -4856,7 +4955,8 @@
} }
], ],
"music_type": null, "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", "first_page_url": "https:\/\/avistaz.to\/api\/v1\/jackett\/torrents?type=2&page=1",
@@ -4869,4 +4969,4 @@
"prev_page_url": null, "prev_page_url": null,
"to": 100, "to": 100,
"total": 31393 "total": 31393
} }

View File

@@ -1,4 +1,4 @@
{ {
"current_page": 1, "current_page": 1,
"data": [ "data": [
{ {
@@ -50,7 +50,8 @@
"images/torrent/1/4/0/mxgwdlpk4pt2.jpg" "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 &amp; Celebrity</p>", "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 &amp; 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, "id": 61953,
@@ -106,7 +107,8 @@
"images/torrent/0/4/0/gsuctius9zw2.jpg" "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>", "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, "id": 61947,
@@ -161,7 +163,8 @@
"images/torrent/0/0/e/g6tquwvlmfdx.jpg" "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>", "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, "id": 61630,
@@ -223,7 +226,8 @@
"images/torrent/f/2/5/kdihq6gibacb.jpg" "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>", "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, "id": 61514,
@@ -275,7 +279,8 @@
"images/torrent/e/2/a/ujrvmtgjakko.jpg" "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>", "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, "id": 59929,
@@ -325,7 +330,8 @@
"images/torrent/c/4/a/hycbduxlw3ei.jpg" "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 &amp; 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>", "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 &amp; 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, "id": 58235,
@@ -374,7 +380,8 @@
"images/torrent/3/6/1/6fuhfb5kcbpz.jpg" "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>", "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, "id": 57416,
@@ -640,7 +647,8 @@
"images/torrent/3/8/f/hxzly7alqt9f.jpg" "images/torrent/3/8/f/hxzly7alqt9f.jpg"
], ],
"description": null, "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, "id": 56332,
@@ -690,7 +698,8 @@
"images/torrent/2/9/6/bw4kyn1ckz5u.jpg" "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>", "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, "id": 56108,
@@ -742,7 +751,8 @@
"images/torrent/d/6/b/gexzyognkxeb.jpg" "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>", "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, "id": 54324,
@@ -797,7 +807,8 @@
"images/torrent/9/7/d/ujzu5he0deum.jpg" "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 &amp; 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>", "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 &amp; 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, "id": 53526,
@@ -864,7 +875,8 @@
"images/torrent/7/d/0/w4lraenuqmos.jpg" "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 &amp; 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>", "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 &amp; 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, "id": 52648,
@@ -915,7 +927,8 @@
"images/torrent/8/7/2/92ph60ekxpkx.jpg" "images/torrent/8/7/2/92ph60ekxpkx.jpg"
], ],
"description": "<p>Actresses: Yua Mikami<br>Categories<br>Big TitsFeatured ActressNymphomaniacIdol &amp; 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>", "description": "<p>Actresses: Yua Mikami<br>Categories<br>Big TitsFeatured ActressNymphomaniacIdol &amp; 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, "id": 52438,
@@ -972,7 +985,8 @@
"images/torrent/0/9/2/yhdsjr2jrf2k.gif" "images/torrent/0/9/2/yhdsjr2jrf2k.gif"
], ],
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&amp;search=KnickerZ&amp;uploader=&amp;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 &amp; 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>", "description": "<p><a href=\"https://exoticaz.to/torrents?in=1&amp;search=KnickerZ&amp;uploader=&amp;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 &amp; 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, "id": 52436,
@@ -1023,7 +1037,8 @@
"images/torrent/1/0/9/rj8pemdpmdce.gif" "images/torrent/1/0/9/rj8pemdpmdce.gif"
], ],
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&amp;search=KnickerZ&amp;uploader=&amp;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 &amp; doggy<br>Various Sex Acts Included : Oral, Doggy, One on One sex, MF sex, Facials, Cumshots, Missionary Sex, Handjob, Blowjobs, Blowbangs, Handjobs, Cowgirl &amp; 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>", "description": "<p><a href=\"https://exoticaz.to/torrents?in=1&amp;search=KnickerZ&amp;uploader=&amp;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 &amp; doggy<br>Various Sex Acts Included : Oral, Doggy, One on One sex, MF sex, Facials, Cumshots, Missionary Sex, Handjob, Blowjobs, Blowbangs, Handjobs, Cowgirl &amp; 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, "id": 52434,
@@ -1074,7 +1089,8 @@
"images/torrent/9/0/6/jpoyeqdohhft.gif" "images/torrent/9/0/6/jpoyeqdohhft.gif"
], ],
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&amp;search=KnickerZ&amp;uploader=&amp;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 &amp; 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>", "description": "<p><a href=\"https://exoticaz.to/torrents?in=1&amp;search=KnickerZ&amp;uploader=&amp;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 &amp; 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, "id": 51414,
@@ -1125,7 +1141,8 @@
"images/torrent/7/a/2/v4bbhqrhfaic.jpg" "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>", "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, "id": 50935,
@@ -1178,7 +1195,8 @@
"images/torrent/4/d/2/8ppl4ibq95se.png" "images/torrent/4/d/2/8ppl4ibq95se.png"
], ],
"description": null, "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, "id": 50154,
@@ -1244,7 +1262,8 @@
"images/torrent/a/7/7/t90zggbrwwf5.jpg" "images/torrent/a/7/7/t90zggbrwwf5.jpg"
], ],
"description": null, "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, "id": 49718,
@@ -1312,7 +1331,8 @@
"images/torrent/5/9/9/7uo17medy6ib.jpg" "images/torrent/5/9/9/7uo17medy6ib.jpg"
], ],
"description": null, "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, "id": 49717,
@@ -1368,7 +1388,8 @@
"images/torrent/2/4/0/f99j7rtxwlni.jpg" "images/torrent/2/4/0/f99j7rtxwlni.jpg"
], ],
"description": null, "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, "id": 49715,
@@ -1423,7 +1444,8 @@
"images/torrent/7/3/5/6e8mmocet7pq.jpg" "images/torrent/7/3/5/6e8mmocet7pq.jpg"
], ],
"description": null, "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, "id": 49714,
@@ -1477,7 +1499,8 @@
"images/torrent/5/a/b/bchwfgrs4jm4.jpg" "images/torrent/5/a/b/bchwfgrs4jm4.jpg"
], ],
"description": null, "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, "id": 49712,
@@ -1532,7 +1555,8 @@
"images/torrent/d/8/0/n8wlosqiuz92.jpg" "images/torrent/d/8/0/n8wlosqiuz92.jpg"
], ],
"description": null, "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, "id": 49647,
@@ -1588,7 +1612,8 @@
"images/torrent/c/5/f/nc1q6ejlvyqu.jpg" "images/torrent/c/5/f/nc1q6ejlvyqu.jpg"
], ],
"description": null, "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, "id": 49646,
@@ -1640,7 +1665,8 @@
"images/torrent/c/5/8/c1wfncbm1eve.jpg" "images/torrent/c/5/8/c1wfncbm1eve.jpg"
], ],
"description": null, "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, "id": 49645,
@@ -1696,7 +1722,8 @@
"images/torrent/8/4/e/wc4toojco9dx.jpg" "images/torrent/8/4/e/wc4toojco9dx.jpg"
], ],
"description": null, "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, "id": 49644,
@@ -1752,7 +1779,8 @@
"images/torrent/7/7/c/4qp3mqsokrnw.jpg" "images/torrent/7/7/c/4qp3mqsokrnw.jpg"
], ],
"description": null, "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, "id": 49643,
@@ -1804,7 +1832,8 @@
"images/torrent/0/9/f/fgwbfeqmzftr.jpg" "images/torrent/0/9/f/fgwbfeqmzftr.jpg"
], ],
"description": null, "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, "id": 49079,
@@ -1858,7 +1887,8 @@
"images/torrent/7/d/d/xe1gcbp5acwx.png" "images/torrent/7/d/d/xe1gcbp5acwx.png"
], ],
"description": null, "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, "id": 49056,
@@ -1912,7 +1942,8 @@
"images/torrent/e/1/1/yv3ablrdkgfv.jpg" "images/torrent/e/1/1/yv3ablrdkgfv.jpg"
], ],
"description": null, "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, "id": 49050,
@@ -1963,7 +1994,8 @@
"images/torrent/3/3/1/uorz1hpm1hld.jpg" "images/torrent/3/3/1/uorz1hpm1hld.jpg"
], ],
"description": null, "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, "id": 49049,
@@ -2018,7 +2050,8 @@
"images/torrent/9/6/e/bahbhr2gaqeq.jpg" "images/torrent/9/6/e/bahbhr2gaqeq.jpg"
], ],
"description": null, "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, "id": 49048,
@@ -2073,7 +2106,8 @@
"images/torrent/7/8/b/eq1jkrz8icoi.jpg" "images/torrent/7/8/b/eq1jkrz8icoi.jpg"
], ],
"description": null, "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, "id": 49038,
@@ -2129,7 +2163,8 @@
"images/torrent/0/1/7/c2hcjiknuv26.jpg" "images/torrent/0/1/7/c2hcjiknuv26.jpg"
], ],
"description": null, "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, "id": 49037,
@@ -2185,7 +2220,8 @@
"images/torrent/f/c/c/sir7gae1bnjv.jpg" "images/torrent/f/c/c/sir7gae1bnjv.jpg"
], ],
"description": null, "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, "id": 48883,
@@ -2234,7 +2270,8 @@
"images/torrent/1/5/7/myv4v8tpa6d6.jpg" "images/torrent/1/5/7/myv4v8tpa6d6.jpg"
], ],
"description": "<p>ISO: https://exoticaz.to/torrent/48124</p>", "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, "id": 48364,
@@ -2276,7 +2313,8 @@
"images/torrent/f/b/f/lw6fcsf6fz9z.jpg" "images/torrent/f/b/f/lw6fcsf6fz9z.jpg"
], ],
"description": "<p>Somebody requested this separately from pack that is already on here.</p>", "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, "id": 48189,
@@ -2331,7 +2369,8 @@
"images/torrent/6/3/2/5yvhovuhybyd.jpg" "images/torrent/6/3/2/5yvhovuhybyd.jpg"
], ],
"description": null, "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, "id": 48186,
@@ -2388,7 +2427,8 @@
"images/torrent/6/0/8/e6jahgfjtvkf.jpg" "images/torrent/6/0/8/e6jahgfjtvkf.jpg"
], ],
"description": null, "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, "id": 48184,
@@ -2444,7 +2484,8 @@
"images/torrent/9/a/b/msjcjdcarxj2.jpg" "images/torrent/9/a/b/msjcjdcarxj2.jpg"
], ],
"description": null, "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, "id": 48181,
@@ -2500,7 +2541,8 @@
"images/torrent/f/c/c/hkmy2iaaessw.jpg" "images/torrent/f/c/c/hkmy2iaaessw.jpg"
], ],
"description": null, "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, "id": 48179,
@@ -2555,7 +2597,8 @@
"images/torrent/9/8/3/fw84szdvrmk4.jpg" "images/torrent/9/8/3/fw84szdvrmk4.jpg"
], ],
"description": null, "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, "id": 48178,
@@ -2611,7 +2654,8 @@
"images/torrent/5/c/5/y7fjqvupby01.jpg" "images/torrent/5/c/5/y7fjqvupby01.jpg"
], ],
"description": null, "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, "id": 48125,
@@ -2666,7 +2710,8 @@
"images/torrent/f/2/1/wj8axuerttva.jpg" "images/torrent/f/2/1/wj8axuerttva.jpg"
], ],
"description": null, "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, "id": 48124,
@@ -2721,7 +2766,8 @@
"images/torrent/b/6/8/qa5nfh9blige.jpg" "images/torrent/b/6/8/qa5nfh9blige.jpg"
], ],
"description": null, "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, "id": 46870,
@@ -2770,7 +2816,8 @@
"images/torrent/d/4/1/rpn5ywrgch3m.jpg" "images/torrent/d/4/1/rpn5ywrgch3m.jpg"
], ],
"description": null, "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, "id": 46193,
@@ -2826,7 +2873,8 @@
"images/torrent/7/6/8/o87ujrsbmehp.jpg" "images/torrent/7/6/8/o87ujrsbmehp.jpg"
], ],
"description": null, "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, "id": 45171,
@@ -2874,7 +2922,8 @@
"images/torrent/6/d/b/wm8ikfbzpecs.jpg" "images/torrent/6/d/b/wm8ikfbzpecs.jpg"
], ],
"description": "<p>I don't know why the source was 25 fps</p>", "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, "id": 43663,
@@ -2923,7 +2972,8 @@
"images/torrent/b/7/d/qswq8vdshnyb.jpg" "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>", "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, "id": 39515,
@@ -3001,7 +3051,8 @@
"images/torrent/a/0/c/5dgyfrjx6x7p.png" "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>", "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, "id": 39245,
@@ -3049,7 +3100,8 @@
"images/torrent/f/5/1/nqjy8fpqskdj.jpg" "images/torrent/f/5/1/nqjy8fpqskdj.jpg"
], ],
"description": "<p>BDISO: https://exoticaz.to/torrent/34023</p>", "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, "id": 38628,
@@ -3098,7 +3150,8 @@
"images/torrent/6/f/e/juc07vprbndp.jpg" "images/torrent/6/f/e/juc07vprbndp.jpg"
], ],
"description": null, "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, "id": 38281,
@@ -3159,7 +3212,8 @@
"images/torrent/8/6/8/vazvb4ycnmb8.jpg" "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>", "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, "id": 37072,
@@ -3215,7 +3269,8 @@
"images/torrent/6/6/9/1ms8yiiif82h.jpg" "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>", "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, "id": 36791,
@@ -3269,7 +3324,8 @@
"images/torrent/b/b/4/pampaacdzpoa.jpg" "images/torrent/b/b/4/pampaacdzpoa.jpg"
], ],
"description": "<p>credits to perfectcanary</p>", "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, "id": 36790,
@@ -3324,7 +3380,8 @@
"images/torrent/a/a/c/hyaed34gxuic.jpg" "images/torrent/a/a/c/hyaed34gxuic.jpg"
], ],
"description": "<p>credits to perfectcanary</p>", "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, "id": 36789,
@@ -3379,7 +3436,8 @@
"images/torrent/7/8/6/3uotc2hw7s6l.jpg" "images/torrent/7/8/6/3uotc2hw7s6l.jpg"
], ],
"description": "<p>credits to perfectcanary</p>", "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, "id": 36465,
@@ -3436,7 +3494,8 @@
"images/torrent/1/1/a/x6yztt33psfz.jpg" "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>", "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, "id": 36096,
@@ -3491,7 +3550,8 @@
"images/torrent/1/9/e/dtxkxrwdpf3m.jpg" "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>", "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, "id": 35862,
@@ -3546,7 +3606,8 @@
"images/torrent/a/9/4/ksgywpxmjg9h.jpg" "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>", "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, "id": 34686,
@@ -3608,7 +3669,8 @@
"images/torrent/3/0/4/dtb70p4cfkhi.jpg" "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>", "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, "id": 34051,
@@ -3660,7 +3722,8 @@
"images/torrent/9/e/9/0ocpe6n3lsc6.jpg" "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>", "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, "id": 34049,
@@ -3713,7 +3776,8 @@
"images/torrent/9/0/4/5yho2mvumies.jpg" "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>", "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, "id": 34024,
@@ -3764,7 +3828,8 @@
"images/torrent/d/3/2/qeylkbizibzy.jpg" "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>", "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, "id": 34023,
@@ -3813,7 +3878,8 @@
"images/torrent/c/0/2/pvoql1zscpdl.jpg" "images/torrent/c/0/2/pvoql1zscpdl.jpg"
], ],
"description": "<p>Title: SSNI-388 Yua Mikami In A 16-Consecutive Cum Shot Slut Assault Shes 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>", "description": "<p>Title: SSNI-388 Yua Mikami In A 16-Consecutive Cum Shot Slut Assault Shes 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, "id": 33466,
@@ -3870,7 +3936,8 @@
"images/torrent/1/6/0/bwivpujoltwr.jpg" "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>", "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, "id": 32469,
@@ -3925,7 +3992,8 @@
"images/torrent/7/f/4/qn6q2w8bgjzg.jpg" "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>", "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, "id": 31490,
@@ -4118,7 +4186,8 @@
"images/torrent/1/0/d/9wmpejovzbg7.jpg" "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>", "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, "id": 31465,
@@ -4175,7 +4244,8 @@
"images/torrent/7/4/f/npjdewgqw8bj.jpg" "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>", "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, "id": 30383,
@@ -4220,7 +4290,8 @@
"images/torrent/9/9/9/i3ciw7xmwson.jpg" "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 doesnt stop… I just ejaculated, but Im jealous of any number of shots! Unlimited firing within the time. “Please give out as many shots as you want today.” Yuas awesome technique will fulfill all your desires. For a while, Onakura, mens 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>", "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 doesnt stop… I just ejaculated, but Im jealous of any number of shots! Unlimited firing within the time. “Please give out as many shots as you want today.” Yuas awesome technique will fulfill all your desires. For a while, Onakura, mens 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, "id": 29815,
@@ -4269,7 +4340,8 @@
"images/torrent/b/9/3/wvu3uhkwmxbz.jpg" "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>", "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, "id": 29356,
@@ -4315,7 +4387,8 @@
"images/torrent/5/6/4/kdkmgw9mxjiy.jpg" "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>", "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, "id": 29261,
@@ -4366,7 +4439,8 @@
"images/torrent/9/a/c/hocvufnx1xxg.jpg" "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>", "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, "id": 27208,
@@ -4419,7 +4493,8 @@
"images/torrent/8/6/3/br1smc0lvdfy.png" "images/torrent/8/6/3/br1smc0lvdfy.png"
], ],
"description": null, "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, "id": 26018,
@@ -4464,7 +4539,8 @@
"images/torrent/c/e/d/fjzmigqdm3qt.jpg" "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 &amp; immediate etch of greeting unwashed cock! Full body lip to anal &amp; 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&amp;i3_ord=1\">https://www.r18.com/videos/vod/movies/detail/-/id=tek00076/?i3_ref=search&amp;i3_ord=1</a></p>", "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 &amp; immediate etch of greeting unwashed cock! Full body lip to anal &amp; 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&amp;i3_ord=1\">https://www.r18.com/videos/vod/movies/detail/-/id=tek00076/?i3_ref=search&amp;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, "id": 26005,
@@ -4510,7 +4586,8 @@
"images/torrent/6/5/4/lhkdfbqlsqlu.jpg" "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>", "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, "id": 26004,
@@ -4553,7 +4630,8 @@
"images/torrent/c/5/d/n5ciceiboq1l.jpg" "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 &amp; 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>", "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 &amp; 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, "id": 25958,
@@ -4598,7 +4676,8 @@
"images/torrent/e/5/b/dtmfbfmqsekh.jpg" "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>", "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, "id": 25204,
@@ -4646,7 +4725,8 @@
"images/torrent/f/c/a/5rsj5fnyw7sy.jpg" "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>", "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, "id": 24777,
@@ -4729,7 +4809,8 @@
"images/torrent/4/0/1/qiq9l0g9b4lb.jpg" "images/torrent/4/0/1/qiq9l0g9b4lb.jpg"
], ],
"description": null, "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, "id": 24714,
@@ -4793,7 +4874,8 @@
"images/torrent/0/0/c/pz6a1om1zcj6.jpg" "images/torrent/0/0/c/pz6a1om1zcj6.jpg"
], ],
"description": null, "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, "id": 24432,
@@ -4832,7 +4914,8 @@
"images/torrent/c/3/e/ivi2v3xvuxvf.png" "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>", "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, "id": 22633,
@@ -4880,7 +4963,8 @@
"images/torrent/d/1/d/siepkvzdjdjm.png" "images/torrent/d/1/d/siepkvzdjdjm.png"
], ],
"description": null, "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, "id": 22606,
@@ -4926,7 +5010,8 @@
"images/torrent/f/9/9/scjrral5midb.png" "images/torrent/f/9/9/scjrral5midb.png"
], ],
"description": null, "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, "id": 21647,
@@ -4975,7 +5060,8 @@
"images/torrent/1/e/9/zb4gphrposw0.gif" "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&amp;i3_ord=1</p>", "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&amp;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, "id": 21564,
@@ -5021,7 +5107,8 @@
"images/torrent/b/5/f/r0ml2pj3xrvq.jpg" "images/torrent/b/5/f/r0ml2pj3xrvq.jpg"
], ],
"description": "<p>MUTEKI 10th Anniversary Special Project.</p>", "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, "id": 21561,
@@ -5075,7 +5162,8 @@
"images/torrent/7/c/3/kvjyuskn3mkf.jpg" "images/torrent/7/c/3/kvjyuskn3mkf.jpg"
], ],
"description": null, "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, "id": 20515,
@@ -5200,7 +5288,8 @@
"images/torrent/a/1/9/5ngcygiazvrv.jpg" "images/torrent/a/1/9/5ngcygiazvrv.jpg"
], ],
"description": null, "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, "id": 15261,
@@ -5241,7 +5330,8 @@
"images/torrent/e/f/6/ubgilv5db5mo.jpg" "images/torrent/e/f/6/ubgilv5db5mo.jpg"
], ],
"description": null, "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, "id": 4333,
@@ -5282,7 +5372,8 @@
"images/torrent/c/9/c/3qxdyhvuefwu.jpg" "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>", "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, "id": 4241,
@@ -5323,7 +5414,8 @@
"images/torrent/c/4/4/o8jsphfh7rr9.jpg" "images/torrent/c/4/4/o8jsphfh7rr9.jpg"
], ],
"description": null, "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, "id": 4191,
@@ -5364,7 +5456,8 @@
"images/torrent/9/6/1/c1szrkxbf6fn.jpg" "images/torrent/9/6/1/c1szrkxbf6fn.jpg"
], ],
"description": null, "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, "id": 4101,
@@ -5405,7 +5498,8 @@
"images/torrent/7/4/6/9r3ars6pa9cn.jpg" "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>", "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, "id": 4002,
@@ -5446,7 +5540,8 @@
"images/torrent/7/d/3/wj64npz8aizr.jpg" "images/torrent/7/d/3/wj64npz8aizr.jpg"
], ],
"description": "<p>三上悠亜<br>TEK-071 快感MUTEKI2016年1月1日</p>", "description": "<p>三上悠亜<br>TEK-071 快感MUTEKI2016年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, "id": 3951,
@@ -5487,7 +5582,8 @@
"images/torrent/c/1/7/herqbzuq6jj4.jpg" "images/torrent/c/1/7/herqbzuq6jj4.jpg"
], ],
"description": "<p>三上悠亜<br>TEK-067 Princess PeachMUTEKI2015年6月1日</p>", "description": "<p>三上悠亜<br>TEK-067 Princess PeachMUTEKI2015年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, "id": 16896,
@@ -5535,7 +5631,8 @@
"images/torrent/8/a/a/ena0fdra1rif.jpg" "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>", "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, "id": 15273,
@@ -5577,7 +5674,8 @@
"images/torrent/f/6/5/srlry3vu9kas.jpg" "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>", "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, "id": 17757,
@@ -5623,7 +5721,8 @@
"images/torrent/3/1/6/21sudpyouj3f.jpg" "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>", "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, "id": 17364,
@@ -5668,7 +5767,8 @@
"images/torrent/f/a/b/tvqctziuy8k2.jpg" "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>", "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", "first_page_url": "https://exoticaz.to/api/v1/jackett/torrents?search=yua%20mikami&page=1",

View File

@@ -109,7 +109,8 @@
} }
], ],
"music_type": null, "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, "id": 78501,
@@ -159,7 +160,8 @@
} }
], ],
"music_type": null, "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, "id": 78496,
@@ -209,7 +211,8 @@
} }
], ],
"music_type": null, "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, "id": 78494,
@@ -259,7 +262,8 @@
} }
], ],
"music_type": null, "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, "id": 78491,
@@ -305,7 +309,8 @@
} }
], ],
"music_type": null, "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, "id": 78490,
@@ -351,7 +356,8 @@
} }
], ],
"music_type": null, "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, "id": 78488,
@@ -465,7 +471,8 @@
} }
], ],
"music_type": null, "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, "id": 78486,
@@ -511,7 +518,8 @@
} }
], ],
"music_type": null, "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, "id": 78485,
@@ -569,7 +577,8 @@
} }
], ],
"music_type": null, "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, "id": 78483,
@@ -615,7 +624,8 @@
} }
], ],
"music_type": null, "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, "id": 78481,
@@ -801,7 +811,8 @@
} }
], ],
"music_type": null, "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, "id": 78480,
@@ -855,7 +866,8 @@
} }
], ],
"music_type": null, "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, "id": 78476,
@@ -909,7 +921,8 @@
} }
], ],
"music_type": null, "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, "id": 78472,
@@ -995,7 +1008,8 @@
} }
], ],
"music_type": null, "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, "id": 78468,
@@ -1045,7 +1059,8 @@
} }
], ],
"music_type": null, "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, "id": 78467,
@@ -1099,7 +1114,8 @@
} }
], ],
"music_type": null, "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, "id": 78466,
@@ -1153,7 +1169,8 @@
} }
], ],
"music_type": null, "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, "id": 78465,
@@ -1203,7 +1220,8 @@
} }
], ],
"music_type": null, "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, "id": 78460,
@@ -1257,7 +1275,8 @@
} }
], ],
"music_type": null, "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, "id": 78459,
@@ -1311,7 +1330,8 @@
} }
], ],
"music_type": null, "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, "id": 78458,
@@ -1361,7 +1381,8 @@
} }
], ],
"music_type": null, "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, "id": 78453,
@@ -1415,7 +1436,8 @@
} }
], ],
"music_type": null, "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, "id": 78446,
@@ -1477,7 +1499,8 @@
} }
], ],
"music_type": null, "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, "id": 78445,
@@ -1523,7 +1546,8 @@
} }
], ],
"music_type": null, "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, "id": 78412,
@@ -1569,7 +1593,8 @@
} }
], ],
"music_type": null, "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, "id": 78408,
@@ -1610,7 +1635,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 78406,
@@ -1656,7 +1682,8 @@
} }
], ],
"music_type": null, "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, "id": 78398,
@@ -1742,7 +1769,8 @@
} }
], ],
"music_type": null, "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, "id": 78396,
@@ -1828,7 +1856,8 @@
} }
], ],
"music_type": null, "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, "id": 78395,
@@ -1958,7 +1987,8 @@
} }
], ],
"music_type": null, "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, "id": 78393,
@@ -2044,7 +2074,8 @@
} }
], ],
"music_type": null, "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, "id": 78391,
@@ -2098,7 +2129,8 @@
} }
], ],
"music_type": null, "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, "id": 78390,
@@ -2144,7 +2176,8 @@
} }
], ],
"music_type": null, "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, "id": 78389,
@@ -2190,7 +2223,8 @@
} }
], ],
"music_type": null, "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, "id": 78388,
@@ -2336,7 +2370,8 @@
} }
], ],
"music_type": null, "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, "id": 78387,
@@ -2390,7 +2425,8 @@
} }
], ],
"music_type": null, "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, "id": 78386,
@@ -2436,7 +2472,8 @@
} }
], ],
"music_type": null, "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, "id": 78385,
@@ -2622,7 +2659,8 @@
} }
], ],
"music_type": null, "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, "id": 78384,
@@ -2808,7 +2846,8 @@
} }
], ],
"music_type": null, "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, "id": 78379,
@@ -2854,7 +2893,8 @@
} }
], ],
"music_type": null, "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, "id": 78378,
@@ -2972,7 +3012,8 @@
} }
], ],
"music_type": null, "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, "id": 78374,
@@ -3050,7 +3091,8 @@
} }
], ],
"music_type": null, "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, "id": 78373,
@@ -3212,7 +3254,8 @@
} }
], ],
"music_type": null, "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, "id": 78339,
@@ -3262,7 +3305,8 @@
} }
], ],
"music_type": null, "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, "id": 78332,
@@ -3303,7 +3347,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 78329,
@@ -3353,7 +3398,8 @@
} }
], ],
"music_type": null, "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, "id": 78328,
@@ -3394,7 +3440,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 78320,
@@ -3464,7 +3511,8 @@
} }
], ],
"music_type": null, "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, "id": 78319,
@@ -3510,7 +3558,8 @@
} }
], ],
"music_type": null, "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, "id": 78318,
@@ -3588,7 +3637,8 @@
} }
], ],
"music_type": null, "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, "id": 78317,
@@ -3674,7 +3724,8 @@
} }
], ],
"music_type": null, "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, "id": 78315,
@@ -3724,7 +3775,8 @@
} }
], ],
"music_type": null, "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, "id": 78313,
@@ -3774,7 +3826,8 @@
} }
], ],
"music_type": null, "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, "id": 78309,
@@ -3828,7 +3881,8 @@
} }
], ],
"music_type": null, "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, "id": 78308,
@@ -3890,7 +3944,8 @@
} }
], ],
"music_type": null, "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, "id": 78307,
@@ -3972,7 +4027,8 @@
} }
], ],
"music_type": null, "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, "id": 78305,
@@ -4018,7 +4074,8 @@
} }
], ],
"music_type": null, "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, "id": 78304,
@@ -4059,7 +4116,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 78292,
@@ -4109,7 +4167,8 @@
} }
], ],
"music_type": null, "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, "id": 78291,
@@ -4159,7 +4218,8 @@
} }
], ],
"music_type": null, "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, "id": 78290,
@@ -4209,7 +4269,8 @@
} }
], ],
"music_type": null, "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, "id": 78289,
@@ -4259,7 +4320,8 @@
} }
], ],
"music_type": null, "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, "id": 78287,
@@ -4300,7 +4362,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 78279,
@@ -4346,7 +4409,8 @@
} }
], ],
"music_type": null, "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, "id": 78278,
@@ -4392,7 +4456,8 @@
} }
], ],
"music_type": null, "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, "id": 78252,
@@ -4442,7 +4507,8 @@
} }
], ],
"music_type": null, "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, "id": 78251,
@@ -4488,7 +4554,8 @@
} }
], ],
"music_type": null, "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, "id": 78250,
@@ -4534,7 +4601,8 @@
} }
], ],
"music_type": null, "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, "id": 78247,
@@ -4580,7 +4648,8 @@
} }
], ],
"music_type": null, "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, "id": 78246,
@@ -4726,7 +4795,8 @@
} }
], ],
"music_type": null, "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, "id": 78244,
@@ -4780,7 +4850,8 @@
} }
], ],
"music_type": null, "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, "id": 78243,
@@ -4830,7 +4901,8 @@
} }
], ],
"music_type": null, "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, "id": 78240,
@@ -4876,7 +4948,8 @@
} }
], ],
"music_type": null, "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, "id": 78239,
@@ -4922,7 +4995,8 @@
} }
], ],
"music_type": null, "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, "id": 78238,
@@ -4968,7 +5042,8 @@
} }
], ],
"music_type": null, "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, "id": 78237,
@@ -5014,7 +5089,8 @@
} }
], ],
"music_type": null, "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, "id": 78236,
@@ -5060,7 +5136,8 @@
} }
], ],
"music_type": null, "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, "id": 78235,
@@ -5110,7 +5187,8 @@
} }
], ],
"music_type": null, "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, "id": 78216,
@@ -5156,7 +5234,8 @@
} }
], ],
"music_type": null, "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, "id": 78215,
@@ -5202,7 +5281,8 @@
} }
], ],
"music_type": null, "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, "id": 78214,
@@ -5248,7 +5328,8 @@
} }
], ],
"music_type": null, "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, "id": 78213,
@@ -5294,7 +5375,8 @@
} }
], ],
"music_type": null, "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, "id": 78212,
@@ -5344,7 +5426,8 @@
} }
], ],
"music_type": null, "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, "id": 78210,
@@ -5530,7 +5613,8 @@
} }
], ],
"music_type": null, "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, "id": 78208,
@@ -5576,7 +5660,8 @@
} }
], ],
"music_type": null, "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, "id": 78206,
@@ -5666,7 +5751,8 @@
} }
], ],
"music_type": null, "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, "id": 78204,
@@ -5764,7 +5850,8 @@
} }
], ],
"music_type": null, "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, "id": 78203,
@@ -5810,7 +5897,8 @@
} }
], ],
"music_type": null, "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, "id": 78201,
@@ -5860,7 +5948,8 @@
} }
], ],
"music_type": null, "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, "id": 78197,
@@ -5910,7 +5999,8 @@
} }
], ],
"music_type": null, "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, "id": 78185,
@@ -5956,7 +6046,8 @@
} }
], ],
"music_type": null, "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, "id": 78184,
@@ -6046,7 +6137,8 @@
} }
], ],
"music_type": null, "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, "id": 78182,
@@ -6092,7 +6184,8 @@
} }
], ],
"music_type": null, "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, "id": 78181,
@@ -6138,7 +6231,8 @@
} }
], ],
"music_type": null, "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, "id": 78177,
@@ -6184,7 +6278,8 @@
} }
], ],
"music_type": null, "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, "id": 78176,
@@ -6230,7 +6325,8 @@
} }
], ],
"music_type": null, "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, "id": 78159,
@@ -6271,7 +6367,8 @@
], ],
"subtitle": null, "subtitle": null,
"music_type": 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, "id": 78158,
@@ -6409,7 +6506,8 @@
} }
], ],
"music_type": null, "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, "id": 78157,
@@ -6547,7 +6645,8 @@
} }
], ],
"music_type": null, "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, "id": 78153,
@@ -6593,7 +6692,8 @@
} }
], ],
"music_type": null, "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", "first_page_url": "https:\/\/privatehd.to\/api\/v1\/jackett\/torrents?type=1&page=1",

View File

@@ -1,15 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<caps> <caps>
<server version="1.0" title="Anime Tosho" strapline="Anime NZB/DDL mirror" url="https://animetosho.org/"/> <server version="1.0" title="Anime Tosho" strapline="Anime NZB/DDL mirror" url="https://animetosho.org/" />
<limits max="200" default="75"/> <limits max="200" default="75" />
<retention days="9999"/> <retention days="9999" />
<registration available="no" open="yes" /> <registration available="no" open="yes" />
<searching> <searching>
<search available="yes" supportedParams="q" /> <search available="yes" supportedParams="q" />
<tv-search available="no" supportedParams="q" /> <tv-search available="no" supportedParams="q" />
<movie-search available="no" supportedParams="q" /> <movie-search available="no" supportedParams="q" />
</searching> </searching>
<categories> <categories>
<category id="5070" name="Anime" description="Anime"/> <category id="5070" name="Anime" description="Anime" />
</categories> <category id="2020" name="Movies/Other" description="Movies (Anime)" />
</caps> </categories>
</caps>

View File

@@ -83,17 +83,18 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests
bookCats.Should().Contain("8000"); bookCats.Should().Contain("8000");
} }
[Test] [TestCase(5070)]
public void should_find_sub_categories_as_main_categories() [TestCase(2020)]
public void should_find_sub_categories_as_main_categories(int category)
{ {
GivenCapsResponse(ReadAllText("Files/Indexers/Torznab/torznab_animetosho_caps.xml")); GivenCapsResponse(ReadAllText("Files/Indexers/Torznab/torznab_animetosho_caps.xml"));
var caps = Subject.GetCapabilities(_settings, _definition); var caps = Subject.GetCapabilities(_settings, _definition);
var bookCats = caps.Categories.MapTrackerCatToNewznab("5070"); var indexerCategories = caps.Categories.MapTrackerCatToNewznab(category.ToString());
bookCats.Count.Should().Be(2); indexerCategories.Count.Should().Be(2);
bookCats.First().Id.Should().Be(5070); indexerCategories.First().Id.Should().Be(category);
} }
[Test] [Test]

View File

@@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks> <TargetFrameworks>net8.0</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Dapper" Version="2.0.151" /> <PackageReference Include="Dapper" Version="2.1.66" />
<PackageReference Include="NBuilder" Version="6.1.0" /> <PackageReference Include="NBuilder" Version="6.1.0" />
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" /> <PackageReference Include="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>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\NzbDrone.Test.Common\Prowlarr.Test.Common.csproj" /> <ProjectReference Include="..\NzbDrone.Test.Common\Prowlarr.Test.Common.csproj" />

View File

@@ -16,7 +16,7 @@ namespace NzbDrone.Core.Applications
protected readonly IAppIndexerMapService _appIndexerMapService; protected readonly IAppIndexerMapService _appIndexerMapService;
protected readonly Logger _logger; protected readonly Logger _logger;
protected static readonly Regex AppIndexerRegex = new (@"\/(?<indexer>\d{1,3})(?:\/(?:api)?\/?)?$", RegexOptions.IgnoreCase | RegexOptions.Compiled); protected static readonly Regex AppIndexerRegex = new(@"\/(?<indexer>\d{1,3})(?:\/(?:api)?\/?)?$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public abstract string Name { get; } public abstract string Name { get; }

View File

@@ -19,7 +19,7 @@ namespace NzbDrone.Core.Applications.LazyLibrarian
public class LazyLibrarianSettings : IApplicationSettings public class LazyLibrarianSettings : IApplicationSettings
{ {
private static readonly LazyLibrarianSettingsValidator Validator = new (); private static readonly LazyLibrarianSettingsValidator Validator = new();
public LazyLibrarianSettings() public LazyLibrarianSettings()
{ {

View File

@@ -18,7 +18,7 @@ namespace NzbDrone.Core.Applications.Lidarr
public class LidarrSettings : IApplicationSettings public class LidarrSettings : IApplicationSettings
{ {
private static readonly LidarrSettingsValidator Validator = new (); private static readonly LidarrSettingsValidator Validator = new();
public LidarrSettings() public LidarrSettings()
{ {

View File

@@ -23,7 +23,7 @@ namespace NzbDrone.Core.Applications.Lidarr
public class LidarrV1Proxy : ILidarrV1Proxy public class LidarrV1Proxy : ILidarrV1Proxy
{ {
private static Version MinimumApplicationVersion => new (1, 0, 2, 0); private static Version MinimumApplicationVersion => new(1, 0, 2, 0);
private const string AppApiRoute = "/api/v1"; private const string AppApiRoute = "/api/v1";
private const string AppIndexerApiRoute = $"{AppApiRoute}/indexer"; private const string AppIndexerApiRoute = $"{AppApiRoute}/indexer";

View File

@@ -19,7 +19,7 @@ namespace NzbDrone.Core.Applications.Mylar
public class MylarSettings : IApplicationSettings public class MylarSettings : IApplicationSettings
{ {
private static readonly MylarSettingsValidator Validator = new (); private static readonly MylarSettingsValidator Validator = new();
public MylarSettings() public MylarSettings()
{ {

View File

@@ -19,7 +19,7 @@ namespace NzbDrone.Core.Applications.Radarr
public class RadarrSettings : IApplicationSettings public class RadarrSettings : IApplicationSettings
{ {
private static readonly RadarrSettingsValidator Validator = new (); private static readonly RadarrSettingsValidator Validator = new();
public RadarrSettings() public RadarrSettings()
{ {

View File

@@ -23,8 +23,8 @@ namespace NzbDrone.Core.Applications.Radarr
public class RadarrV3Proxy : IRadarrV3Proxy public class RadarrV3Proxy : IRadarrV3Proxy
{ {
private static Version MinimumApplicationV4Version => new (4, 0, 4, 0); private static Version MinimumApplicationV4Version => new(4, 0, 4, 0);
private static Version MinimumApplicationV3Version => new (3, 1, 1, 0); private static Version MinimumApplicationV3Version => new(3, 1, 1, 0);
private const string AppApiRoute = "/api/v3"; private const string AppApiRoute = "/api/v3";
private const string AppIndexerApiRoute = $"{AppApiRoute}/indexer"; private const string AppIndexerApiRoute = $"{AppApiRoute}/indexer";

View File

@@ -19,7 +19,7 @@ namespace NzbDrone.Core.Applications.Readarr
public class ReadarrSettings : IApplicationSettings public class ReadarrSettings : IApplicationSettings
{ {
private static readonly ReadarrSettingsValidator Validator = new (); private static readonly ReadarrSettingsValidator Validator = new();
public ReadarrSettings() public ReadarrSettings()
{ {

View File

@@ -18,7 +18,7 @@ namespace NzbDrone.Core.Applications.Sonarr
public class SonarrSettings : IApplicationSettings public class SonarrSettings : IApplicationSettings
{ {
private static readonly SonarrSettingsValidator Validator = new (); private static readonly SonarrSettingsValidator Validator = new();
public SonarrSettings() public SonarrSettings()
{ {

View File

@@ -23,7 +23,7 @@ namespace NzbDrone.Core.Applications.Sonarr
public class SonarrV3Proxy : ISonarrV3Proxy public class SonarrV3Proxy : ISonarrV3Proxy
{ {
private static Version MinimumApplicationVersion => new (3, 0, 5, 0); private static Version MinimumApplicationVersion => new(3, 0, 5, 0);
private const string AppApiRoute = "/api/v3"; private const string AppApiRoute = "/api/v3";
private const string AppIndexerApiRoute = $"{AppApiRoute}/indexer"; private const string AppIndexerApiRoute = $"{AppApiRoute}/indexer";

View File

@@ -19,7 +19,7 @@ namespace NzbDrone.Core.Applications.Whisparr
public class WhisparrSettings : IApplicationSettings public class WhisparrSettings : IApplicationSettings
{ {
private static readonly WhisparrSettingsValidator Validator = new (); private static readonly WhisparrSettingsValidator Validator = new();
public WhisparrSettings() public WhisparrSettings()
{ {

View File

@@ -1,8 +1,11 @@
using System;
namespace NzbDrone.Core.Authentication namespace NzbDrone.Core.Authentication
{ {
public enum AuthenticationType public enum AuthenticationType
{ {
None = 0, None = 0,
[Obsolete("Use Forms authentication instead")]
Basic = 1, Basic = 1,
Forms = 2, Forms = 2,
External = 3 External = 3

View File

@@ -207,13 +207,24 @@ namespace NzbDrone.Core.Configuration
if (enabled) if (enabled)
{ {
SetValue("AuthenticationMethod", AuthenticationType.Basic); SetValue("AuthenticationMethod", AuthenticationType.Forms);
return AuthenticationType.Basic; return AuthenticationType.Forms;
} }
return Enum.TryParse<AuthenticationType>(_authOptions.Method, out var enumValue) var value = Enum.TryParse<AuthenticationType>(_authOptions.Method, out var enumValue)
? enumValue ? enumValue
: GetValueEnum("AuthenticationMethod", AuthenticationType.None); : 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); 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() private void DeleteOldValues()

View File

@@ -5,7 +5,7 @@ namespace NzbDrone.Core.Datastore;
public static class DatabaseVersionParser public static class DatabaseVersionParser
{ {
private static readonly Regex VersionRegex = new (@"^[^ ]+", RegexOptions.Compiled); private static readonly Regex VersionRegex = new(@"^[^ ]+", RegexOptions.Compiled);
public static Version ParseServerVersion(string serverVersion) public static Version ParseServerVersion(string serverVersion)
{ {

View File

@@ -27,7 +27,7 @@ namespace NzbDrone.Core.Datastore
switch (expression.NodeType) switch (expression.NodeType)
{ {
case ExpressionType.Lambda: case ExpressionType.Lambda:
return VisitLamda((LambdaExpression)expression); return VisitLambda((LambdaExpression)expression);
case ExpressionType.ArrayLength: case ExpressionType.ArrayLength:
case ExpressionType.Convert: case ExpressionType.Convert:
case ExpressionType.ConvertChecked: case ExpressionType.ConvertChecked:
@@ -87,7 +87,7 @@ namespace NzbDrone.Core.Datastore
} }
/// <summary> /// <summary>
/// Visits the memeber access expression. To be implemented by user. /// Visits the member access expression. To be implemented by user.
/// </summary> /// </summary>
/// <param name="expression"></param> /// <param name="expression"></param>
/// <returns></returns> /// <returns></returns>
@@ -130,11 +130,11 @@ namespace NzbDrone.Core.Datastore
} }
/// <summary> /// <summary>
/// Visits the lamda expression. /// Visits the lambda expression.
/// </summary> /// </summary>
/// <param name="lambdaExpression"></param> /// <param name="lambdaExpression"></param>
/// <returns></returns> /// <returns></returns>
protected virtual Expression VisitLamda(LambdaExpression lambdaExpression) protected virtual Expression VisitLambda(LambdaExpression lambdaExpression)
{ {
Visit(lambdaExpression.Body); Visit(lambdaExpression.Body);
return lambdaExpression; return lambdaExpression;

View File

@@ -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);
}
}
}

View File

@@ -36,7 +36,7 @@ namespace NzbDrone.Core.Download.Clients.FreeboxDownload
public class FreeboxDownloadSettings : IProviderConfig public class FreeboxDownloadSettings : IProviderConfig
{ {
private static readonly FreeboxDownloadSettingsValidator Validator = new (); private static readonly FreeboxDownloadSettingsValidator Validator = new();
public FreeboxDownloadSettings() public FreeboxDownloadSettings()
{ {

View File

@@ -76,7 +76,7 @@ namespace NzbDrone.Core.Download.Clients.UTorrent
public override string Name => "uTorrent"; public override string Name => "uTorrent";
public override ProviderMessage Message => new (_localizationService.GetLocalizedString("DownloadClientUTorrentProviderMessage"), ProviderMessageType.Warning); public override ProviderMessage Message => new(_localizationService.GetLocalizedString("DownloadClientUTorrentProviderMessage"), ProviderMessageType.Warning);
public override bool SupportsCategories => true; public override bool SupportsCategories => true;

View File

@@ -10,7 +10,7 @@ namespace NzbDrone.Core.Http.CloudFlare
{ {
public class CloudFlareDetectionService public class CloudFlareDetectionService
{ {
private static readonly HashSet<string> CloudflareServerNames = new () { "cloudflare", "cloudflare-nginx", "ddos-guard" }; private static readonly HashSet<string> CloudflareServerNames = new() { "cloudflare", "cloudflare-nginx", "ddos-guard" };
private readonly Logger _logger; private readonly Logger _logger;
public CloudFlareDetectionService(Logger logger) public CloudFlareDetectionService(Logger logger)

View File

@@ -7,8 +7,8 @@ namespace NzbDrone.Core.IndexerSearch.Definitions
{ {
public abstract class SearchCriteriaBase public abstract class SearchCriteriaBase
{ {
private static readonly Regex StandardizeDashesRegex = new (@"\p{Pd}+", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex StandardizeDashesRegex = new(@"\p{Pd}+", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex StandardizeSingleQuotesRegex = new (@"[\u0060\u00B4\u2018\u2019]", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex StandardizeSingleQuotesRegex = new(@"[\u0060\u00B4\u2018\u2019]", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public virtual bool InteractiveSearch { get; set; } public virtual bool InteractiveSearch { get; set; }
public List<int> IndexerIds { get; set; } public List<int> IndexerIds { get; set; }

View File

@@ -5,10 +5,10 @@ namespace NzbDrone.Core.IndexerSearch
{ {
public class NewznabRequest public class NewznabRequest
{ {
private static readonly Regex TvRegex = new (@"\{((?:imdbid\:)(?<imdbid>[^{]+)|(?:rid\:)(?<rid>[^{]+)|(?:tvdbid\:)(?<tvdbid>[^{]+)|(?:tmdbid\:)(?<tmdbid>[^{]+)|(?:tvmazeid\:)(?<tvmazeid>[^{]+)|(?:doubanid\:)(?<doubanid>[^{]+)|(?:season\:)(?<season>[^{]+)|(?:episode\:)(?<episode>[^{]+)|(?:year\:)(?<year>[^{]+)|(?:genre\:)(?<genre>[^{]+))\}", RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex TvRegex = new(@"\{((?:imdbid\:)(?<imdbid>[^{]+)|(?:rid\:)(?<rid>[^{]+)|(?:tvdbid\:)(?<tvdbid>[^{]+)|(?:tmdbid\:)(?<tmdbid>[^{]+)|(?:tvmazeid\:)(?<tvmazeid>[^{]+)|(?:doubanid\:)(?<doubanid>[^{]+)|(?:season\:)(?<season>[^{]+)|(?:episode\:)(?<episode>[^{]+)|(?:year\:)(?<year>[^{]+)|(?:genre\:)(?<genre>[^{]+))\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex MovieRegex = new (@"\{((?:imdbid\:)(?<imdbid>[^{]+)|(?:doubanid\:)(?<doubanid>[^{]+)|(?:tmdbid\:)(?<tmdbid>[^{]+)|(?:traktid\:)(?<traktid>[^{]+)|(?:year\:)(?<year>[^{]+)|(?:genre\:)(?<genre>[^{]+))\}", RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex MovieRegex = new(@"\{((?:imdbid\:)(?<imdbid>[^{]+)|(?:doubanid\:)(?<doubanid>[^{]+)|(?:tmdbid\:)(?<tmdbid>[^{]+)|(?:traktid\:)(?<traktid>[^{]+)|(?:year\:)(?<year>[^{]+)|(?:genre\:)(?<genre>[^{]+))\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex MusicRegex = new (@"\{((?:artist\:)(?<artist>[^{]+)|(?:album\:)(?<album>[^{]+)|(?:track\:)(?<track>[^{]+)|(?:label\:)(?<label>[^{]+)|(?:year\:)(?<year>[^{]+)|(?:genre\:)(?<genre>[^{]+))\}", RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex MusicRegex = new(@"\{((?:artist\:)(?<artist>[^{]+)|(?:album\:)(?<album>[^{]+)|(?:track\:)(?<track>[^{]+)|(?:label\:)(?<label>[^{]+)|(?:year\:)(?<year>[^{]+)|(?:genre\:)(?<genre>[^{]+))\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex BookRegex = new (@"\{((?:author\:)(?<author>[^{]+)|(?:publisher\:)(?<publisher>[^{]+)|(?:title\:)(?<title>[^{]+)|(?:year\:)(?<year>[^{]+)|(?:genre\:)(?<genre>[^{]+))\}", RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex BookRegex = new(@"\{((?:author\:)(?<author>[^{]+)|(?:publisher\:)(?<publisher>[^{]+)|(?:title\:)(?<title>[^{]+)|(?:year\:)(?<year>[^{]+)|(?:genre\:)(?<genre>[^{]+))\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
public string t { get; set; } public string t { get; set; }
public string q { get; set; } public string q { get; set; }

View File

@@ -33,7 +33,7 @@ namespace NzbDrone.Core.IndexerVersions
private const int DEFINITION_VERSION = 11; private const int DEFINITION_VERSION = 11;
// Used when moving yml to C# // Used when moving yml to C#
private readonly List<string> _definitionBlocklist = new () private readonly List<string> _definitionBlocklist = new()
{ {
"aither", "aither",
"animeworld", "animeworld",
@@ -251,8 +251,8 @@ namespace NzbDrone.Core.IndexerVersions
{ {
definition.Settings = new List<SettingsField> definition.Settings = new List<SettingsField>
{ {
new () { Name = "username", Label = "Username", Type = "text" }, new() { Name = "username", Label = "Username", Type = "text" },
new () { Name = "password", Label = "Password", Type = "password" } new() { Name = "password", Label = "Password", Type = "password" }
}; };
} }

View File

@@ -252,7 +252,7 @@ namespace NzbDrone.Core.Indexers.Definitions
private readonly IIndexerHttpClient _httpClient; private readonly IIndexerHttpClient _httpClient;
private readonly Logger _logger; private readonly Logger _logger;
private static Dictionary<string, string> CategoriesMap => new () private static Dictionary<string, string> CategoriesMap => new()
{ {
{ "/anime_tv/full", "14" }, { "/anime_tv/full", "14" },
{ "/anime_tv/anime_ongoing", "10" }, { "/anime_tv/anime_ongoing", "10" },

View File

@@ -149,7 +149,7 @@ namespace NzbDrone.Core.Indexers.Definitions
private readonly AnimeBytesSettings _settings; private readonly AnimeBytesSettings _settings;
private readonly IndexerCapabilities _capabilities; private readonly IndexerCapabilities _capabilities;
private static Regex YearRegex => new (@"\b((?:19|20)\d{2})$", RegexOptions.Compiled); private static Regex YearRegex => new(@"\b((?:19|20)\d{2})$", RegexOptions.Compiled);
public AnimeBytesRequestGenerator(AnimeBytesSettings settings, IndexerCapabilities capabilities) public AnimeBytesRequestGenerator(AnimeBytesSettings settings, IndexerCapabilities capabilities)
{ {
@@ -290,16 +290,16 @@ namespace NzbDrone.Core.Indexers.Definitions
public class AnimeBytesParser : IParseIndexerResponse public class AnimeBytesParser : IParseIndexerResponse
{ {
private static readonly HashSet<string> ExcludedProperties = new (StringComparer.OrdinalIgnoreCase) { "Freeleech" }; private static readonly HashSet<string> ExcludedProperties = new(StringComparer.OrdinalIgnoreCase) { "Freeleech" };
private static readonly HashSet<string> RemuxResolutions = new (StringComparer.OrdinalIgnoreCase) { "1080i", "1080p", "2160p", "4K" }; private static readonly HashSet<string> RemuxResolutions = new(StringComparer.OrdinalIgnoreCase) { "1080i", "1080p", "2160p", "4K" };
private static readonly HashSet<string> CommonReleaseGroupsProperties = new (StringComparer.OrdinalIgnoreCase) private static readonly HashSet<string> CommonReleaseGroupsProperties = new(StringComparer.OrdinalIgnoreCase)
{ {
"Softsubs", "Softsubs",
"Hardsubs", "Hardsubs",
"RAW", "RAW",
"Translated" "Translated"
}; };
private static readonly HashSet<string> ExcludedFileExtensions = new (StringComparer.OrdinalIgnoreCase) { ".mka", ".mds", ".md5", ".nfo", ".sfv", ".ass", ".mks", ".srt", ".ssa", ".sup", ".jpeg", ".jpg", ".png", ".otf", ".ttf" }; private static readonly HashSet<string> ExcludedFileExtensions = new(StringComparer.OrdinalIgnoreCase) { ".mka", ".mds", ".md5", ".nfo", ".sfv", ".ass", ".mks", ".srt", ".ssa", ".sup", ".jpeg", ".jpg", ".png", ".otf", ".ttf" };
private static readonly string[] PropertiesSeparator = { " | ", " / " }; private static readonly string[] PropertiesSeparator = { " | ", " / " };
@@ -712,7 +712,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class AnimeBytesSettings : NoAuthTorrentBaseSettings public class AnimeBytesSettings : NoAuthTorrentBaseSettings
{ {
private static readonly AnimeBytesSettingsValidator Validator = new (); private static readonly AnimeBytesSettingsValidator Validator = new();
public AnimeBytesSettings() public AnimeBytesSettings()
{ {

View File

@@ -237,13 +237,13 @@ namespace NzbDrone.Core.Indexers.Definitions
return _categories.MapTrackerCatDescToNewznab("OVA/ONA/Special"); 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)) if (CategorieMovieRegex.IsMatch(rName) || CategorieMovieRegex.IsMatch(rDesc))
{ {
return _categories.MapTrackerCatDescToNewznab("Movies"); 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)) if (CategorieDoramaRegex.IsMatch(rName) || CategorieDoramaRegex.IsMatch(type))
{ {
return _categories.MapTrackerCatDescToNewznab("Dorama"); return _categories.MapTrackerCatDescToNewznab("Dorama");

View File

@@ -37,11 +37,6 @@ namespace NzbDrone.Core.Indexers.Definitions
}; };
} }
public override IParseIndexerResponse GetParser()
{
return new AvistaZParser();
}
protected override IndexerCapabilities SetCapabilities() protected override IndexerCapabilities SetCapabilities()
{ {
var caps = new IndexerCapabilities var caps = new IndexerCapabilities
@@ -81,9 +76,4 @@ namespace NzbDrone.Core.Indexers.Definitions
: $"{searchCriteria.EpisodeSearchString}"; : $"{searchCriteria.EpisodeSearchString}";
} }
} }
public class AvistaZParser : AvistazParserBase
{
protected override string TimezoneOffset => "+02:00";
}
} }

View File

@@ -15,6 +15,9 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
[JsonPropertyName("created_at")] [JsonPropertyName("created_at")]
public string CreatedAt { get; set; } public string CreatedAt { get; set; }
[JsonPropertyName("created_at_iso")]
public string CreatedAtIso { get; set; }
[JsonPropertyName("file_name")] [JsonPropertyName("file_name")]
public string FileName { get; set; } public string FileName { get; set; }

View File

@@ -14,8 +14,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
{ {
public class AvistazParserBase : IParseIndexerResponse 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" };
private readonly HashSet<string> _hdResolutions = new () { "1080p", "1080i", "720p" };
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; } public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
@@ -66,7 +65,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
InfoUrl = details, InfoUrl = details,
Guid = details, Guid = details,
Categories = cats, Categories = cats,
PublishDate = DateTime.Parse($"{row.CreatedAt} {TimezoneOffset}", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal), PublishDate = DateTime.Parse(row.CreatedAtIso, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
Size = row.FileSize, Size = row.FileSize,
Files = row.FileCount, Files = row.FileCount,
Grabs = row.Completed, Grabs = row.Completed,

View File

@@ -17,7 +17,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
public class AvistazSettings : NoAuthTorrentBaseSettings public class AvistazSettings : NoAuthTorrentBaseSettings
{ {
private static readonly AvistazSettingsValidator Validator = new (); private static readonly AvistazSettingsValidator Validator = new();
public AvistazSettings() public AvistazSettings()
{ {

View File

@@ -234,7 +234,7 @@ namespace NzbDrone.Core.Indexers.Definitions
{ {
private readonly BakaBTSettings _settings; private readonly BakaBTSettings _settings;
private readonly IndexerCapabilitiesCategories _categories; private readonly IndexerCapabilitiesCategories _categories;
private readonly List<IndexerCategory> _defaultCategories = new () { NewznabStandardCategory.TVAnime }; private readonly List<IndexerCategory> _defaultCategories = new() { NewznabStandardCategory.TVAnime };
public BakaBTParser(BakaBTSettings settings, IndexerCapabilitiesCategories categories) public BakaBTParser(BakaBTSettings settings, IndexerCapabilitiesCategories categories)
{ {

View File

@@ -360,7 +360,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class BeyondHDSettings : NoAuthTorrentBaseSettings public class BeyondHDSettings : NoAuthTorrentBaseSettings
{ {
private static readonly BeyondHDSettingsValidator Validator = new (); private static readonly BeyondHDSettingsValidator Validator = new();
public BeyondHDSettings() public BeyondHDSettings()
{ {

View File

@@ -216,7 +216,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public string BaseUrl { get; set; } public string BaseUrl { get; set; }
[FieldDefinition(2)] [FieldDefinition(2)]
public IndexerBaseSettings BaseSettings { get; set; } = new (); public IndexerBaseSettings BaseSettings { get; set; } = new();
public NzbDroneValidationResult Validate() public NzbDroneValidationResult Validate()
{ {

View File

@@ -12,7 +12,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
{ {
public class BroadcastheNetParser : IParseIndexerResponse public class BroadcastheNetParser : IParseIndexerResponse
{ {
private static readonly Regex RegexProtocol = new ("^https?:", RegexOptions.Compiled); private static readonly Regex RegexProtocol = new("^https?:", RegexOptions.Compiled);
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; } public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }

View File

@@ -15,7 +15,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
public class BroadcastheNetSettings : NoAuthTorrentBaseSettings public class BroadcastheNetSettings : NoAuthTorrentBaseSettings
{ {
private static readonly BroadcastheNetSettingsValidator Validator = new (); private static readonly BroadcastheNetSettingsValidator Validator = new();
public BroadcastheNetSettings() public BroadcastheNetSettings()
{ {

View File

@@ -128,8 +128,8 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
{ {
var defaultSettings = new List<SettingsField> var defaultSettings = new List<SettingsField>
{ {
new () { Name = "username", Label = "Username", Type = "text" }, new() { Name = "username", Label = "Username", Type = "text" },
new () { Name = "password", Label = "Password", Type = "password" } new() { Name = "password", Label = "Password", Type = "password" }
}; };
var settings = definition.Settings ?? defaultSettings; var settings = definition.Settings ?? defaultSettings;

View File

@@ -27,8 +27,8 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
protected virtual string SiteLink { get; private set; } protected virtual string SiteLink { get; private set; }
protected readonly IndexerCapabilitiesCategories _categories = new (); protected readonly IndexerCapabilitiesCategories _categories = new();
protected readonly List<string> _defaultCategories = new (); protected readonly List<string> _defaultCategories = new();
protected readonly string[] OptionalFields = new string[] { "imdb", "imdbid", "tmdbid", "rageid", "tvdbid", "tvmazeid", "traktid", "doubanid", "poster", "banner", "description", "genre" }; protected readonly string[] OptionalFields = new string[] { "imdb", "imdbid", "tmdbid", "rageid", "tvdbid", "tvmazeid", "traktid", "doubanid", "poster", "banner", "description", "genre" };
@@ -710,15 +710,15 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
var diacriticsOp = (string)filter.Args; var diacriticsOp = (string)filter.Args;
if (diacriticsOp == "replace") 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" // It's not perfect, e.g. "ŠĐĆŽ - šđčćž" becomes "SĐCZ-sđccz"
var stFormD = data.Normalize(NormalizationForm.FormD); var stFormD = data.Normalize(NormalizationForm.FormD);
var len = stFormD.Length; var len = stFormD.Length;
var sb = new StringBuilder(); var sb = new StringBuilder();
for (var i = 0; i < len; i++) for (var i = 0; i < len; i++)
{ {
var uc = System.Globalization.CharUnicodeInfo.GetUnicodeCategory(stFormD[i]); var uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[i]);
if (uc != System.Globalization.UnicodeCategory.NonSpacingMark) if (uc != UnicodeCategory.NonSpacingMark)
{ {
sb.Append(stFormD[i]); sb.Append(stFormD[i]);
} }
@@ -779,7 +779,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
return headers; 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) foreach (var header in customHeaders)
{ {
headers.Add(header.Key, ApplyGoTemplateText(header.Value[0], variables)); headers.Add(header.Key, ApplyGoTemplateText(header.Value[0], variables));

View File

@@ -1203,7 +1203,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
Encoding = _encoding Encoding = _encoding
}; };
// Add FormData for searchs that POST // Add FormData for searches that POST
if (method == HttpMethod.Post) if (method == HttpMethod.Post)
{ {
foreach (var param in queryCollection) foreach (var param in queryCollection)

View File

@@ -16,7 +16,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
public class CardigannSettings : NoAuthTorrentBaseSettings public class CardigannSettings : NoAuthTorrentBaseSettings
{ {
private static readonly CardigannSettingsValidator Validator = new (); private static readonly CardigannSettingsValidator Validator = new();
public CardigannSettings() public CardigannSettings()
{ {

View File

@@ -54,8 +54,6 @@ namespace NzbDrone.Core.Indexers.Definitions
{ {
private readonly IndexerCapabilitiesCategories _categories; private readonly IndexerCapabilitiesCategories _categories;
protected override string TimezoneOffset => "+02:00";
public ExoticaZParser(IndexerCapabilitiesCategories categories) public ExoticaZParser(IndexerCapabilitiesCategories categories)
{ {
_categories = categories; _categories = categories;

View File

@@ -16,7 +16,7 @@ public class FileListSettingsValidator : NoAuthSettingsValidator<FileListSetting
public class FileListSettings : NoAuthTorrentBaseSettings public class FileListSettings : NoAuthTorrentBaseSettings
{ {
private static readonly FileListSettingsValidator Validator = new (); private static readonly FileListSettingsValidator Validator = new();
public FileListSettings() public FileListSettings()
{ {

View File

@@ -228,7 +228,7 @@ public class FunFileParser : IParseIndexerResponse
private readonly UserPassTorrentBaseSettings _settings; private readonly UserPassTorrentBaseSettings _settings;
private readonly IndexerCapabilitiesCategories _categories; private readonly IndexerCapabilitiesCategories _categories;
private readonly List<string> _validTagList = new () private readonly List<string> _validTagList = new()
{ {
"action", "action",
"adventure", "adventure",

View File

@@ -11,7 +11,7 @@ public class GazelleSettingsValidator<T> : UserPassBaseSettingsValidator<T>
public class GazelleSettings : UserPassTorrentBaseSettings public class GazelleSettings : UserPassTorrentBaseSettings
{ {
private static readonly GazelleSettingsValidator<GazelleSettings> Validator = new (); private static readonly GazelleSettingsValidator<GazelleSettings> Validator = new();
public string AuthKey { get; set; } public string AuthKey { get; set; }
public string PassKey { get; set; } public string PassKey { get; set; }

View File

@@ -19,7 +19,7 @@ public class GazelleUserPassOrCookieValidator<T> : NoAuthSettingsValidator<T>
public class GazelleUserPassOrCookieSettings : GazelleSettings public class GazelleUserPassOrCookieSettings : GazelleSettings
{ {
private static readonly GazelleUserPassOrCookieValidator<GazelleUserPassOrCookieSettings> Validator = new (); private static readonly GazelleUserPassOrCookieValidator<GazelleUserPassOrCookieSettings> Validator = new();
[FieldDefinition(4, Label = "Cookie", HelpText = "Use the Cookie field only if 2FA is enabled for your account, leave it empty otherwise.", HelpLink = "https://wiki.servarr.com/useful-tools#finding-cookies", Privacy = PrivacyLevel.Password)] [FieldDefinition(4, Label = "Cookie", HelpText = "Use the Cookie field only if 2FA is enabled for your account, leave it empty otherwise.", HelpLink = "https://wiki.servarr.com/useful-tools#finding-cookies", Privacy = PrivacyLevel.Password)]
public string Cookie { get; set; } public string Cookie { get; set; }

View File

@@ -369,7 +369,7 @@ namespace NzbDrone.Core.Indexers.Definitions
private readonly GazelleGamesSettings _settings; private readonly GazelleGamesSettings _settings;
private readonly IndexerCapabilitiesCategories _categories; private readonly IndexerCapabilitiesCategories _categories;
private static Regex YearRegex => new (@"\b(?:19|20|21)\d{2}\b", RegexOptions.Compiled); private static Regex YearRegex => new(@"\b(?:19|20|21)\d{2}\b", RegexOptions.Compiled);
public GazelleGamesParser(GazelleGamesSettings settings, IndexerCapabilitiesCategories categories) public GazelleGamesParser(GazelleGamesSettings settings, IndexerCapabilitiesCategories categories)
{ {
@@ -553,7 +553,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class GazelleGamesSettings : NoAuthTorrentBaseSettings public class GazelleGamesSettings : NoAuthTorrentBaseSettings
{ {
private static readonly GazelleGamesSettingsValidator Validator = new (); private static readonly GazelleGamesSettingsValidator Validator = new();
public GazelleGamesSettings() public GazelleGamesSettings()
{ {

View File

@@ -120,7 +120,7 @@ public class GreatPosterWallParser : GazelleParser
private readonly GreatPosterWallSettings _settings; private readonly GreatPosterWallSettings _settings;
private readonly Logger _logger; private readonly Logger _logger;
private readonly HashSet<string> _hdResolutions = new () { "1080p", "1080i", "720p" }; private readonly HashSet<string> _hdResolutions = new() { "1080p", "1080i", "720p" };
public GreatPosterWallParser(GreatPosterWallSettings settings, IndexerCapabilities capabilities, Logger logger) public GreatPosterWallParser(GreatPosterWallSettings settings, IndexerCapabilities capabilities, Logger logger)
: base(settings, capabilities) : base(settings, capabilities)
@@ -272,7 +272,7 @@ public class GreatPosterWallParser : GazelleParser
public class GreatPosterWallSettings : GazelleUserPassOrCookieSettings public class GreatPosterWallSettings : GazelleUserPassOrCookieSettings
{ {
private static readonly GazelleUserPassOrCookieValidator<GreatPosterWallSettings> Validator = new (); private static readonly GazelleUserPassOrCookieValidator<GreatPosterWallSettings> Validator = new();
[FieldDefinition(6, Label = "Freeleech Only", Type = FieldType.Checkbox, HelpText = "Search freeleech torrents only")] [FieldDefinition(6, Label = "Freeleech Only", Type = FieldType.Checkbox, HelpText = "Search freeleech torrents only")]
public bool FreeleechOnly { get; set; } public bool FreeleechOnly { get; set; }

View File

@@ -15,7 +15,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
private readonly HDBitsSettings _settings; private readonly HDBitsSettings _settings;
private readonly IndexerCapabilitiesCategories _categories; private readonly IndexerCapabilitiesCategories _categories;
private readonly List<int> _halfLeechMediums = new () { (int)HdBitsMedium.Bluray, (int)HdBitsMedium.Remux, (int)HdBitsMedium.Capture }; private readonly List<int> _halfLeechMediums = new() { (int)HdBitsMedium.Bluray, (int)HdBitsMedium.Remux, (int)HdBitsMedium.Capture };
public HDBitsParser(HDBitsSettings settings, IndexerCapabilitiesCategories categories) public HDBitsParser(HDBitsSettings settings, IndexerCapabilitiesCategories categories)
{ {

View File

@@ -18,7 +18,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
public class HDBitsSettings : NoAuthTorrentBaseSettings public class HDBitsSettings : NoAuthTorrentBaseSettings
{ {
private static readonly HDBitsSettingsValidator Validator = new (); private static readonly HDBitsSettingsValidator Validator = new();
public HDBitsSettings() public HDBitsSettings()
{ {

View File

@@ -234,8 +234,8 @@ namespace NzbDrone.Core.Indexers.Definitions
private readonly UserPassTorrentBaseSettings _settings; private readonly UserPassTorrentBaseSettings _settings;
private readonly IndexerCapabilitiesCategories _categories; private readonly IndexerCapabilitiesCategories _categories;
private readonly Regex _posterRegex = new (@"src=\\'./([^']+)\\'", RegexOptions.IgnoreCase); private readonly Regex _posterRegex = new(@"src=\\'./([^']+)\\'", RegexOptions.IgnoreCase);
private readonly HashSet<string> _freeleechRanks = new (StringComparer.OrdinalIgnoreCase) private readonly HashSet<string> _freeleechRanks = new(StringComparer.OrdinalIgnoreCase)
{ {
"VIP", "VIP",
"Uploader", "Uploader",

View File

@@ -16,7 +16,7 @@ namespace NzbDrone.Core.Indexers.Headphones
public class HeadphonesSettings : IIndexerSettings public class HeadphonesSettings : IIndexerSettings
{ {
private static readonly HeadphonesSettingsValidator Validator = new (); private static readonly HeadphonesSettingsValidator Validator = new();
public HeadphonesSettings() public HeadphonesSettings()
{ {
@@ -38,7 +38,7 @@ namespace NzbDrone.Core.Indexers.Headphones
public string Password { get; set; } public string Password { get; set; }
[FieldDefinition(4)] [FieldDefinition(4)]
public IndexerBaseSettings BaseSettings { get; set; } = new (); public IndexerBaseSettings BaseSettings { get; set; } = new();
public virtual NzbDroneValidationResult Validate() public virtual NzbDroneValidationResult Validate()
{ {

View File

@@ -424,7 +424,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class IPTorrentsSettings : CookieTorrentBaseSettings public class IPTorrentsSettings : CookieTorrentBaseSettings
{ {
private static readonly IPTorrentsValidator Validator = new (); private static readonly IPTorrentsValidator Validator = new();
[FieldDefinition(3, Label = "IndexerIPTorrentsSettingsCookieUserAgent", Type = FieldType.Textbox, HelpText = "IndexerIPTorrentsSettingsCookieUserAgentHelpText")] [FieldDefinition(3, Label = "IndexerIPTorrentsSettingsCookieUserAgent", Type = FieldType.Textbox, HelpText = "IndexerIPTorrentsSettingsCookieUserAgentHelpText")]
public string UserAgent { get; set; } public string UserAgent { get; set; }

View File

@@ -257,7 +257,7 @@ namespace NzbDrone.Core.Indexers.Definitions
private readonly ImmortalSeedSettings _settings; private readonly ImmortalSeedSettings _settings;
private readonly IndexerCapabilitiesCategories _categories; private readonly IndexerCapabilitiesCategories _categories;
private readonly Regex _dateAddedRegex = new (@"\d{4}-\d{2}-\d{2} \d{2}:\d{2} [AaPp][Mm]", RegexOptions.Compiled); private readonly Regex _dateAddedRegex = new(@"\d{4}-\d{2}-\d{2} \d{2}:\d{2} [AaPp][Mm]", RegexOptions.Compiled);
public ImmortalSeedParser(ImmortalSeedSettings settings, IndexerCapabilitiesCategories categories) public ImmortalSeedParser(ImmortalSeedSettings settings, IndexerCapabilitiesCategories categories)
{ {

View File

@@ -247,7 +247,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class KnabenParser : IParseIndexerResponse public class KnabenParser : IParseIndexerResponse
{ {
private static readonly Regex DateTimezoneRegex = new (@"[+-]\d{2}:\d{2}$", RegexOptions.Compiled); private static readonly Regex DateTimezoneRegex = new(@"[+-]\d{2}:\d{2}$", RegexOptions.Compiled);
private readonly IndexerCapabilitiesCategories _categories; private readonly IndexerCapabilitiesCategories _categories;

View File

@@ -226,7 +226,7 @@ public class LibbleRequestGenerator : IIndexerRequestGenerator
public class LibbleParser : IParseIndexerResponse public class LibbleParser : IParseIndexerResponse
{ {
private readonly LibbleSettings _settings; private readonly LibbleSettings _settings;
private static Regex ReleaseYearRegex => new (@"\[(\d{4})\]$", RegexOptions.Compiled); private static Regex ReleaseYearRegex => new(@"\[(\d{4})\]$", RegexOptions.Compiled);
public LibbleParser(LibbleSettings settings) public LibbleParser(LibbleSettings settings)
{ {

View File

@@ -427,7 +427,7 @@ public class MTeamTpValidator : NoAuthSettingsValidator<MTeamTpSettings>
public class MTeamTpSettings : NoAuthTorrentBaseSettings public class MTeamTpSettings : NoAuthTorrentBaseSettings
{ {
private static readonly MTeamTpValidator Validator = new (); private static readonly MTeamTpValidator Validator = new();
[FieldDefinition(2, Label = "ApiKey", HelpText = "IndexerMTeamTpSettingsApiKeyHelpText", Privacy = PrivacyLevel.ApiKey)] [FieldDefinition(2, Label = "ApiKey", HelpText = "IndexerMTeamTpSettingsApiKeyHelpText", Privacy = PrivacyLevel.ApiKey)]
public string ApiKey { get; set; } public string ApiKey { get; set; }

View File

@@ -258,7 +258,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class MyAnonamouseRequestGenerator : IIndexerRequestGenerator public class MyAnonamouseRequestGenerator : IIndexerRequestGenerator
{ {
private static readonly Regex SanitizeSearchQueryRegex = new ("[^\\w]+", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex SanitizeSearchQueryRegex = new("[^\\w]+", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private readonly MyAnonamouseSettings _settings; private readonly MyAnonamouseSettings _settings;
private readonly IndexerCapabilities _capabilities; private readonly IndexerCapabilities _capabilities;
@@ -417,7 +417,7 @@ namespace NzbDrone.Core.Indexers.Definitions
private readonly Logger _logger; private readonly Logger _logger;
private readonly ICached<string> _userClassCache; private readonly ICached<string> _userClassCache;
private readonly HashSet<string> _vipFreeleechUserClasses = new (StringComparer.OrdinalIgnoreCase) private readonly HashSet<string> _vipFreeleechUserClasses = new(StringComparer.OrdinalIgnoreCase)
{ {
"VIP", "VIP",
"Elite VIP" "Elite VIP"
@@ -613,7 +613,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class MyAnonamouseSettings : NoAuthTorrentBaseSettings public class MyAnonamouseSettings : NoAuthTorrentBaseSettings
{ {
private static readonly MyAnonamouseSettingsValidator Validator = new (); private static readonly MyAnonamouseSettingsValidator Validator = new();
public MyAnonamouseSettings() public MyAnonamouseSettings()
{ {

View File

@@ -224,24 +224,28 @@ namespace NzbDrone.Core.Indexers.Newznab
foreach (var xmlCategory in xmlCategories.Elements("category")) foreach (var xmlCategory in xmlCategories.Elements("category"))
{ {
var parentName = xmlCategory.Attribute("name").Value; var parentName = xmlCategory.Attribute("name").Value;
var parentNameLower = parentName?.ToLowerInvariant();
var parentId = int.Parse(xmlCategory.Attribute("id").Value); 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 // 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)); 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 // Try by parent id if name fails
mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => x.Id == parentId); mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => x.Id == parentId);
} }
if (mappedCat == null) if (mappedCat is null)
{ {
// Fallback to Other // Fallback to Other
mappedCat = NewznabStandardCategory.Other; mappedCat = NewznabStandardCategory.Other;

Some files were not shown because too many files have changed in this diff Show More