Compare commits

...

80 Commits

Author SHA1 Message Date
Robin Dadswell c417c41133 Fixed: Saving Newznab indexer when redirect was true 2025-08-05 13:30:21 +01:00
Weblate d5853735ac 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-05 06:12:08 -05:00
Robin Dadswell dbc159f536 New: Force all usenet indexers to use Redirection 2025-08-04 10:39:45 +01:00
Robin Dadswell 231cc91f97 New: Updated all newznab indexers to be redirect 2025-08-04 10:39:45 +01:00
Mike Miller 1a075f201c Fixed: (Xpseeds) Update categories (#2458)
Sync with Jackett
2025-08-03 13:12:59 -05:00
bakerboy448 de7f42cf30 Bump version to 2.0.3 2025-07-23 08:50:43 -05:00
bakerboy448 fab74b58fa 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-07-19 07:43:26 -04:00
bakerboy448 2b332a00d7 Bump version to 2.0.2 2025-07-08 18:36:38 -05:00
Weblate a0b0c1555c 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-07-08 17:31:08 -05:00
bakerboy448 86b81948af Sync UiAuthorizationPolicyProvider with upstream
* Revert "Fixed: Fallback to Forms for removed Basic auth method"

This reverts commit fe198352a3.

* AuthPolicy Var fixes
2025-07-02 10:10:40 -05:00
Mark McDowall 54918e0c30 Change authentication to Forms if set to Basic
(cherry picked from commit 8e08b0cc3df904d39da5be38bc345cc701412a9d)
2025-06-28 09:29:52 -05:00
Bogdan 01dd793c0a Bump version to 2.0.1 2025-06-15 09:25:06 +03:00
Bogdan 950949e4bc Bump Polly to 8.6.0 2025-06-12 09:56:52 +03:00
Bogdan fe198352a3 Fixed: Fallback to Forms for removed Basic auth method 2025-06-11 20:13:03 +03:00
Bogdan 88502cd020 Fixed: (AnimeTosho) Mapping of Subcategory as Parent 2025-06-11 10:32:21 +03:00
Bogdan 4924b45b56 Fix various typos 2025-06-10 18:36:14 +03:00
Bogdan aea8b7cd7e Fixed: Redirect loop for removed basic auth method 2025-06-10 12:33:52 +03:00
Bogdan aafadb6111 Fix fullscreen automation screenshots 2025-06-09 22:08:00 +03:00
Mark McDowall c82f904d49 New: Add exception to SSL Certificate validation message
(cherry picked from commit d84c4500949a530fac92d73f7f2f8e8462b37244)
2025-06-08 16:37:52 +03:00
Servarr 60740fa259 Automated API Docs update 2025-06-08 10:33:02 +03:00
Mark McDowall d36b32f414 New: Remove Basic Auth
(cherry picked from commit 0f9e063e2146812f6e963363eee70a524612f354)
2025-06-07 19:23:03 +03:00
Bogdan 14ccd6d2a5 Fixed: Validation for tags label 2025-06-07 19:23:03 +03:00
Bogdan bdc3b63df2 Upgrade StyleCop.Analyzers to Unstable 1.2.0.556 2025-06-07 19:23:03 +03:00
Bogdan 8eec321a0e Bump Swashbuckle to 8.1.4 2025-06-07 19:23:03 +03:00
Bogdan 06de2313ab Bump version to 2.0.0 2025-06-07 19:23:03 +03:00
Bogdan a3f713bad8 New: Support removed for linux-x86 2025-06-07 19:23:03 +03:00
Bogdan 7a1fca5e23 New: Migrate appdata folder for .NET 8 on OSX 2025-06-07 19:23:03 +03:00
Bogdan 21c408a7da New: Bump to .NET 8 2025-06-07 19:23:03 +03:00
Weblate 0e92108970 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-06-06 14:41:02 +03:00
Bogdan 7d813ef97a Bump version to 1.38.0 2025-06-04 14:05:21 +03:00
Bogdan c87995250a Fixed: Sync indexers with basic search to Radarr and Sonarr
Fixes #2404
2025-06-03 14:26:09 +03:00
Bogdan a9f7a376c7 Bump version to 1.37.0 2025-05-25 17:00:17 +03:00
Bogdan c3ee3f2320 Fix jump to character for Search page 2025-05-25 14:04:33 +03:00
Weblate e8c26d0fea Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: thelooter <evekolb2204@gmail.com>
Co-authored-by: warkurre86 <tom.novo.86@gmail.com>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/cs/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/de/
Translation: Servarr/Prowlarr
2025-05-25 12:05:56 +03:00
Bogdan 9c936121e8 Fixed: Sync indexers with basic search to Lidarr and Readarr
Fixes #2402
2025-05-22 13:30:41 +03:00
Bogdan 40d2e40d94 Fail build on missing test results
Ignore missing test results failure on FreeBSD
2025-05-18 18:01:13 +03:00
Weblate 837f50c91c Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Fixer <ygj59783@zslsz.com>
Co-authored-by: Hugoren Martinako <aumpfbahn@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/de/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/el/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/it/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pl/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/uk/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_CN/
Translation: Servarr/Prowlarr
2025-05-18 14:10:34 +03:00
Bogdan f0a0202e5c Bump version to 1.36.3 2025-05-18 14:10:14 +03:00
Bogdan 708c94bc56 Fixed PTP test 2025-05-15 00:47:46 +03:00
Bogdan 5ed82eaf09 Fixed: (PTP) Download torrent files with API credentials 2025-05-14 22:44:26 +03:00
Bogdan 7d77ad68fd Bump caniuse db 2025-05-14 21:25:20 +03:00
Bogdan 6725358db5 Bump babel, fontawesome icons, react-use-measure, react-virtualized and react-window 2025-05-14 21:25:20 +03:00
Bogdan c410e23460 Bump core-js to 3.42 2025-05-14 21:25:20 +03:00
Bogdan 903b86b9a2 Bump version to 1.36.2 2025-05-11 14:48:48 +03:00
Weblate 52a49e6a34 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Discover999 <13189912235@163.com>
Co-authored-by: GkhnGRBZ <gkhn.gurbuz@hotmail.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: ZijiYu <ziji.yu@stonybrook.edu>
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/tr/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_CN/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/zh_Hans/
Translation: Servarr/Prowlarr
2025-05-11 00:07:11 +03:00
Bogdan a7d99f351c Fixed: Parsing user agents without a version
Fixes #2392
2025-05-11 00:05:29 +03:00
Bogdan b0212dd780 Add hourly limits as defaults for PTP 2025-05-10 11:55:11 +03:00
Bogdan c8f5099423 Use the thrown exception in http timeout handling 2025-05-09 15:58:02 +03:00
Bogdan 5cc4c3f302 Bump version to 1.36.1 2025-05-04 21:06:28 +03:00
Bogdan c0d2cb42e9 Fixed: (PTP) Sorting releases by time added 2025-05-01 17:06:17 +03:00
Bogdan 8081f13052 Clean logging messages in AppriseProxy 2025-05-01 12:12:47 +03:00
Bogdan 84b672e617 Fixed: Sync indexers to apps only if search is available 2025-05-01 01:34:09 +03:00
Bogdan ed586c2d72 Update fixture file for PTP 2025-05-01 00:30:55 +03:00
Bogdan 233176e321 Improve error message when BHD's API responds with HTML 2025-04-30 22:12:30 +03:00
Bogdan d1e3390bae Fixed: (PTP) Category mapping for search results 2025-04-30 22:12:30 +03:00
Bogdan 1cd60c7a40 Bump version to 1.36.0 2025-04-30 14:03:05 +03:00
Bogdan c61cfcd312 Avoid logging the whole response in the exception when not finding JSON selectors in Cardigann 2025-04-30 12:36:34 +03:00
Weblate 5eb4d112ca Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
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/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/nb_NO/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/uk/
Translation: Servarr/Prowlarr
2025-04-29 11:05:21 +03:00
Mark McDowall 70f2361d69 Improve messaging when NZB contains invalid XML
(cherry picked from commit 728df146ada115a367bf1ce808482a4625e6098d)
2025-04-29 10:58:31 +03:00
Bogdan 1d6babaa15 Bump caniuse db 2025-04-29 10:23:51 +03:00
Bogdan 0427add8d0 Bump core-js to 3.41 2025-04-29 10:23:15 +03:00
Bogdan 010c2b836d Clean up formatted strings in log messages 2025-04-29 10:16:59 +03:00
Bogdan 22c4c1fc9a Pass messages with arguments to NLog in LoggerExtensions
(cherry picked from commit 9683b0af35220bb0af801779a06d73feaeba809a)
2025-04-29 10:14:32 +03:00
Bogdan d5f6cc94b8 Fixed: (PTP) TV search capabilities removed 2025-04-29 10:04:40 +03:00
Bogdan 411e96ef2a New: Redirect enabled by default when adding new usenet indexers 2025-04-28 21:52:09 +03:00
Bogdan 2b0e52ebca Update default log level message 2025-04-27 21:22:37 +03:00
Bogdan c6fa26ca7b Bump version to 1.35.1 2025-04-27 11:48:50 +03:00
blu3 c85f170d41 Bump license year 2025-04-23 11:34:19 +03:00
Bogdan 48a658571b Improve error messaging for not finding JSON selectors in Cardigann 2025-04-21 14:39:22 +03:00
Weblate 0b3a5c9bc4 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: Hugoren Martinako <aumpfbahn@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/ca/
Translate-URL: https://translate.servarr.com/projects/servarr/prowlarr/fi/
Translation: Servarr/Prowlarr
2025-04-20 22:30:45 +03:00
Bogdan 356d07ef34 Bump version to 1.35.0 2025-04-20 22:30:15 +03:00
Bogdan 0322d70d63 Fixed: Handle 307 and 308 redirects for indexer download requests 2025-04-20 11:09:08 +03:00
Bogdan 362f3fe223 Bump version to 1.34.1 2025-04-13 09:48:04 +03:00
Bogdan 075fd24f96 Downgrade Microsoft.AspNetCore.WebUtilities 2025-04-12 17:23:45 +03:00
Bogdan 4ba72ea7f3 Bump Swashbuckle to 7.3.2 2025-04-12 14:54:56 +03:00
Bogdan 46f73c51bb Bump IPAddressRange, Npgsql, System.Text.Json 2025-04-12 14:54:01 +03:00
Bogdan 3287d45661 Update timezone offset for AvistaZ trackers 2025-04-12 14:42:25 +03:00
Bogdan 71937fa44c Update timezone offset for FL 2025-04-12 14:33:30 +03:00
Bogdan 6aefd46cd4 Fixed: (SecretCinema) Edition not being decoded 2025-04-12 14:31:29 +03:00
Bogdan c8370c9e00 Bump version to 1.34.0 2025-04-09 20:59:15 +03:00
236 changed files with 3101 additions and 2004 deletions
+2 -2
View File
@@ -2,11 +2,11 @@
// README at: https://github.com/devcontainers/templates/tree/main/src/dotnet
{
"name": "Prowlarr",
"image": "mcr.microsoft.com/devcontainers/dotnet:1-6.0",
"image": "mcr.microsoft.com/devcontainers/dotnet:1-8.0",
"features": {
"ghcr.io/devcontainers/features/node:1": {
"nodeGypDependencies": true,
"version": "16",
"version": "20",
"nvmVersion": "latest"
}
},
+1 -1
View File
@@ -10,7 +10,7 @@
"request": "launch",
"preLaunchTask": "build dotnet",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/_output/net6.0/Prowlarr",
"program": "${workspaceFolder}/_output/net8.0/Prowlarr",
"args": [],
"cwd": "${workspaceFolder}",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
+1 -1
View File
@@ -78,6 +78,6 @@ Thank you to [<img src="https://resources.jetbrains.com/storage/products/company
### License
- [GNU GPL v3](http://www.gnu.org/licenses/gpl.html)
- Copyright 2010-2024
- Copyright 2010-2025
Icon Credit - [Box vector created by freepik - www.freepik.com](https://www.freepik.com/vectors/box)
+34 -58
View File
@@ -9,13 +9,13 @@ variables:
testsFolder: './_tests'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
majorVersion: '1.33.3'
majorVersion: '2.0.3'
minorVersion: $[counter('minorVersion', 1)]
prowlarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
sentryOrg: 'servarr'
sentryUrl: 'https://sentry.servarr.com'
dotnetVersion: '6.0.427'
dotnetVersion: '8.0.405'
nodeVersion: '20.X'
innoVersion: '6.2.2'
windowsImage: 'windows-2022'
@@ -106,7 +106,7 @@ stages:
echo "Extra platforms already enabled"
else
echo "Enabling extra platform support"
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86/' $BUNDLEDVERSIONS
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64/' "$BUNDLEDVERSIONS"
fi
displayName: Enable Extra Platform Support
- bash: ./build.sh --backend --enable-extra-platforms
@@ -122,27 +122,23 @@ stages:
artifact: '$(osName)Backend'
displayName: Publish Backend
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/win-x64/publish'
- publish: '$(testsFolder)/net8.0/win-x64/publish'
artifact: win-x64-tests
displayName: Publish win-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/linux-x64/publish'
- publish: '$(testsFolder)/net8.0/linux-x64/publish'
artifact: linux-x64-tests
displayName: Publish linux-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/linux-x86/publish'
artifact: linux-x86-tests
displayName: Publish linux-x86 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/linux-musl-x64/publish'
- publish: '$(testsFolder)/net8.0/linux-musl-x64/publish'
artifact: linux-musl-x64-tests
displayName: Publish linux-musl-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/freebsd-x64/publish'
- publish: '$(testsFolder)/net8.0/freebsd-x64/publish'
artifact: freebsd-x64-tests
displayName: Publish freebsd-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/osx-x64/publish'
- publish: '$(testsFolder)/net8.0/osx-x64/publish'
artifact: osx-x64-tests
displayName: Publish osx-x64 Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
@@ -259,21 +255,21 @@ stages:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x64.zip'
archiveType: 'zip'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/win-x64/net6.0
rootFolderOrFile: $(artifactsFolder)/win-x64/net8.0
- task: ArchiveFiles@2
displayName: Create win-x86 zip
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x86.zip'
archiveType: 'zip'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/win-x86/net6.0
rootFolderOrFile: $(artifactsFolder)/win-x86/net8.0
- task: ArchiveFiles@2
displayName: Create osx-x64 app
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-x64.zip'
archiveType: 'zip'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-x64-app/net6.0
rootFolderOrFile: $(artifactsFolder)/osx-x64-app/net8.0
- task: ArchiveFiles@2
displayName: Create osx-x64 tar
inputs:
@@ -281,14 +277,14 @@ stages:
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-x64/net6.0
rootFolderOrFile: $(artifactsFolder)/osx-x64/net8.0
- task: ArchiveFiles@2
displayName: Create osx-arm64 app
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-arm64.zip'
archiveType: 'zip'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-arm64-app/net6.0
rootFolderOrFile: $(artifactsFolder)/osx-arm64-app/net8.0
- task: ArchiveFiles@2
displayName: Create osx-arm64 tar
inputs:
@@ -296,7 +292,7 @@ stages:
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-arm64/net6.0
rootFolderOrFile: $(artifactsFolder)/osx-arm64/net8.0
- task: ArchiveFiles@2
displayName: Create linux-x64 tar
inputs:
@@ -304,7 +300,7 @@ stages:
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-x64/net6.0
rootFolderOrFile: $(artifactsFolder)/linux-x64/net8.0
- task: ArchiveFiles@2
displayName: Create linux-musl-x64 tar
inputs:
@@ -312,15 +308,7 @@ stages:
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net6.0
- task: ArchiveFiles@2
displayName: Create linux-x86 tar
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).linux-core-x86.tar.gz'
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-x86/net6.0
rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net8.0
- task: ArchiveFiles@2
displayName: Create linux-arm tar
inputs:
@@ -328,7 +316,7 @@ stages:
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-arm/net6.0
rootFolderOrFile: $(artifactsFolder)/linux-arm/net8.0
- task: ArchiveFiles@2
displayName: Create linux-musl-arm tar
inputs:
@@ -336,7 +324,7 @@ stages:
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm/net6.0
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm/net8.0
- task: ArchiveFiles@2
displayName: Create linux-arm64 tar
inputs:
@@ -344,7 +332,7 @@ stages:
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-arm64/net6.0
rootFolderOrFile: $(artifactsFolder)/linux-arm64/net8.0
- task: ArchiveFiles@2
displayName: Create linux-musl-arm64 tar
inputs:
@@ -352,7 +340,7 @@ stages:
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net6.0
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net8.0
- task: ArchiveFiles@2
displayName: Create freebsd-x64 tar
inputs:
@@ -360,7 +348,7 @@ stages:
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net6.0
rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net8.0
- publish: $(Build.ArtifactStagingDirectory)
artifact: 'Packages'
displayName: Publish Packages
@@ -476,6 +464,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: '$(testName) Unit Tests'
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: ne(variables['testName'], 'freebsd-x64')
- job: Unit_Docker
displayName: Unit Docker
@@ -487,10 +476,6 @@ stages:
testName: 'Musl Net Core'
artifactName: linux-musl-x64-tests
containerImage: ghcr.io/servarr/testimages:alpine
linux-x86:
testName: 'linux-x86'
artifactName: linux-x86-tests
containerImage: ghcr.io/servarr/testimages:linux-x86
pool:
vmImage: ${{ variables.linuxImage }}
@@ -504,12 +489,6 @@ stages:
displayName: 'Install .NET'
inputs:
version: $(dotnetVersion)
condition: and(succeeded(), ne(variables['testName'], 'linux-x86'))
- bash: |
SDKURL=$(curl -s https://api.github.com/repos/Servarr/dotnet-linux-x86/releases | jq -rc '.[].assets[].browser_download_url' | grep sdk-${DOTNETVERSION}.*gz$)
curl -fsSL $SDKURL | tar xzf - -C /opt/dotnet
displayName: 'Install .NET'
condition: and(succeeded(), eq(variables['testName'], 'linux-x86'))
- checkout: none
- task: DownloadPipelineArtifact@2
displayName: Download Test Artifact
@@ -532,6 +511,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: '$(testName) Unit Tests'
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
- job: Unit_LinuxCore_Postgres14
displayName: Unit Native LinuxCore with Postgres14 Database
@@ -585,6 +565,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: 'LinuxCore Postgres14 Unit Tests'
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
- job: Unit_LinuxCore_Postgres15
displayName: Unit Native LinuxCore with Postgres15 Database
@@ -638,6 +619,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: 'LinuxCore Postgres15 Unit Tests'
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
- stage: Integration
displayName: Integration
@@ -720,6 +702,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: '$(testName) Integration Tests'
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
displayName: Publish Test Results
- job: Integration_LinuxCore_Postgres14
@@ -782,6 +765,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: 'Integration LinuxCore Postgres14 Database Integration Tests'
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
displayName: Publish Test Results
@@ -845,6 +829,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: 'Integration LinuxCore Postgres15 Database Integration Tests'
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
displayName: Publish Test Results
- job: Integration_FreeBSD
@@ -891,6 +876,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: 'FreeBSD Integration Tests'
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: false
displayName: Publish Test Results
- job: Integration_Docker
@@ -904,11 +890,6 @@ stages:
artifactName: linux-musl-x64-tests
containerImage: ghcr.io/servarr/testimages:alpine
pattern: 'Prowlarr.*.linux-musl-core-x64.tar.gz'
linux-x86:
testName: 'linux-x86'
artifactName: linux-x86-tests
containerImage: ghcr.io/servarr/testimages:linux-x86
pattern: 'Prowlarr.*.linux-core-x86.tar.gz'
pool:
vmImage: ${{ variables.linuxImage }}
@@ -921,12 +902,6 @@ stages:
displayName: 'Install .NET'
inputs:
version: $(dotnetVersion)
condition: and(succeeded(), ne(variables['testName'], 'linux-x86'))
- bash: |
SDKURL=$(curl -s https://api.github.com/repos/Servarr/dotnet-linux-x86/releases | jq -rc '.[].assets[].browser_download_url' | grep sdk-${DOTNETVERSION}.*gz$)
curl -fsSL $SDKURL | tar xzf - -C /opt/dotnet
displayName: 'Install .NET'
condition: and(succeeded(), eq(variables['testName'], 'linux-x86'))
- checkout: none
- task: DownloadPipelineArtifact@2
displayName: Download Test Artifact
@@ -960,6 +935,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: '$(testName) Integration Tests'
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
displayName: Publish Test Results
- stage: Automation
@@ -1041,6 +1017,7 @@ stages:
testResultsFiles: '**/TestResult.xml'
testRunTitle: '$(osName) Automation Tests'
failTaskOnFailedTests: $(failBuild)
failTaskOnMissingResultsFile: $(failBuild)
displayName: Publish Test Results
- stage: Analyze
@@ -1184,13 +1161,13 @@ stages:
sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml
sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml
- bash: |
./build.sh --backend -f net6.0 -r win-x64
TEST_DIR=_tests/net6.0/win-x64/publish/ ./test.sh Windows Unit Coverage
./build.sh --backend -f net8.0 -r win-x64
TEST_DIR=_tests/net8.0/win-x64/publish/ ./test.sh Windows Unit Coverage
displayName: Coverage Unit Tests
- task: SonarCloudAnalyze@3
condition: eq(variables['System.PullRequest.IsFork'], 'False')
displayName: Publish SonarCloud Results
- task: reportgenerator@5.3.11
- task: reportgenerator@5
displayName: Generate Coverage Report
inputs:
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'
@@ -1228,4 +1205,3 @@ stages:
DISCORDCHANNELID: $(discordChannelId)
DISCORDWEBHOOKKEY: $(discordWebhookKey)
DISCORDTHREADID: $(discordThreadId)
+25 -27
View File
@@ -33,14 +33,14 @@ EnableExtraPlatformsInSDK()
echo "Extra platforms already enabled"
else
echo "Enabling extra platform support"
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86/' $BUNDLEDVERSIONS
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64/' "$BUNDLEDVERSIONS"
fi
}
EnableExtraPlatforms()
{
if grep -qv freebsd-x64 src/Directory.Build.props; then
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64;linux-x86</RuntimeIdentifiers>^g" src/Directory.Build.props
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64</RuntimeIdentifiers>^g" src/Directory.Build.props
fi
}
@@ -79,9 +79,9 @@ Build()
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then
dotnet msbuild -restore $slnFile -p:Configuration=Release -p:Platform=$platform -t:PublishAllRids
dotnet msbuild -restore $slnFile -p:SelfContained=True -p:Configuration=Release -p:Platform=$platform -t:PublishAllRids
else
dotnet msbuild -restore $slnFile -p:Configuration=Release -p:Platform=$platform -p:RuntimeIdentifiers=$RID -t:PublishAllRids
dotnet msbuild -restore $slnFile -p:SelfContained=True -p:Configuration=Release -p:Platform=$platform -p:RuntimeIdentifiers=$RID -t:PublishAllRids
fi
ProgressEnd 'Build'
@@ -137,7 +137,7 @@ PackageLinux()
echo "Adding Prowlarr.Mono to UpdatePackage"
cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update
if [ "$framework" = "net6.0" ]; then
if [ "$framework" = "net8.0" ]; then
cp $folder/Mono.Posix.NETStandard.* $folder/Prowlarr.Update
cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update
fi
@@ -165,7 +165,7 @@ PackageMacOS()
echo "Adding Prowlarr.Mono to UpdatePackage"
cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update
if [ "$framework" = "net6.0" ]; then
if [ "$framework" = "net8.0" ]; then
cp $folder/Mono.Posix.NETStandard.* $folder/Prowlarr.Update
cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update
fi
@@ -377,15 +377,14 @@ then
Build
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then
PackageTests "net6.0" "win-x64"
PackageTests "net6.0" "win-x86"
PackageTests "net6.0" "linux-x64"
PackageTests "net6.0" "linux-musl-x64"
PackageTests "net6.0" "osx-x64"
PackageTests "net8.0" "win-x64"
PackageTests "net8.0" "win-x86"
PackageTests "net8.0" "linux-x64"
PackageTests "net8.0" "linux-musl-x64"
PackageTests "net8.0" "osx-x64"
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
then
PackageTests "net6.0" "freebsd-x64"
PackageTests "net6.0" "linux-x86"
PackageTests "net8.0" "freebsd-x64"
fi
else
PackageTests "$FRAMEWORK" "$RID"
@@ -413,20 +412,19 @@ then
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then
Package "net6.0" "win-x64"
Package "net6.0" "win-x86"
Package "net6.0" "linux-x64"
Package "net6.0" "linux-musl-x64"
Package "net6.0" "linux-arm64"
Package "net6.0" "linux-musl-arm64"
Package "net6.0" "linux-arm"
Package "net6.0" "linux-musl-arm"
Package "net6.0" "osx-x64"
Package "net6.0" "osx-arm64"
Package "net8.0" "win-x64"
Package "net8.0" "win-x86"
Package "net8.0" "linux-x64"
Package "net8.0" "linux-musl-x64"
Package "net8.0" "linux-arm64"
Package "net8.0" "linux-musl-arm64"
Package "net8.0" "linux-arm"
Package "net8.0" "linux-musl-arm"
Package "net8.0" "osx-x64"
Package "net8.0" "osx-arm64"
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
then
Package "net6.0" "freebsd-x64"
Package "net6.0" "linux-x86"
Package "net8.0" "freebsd-x64"
fi
else
Package "$FRAMEWORK" "$RID"
@@ -436,7 +434,7 @@ fi
if [ "$INSTALLER" = "YES" ];
then
InstallInno
BuildInstaller "net6.0" "win-x64"
BuildInstaller "net6.0" "win-x86"
BuildInstaller "net8.0" "win-x64"
BuildInstaller "net8.0" "win-x86"
RemoveInno
fi
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash
set -e
FRAMEWORK="net6.0"
FRAMEWORK="net8.0"
PLATFORM=$1
ARCHITECTURE="${2:-x64}"
@@ -38,7 +38,7 @@ dotnet clean $slnFile -c Release
dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p:RuntimeIdentifiers=$RUNTIME -t:PublishAllRids
dotnet new tool-manifest
dotnet tool install --version 6.6.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 &
+1 -1
View File
@@ -170,7 +170,7 @@ module.exports = (env) => {
loose: true,
debug: false,
useBuiltIns: 'entry',
corejs: '3.39'
corejs: '3.42'
}
]
]
+15 -2
View File
@@ -65,17 +65,30 @@ class VirtualTable extends Component {
if (this._grid && scrollTop !== undefined && scrollTop !== 0 && !scrollRestored) {
this.setState({ scrollRestored: true });
this._grid.scrollToPosition({ scrollTop });
this._gridScrollToPosition({ scrollTop });
}
if (scrollIndex != null && scrollIndex !== prevProps.scrollIndex) {
this._grid.scrollToCell({
this._gridScrollToCell({
rowIndex: scrollIndex,
columnIndex: 0
});
}
}
_gridScrollToCell = ({ rowIndex = 0, columnIndex = 0 }) => {
const scrollOffset = this._grid.getOffsetForCell({
rowIndex,
columnIndex
});
this._gridScrollToPosition(scrollOffset);
};
_gridScrollToPosition = ({ scrollTop = 0, scrollLeft = 0 }) => {
this.props.scroller?.scrollTo({ top: scrollTop, left: scrollLeft });
};
//
// Control
@@ -21,7 +21,7 @@ function createMapStateToProps() {
) => {
// If a release is deleted this selector may fire before the parent
// selecors, which will result in an undefined release, if that happens
// selectors, which will result in an undefined release, if that happens
// we want to return early here and again in the render function to avoid
// trying to show a release that has no information available.
@@ -30,7 +30,9 @@ export const authenticationMethodOptions = [
key: 'basic',
get value() {
return translate('AuthBasic');
}
},
isDisabled: true,
isHidden: true
},
{
key: 'forms',
+1 -1
View File
@@ -419,7 +419,7 @@ export const reducers = createHandleActions({
const items = newState.items;
const index = items.findIndex((item) => item.guid === guid);
// Don't try to update if there isnt a matching item (the user closed the modal)
// Don't try to update if there isn't a matching item (the user closed the modal)
if (index >= 0) {
const item = Object.assign({}, items[index], payload);
@@ -2,8 +2,8 @@ import { createSelector } from 'reselect';
import { isCommandExecuting } from 'Utilities/Command';
import createCommandSelector from './createCommandSelector';
function createCommandExecutingSelector(name: string, contraints = {}) {
return createSelector(createCommandSelector(name, contraints), (command) => {
function createCommandExecutingSelector(name: string, constraints = {}) {
return createSelector(createCommandSelector(name, constraints), (command) => {
return isCommandExecuting(command);
});
}
@@ -2,9 +2,9 @@ import { createSelector } from 'reselect';
import { findCommand } from 'Utilities/Command';
import createCommandsSelector from './createCommandsSelector';
function createCommandSelector(name: string, contraints = {}) {
function createCommandSelector(name: string, constraints = {}) {
return createSelector(createCommandsSelector(), (commands) => {
return findCommand(commands, { name, ...contraints });
return findCommand(commands, { name, ...constraints });
});
}
+5
View File
@@ -0,0 +1,5 @@
{
"sdk": {
"version": "8.0.405"
}
}
+16 -16
View File
@@ -23,17 +23,17 @@
"defaults"
],
"dependencies": {
"@fortawesome/fontawesome-free": "6.7.1",
"@fortawesome/fontawesome-svg-core": "6.7.1",
"@fortawesome/free-regular-svg-icons": "6.7.1",
"@fortawesome/free-solid-svg-icons": "6.7.1",
"@fortawesome/fontawesome-free": "6.7.2",
"@fortawesome/fontawesome-svg-core": "6.7.2",
"@fortawesome/free-regular-svg-icons": "6.7.2",
"@fortawesome/free-solid-svg-icons": "6.7.2",
"@fortawesome/react-fontawesome": "0.2.2",
"@juggle/resize-observer": "3.4.0",
"@microsoft/signalr": "6.0.25",
"@microsoft/signalr": "8.0.7",
"@sentry/browser": "7.119.1",
"@sentry/integrations": "7.119.1",
"@types/node": "20.16.11",
"@types/react": "18.2.79",
"@types/react": "18.3.21",
"@types/react-dom": "18.2.25",
"chart.js": "4.4.4",
"classnames": "2.5.1",
@@ -71,9 +71,9 @@
"react-router-dom": "5.2.0",
"react-tabs": "4.3.0",
"react-text-truncate": "0.19.0",
"react-use-measure": "2.1.1",
"react-virtualized": "9.21.1",
"react-window": "1.8.10",
"react-use-measure": "2.1.7",
"react-virtualized": "9.22.6",
"react-window": "1.8.11",
"redux": "4.2.1",
"redux-actions": "2.6.5",
"redux-batched-actions": "0.5.0",
@@ -84,13 +84,13 @@
"typescript": "5.7.2"
},
"devDependencies": {
"@babel/core": "7.26.0",
"@babel/eslint-parser": "7.25.9",
"@babel/plugin-proposal-export-default-from": "7.25.9",
"@babel/core": "7.27.1",
"@babel/eslint-parser": "7.27.1",
"@babel/plugin-proposal-export-default-from": "7.27.1",
"@babel/plugin-syntax-dynamic-import": "7.8.3",
"@babel/preset-env": "7.26.0",
"@babel/preset-react": "7.26.3",
"@babel/preset-typescript": "7.26.0",
"@babel/preset-env": "7.27.2",
"@babel/preset-react": "7.27.1",
"@babel/preset-typescript": "7.27.1",
"@types/lodash": "4.14.195",
"@types/react-document-title": "2.0.10",
"@types/react-router-dom": "5.3.3",
@@ -104,7 +104,7 @@
"babel-loader": "9.2.1",
"babel-plugin-inline-classnames": "2.0.1",
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
"core-js": "3.39.0",
"core-js": "3.42.0",
"css-loader": "6.7.3",
"css-modules-typescript-loader": "4.0.1",
"eslint": "8.57.1",
+3 -10
View File
@@ -99,13 +99,6 @@
<RootNamespace Condition="'$(ProwlarrProject)'=='true'">$(MSBuildProjectName.Replace('Prowlarr','NzbDrone'))</RootNamespace>
</PropertyGroup>
<ItemGroup Condition="'$(TestProject)'!='true'">
<!-- Annotates .NET assemblies with repository information including SHA -->
<!-- Sentry uses this to link directly to GitHub at the exact version/file/line -->
<!-- This is built-in on .NET 8 and can be removed once the project is updated -->
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
</ItemGroup>
<!-- Sentry specific configuration: Only in Release mode -->
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<!-- https://docs.sentry.io/platforms/dotnet/configuration/msbuild/ -->
@@ -136,7 +129,7 @@
<PackageReference Include="NunitXml.TestLogger" Version="3.0.131" />
</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" />
</ItemGroup>
@@ -148,9 +141,9 @@
<!-- Set up stylecop -->
<ItemGroup Condition="'$(ProwlarrProject)'=='true' and '$(EnableAnalyzers)'!='false'">
<!-- StyleCop analysis -->
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PackageReference Include="StyleCop.Analyzers.Unstable" Version="1.2.0.556">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<AdditionalFiles Include="$(SolutionDir)stylecop.json" />
</ItemGroup>
@@ -39,15 +39,16 @@ namespace NzbDrone.Automation.Test
var service = ChromeDriverService.CreateDefaultService();
// Timeout as windows automation tests seem to take alot longer to get going
driver = new ChromeDriver(service, options, new TimeSpan(0, 3, 0));
driver = new ChromeDriver(service, options, TimeSpan.FromMinutes(3));
driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);
driver.Manage().Window.FullScreen();
_runner = new NzbDroneRunner(LogManager.GetCurrentClassLogger(), null);
_runner.KillAll();
_runner.Start(true);
driver.Url = "http://localhost:9696";
driver.Navigate().GoToUrl("http://localhost:9696");
var page = new PageBase(driver);
page.WaitForNoSpinner();
@@ -67,7 +68,7 @@ namespace NzbDrone.Automation.Test
{
try
{
var image = ((ITakesScreenshot)driver).GetScreenshot();
var image = (driver as ITakesScreenshot).GetScreenshot();
image.SaveAsFile($"./{name}_test_screenshot.png", ScreenshotImageFormat.Png);
}
catch (Exception ex)
@@ -7,12 +7,11 @@ namespace NzbDrone.Automation.Test.PageModel
{
public class PageBase
{
private readonly WebDriver _driver;
private readonly IWebDriver _driver;
public PageBase(WebDriver driver)
public PageBase(IWebDriver driver)
{
_driver = driver;
driver.Manage().Window.Maximize();
}
public IWebElement FindByClass(string className, int timeout = 5)
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks>
<TargetFrameworks>net8.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Selenium.Support" Version="4.1.0" />
@@ -10,13 +10,13 @@ namespace NzbDrone.Common.Test.EnvironmentInfo
[Test]
public void should_return_version()
{
BuildInfo.Version.Major.Should().BeOneOf(0, 1, 10);
BuildInfo.Version.Major.Should().BeOneOf(0, 2, 10);
}
[Test]
public void should_get_branch()
{
BuildInfo.Branch.Should().NotBe("unknow");
BuildInfo.Branch.Should().NotBe("unknown");
BuildInfo.Branch.Should().NotBeNullOrWhiteSpace();
}
}
@@ -16,6 +16,8 @@ namespace NzbDrone.Common.Test.Http
[TestCase("Readarr/1.0.0.2300 (ubuntu 20.04)", "Readarr")]
[TestCase("Sonarr/3.0.6.9999 (ubuntu 20.04)", "Sonarr")]
[TestCase("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36", "Other")]
[TestCase("appbrr", "appbrr")]
[TestCase(" appbrr ", "appbrr")]
public void should_parse_user_agent(string userAgent, string parsedAgent)
{
UserAgentParser.ParseSource(userAgent).Should().Be(parsedAgent);
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks>
<TargetFrameworks>net8.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\NzbDrone.Host\Prowlarr.Host.csproj" />
@@ -1,6 +1,5 @@
using System;
using System.IO;
using System.Runtime.Serialization;
namespace NzbDrone.Common.Disk
{
@@ -24,10 +23,5 @@ namespace NzbDrone.Common.Disk
: base(message, innerException)
{
}
protected DestinationAlreadyExistsException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
}
@@ -75,6 +75,17 @@ namespace NzbDrone.Common.EnvironmentInfo
{
try
{
if (OsInfo.IsOsx)
{
var userAppDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile, Environment.SpecialFolderOption.DoNotVerify), ".config", "Prowlarr");
if (_diskProvider.FolderExists(userAppDataFolder) && !_diskProvider.FileExists(_appFolderInfo.GetConfigPath()))
{
_diskTransferService.MirrorFolder(userAppDataFolder, _appFolderInfo.AppDataFolder);
_diskProvider.DeleteFolder(userAppDataFolder, true);
}
}
var oldDbFile = Path.Combine(_appFolderInfo.AppDataFolder, "nzbdrone.db");
if (_startupContext.Args.ContainsKey(StartupContext.APPDATA))
@@ -115,7 +126,7 @@ namespace NzbDrone.Common.EnvironmentInfo
catch (Exception ex)
{
_logger.Debug(ex, ex.Message);
throw new ProwlarrStartupException("Unable to migrate DB from nzbdrone.db to {0}. Migrate manually", _appFolderInfo.GetDatabase());
throw new ProwlarrStartupException(ex, "Unable to migrate DB from nzbdrone.db to {0}. Migrate manually", _appFolderInfo.GetDatabase());
}
}
@@ -15,7 +15,7 @@ namespace NzbDrone.Common.EnvironmentInfo
var attributes = assembly.GetCustomAttributes(true);
Branch = "unknow";
Branch = "unknown";
var config = attributes.OfType<AssemblyConfigurationAttribute>().FirstOrDefault();
if (config != null)
@@ -31,7 +31,7 @@ namespace NzbDrone.Common.Extensions
}
public static IDictionary<TNewKey, TNewValue> SelectDictionary<TKey, TValue, TNewKey, TNewValue>(this IDictionary<TKey, TValue> dictionary,
Func<KeyValuePair<TKey, TValue>, ValueTuple<TNewKey, TNewValue>> selection)
Func<KeyValuePair<TKey, TValue>, (TNewKey Item1, TNewValue Item2)> selection)
{
return dictionary.Select(selection).ToDictionary(t => t.Item1, t => t.Item2);
}
@@ -167,7 +167,7 @@ namespace NzbDrone.Common.Http.Dispatchers
}
catch (OperationCanceledException ex) when (cts.IsCancellationRequested)
{
throw new WebException("Http request timed out", ex.InnerException, WebExceptionStatus.Timeout, null);
throw new WebException("Http request timed out", ex, WebExceptionStatus.Timeout, null);
}
}
+1 -1
View File
@@ -97,7 +97,7 @@ namespace NzbDrone.Common.Http
// Save to add to final response
var responseCookies = response.Cookies;
// Update cookiecontainer for next request with any cookies recieved on last request
// Update cookie container for next request with any cookies received on last request
var responseContainer = HandleRedirectCookies(request, response);
response = await ExecuteRequestAsync(request, responseContainer);
+5 -9
View File
@@ -1,15 +1,16 @@
using System;
using System.Text.RegularExpressions;
namespace NzbDrone.Common.Http
{
public static class UserAgentParser
{
private static readonly Regex AppSourceRegex = new Regex(@"(?<agent>[a-z0-9]*)\/.*(?:\(.*\))?",
private static readonly Regex AppSourceRegex = new(@"^(?<agent>[a-z0-9]+)(?:\/.+(?:\(.*\))?|$)",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
public static string SimplifyUserAgent(string userAgent)
{
if (userAgent == null || userAgent.StartsWith("Mozilla/5.0"))
if (userAgent == null || userAgent.StartsWith("Mozilla/5.0", StringComparison.Ordinal))
{
return null;
}
@@ -19,14 +20,9 @@ namespace NzbDrone.Common.Http
public static string ParseSource(string userAgent)
{
var match = AppSourceRegex.Match(SimplifyUserAgent(userAgent) ?? string.Empty);
var match = AppSourceRegex.Match(SimplifyUserAgent(userAgent?.Trim()) ?? string.Empty);
if (match.Groups["agent"].Success)
{
return match.Groups["agent"].Value;
}
return "Other";
return match.Groups["agent"].Success ? match.Groups["agent"].Value : "Other";
}
}
}
@@ -4,27 +4,27 @@ namespace NzbDrone.Common.Instrumentation.Extensions
{
public static class LoggerExtensions
{
[MessageTemplateFormatMethod("message")]
public static void ProgressInfo(this Logger logger, string message, params object[] args)
{
var formattedMessage = string.Format(message, args);
LogProgressMessage(logger, LogLevel.Info, formattedMessage);
LogProgressMessage(logger, LogLevel.Info, message, args);
}
[MessageTemplateFormatMethod("message")]
public static void ProgressDebug(this Logger logger, string message, params object[] args)
{
var formattedMessage = string.Format(message, args);
LogProgressMessage(logger, LogLevel.Debug, formattedMessage);
LogProgressMessage(logger, LogLevel.Debug, message, args);
}
[MessageTemplateFormatMethod("message")]
public static void ProgressTrace(this Logger logger, string message, params object[] args)
{
var formattedMessage = string.Format(message, args);
LogProgressMessage(logger, LogLevel.Trace, formattedMessage);
LogProgressMessage(logger, LogLevel.Trace, message, args);
}
private static void LogProgressMessage(Logger logger, LogLevel level, string message)
private static void LogProgressMessage(Logger logger, LogLevel level, string message, object[] parameters)
{
var logEvent = new LogEventInfo(level, logger.Name, message);
var logEvent = new LogEventInfo(level, logger.Name, null, message, parameters);
logEvent.Properties.Add("Status", "");
logger.Log(logEvent);
+9 -9
View File
@@ -1,28 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks>
<TargetFrameworks>net8.0</TargetFrameworks>
<DefineConstants Condition="'$(RuntimeIdentifier)' == 'linux-musl-x64' or '$(RuntimeIdentifier)' == 'linux-musl-arm64'">ISMUSL</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DryIoc.dll" Version="5.4.3" />
<PackageReference Include="IPAddressRange" Version="6.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
<PackageReference Include="IPAddressRange" Version="6.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.4.0" />
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.3" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" />
<PackageReference Include="Npgsql" Version="7.0.9" />
<PackageReference Include="Npgsql" Version="9.0.3" />
<PackageReference Include="Sentry" Version="4.0.2" />
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
<PackageReference Include="SharpZipLib" Version="1.4.2" />
<PackageReference Include="System.Text.Json" Version="6.0.10" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="System.Text.Json" Version="8.0.5" />
<PackageReference Include="System.ValueTuple" Version="4.6.1" />
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.1" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.1" />
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="6.0.1" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="8.0.1" />
</ItemGroup>
<ItemGroup>
<Compile Update="EnsureThat\Resources\ExceptionMessages.Designer.cs">
@@ -94,7 +94,8 @@ namespace NzbDrone.Common.TPL
{
_currentThreadIsProcessingItems = false;
}
}, null);
},
null);
}
/// <summary>Attempts to execute the specified task on the current thread.</summary>
+2 -1
View File
@@ -20,7 +20,8 @@ namespace NzbDrone.Common.TPL
Logger.Error(exception, "Task Error");
}
}
}, TaskContinuationOptions.OnlyOnFaulted);
},
TaskContinuationOptions.OnlyOnFaulted);
return task;
}
+1 -1
View File
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net6.0</TargetFrameworks>
<TargetFrameworks>net8.0</TargetFrameworks>
<ApplicationIcon>..\NzbDrone.Host\Prowlarr.ico</ApplicationIcon>
</PropertyGroup>
@@ -0,0 +1,192 @@
using System;
using System.Linq;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Datastore.Migration;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Datastore.Migration
{
[TestFixture]
public class newznab_indexers_enable_redirectFixture : MigrationTest<newznab_indexers_enable_redirect>
{
[Test]
public void should_update_redirect_setting_to_true_if_false()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Indexers").Row(new
{
Id = 1,
Name = "Test",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example.com\",\"apiKey\":\"testapikey\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 1,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
});
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Newznab");
items.First().Redirect.Should().BeTrue(); // Validate Redirect is updated
}
[Test]
public void should_not_change_redirect_setting_if_already_true()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Indexers").Row(new
{
Id = 1,
Name = "Test",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example.com\",\"apiKey\":\"testapikey\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 2,
Added = System.DateTime.UtcNow,
Redirect = true,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
});
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("Newznab");
items.First().Redirect.Should().BeTrue(); // Validate Redirect remains true
}
[Test]
public void should_not_affect_non_newznab_indexers()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Indexers").Row(new
{
Id = 1,
Name = "Test",
Implementation = "OtherIndexer",
Settings = "{\"baseUrl\":\"https://otherindexer.com\"}",
ConfigContract = "OtherIndexerSettings",
Enable = true,
Priority = 3,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
});
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
items.Should().HaveCount(1);
items.First().Implementation.Should().Be("OtherIndexer");
items.First().Redirect.Should().BeFalse(); // Validate Redirect is not changed
}
[Test]
public void should_handle_multiple_indexers()
{
var db = WithMigrationTestDb(c =>
{
c.Insert.IntoTable("Indexers").Row(new
{
Id = 1,
Name = "Test 1",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example1.com\",\"apiKey\":\"testapikey1\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 4,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
c.Insert.IntoTable("Indexers").Row(new
{
Id = 2,
Name = "Test 2",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example2.com\",\"apiKey\":\"testapikey2\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 5,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
c.Insert.IntoTable("Indexers").Row(new
{
Id = 3,
Name = "Test 3",
Implementation = "Newznab",
Settings = "{\"baseUrl\":\"https://example3.com\",\"apiKey\":\"testapikey3\"}",
ConfigContract = "NewznabSettings",
Enable = true,
Priority = 6,
Added = System.DateTime.UtcNow,
Redirect = true,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
c.Insert.IntoTable("Indexers").Row(new
{
Id = 4,
Name = "Test 4",
Implementation = "OtherIndexer",
Settings = "{\"baseUrl\":\"https://otherindexer.com\"}",
ConfigContract = "OtherIndexerSettings",
Enable = true,
Priority = 7,
Added = System.DateTime.UtcNow,
Redirect = false,
AppProfileId = 1,
Tags = "[]",
DownloadClientId = 0
});
});
var items = db.Query<IndexerDefinition043>("SELECT * FROM \"Indexers\"");
items.Should().HaveCount(4);
items.First(i => i.Id == 1).Redirect.Should().BeTrue(); // Validate Redirect is updated
items.First(i => i.Id == 2).Redirect.Should().BeTrue(); // Validate Redirect is updated
items.First(i => i.Id == 3).Redirect.Should().BeTrue(); // Validate Redirect remains true
items.First(i => i.Id == 4).Redirect.Should().BeFalse(); // Validate Redirect is not changed
}
}
public class IndexerDefinition043
{
public int Id { get; set; }
public string Name { get; set; }
public string Implementation { get; set; }
public string Settings { get; set; }
public string ConfigContract { get; set; }
public bool Enable { get; set; }
public int Priority { get; set; }
public DateTime Added { get; set; }
public bool Redirect { get; set; }
public int AppProfileId { get; set; }
public string Tags { get; set; }
public int DownloadClientId { get; set; }
}
}
@@ -149,7 +149,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 23:26:21"
"created_at": "2021-11-14 23:26:21",
"created_at_iso": "2021-11-14T23:26:21+02:00"
},
{
"id": 187239,
@@ -195,7 +196,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 23:11:49"
"created_at": "2021-11-14 23:11:49",
"created_at_iso": "2021-11-14T23:11:49+02:00"
},
{
"id": 187238,
@@ -241,7 +243,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 23:09:11"
"created_at": "2021-11-14 23:09:11",
"created_at_iso": "2021-11-14T23:09:11+02:00"
},
{
"id": 187237,
@@ -287,7 +290,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 23:05:30"
"created_at": "2021-11-14 23:05:30",
"created_at_iso": "2021-11-14T23:05:30+02:00"
},
{
"id": 187236,
@@ -333,7 +337,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 22:59:26"
"created_at": "2021-11-14 22:59:26",
"created_at_iso": "2021-11-14T22:59:26+02:00"
},
{
"id": 187234,
@@ -379,7 +384,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 22:38:33"
"created_at": "2021-11-14 22:38:33",
"created_at_iso": "2021-11-14T22:38:33+02:00"
},
{
"id": 187233,
@@ -425,7 +431,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 22:35:13"
"created_at": "2021-11-14 22:35:13",
"created_at_iso": "2021-11-14T22:35:13+02:00"
},
{
"id": 187231,
@@ -452,7 +459,7 @@
"imdb": "tt1143942",
"tmdb": "83665",
"tvdb": null,
"title": "Kaiky\u00f4",
"title": "Kaikyô",
"tv_season": 1,
"tv_episode": null,
"tv_full_season": true,
@@ -471,7 +478,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 18:02:28"
"created_at": "2021-11-14 18:02:28",
"created_at_iso": "2021-11-14T18:02:28+02:00"
},
{
"id": 187229,
@@ -517,7 +525,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 15:41:55"
"created_at": "2021-11-14 15:41:55",
"created_at_iso": "2021-11-14T15:41:55+02:00"
},
{
"id": 187225,
@@ -583,7 +592,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 13:49:11"
"created_at": "2021-11-14 13:49:11",
"created_at_iso": "2021-11-14T13:49:11+02:00"
},
{
"id": 187224,
@@ -633,7 +643,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 13:15:51"
"created_at": "2021-11-14 13:15:51",
"created_at_iso": "2021-11-14T13:15:51+02:00"
},
{
"id": 187223,
@@ -679,7 +690,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 12:56:09"
"created_at": "2021-11-14 12:56:09",
"created_at_iso": "2021-11-14T12:56:09+02:00"
},
{
"id": 187221,
@@ -720,7 +732,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 11:47:24"
"created_at": "2021-11-14 11:47:24",
"created_at_iso": "2021-11-14T11:47:24+02:00"
},
{
"id": 187219,
@@ -798,7 +811,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 10:59:37"
"created_at": "2021-11-14 10:59:37",
"created_at_iso": "2021-11-14T10:59:37+02:00"
},
{
"id": 187218,
@@ -876,7 +890,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 10:58:36"
"created_at": "2021-11-14 10:58:36",
"created_at_iso": "2021-11-14T10:58:36+02:00"
},
{
"id": 187216,
@@ -917,7 +932,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 10:31:45"
"created_at": "2021-11-14 10:31:45",
"created_at_iso": "2021-11-14T10:31:45+02:00"
},
{
"id": 187215,
@@ -967,7 +983,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 10:31:44"
"created_at": "2021-11-14 10:31:44",
"created_at_iso": "2021-11-14T10:31:44+02:00"
},
{
"id": 187214,
@@ -1008,7 +1025,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 10:31:43"
"created_at": "2021-11-14 10:31:43",
"created_at_iso": "2021-11-14T10:31:43+02:00"
},
{
"id": 187213,
@@ -1049,7 +1067,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 10:31:42"
"created_at": "2021-11-14 10:31:42",
"created_at_iso": "2021-11-14T10:31:42+02:00"
},
{
"id": 187212,
@@ -1095,7 +1114,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 10:28:11"
"created_at": "2021-11-14 10:28:11",
"created_at_iso": "2021-11-14T10:28:11+02:00"
},
{
"id": 187210,
@@ -1136,7 +1156,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 10:28:10"
"created_at": "2021-11-14 10:28:10",
"created_at_iso": "2021-11-14T10:28:10+02:00"
},
{
"id": 187211,
@@ -1182,7 +1203,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 10:28:10"
"created_at": "2021-11-14 10:28:10",
"created_at_iso": "2021-11-14T10:28:10+02:00"
},
{
"id": 187209,
@@ -1223,7 +1245,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 10:28:09"
"created_at": "2021-11-14 10:28:09",
"created_at_iso": "2021-11-14T10:28:09+02:00"
},
{
"id": 187208,
@@ -1269,7 +1292,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 09:24:47"
"created_at": "2021-11-14 09:24:47",
"created_at_iso": "2021-11-14T09:24:47+02:00"
},
{
"id": 187207,
@@ -1319,7 +1343,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 09:24:46"
"created_at": "2021-11-14 09:24:46",
"created_at_iso": "2021-11-14T09:24:46+02:00"
},
{
"id": 187206,
@@ -1360,7 +1385,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 09:24:45"
"created_at": "2021-11-14 09:24:45",
"created_at_iso": "2021-11-14T09:24:45+02:00"
},
{
"id": 187205,
@@ -1401,7 +1427,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 09:24:44"
"created_at": "2021-11-14 09:24:44",
"created_at_iso": "2021-11-14T09:24:44+02:00"
},
{
"id": 187204,
@@ -1447,7 +1474,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 09:20:56"
"created_at": "2021-11-14 09:20:56",
"created_at_iso": "2021-11-14T09:20:56+02:00"
},
{
"id": 187203,
@@ -1488,7 +1516,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 09:20:55"
"created_at": "2021-11-14 09:20:55",
"created_at_iso": "2021-11-14T09:20:55+02:00"
},
{
"id": 187202,
@@ -1529,7 +1558,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 09:20:54"
"created_at": "2021-11-14 09:20:54",
"created_at_iso": "2021-11-14T09:20:54+02:00"
},
{
"id": 187201,
@@ -1570,7 +1600,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 09:20:53"
"created_at": "2021-11-14 09:20:53",
"created_at_iso": "2021-11-14T09:20:53+02:00"
},
{
"id": 187200,
@@ -1611,7 +1642,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 09:17:35"
"created_at": "2021-11-14 09:17:35",
"created_at_iso": "2021-11-14T09:17:35+02:00"
},
{
"id": 187199,
@@ -1652,7 +1684,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 09:17:34"
"created_at": "2021-11-14 09:17:34",
"created_at_iso": "2021-11-14T09:17:34+02:00"
},
{
"id": 187197,
@@ -1718,7 +1751,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 09:14:24"
"created_at": "2021-11-14 09:14:24",
"created_at_iso": "2021-11-14T09:14:24+02:00"
},
{
"id": 187196,
@@ -1764,7 +1798,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 09:08:42"
"created_at": "2021-11-14 09:08:42",
"created_at_iso": "2021-11-14T09:08:42+02:00"
},
{
"id": 187195,
@@ -1805,7 +1840,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-14 09:08:29"
"created_at": "2021-11-14 09:08:29",
"created_at_iso": "2021-11-14T09:08:29+02:00"
},
{
"id": 187191,
@@ -1814,7 +1850,7 @@
"type_id": 2,
"type": "TV-Show",
"info_hash": "(removed)",
"file_name": "Beware of Your Bosom Buddies \u78a7\u8840\u6d17\u94f6\u67aa (1984) 720p Complete WEB-DL AAC H.264-CARMEE",
"file_name": "Beware of Your Bosom Buddies 碧血洗银枪 (1984) 720p Complete WEB-DL AAC H.264-CARMEE",
"file_size": 4075094335,
"file_count": 5,
"seed": 7,
@@ -1832,7 +1868,7 @@
"imdb": null,
"tmdb": "107936",
"tvdb": null,
"title": "\u78a7\u8840\u6d17\u94f6\u67aa",
"title": "碧血洗银枪",
"tv_season": null,
"tv_episode": null,
"tv_full_season": false,
@@ -1859,7 +1895,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 07:34:25"
"created_at": "2021-11-14 07:34:25",
"created_at_iso": "2021-11-14T07:34:25+02:00"
},
{
"id": 187190,
@@ -1929,7 +1966,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 07:24:31"
"created_at": "2021-11-14 07:24:31",
"created_at_iso": "2021-11-14T07:24:31+02:00"
},
{
"id": 187189,
@@ -1999,7 +2037,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 07:24:26"
"created_at": "2021-11-14 07:24:26",
"created_at_iso": "2021-11-14T07:24:26+02:00"
},
{
"id": 187188,
@@ -2073,7 +2112,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 07:12:25"
"created_at": "2021-11-14 07:12:25",
"created_at_iso": "2021-11-14T07:12:25+02:00"
},
{
"id": 187169,
@@ -2147,7 +2187,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 01:18:23"
"created_at": "2021-11-14 01:18:23",
"created_at_iso": "2021-11-14T01:18:23+02:00"
},
{
"id": 187168,
@@ -2193,7 +2234,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 00:57:43"
"created_at": "2021-11-14 00:57:43",
"created_at_iso": "2021-11-14T00:57:43+02:00"
},
{
"id": 187167,
@@ -2239,7 +2281,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 00:42:20"
"created_at": "2021-11-14 00:42:20",
"created_at_iso": "2021-11-14T00:42:20+02:00"
},
{
"id": 187165,
@@ -2285,7 +2328,8 @@
}
],
"music_type": null,
"created_at": "2021-11-14 00:03:50"
"created_at": "2021-11-14 00:03:50",
"created_at_iso": "2021-11-14T00:03:50+02:00"
},
{
"id": 187164,
@@ -2355,7 +2399,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 23:07:25"
"created_at": "2021-11-13 23:07:25",
"created_at_iso": "2021-11-13T23:07:25+02:00"
},
{
"id": 187163,
@@ -2382,7 +2427,7 @@
"imdb": null,
"tmdb": "138573",
"tvdb": null,
"title": "\u51b2\u51fb",
"title": "冲击",
"tv_season": null,
"tv_episode": null,
"tv_full_season": false,
@@ -2396,7 +2441,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 22:46:14"
"created_at": "2021-11-13 22:46:14",
"created_at_iso": "2021-11-13T22:46:14+02:00"
},
{
"id": 187162,
@@ -2454,7 +2500,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 22:10:28"
"created_at": "2021-11-13 22:10:28",
"created_at_iso": "2021-11-13T22:10:28+02:00"
},
{
"id": 187158,
@@ -2500,7 +2547,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 20:58:54"
"created_at": "2021-11-13 20:58:54",
"created_at_iso": "2021-11-13T20:58:54+02:00"
},
{
"id": 187157,
@@ -2546,7 +2594,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 20:58:52"
"created_at": "2021-11-13 20:58:52",
"created_at_iso": "2021-11-13T20:58:52+02:00"
},
{
"id": 187156,
@@ -2592,7 +2641,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 20:58:49"
"created_at": "2021-11-13 20:58:49",
"created_at_iso": "2021-11-13T20:58:49+02:00"
},
{
"id": 187155,
@@ -2638,7 +2688,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 19:53:29"
"created_at": "2021-11-13 19:53:29",
"created_at_iso": "2021-11-13T19:53:29+02:00"
},
{
"id": 187150,
@@ -2684,7 +2735,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 17:04:28"
"created_at": "2021-11-13 17:04:28",
"created_at_iso": "2021-11-13T17:04:28+02:00"
},
{
"id": 187149,
@@ -2730,7 +2782,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 17:04:26"
"created_at": "2021-11-13 17:04:26",
"created_at_iso": "2021-11-13T17:04:26+02:00"
},
{
"id": 187148,
@@ -2776,7 +2829,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 17:04:23"
"created_at": "2021-11-13 17:04:23",
"created_at_iso": "2021-11-13T17:04:23+02:00"
},
{
"id": 187147,
@@ -2822,7 +2876,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 17:04:11"
"created_at": "2021-11-13 17:04:11",
"created_at_iso": "2021-11-13T17:04:11+02:00"
},
{
"id": 187146,
@@ -2868,7 +2923,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 16:59:50"
"created_at": "2021-11-13 16:59:50",
"created_at_iso": "2021-11-13T16:59:50+02:00"
},
{
"id": 187145,
@@ -2914,7 +2970,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 16:57:51"
"created_at": "2021-11-13 16:57:51",
"created_at_iso": "2021-11-13T16:57:51+02:00"
},
{
"id": 187144,
@@ -2960,7 +3017,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 16:54:53"
"created_at": "2021-11-13 16:54:53",
"created_at_iso": "2021-11-13T16:54:53+02:00"
},
{
"id": 187143,
@@ -3006,7 +3064,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 16:54:51"
"created_at": "2021-11-13 16:54:51",
"created_at_iso": "2021-11-13T16:54:51+02:00"
},
{
"id": 187142,
@@ -3052,7 +3111,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 16:54:49"
"created_at": "2021-11-13 16:54:49",
"created_at_iso": "2021-11-13T16:54:49+02:00"
},
{
"id": 187141,
@@ -3098,7 +3158,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 16:54:46"
"created_at": "2021-11-13 16:54:46",
"created_at_iso": "2021-11-13T16:54:46+02:00"
},
{
"id": 187140,
@@ -3144,7 +3205,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 16:54:43"
"created_at": "2021-11-13 16:54:43",
"created_at_iso": "2021-11-13T16:54:43+02:00"
},
{
"id": 187139,
@@ -3190,7 +3252,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 16:03:36"
"created_at": "2021-11-13 16:03:36",
"created_at_iso": "2021-11-13T16:03:36+02:00"
},
{
"id": 187138,
@@ -3236,7 +3299,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 16:03:31"
"created_at": "2021-11-13 16:03:31",
"created_at_iso": "2021-11-13T16:03:31+02:00"
},
{
"id": 187137,
@@ -3282,7 +3346,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 14:47:56"
"created_at": "2021-11-13 14:47:56",
"created_at_iso": "2021-11-13T14:47:56+02:00"
},
{
"id": 187136,
@@ -3328,7 +3393,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 13:54:18"
"created_at": "2021-11-13 13:54:18",
"created_at_iso": "2021-11-13T13:54:18+02:00"
},
{
"id": 187135,
@@ -3378,7 +3444,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 13:01:47"
"created_at": "2021-11-13 13:01:47",
"created_at_iso": "2021-11-13T13:01:47+02:00"
},
{
"id": 187134,
@@ -3424,7 +3491,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 12:57:53"
"created_at": "2021-11-13 12:57:53",
"created_at_iso": "2021-11-13T12:57:53+02:00"
},
{
"id": 187133,
@@ -3470,7 +3538,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 12:48:57"
"created_at": "2021-11-13 12:48:57",
"created_at_iso": "2021-11-13T12:48:57+02:00"
},
{
"id": 187132,
@@ -3528,7 +3597,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 12:10:57"
"created_at": "2021-11-13 12:10:57",
"created_at_iso": "2021-11-13T12:10:57+02:00"
},
{
"id": 187131,
@@ -3569,7 +3639,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 11:35:53"
"created_at": "2021-11-13 11:35:53",
"created_at_iso": "2021-11-13T11:35:53+02:00"
},
{
"id": 187130,
@@ -3615,7 +3686,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 11:03:19"
"created_at": "2021-11-13 11:03:19",
"created_at_iso": "2021-11-13T11:03:19+02:00"
},
{
"id": 187129,
@@ -3656,7 +3728,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 11:02:54"
"created_at": "2021-11-13 11:02:54",
"created_at_iso": "2021-11-13T11:02:54+02:00"
},
{
"id": 187128,
@@ -3706,7 +3779,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 11:00:29"
"created_at": "2021-11-13 11:00:29",
"created_at_iso": "2021-11-13T11:00:29+02:00"
},
{
"id": 187127,
@@ -3752,7 +3826,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 10:57:36"
"created_at": "2021-11-13 10:57:36",
"created_at_iso": "2021-11-13T10:57:36+02:00"
},
{
"id": 187126,
@@ -3802,7 +3877,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 10:55:31"
"created_at": "2021-11-13 10:55:31",
"created_at_iso": "2021-11-13T10:55:31+02:00"
},
{
"id": 187125,
@@ -3848,7 +3924,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 10:53:16"
"created_at": "2021-11-13 10:53:16",
"created_at_iso": "2021-11-13T10:53:16+02:00"
},
{
"id": 187124,
@@ -3889,7 +3966,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 10:23:32"
"created_at": "2021-11-13 10:23:32",
"created_at_iso": "2021-11-13T10:23:32+02:00"
},
{
"id": 187123,
@@ -3939,7 +4017,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 10:23:31"
"created_at": "2021-11-13 10:23:31",
"created_at_iso": "2021-11-13T10:23:31+02:00"
},
{
"id": 187122,
@@ -3980,7 +4059,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 10:23:30"
"created_at": "2021-11-13 10:23:30",
"created_at_iso": "2021-11-13T10:23:30+02:00"
},
{
"id": 187121,
@@ -4021,7 +4101,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 10:23:29"
"created_at": "2021-11-13 10:23:29",
"created_at_iso": "2021-11-13T10:23:29+02:00"
},
{
"id": 187120,
@@ -4067,7 +4148,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 10:15:29"
"created_at": "2021-11-13 10:15:29",
"created_at_iso": "2021-11-13T10:15:29+02:00"
},
{
"id": 187119,
@@ -4113,7 +4195,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 10:15:28"
"created_at": "2021-11-13 10:15:28",
"created_at_iso": "2021-11-13T10:15:28+02:00"
},
{
"id": 187118,
@@ -4154,7 +4237,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 10:15:27"
"created_at": "2021-11-13 10:15:27",
"created_at_iso": "2021-11-13T10:15:27+02:00"
},
{
"id": 187117,
@@ -4195,7 +4279,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 10:15:26"
"created_at": "2021-11-13 10:15:26",
"created_at_iso": "2021-11-13T10:15:26+02:00"
},
{
"id": 187116,
@@ -4236,7 +4321,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 09:54:52"
"created_at": "2021-11-13 09:54:52",
"created_at_iso": "2021-11-13T09:54:52+02:00"
},
{
"id": 187115,
@@ -4286,7 +4372,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 09:54:51"
"created_at": "2021-11-13 09:54:51",
"created_at_iso": "2021-11-13T09:54:51+02:00"
},
{
"id": 187114,
@@ -4327,7 +4414,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 09:54:50"
"created_at": "2021-11-13 09:54:50",
"created_at_iso": "2021-11-13T09:54:50+02:00"
},
{
"id": 187113,
@@ -4368,7 +4456,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 09:54:48"
"created_at": "2021-11-13 09:54:48",
"created_at_iso": "2021-11-13T09:54:48+02:00"
},
{
"id": 187112,
@@ -4409,7 +4498,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 09:50:35"
"created_at": "2021-11-13 09:50:35",
"created_at_iso": "2021-11-13T09:50:35+02:00"
},
{
"id": 187111,
@@ -4463,7 +4553,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 09:50:34"
"created_at": "2021-11-13 09:50:34",
"created_at_iso": "2021-11-13T09:50:34+02:00"
},
{
"id": 187110,
@@ -4504,7 +4595,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 09:50:32"
"created_at": "2021-11-13 09:50:32",
"created_at_iso": "2021-11-13T09:50:32+02:00"
},
{
"id": 187109,
@@ -4545,7 +4637,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 09:50:31"
"created_at": "2021-11-13 09:50:31",
"created_at_iso": "2021-11-13T09:50:31+02:00"
},
{
"id": 187107,
@@ -4586,7 +4679,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 09:44:55"
"created_at": "2021-11-13 09:44:55",
"created_at_iso": "2021-11-13T09:44:55+02:00"
},
{
"id": 187106,
@@ -4632,7 +4726,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 09:44:54"
"created_at": "2021-11-13 09:44:54",
"created_at_iso": "2021-11-13T09:44:54+02:00"
},
{
"id": 187105,
@@ -4673,7 +4768,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 09:44:53"
"created_at": "2021-11-13 09:44:53",
"created_at_iso": "2021-11-13T09:44:53+02:00"
},
{
"id": 187104,
@@ -4714,7 +4810,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-11-13 09:44:51"
"created_at": "2021-11-13 09:44:51",
"created_at_iso": "2021-11-13T09:44:51+02:00"
},
{
"id": 187103,
@@ -4760,7 +4857,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 09:40:07"
"created_at": "2021-11-13 09:40:07",
"created_at_iso": "2021-11-13T09:40:07+02:00"
},
{
"id": 187102,
@@ -4810,7 +4908,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 09:39:53"
"created_at": "2021-11-13 09:39:53",
"created_at_iso": "2021-11-13T09:39:53+02:00"
},
{
"id": 187101,
@@ -4856,7 +4955,8 @@
}
],
"music_type": null,
"created_at": "2021-11-13 09:39:52"
"created_at": "2021-11-13 09:39:52",
"created_at_iso": "2021-11-13T09:39:52+02:00"
}
],
"first_page_url": "https:\/\/avistaz.to\/api\/v1\/jackett\/torrents?type=2&page=1",
@@ -1,4 +1,4 @@
{
{
"current_page": 1,
"data": [
{
@@ -50,7 +50,8 @@
"images/torrent/1/4/0/mxgwdlpk4pt2.jpg"
],
"description": "<p>[SSIS-419] My first experience is Yua Mikami. From the day I lost my virginity, I was devoted to sex.</p>\n<p>Actress: Yua Mikami</p>\n<p>Studio: S1 NO.1 STYLE</p>\n<p>Runtime: 2:41:00</p>\n<p>Movies Genres: Minimal Mosaic,Cherry Boy,Documentary,Featured Actress,Idol &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,
@@ -106,7 +107,8 @@
"images/torrent/0/4/0/gsuctius9zw2.jpg"
],
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00338/</p>\n<p>SSIS-338</p>\n<p>Ultimate Lover Swamp. Ideal Sex-Only Relationship That Is Not Disturbed By Work Or Family With Yua Mikami</p>",
"created_at": "2022-05-23 23:41:25"
"created_at": "2022-05-23 23:41:25",
"created_at_iso": "2022-05-23T23:41:25+02:00"
},
{
"id": 61947,
@@ -161,7 +163,8 @@
"images/torrent/0/0/e/g6tquwvlmfdx.jpg"
],
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00313/</p>\n<p>SSIS-313</p>\n<p>Yua Mikami's Ecstasy Lotion Special. Offering The Best-ever Slick Servicing To Work Cum Loads Out.</p>",
"created_at": "2022-05-23 08:34:34"
"created_at": "2022-05-23 08:34:34",
"created_at_iso": "2022-05-23T08:34:34+02:00"
},
{
"id": 61630,
@@ -223,7 +226,8 @@
"images/torrent/f/2/5/kdihq6gibacb.jpg"
],
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00287/</p>\n<p>SSIS-287</p>\n<p>Drool, The Effects Of A Few Sips, Her Face During Sex, And Peeing Released All At Once. Yua Mikami Flies Indecently.</p>",
"created_at": "2022-05-21 10:25:32"
"created_at": "2022-05-21 10:25:32",
"created_at_iso": "2022-05-21T10:25:32+02:00"
},
{
"id": 61514,
@@ -275,7 +279,8 @@
"images/torrent/e/2/a/ujrvmtgjakko.jpg"
],
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00241/</p>\n<p>SSIS-241</p>\n<p>Forbidden Teacher Love. Yua Mikami</p>",
"created_at": "2022-05-20 09:17:10"
"created_at": "2022-05-20 09:17:10",
"created_at_iso": "2022-05-20T09:17:10+02:00"
},
{
"id": 59929,
@@ -325,7 +330,8 @@
"images/torrent/c/4/a/hycbduxlw3ei.jpg"
],
"description": "<p><strong>[SSIS-392] Let's Do It At A Men's Massage Parlor. Yua Mikami</strong></p>\n<p><strong>+++ [FHD] SSIS-392 メンエスでしようよ 三上悠亜</strong></p>\n<p><strong>ID:</strong> SSIS-392<br><strong>Release Date:</strong> May 6, 2022<br><strong>Runtime:</strong> 1 hour 58 minutes 59 seconds [01:59:00]<br><strong>Studio:</strong> S1 NO.1 STYLE<br><strong>Label:</strong> S1 NO.1 STYLE<br><strong>Director:</strong> TAKE-D<br><strong>Series:</strong> A Super Gorgeous Men's Massage Parlor<br><strong>Actresses:</strong> Yua Mikami<br><strong>Categories:</strong> Featured Actress, Idol &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,
@@ -374,7 +380,8 @@
"images/torrent/3/6/1/6fuhfb5kcbpz.jpg"
],
"description": "<p><strong>[SSIS-365] \"What!? We're Gonna Fuck Here?\" Sticking Close To Yua Mikami For A Whole Month, Taking Advantage Any Time There's A Chance For A Quick Fuck! Unprecedented Hidden Camera AV Primetime Challenge.</strong></p>\n <p><strong>+++ [HD] SSIS-365 「えっ!ここでヤルの?」三上悠亜に一ヶ月密着して隙あらばいきなり即ズボッ! 前代未聞ドッキリAV大作戦</strong></p>\n <p><strong>ID:</strong> SSIS-365<br>\n <strong>Release Date:</strong> Apr 8, 2022<br>\n <strong>Runtime:</strong> 2 hours 5 minutes 59 seconds\n [02:06:00]<br>\n <strong>Studio:</strong> S1 NO.1 STYLE<br>\n <strong>Label:</strong> S1 NO.1 STYLE<br>\n <strong>Director:</strong> Kyosei<br>\n <strong>Series:</strong> -<br>\n <strong>Actresses:</strong> Yua Mikami<br>\n <strong>Categories:</strong> Big Tits, Quickie, Featured Actress, Blowjob, Minimal Mosaic, Hi-Def<br><br>\n </p><p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS365/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00365/</p><p>Uploaded by a Bot</p>",
"created_at": "2022-04-08 06:31:27"
"created_at": "2022-04-08 06:31:27",
"created_at_iso": "2022-04-08T06:31:27+02:00"
},
{
"id": 57416,
@@ -640,7 +647,8 @@
"images/torrent/3/8/f/hxzly7alqt9f.jpg"
],
"description": null,
"created_at": "2022-03-29 20:58:49"
"created_at": "2022-03-29 20:58:49",
"created_at_iso": "2022-03-29T20:58:49+02:00"
},
{
"id": 56332,
@@ -690,7 +698,8 @@
"images/torrent/2/9/6/bw4kyn1ckz5u.jpg"
],
"description": "<p>De-censored with AI algorithm. </p>\n<p>Originated from [OFJE-304] Gorgeous Big Tits Bouncing All Over The Place! All G-Cup And Bigger Actresses Ride Dick Until They Cum 50 Rounds</p>\n<p>+++ [HD] OFJE-304 縦横無尽に神乳が揺れまくりっ!オールGcup超えS1女優のおっぱい激揺れ激イキ激ピスSEX50本番</p>\n<p>https://www.r18.com/videos/vod/movies/detail/-/id=ofje00304/</p>",
"created_at": "2022-03-10 09:06:27"
"created_at": "2022-03-10 09:06:27",
"created_at_iso": "2022-03-10T09:06:27+01:00"
},
{
"id": 56108,
@@ -742,7 +751,8 @@
"images/torrent/d/6/b/gexzyognkxeb.jpg"
],
"description": "<p><strong>[SSIS-338] Ultimate Lover Swamp. Ideal Sex-Only Relationship That Is Not Disturbed By Work Or Family With Yua Mikami</strong></p>\n <p><strong>+++ [HD] SSIS-338 最高の愛人沼 仕事にも家庭にも干渉してこない、セックスだけの理想関係を三上悠亜と…。</strong></p>\n <p><strong>ID:</strong> SSIS-338<br>\n <strong>Release Date:</strong> Mar 4, 2022<br>\n <strong>Runtime:</strong> 2 hours 25 minutes 59 seconds\n [02:26:00]<br>\n <strong>Studio:</strong> S1 NO.1 STYLE<br>\n <strong>Label:</strong> S1 NO.1 STYLE<br>\n <strong>Director:</strong> Amazing Meat<br>\n <strong>Series:</strong> -<br>\n <strong>Actresses:</strong> Yua Mikami<br>\n <strong>Categories:</strong> Adultery, Featured Actress, Cheating Wife, Drama, Minimal Mosaic, Hi-Def, 4K<br><br>\n </p><p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS338/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00338/</p><p>Uploaded by a Bot</p>",
"created_at": "2022-03-04 05:28:49"
"created_at": "2022-03-04 05:28:49",
"created_at_iso": "2022-03-04T05:28:49+01:00"
},
{
"id": 54324,
@@ -797,7 +807,8 @@
"images/torrent/9/7/d/ujzu5he0deum.jpg"
],
"description": "<p><strong>[SSIS-313] Yua Mikami's Ecstasy Lotion Special. Offering The Best-ever Slick Servicing To Work Cum Loads Out.</strong></p>\n<p><strong>SSIS-313 三上悠亜の有頂天ローションSP 人生最高ヌルヌルご奉仕で射精させてあげる</strong></p>\n<p><strong>ID:</strong> SSIS-313<br><strong>Release Date:</strong> Feb 4, 2022<br><strong>Runtime:</strong> 2 hours 27 minutes 59 seconds [02:28:00]<br><strong>Studio:</strong> S1 NO.1 STYLE<br><strong>Label:</strong> S1 NO.1 STYLE<br><strong>Director:</strong> TAKE-D<br><strong>Series:</strong> Ecstatic Lotion SP<br><strong>Actresses:</strong> Yua Mikami<br><strong>Categories:</strong> Big Tits, Featured Actress, Idol &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,
@@ -864,7 +875,8 @@
"images/torrent/7/d/0/w4lraenuqmos.jpg"
],
"description": "<p><strong>[OFJE-281] Yua Mikami x Shame Special This National-Grade Idol Is Getting Continuously Fucked 8 Hours</strong></p>\n <p><strong>+++ [HD] OFJE-281 三上悠亜×レ●プSpecial 国民的アイドルをひたすら犯し続ける8時間</strong></p>\n <p><strong>ID:</strong> OFJE-281<br>\n <strong>Release Date:</strong> Nov 6, 2020<br>\n <strong>Runtime:</strong> 7 hours 56 minutes 59 seconds\n [07:57:00]<br>\n <strong>Studio:</strong> S1 NO.1 STYLE<br>\n <strong>Label:</strong> S1 NO.1 STYLE<br>\n <strong>Director:</strong> <br>\n <strong>Series:</strong> S1 GIRLS COLLECTION<br>\n <strong>Actresses:</strong> Yua Mikami<br>\n <strong>Categories:</strong> Beautiful Girl, Featured Actress, Nymphomaniac, Idol &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,
@@ -915,7 +927,8 @@
"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>",
"created_at": "2022-01-07 13:01:13"
"created_at": "2022-01-07 13:01:13",
"created_at_iso": "2022-01-07T13:01:13+01:00"
},
{
"id": 52438,
@@ -972,7 +985,8 @@
"images/torrent/0/9/2/yhdsjr2jrf2k.gif"
],
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&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,
@@ -1023,7 +1037,8 @@
"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>",
"created_at": "2022-01-03 12:55:28"
"created_at": "2022-01-03 12:55:28",
"created_at_iso": "2022-01-03T12:55:28+01:00"
},
{
"id": 52434,
@@ -1074,7 +1089,8 @@
"images/torrent/9/0/6/jpoyeqdohhft.gif"
],
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&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,
@@ -1125,7 +1141,8 @@
"images/torrent/7/a/2/v4bbhqrhfaic.jpg"
],
"description": "<p>Yua Mikami's Devilish 200 Minutes of All Round Nipple Licking, Teasing and Kneading</p>\n<p>Actresses: Yua Mikami<br>Studio: S1 NO.1 STYLE<br>Series: Just A Little Devil Chick.<br>Release date: Dec 10, 2021<br>Runtime: 197min<br>Director: ZAMPA<br>Label: S1 NO.1 STYLE<br>Content ID: ssis00270<br>DVD ID: SSIS-270<br>Languages: Japanese</p>",
"created_at": "2021-12-10 16:59:45"
"created_at": "2021-12-10 16:59:45",
"created_at_iso": "2021-12-10T16:59:45+01:00"
},
{
"id": 50935,
@@ -1178,7 +1195,8 @@
"images/torrent/4/d/2/8ppl4ibq95se.png"
],
"description": null,
"created_at": "2021-11-27 21:51:25"
"created_at": "2021-11-27 21:51:25",
"created_at_iso": "2021-11-27T21:51:25+01:00"
},
{
"id": 50154,
@@ -1244,7 +1262,8 @@
"images/torrent/a/7/7/t90zggbrwwf5.jpg"
],
"description": null,
"created_at": "2021-11-12 10:26:20"
"created_at": "2021-11-12 10:26:20",
"created_at_iso": "2021-11-12T10:26:20+01:00"
},
{
"id": 49718,
@@ -1312,7 +1331,8 @@
"images/torrent/5/9/9/7uo17medy6ib.jpg"
],
"description": null,
"created_at": "2021-11-02 11:39:32"
"created_at": "2021-11-02 11:39:32",
"created_at_iso": "2021-11-02T11:39:32+01:00"
},
{
"id": 49717,
@@ -1368,7 +1388,8 @@
"images/torrent/2/4/0/f99j7rtxwlni.jpg"
],
"description": null,
"created_at": "2021-11-02 11:25:47"
"created_at": "2021-11-02 11:25:47",
"created_at_iso": "2021-11-02T11:25:47+01:00"
},
{
"id": 49715,
@@ -1423,7 +1444,8 @@
"images/torrent/7/3/5/6e8mmocet7pq.jpg"
],
"description": null,
"created_at": "2021-11-02 11:16:12"
"created_at": "2021-11-02 11:16:12",
"created_at_iso": "2021-11-02T11:16:12+01:00"
},
{
"id": 49714,
@@ -1477,7 +1499,8 @@
"images/torrent/5/a/b/bchwfgrs4jm4.jpg"
],
"description": null,
"created_at": "2021-11-02 11:06:08"
"created_at": "2021-11-02 11:06:08",
"created_at_iso": "2021-11-02T11:06:08+01:00"
},
{
"id": 49712,
@@ -1532,7 +1555,8 @@
"images/torrent/d/8/0/n8wlosqiuz92.jpg"
],
"description": null,
"created_at": "2021-11-02 10:46:18"
"created_at": "2021-11-02 10:46:18",
"created_at_iso": "2021-11-02T10:46:18+01:00"
},
{
"id": 49647,
@@ -1588,7 +1612,8 @@
"images/torrent/c/5/f/nc1q6ejlvyqu.jpg"
],
"description": null,
"created_at": "2021-11-02 10:29:43"
"created_at": "2021-11-02 10:29:43",
"created_at_iso": "2021-11-02T10:29:43+01:00"
},
{
"id": 49646,
@@ -1640,7 +1665,8 @@
"images/torrent/c/5/8/c1wfncbm1eve.jpg"
],
"description": null,
"created_at": "2021-10-31 14:28:38"
"created_at": "2021-10-31 14:28:38",
"created_at_iso": "2021-10-31T14:28:38+01:00"
},
{
"id": 49645,
@@ -1696,7 +1722,8 @@
"images/torrent/8/4/e/wc4toojco9dx.jpg"
],
"description": null,
"created_at": "2021-10-31 14:17:13"
"created_at": "2021-10-31 14:17:13",
"created_at_iso": "2021-10-31T14:17:13+01:00"
},
{
"id": 49644,
@@ -1752,7 +1779,8 @@
"images/torrent/7/7/c/4qp3mqsokrnw.jpg"
],
"description": null,
"created_at": "2021-10-31 14:02:50"
"created_at": "2021-10-31 14:02:50",
"created_at_iso": "2021-10-31T14:02:50+01:00"
},
{
"id": 49643,
@@ -1804,7 +1832,8 @@
"images/torrent/0/9/f/fgwbfeqmzftr.jpg"
],
"description": null,
"created_at": "2021-10-31 13:50:27"
"created_at": "2021-10-31 13:50:27",
"created_at_iso": "2021-10-31T13:50:27+01:00"
},
{
"id": 49079,
@@ -1858,7 +1887,8 @@
"images/torrent/7/d/d/xe1gcbp5acwx.png"
],
"description": null,
"created_at": "2021-10-16 16:50:12"
"created_at": "2021-10-16 16:50:12",
"created_at_iso": "2021-10-16T16:50:12+02:00"
},
{
"id": 49056,
@@ -1912,7 +1942,8 @@
"images/torrent/e/1/1/yv3ablrdkgfv.jpg"
],
"description": null,
"created_at": "2021-10-16 07:10:29"
"created_at": "2021-10-16 07:10:29",
"created_at_iso": "2021-10-16T07:10:29+02:00"
},
{
"id": 49050,
@@ -1963,7 +1994,8 @@
"images/torrent/3/3/1/uorz1hpm1hld.jpg"
],
"description": null,
"created_at": "2021-10-16 02:11:54"
"created_at": "2021-10-16 02:11:54",
"created_at_iso": "2021-10-16T02:11:54+02:00"
},
{
"id": 49049,
@@ -2018,7 +2050,8 @@
"images/torrent/9/6/e/bahbhr2gaqeq.jpg"
],
"description": null,
"created_at": "2021-10-16 00:06:39"
"created_at": "2021-10-16 00:06:39",
"created_at_iso": "2021-10-16T00:06:39+02:00"
},
{
"id": 49048,
@@ -2073,7 +2106,8 @@
"images/torrent/7/8/b/eq1jkrz8icoi.jpg"
],
"description": null,
"created_at": "2021-10-16 00:01:42"
"created_at": "2021-10-16 00:01:42",
"created_at_iso": "2021-10-16T00:01:42+02:00"
},
{
"id": 49038,
@@ -2129,7 +2163,8 @@
"images/torrent/0/1/7/c2hcjiknuv26.jpg"
],
"description": null,
"created_at": "2021-10-15 14:15:16"
"created_at": "2021-10-15 14:15:16",
"created_at_iso": "2021-10-15T14:15:16+02:00"
},
{
"id": 49037,
@@ -2185,7 +2220,8 @@
"images/torrent/f/c/c/sir7gae1bnjv.jpg"
],
"description": null,
"created_at": "2021-10-15 13:58:51"
"created_at": "2021-10-15 13:58:51",
"created_at_iso": "2021-10-15T13:58:51+02:00"
},
{
"id": 48883,
@@ -2234,7 +2270,8 @@
"images/torrent/1/5/7/myv4v8tpa6d6.jpg"
],
"description": "<p>ISO: https://exoticaz.to/torrent/48124</p>",
"created_at": "2021-10-12 07:11:18"
"created_at": "2021-10-12 07:11:18",
"created_at_iso": "2021-10-12T07:11:18+02:00"
},
{
"id": 48364,
@@ -2276,7 +2313,8 @@
"images/torrent/f/b/f/lw6fcsf6fz9z.jpg"
],
"description": "<p>Somebody requested this separately from pack that is already on here.</p>",
"created_at": "2021-09-29 03:12:14"
"created_at": "2021-09-29 03:12:14",
"created_at_iso": "2021-09-29T03:12:14+02:00"
},
{
"id": 48189,
@@ -2331,7 +2369,8 @@
"images/torrent/6/3/2/5yvhovuhybyd.jpg"
],
"description": null,
"created_at": "2021-09-24 14:32:49"
"created_at": "2021-09-24 14:32:49",
"created_at_iso": "2021-09-24T14:32:49+02:00"
},
{
"id": 48186,
@@ -2388,7 +2427,8 @@
"images/torrent/6/0/8/e6jahgfjtvkf.jpg"
],
"description": null,
"created_at": "2021-09-24 14:17:46"
"created_at": "2021-09-24 14:17:46",
"created_at_iso": "2021-09-24T14:17:46+02:00"
},
{
"id": 48184,
@@ -2444,7 +2484,8 @@
"images/torrent/9/a/b/msjcjdcarxj2.jpg"
],
"description": null,
"created_at": "2021-09-24 13:59:44"
"created_at": "2021-09-24 13:59:44",
"created_at_iso": "2021-09-24T13:59:44+02:00"
},
{
"id": 48181,
@@ -2500,7 +2541,8 @@
"images/torrent/f/c/c/hkmy2iaaessw.jpg"
],
"description": null,
"created_at": "2021-09-24 13:46:50"
"created_at": "2021-09-24 13:46:50",
"created_at_iso": "2021-09-24T13:46:50+02:00"
},
{
"id": 48179,
@@ -2555,7 +2597,8 @@
"images/torrent/9/8/3/fw84szdvrmk4.jpg"
],
"description": null,
"created_at": "2021-09-24 13:34:17"
"created_at": "2021-09-24 13:34:17",
"created_at_iso": "2021-09-24T13:34:17+02:00"
},
{
"id": 48178,
@@ -2611,7 +2654,8 @@
"images/torrent/5/c/5/y7fjqvupby01.jpg"
],
"description": null,
"created_at": "2021-09-24 13:22:30"
"created_at": "2021-09-24 13:22:30",
"created_at_iso": "2021-09-24T13:22:30+02:00"
},
{
"id": 48125,
@@ -2666,7 +2710,8 @@
"images/torrent/f/2/1/wj8axuerttva.jpg"
],
"description": null,
"created_at": "2021-09-23 06:34:55"
"created_at": "2021-09-23 06:34:55",
"created_at_iso": "2021-09-23T06:34:55+02:00"
},
{
"id": 48124,
@@ -2721,7 +2766,8 @@
"images/torrent/b/6/8/qa5nfh9blige.jpg"
],
"description": null,
"created_at": "2021-09-23 05:38:43"
"created_at": "2021-09-23 05:38:43",
"created_at_iso": "2021-09-23T05:38:43+02:00"
},
{
"id": 46870,
@@ -2770,7 +2816,8 @@
"images/torrent/d/4/1/rpn5ywrgch3m.jpg"
],
"description": null,
"created_at": "2021-09-01 13:28:55"
"created_at": "2021-09-01 13:28:55",
"created_at_iso": "2021-09-01T13:28:55+02:00"
},
{
"id": 46193,
@@ -2826,7 +2873,8 @@
"images/torrent/7/6/8/o87ujrsbmehp.jpg"
],
"description": null,
"created_at": "2021-08-19 09:44:36"
"created_at": "2021-08-19 09:44:36",
"created_at_iso": "2021-08-19T09:44:36+02:00"
},
{
"id": 45171,
@@ -2874,7 +2922,8 @@
"images/torrent/6/d/b/wm8ikfbzpecs.jpg"
],
"description": "<p>I don't know why the source was 25 fps</p>",
"created_at": "2021-07-30 14:34:43"
"created_at": "2021-07-30 14:34:43",
"created_at_iso": "2021-07-30T14:34:43+02:00"
},
{
"id": 43663,
@@ -2923,7 +2972,8 @@
"images/torrent/b/7/d/qswq8vdshnyb.jpg"
],
"description": "<p>Yua Mikami 4th Anniversary Memorial Best - Her 12 Latest Titles In Full, 72 Scenes, 480 Minutes Special</p>\n<p>Release Date: Mar. 06, 2021<br>Runtime: 477min. (HD: 477min.)<br>Director: ----<br>Studio: S1 NO.1 STYLE<br>Label: S1 NO.1 STYLE</p>\n<p>Channel: ----<br>Content ID: ofje00300<br>DVD ID: OFJE-300<br>Series: S1 GIRLS COLLECTION<br>Languages: Japanese</p>\n<p>Actress(es): Yua Mikami</p>",
"created_at": "2021-07-04 16:17:44"
"created_at": "2021-07-04 16:17:44",
"created_at_iso": "2021-07-04T16:17:44+02:00"
},
{
"id": 39515,
@@ -3001,7 +3051,8 @@
"images/torrent/a/0/c/5dgyfrjx6x7p.png"
],
"description": "<pre>+++ [HD] SSIS-013 アナタの五感を刺激する三上悠亜のシコシコサポートラグジュアリー 脳をエロスで満たす6つの癒され勃起シチュエーション</pre>\n<p><strong>Full title:</strong> <em>Yua Mikami Will Stimulate Your Five Senses In A Soothing, Stroking, Masturbatory Luxury Support Role 6 Soothing Erection Situations Of Fully Satisfying Eros Company Excitement To Blow Your Mind</em></p>\n<p><strong>Release Date:</strong> Mar. 18, 2021</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00013/</p>\n<p><strong>Studio:</strong> https://www.s1s1s1.com/works/detail/ssis013/</p>",
"created_at": "2021-03-22 14:40:56"
"created_at": "2021-03-22 14:40:56",
"created_at_iso": "2021-03-22T14:40:56+01:00"
},
{
"id": 39245,
@@ -3049,7 +3100,8 @@
"images/torrent/f/5/1/nqjy8fpqskdj.jpg"
],
"description": "<p>BDISO: https://exoticaz.to/torrent/34023</p>",
"created_at": "2021-03-17 01:27:10"
"created_at": "2021-03-17 01:27:10",
"created_at_iso": "2021-03-17T01:27:10+01:00"
},
{
"id": 38628,
@@ -3098,7 +3150,8 @@
"images/torrent/6/f/e/juc07vprbndp.jpg"
],
"description": null,
"created_at": "2021-02-28 08:42:42"
"created_at": "2021-02-28 08:42:42",
"created_at_iso": "2021-02-28T08:42:42+01:00"
},
{
"id": 38281,
@@ -3159,7 +3212,8 @@
"images/torrent/8/6/8/vazvb4ycnmb8.jpg"
],
"description": "<p><strong>During Her Business Trip, To Her Surprise, She Was Booked Into The Same Hotel Room With Her Asshole Boss (Whom She Hates With A Passion) ... So He Banged Her With Excessive Lust And Relentless Piston-Pounding Thrusts And Kept This Big Tits Office Lady Cumming All Night Long Yua Mikami</strong></p>\n<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni989/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00989/</p>\n<p>+++ [HD] SSNI-989 出張先の旅館で大嫌いなセクハラ上司とまさかの相部屋に…絶倫過ぎる粘着ピストンで一晩中イカされ続けた巨乳OL 三上悠亜</p>",
"created_at": "2021-02-17 22:42:58"
"created_at": "2021-02-17 22:42:58",
"created_at_iso": "2021-02-17T22:42:58+01:00"
},
{
"id": 37072,
@@ -3215,7 +3269,8 @@
"images/torrent/6/6/9/1ms8yiiif82h.jpg"
],
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni963/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00963/</p>\n<p>+++ [HD] SSNI-963 日本一のSEXコスプレイヤー 三上悠亜</p>",
"created_at": "2021-01-16 02:52:11"
"created_at": "2021-01-16 02:52:11",
"created_at_iso": "2021-01-16T02:52:11+01:00"
},
{
"id": 36791,
@@ -3269,7 +3324,8 @@
"images/torrent/b/b/4/pampaacdzpoa.jpg"
],
"description": "<p>credits to perfectcanary</p>",
"created_at": "2021-01-09 03:44:31"
"created_at": "2021-01-09 03:44:31",
"created_at_iso": "2021-01-09T03:44:31+01:00"
},
{
"id": 36790,
@@ -3324,7 +3380,8 @@
"images/torrent/a/a/c/hyaed34gxuic.jpg"
],
"description": "<p>credits to perfectcanary</p>",
"created_at": "2021-01-09 03:44:02"
"created_at": "2021-01-09 03:44:02",
"created_at_iso": "2021-01-09T03:44:02+01:00"
},
{
"id": 36789,
@@ -3379,7 +3436,8 @@
"images/torrent/7/8/6/3uotc2hw7s6l.jpg"
],
"description": "<p>credits to perfectcanary</p>",
"created_at": "2021-01-09 03:42:52"
"created_at": "2021-01-09 03:42:52",
"created_at_iso": "2021-01-09T03:42:52+01:00"
},
{
"id": 36465,
@@ -3436,7 +3494,8 @@
"images/torrent/1/1/a/x6yztt33psfz.jpg"
],
"description": "<p>配信開始日: 2020/02/07<br>商品発売日: 2020/02/07<br>収録時間: 87分 HQ版:87分)<br>出演者: 三上悠亜<br>監督: ZAMPA<br>シリーズ: S1 VR<br>メーカー: エスワン ナンバーワンスタイル<br>レーベル: S1 VR<br>コンテンツタイプ: 3D<br>ジャンル: ハイクオリティVR 独占配信 単体作品 VR専用 騎乗位 巨乳 アイドル・芸能人 主観<br>品番: sivr00067</p>\n<p>待望のHQ超なめらか高画質VRで三上悠亜とボクのエッチで可愛すぎる神同棲生活!「僕の彼女はトップAVアイドルの、あの三上悠亜.・」超多忙なトップAVアイドルでありながら、実はこっそりボクと付き合っている夢のような展開!愛されて、心配されて、嫉妬されて、普段は見れない等身大のアイドルの素顔を完全独占!最高の距離感で四六時中SEXに明け暮れる究極同棲VR</p>",
"created_at": "2020-12-30 13:29:53"
"created_at": "2020-12-30 13:29:53",
"created_at_iso": "2020-12-30T13:29:53+01:00"
},
{
"id": 36096,
@@ -3491,7 +3550,8 @@
"images/torrent/1/9/e/dtxkxrwdpf3m.jpg"
],
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni939/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00939/</p>\n<p><strong>1080p</strong> : https://exoticaz.to/torrent/35862</p>",
"created_at": "2020-12-22 00:57:11"
"created_at": "2020-12-22 00:57:11",
"created_at_iso": "2020-12-22T00:57:11+01:00"
},
{
"id": 35862,
@@ -3546,7 +3606,8 @@
"images/torrent/a/9/4/ksgywpxmjg9h.jpg"
],
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni939/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00939/</p>\n<p>+++ [HD] SSNI-939 執拗な焦らしと寸止めで極限まで感度を高めた恍惚キメセク大絶頂FUCK 三上悠亜</p>",
"created_at": "2020-12-17 03:16:29"
"created_at": "2020-12-17 03:16:29",
"created_at_iso": "2020-12-17T03:16:29+01:00"
},
{
"id": 34686,
@@ -3608,7 +3669,8 @@
"images/torrent/3/0/4/dtb70p4cfkhi.jpg"
],
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni916/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00916/</p>\n<p>+++ [HD] SSNI-916 スク水巨乳の水泳部顧問は元グラビアアイドル…濡れ透ける先生の巨乳に我慢できなくて、じっとり汗だくひたすら密着交尾 三上悠亜</p>\n<p>Play with the water in the classroom or in the pool.... Wet nipples, spilling god milk, high leg that eats into the crotch. Meat feeling Sk water dynamite to nail the students! Healthy BODY and Rodro Special SEX Bathed In The Shining Midsummer Sun! Unstoppable sexual desire of the unending men flocking to the squiring big that attach perfectly with dripping sweat! The Swimsuit Big That Shake Violently Is While Wearing It! All boys love their teachers.</p>\n<p>Release Date:<br>Nov. 19, 2020</p>\n<p>Runtime:<br>145min.  (HD: 145min.)</p>\n<p>Director:<br>ZAMPA</p>\n<p>Studio:<br>S1 NO.1 STYLE</p>\n<p>Label:<br>S1 NO.1 STYLE</p>\n<p>Channel:<br>----</p>\n<p>Content ID:<br>ssni00916</p>\n<p>DVD ID:<br>SSNI-916</p>\n<p>Series:<br>----</p>\n<p>Languages:<br>Japanese</p>",
"created_at": "2020-11-18 23:55:07"
"created_at": "2020-11-18 23:55:07",
"created_at_iso": "2020-11-18T23:55:07+01:00"
},
{
"id": 34051,
@@ -3660,7 +3722,8 @@
"images/torrent/9/e/9/0ocpe6n3lsc6.jpg"
],
"description": "<p>Title: Ever Since That Day When My Father-In-Law Raped Me… Yua Mikami</p>\n<p>Date: October 22, 2019  </p>\n<p>Time: 02:29:00<br><br>Pornstars: Yua Mikami</p>\n<p>Studio: S1 NO.1 Style</p>",
"created_at": "2020-11-03 06:16:30"
"created_at": "2020-11-03 06:16:30",
"created_at_iso": "2020-11-03T06:16:30+01:00"
},
{
"id": 34049,
@@ -3713,7 +3776,8 @@
"images/torrent/9/0/4/5yho2mvumies.jpg"
],
"description": "<p>Title: TEK-072 Climax x 4 Hardcore Scenes Yua Mikami</p>\n<p>Date: August 1, 2020</p>\n<p>Time: 02:55:00</p>\n<p>Pornstars: Yua Mikami</p>\n<p>Studio: MUTEKI</p>\n<p>https://www.javlibrary.com/en/?v=javlild2tm</p>",
"created_at": "2020-11-03 06:06:51"
"created_at": "2020-11-03 06:06:51",
"created_at_iso": "2020-11-03T06:06:51+01:00"
},
{
"id": 34024,
@@ -3764,7 +3828,8 @@
"images/torrent/d/3/2/qeylkbizibzy.jpg"
],
"description": "<p>Titile: Yua Mikami Is Completely Tied Down And Unable To Move Unlimited Piston Pounding Fucks That</p>\n<p>Date: October 22, 2019  </p>\n<p>Time: 02:34:00</p>\n<p>Pornstars: Yua Mikami</p>\n<p>Studio: S1 NO.1 Style</p>",
"created_at": "2020-11-02 05:13:10"
"created_at": "2020-11-02 05:13:10",
"created_at_iso": "2020-11-02T05:13:10+01:00"
},
{
"id": 34023,
@@ -3813,7 +3878,8 @@
"images/torrent/c/0/2/pvoql1zscpdl.jpg"
],
"description": "<p>Title: SSNI-388 Yua Mikami In A 16-Consecutive Cum Shot Slut Assault 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,
@@ -3870,7 +3936,8 @@
"images/torrent/1/6/0/bwivpujoltwr.jpg"
],
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni888/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00888/</p>\n<p>+++ [HD] SSNI-888 絶頂の向こう側でイッてイッてイキまくる確変オーガズム状態のまま48時間耐久で一生分ハメまくった三上悠亜のヤバい性交</p>",
"created_at": "2020-10-17 01:29:36"
"created_at": "2020-10-17 01:29:36",
"created_at_iso": "2020-10-17T01:29:36+02:00"
},
{
"id": 32469,
@@ -3925,7 +3992,8 @@
"images/torrent/7/f/4/qn6q2w8bgjzg.jpg"
],
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni865/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00865/</p>\n<p>+++ [HD] SSNI-865 巨乳OLと絶倫童貞上司の毎週エスカレートする週末のセックス残業 三上悠亜</p>",
"created_at": "2020-09-17 03:27:12"
"created_at": "2020-09-17 03:27:12",
"created_at_iso": "2020-09-17T03:27:12+02:00"
},
{
"id": 31490,
@@ -4118,7 +4186,8 @@
"images/torrent/1/0/d/9wmpejovzbg7.jpg"
],
"description": "<p>A quarter terabyte of Yua Mikami videos. Pretty close to a complete solo discography as of this date. Mostly 1080p, a few 720p. No super loud Chinese language ads at the beginnings of any videos, mostly unobtrusive watermarks. A few of the Muteki vids are decensored with the sorta annoying JAVPlayer watermark.</p>",
"created_at": "2020-08-20 00:49:29"
"created_at": "2020-08-20 00:49:29",
"created_at_iso": "2020-08-20T00:49:29+02:00"
},
{
"id": 31465,
@@ -4175,7 +4244,8 @@
"images/torrent/7/4/f/npjdewgqw8bj.jpg"
],
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni802/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00802/</p>\n<p>+++ [HD] SSNI-802 『教師失格』帰宅困難になったあの日、嵐が過ぎるまでひたすら男子生徒とハメまくりました…。 三上悠亜</p>\n<p>Release Date: June 14, 2020<br>Runtime: 117min.  (HD: 117min.)<br>Director: Amazing Meat<br>Studio: S1 NO.1 STYLE<br>Label: S1 NO.1 STYLE</p>\n<p>I'm a slut priest... On that day when a large typhoon hit directly, the two broke their line... On the night when it was difficult to return home, the unstoppable desire of a female teacher who shakes her big tits until the morning and gets turbulent like a storm. \"Much more... messed up... Ah... No... Iku...!!!\" \"Before I am a teacher, I am a woman...\"</p>",
"created_at": "2020-08-19 12:04:41"
"created_at": "2020-08-19 12:04:41",
"created_at_iso": "2020-08-19T12:04:41+02:00"
},
{
"id": 30383,
@@ -4220,7 +4290,8 @@
"images/torrent/9/9/9/i3ciw7xmwson.jpg"
],
"description": "<p>[SSNI-826] Yua Mikami 三上悠亜のPLATINUM SOAP 三上悠亞</p>\n<p>The finest customs to serve with the best body and best service! No matter how many times I ejaculate, the full erection 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,
@@ -4269,7 +4340,8 @@
"images/torrent/b/9/3/wvu3uhkwmxbz.jpg"
],
"description": "<p>【VR】エスワン15周年スペシャル共演 日本一のAV女優2人と超豪華ハーレム逆3P体験</p>\n<p>【VR】 15th Anniversary Of Esuan Special Co-starring 2 Best AV Actresses In Japan And A Super Luxury Harem Reverse 3P Experience</p>",
"created_at": "2020-07-14 07:28:09"
"created_at": "2020-07-14 07:28:09",
"created_at_iso": "2020-07-14T07:28:09+02:00"
},
{
"id": 29356,
@@ -4315,7 +4387,8 @@
"images/torrent/5/6/4/kdkmgw9mxjiy.jpg"
],
"description": "<p>Title: TEK-067 Princess Peach Mikami YuA</p>\n<p>ID: TEK-067<br>Release Date: 2015-06-01<br>Length: 180 min(s)<br>Director: ----<br>Maker: Muteki  <br>Label: Muteki </p>\n<p>Ps: It was claimed to be the first real porn that Yua Mikami participated.</p>",
"created_at": "2020-07-08 01:32:21"
"created_at": "2020-07-08 01:32:21",
"created_at_iso": "2020-07-08T01:32:21+02:00"
},
{
"id": 29261,
@@ -4366,7 +4439,8 @@
"images/torrent/9/a/c/hocvufnx1xxg.jpg"
],
"description": "<p><span style=\"font-size:20px;\"><strong>Full Title</strong></span>:  <span style=\"font-size:20px;\"><strong>Massive Cocks x Follow-Up Fucks x Large Orgies These 24 Massive Cocks Will Relentlessly Pump These Twitching And Cumming Pussies In A Furious Follow-Up Piston Pumping Ultra Large Orgies Special Yua Mikami<br></strong><br><span style=\"font-size:18px;\">Release Date: Oct. 18, 2018</span><br><span style=\"font-size:18px;\">Runtime: 117min.  (HD: 117min.)</span><br><span style=\"font-size:18px;\">Director: ZAMPA</span><br><span style=\"font-size:18px;\">Studio: S1 NO.1 STYLE</span><br><span style=\"font-size:18px;\">Label: S1 NO.1 STYLE<br>Channel: S1 NO.1 STYLE, PRIME<br>Content ID: ssni00322<br>DVD ID: SSNI-322<br><br><a href=\"https://awscc3001.r18.com/litevideo/freepv/s/ssn/ssni00322/ssni00322_dmb_w.mp4\">Trailer</a></span></span></p>",
"created_at": "2020-07-06 02:25:40"
"created_at": "2020-07-06 02:25:40",
"created_at_iso": "2020-07-06T02:25:40+02:00"
},
{
"id": 27208,
@@ -4419,7 +4493,8 @@
"images/torrent/8/6/3/br1smc0lvdfy.png"
],
"description": null,
"created_at": "2020-05-31 03:07:27"
"created_at": "2020-05-31 03:07:27",
"created_at_iso": "2020-05-31T03:07:27+02:00"
},
{
"id": 26018,
@@ -4464,7 +4539,8 @@
"images/torrent/c/e/d/fjzmigqdm3qt.jpg"
],
"description": "<p><strong>Yua Mikami in awesome POV scene working as a 5star soapland popstar girI</strong></p>\n<p><strong>Infiltrate the soapland where the strongest national idol you have ever dreamed of works! ! Immediate scale blowjob &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,
@@ -4510,7 +4586,8 @@
"images/torrent/6/5/4/lhkdfbqlsqlu.jpg"
],
"description": "<p>One day before summer vacation, I had a crazy sex in the classroom at sunset when no one was there. Push down to the bed in the nurse's room, fill the face in the skirt, and rub the young and tender big tits and peach ass. Titty fuck and fellatio into school swimsuit. The best girl in school, take off the uniform of a national idol school girl who is too angelic and roll up after school! Youth school sex! \"It's a secret to everyone.\"</p>\n<p><a href=\"https://www.r18.com/videos/vod/movies/detail/-/id=tek00079/\">https://www.r18.com/videos/vod/movies/detail/-/id=tek00079/</a></p>",
"created_at": "2020-03-16 05:22:31"
"created_at": "2020-03-16 05:22:31",
"created_at_iso": "2020-03-16T05:22:31+01:00"
},
{
"id": 26004,
@@ -4553,7 +4630,8 @@
"images/torrent/c/5/d/n5ciceiboq1l.jpg"
],
"description": "<p>\"More ... more kiss ...\" The obscene and hot sexy Kiss that the national idol Yua Mikami shows for the first time and the passion SEX that burns up! Temptation hot Licking Handjob &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,
@@ -4598,7 +4676,8 @@
"images/torrent/e/5/b/dtmfbfmqsekh.jpg"
],
"description": "<p>Yua Mikami is my one of my favourite JAV Actress, she is so pretty and have killer body. In this video she acts as your girlfriend.<br>she waits you at home, wash your dick and handjob it. she likes to kiss. in the bedroom she HJ you and you fingering her then she rides you cow girl style, missionary and doggy style. she likes travelling with you and give you nice service in the bathroom during vacation and fucks around in the bathtub then continue fucking in the bedroom hotels.</p>",
"created_at": "2020-03-10 04:08:49"
"created_at": "2020-03-10 04:08:49",
"created_at_iso": "2020-03-10T04:08:49+01:00"
},
{
"id": 25204,
@@ -4646,7 +4725,8 @@
"images/torrent/f/c/a/5rsj5fnyw7sy.jpg"
],
"description": "<p>Release Date: Oct. 12, 2019<br>Runtime: 149min.  (HD: 149min.)<br>Director: Mon C<br>Studio: S1 NO.1 STYLE<br>Label: S1 NO.1 STYLE<br>Content ID: ssni00589<br>DVD ID: SSNI-589<br>Series: Full-Power Cumming Cowgirl<br>Languages: Japanese</p>\n<p>三上悠亜の全力イクイク騎乗位マニアックス 三上悠亜</p>\n<p>「ほら、おま●こに挿ってるの丸見えだよ…」国民的アイドルの大胆!騎乗位マニアックス!前後左右360°尻肉揺れまくり徹底アングル!クビレ腰と肉弾ヒップを一心不乱に振りまくる!男根を咥え込む騎乗位の乱舞!イッてもイッても止めない高速グラインド!!イキまくるクビレ、尻肉大迫力神アングル!絶頂汁を撒き散らしそれでも振り続けるアグレッシブFUCK!! ※こちらはBlu-ray Disc専用ソフトです。対応プレイヤー以外では再生できませんのでご注意ください。 ★アダルトブック「三上悠亜写真集」の商品ご購入はこちらから★ 「コンビニ受取」対象商品です。詳しくはこちらをご覧ください。</p>",
"created_at": "2019-12-13 00:30:33"
"created_at": "2019-12-13 00:30:33",
"created_at_iso": "2019-12-13T00:30:33+01:00"
},
{
"id": 24777,
@@ -4729,7 +4809,8 @@
"images/torrent/4/0/1/qiq9l0g9b4lb.jpg"
],
"description": null,
"created_at": "2019-10-12 07:37:42"
"created_at": "2019-10-12 07:37:42",
"created_at_iso": "2019-10-12T07:37:42+02:00"
},
{
"id": 24714,
@@ -4793,7 +4874,8 @@
"images/torrent/0/0/c/pz6a1om1zcj6.jpg"
],
"description": null,
"created_at": "2019-10-03 07:22:22"
"created_at": "2019-10-03 07:22:22",
"created_at_iso": "2019-10-03T07:22:22+02:00"
},
{
"id": 24432,
@@ -4832,7 +4914,8 @@
"images/torrent/c/3/e/ivi2v3xvuxvf.png"
],
"description": "<p>Yua mikami (mosaic removed) not exactly more like digitally altered person seems to have done a good job albeit the quality is not the greatest.</p>",
"created_at": "2019-08-06 05:01:10"
"created_at": "2019-08-06 05:01:10",
"created_at_iso": "2019-08-06T05:01:10+02:00"
},
{
"id": 22633,
@@ -4880,7 +4963,8 @@
"images/torrent/d/1/d/siepkvzdjdjm.png"
],
"description": null,
"created_at": "2019-02-16 01:52:32"
"created_at": "2019-02-16 01:52:32",
"created_at_iso": "2019-02-16T01:52:32+01:00"
},
{
"id": 22606,
@@ -4926,7 +5010,8 @@
"images/torrent/f/9/9/scjrral5midb.png"
],
"description": null,
"created_at": "2019-02-14 09:58:29"
"created_at": "2019-02-14 09:58:29",
"created_at_iso": "2019-02-14T09:58:29+01:00"
},
{
"id": 21647,
@@ -4975,7 +5060,8 @@
"images/torrent/1/e/9/zb4gphrposw0.gif"
],
"description": "<p>no sexual activity in the show.</p>\n<p>for details : http://www.r18.com/videos/vod/movies/detail/-/id=oae00165/?i3_ref=search&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,
@@ -5021,7 +5107,8 @@
"images/torrent/b/5/f/r0ml2pj3xrvq.jpg"
],
"description": "<p>MUTEKI 10th Anniversary Special Project.</p>",
"created_at": "2018-12-06 02:16:35"
"created_at": "2018-12-06 02:16:35",
"created_at_iso": "2018-12-06T02:16:35+01:00"
},
{
"id": 21561,
@@ -5075,7 +5162,8 @@
"images/torrent/7/c/3/kvjyuskn3mkf.jpg"
],
"description": null,
"created_at": "2018-12-05 19:43:15"
"created_at": "2018-12-05 19:43:15",
"created_at_iso": "2018-12-05T19:43:15+01:00"
},
{
"id": 20515,
@@ -5200,7 +5288,8 @@
"images/torrent/a/1/9/5ngcygiazvrv.jpg"
],
"description": null,
"created_at": "2018-09-07 07:56:21"
"created_at": "2018-09-07 07:56:21",
"created_at_iso": "2018-09-07T07:56:21+02:00"
},
{
"id": 15261,
@@ -5241,7 +5330,8 @@
"images/torrent/e/f/6/ubgilv5db5mo.jpg"
],
"description": null,
"created_at": "2018-06-02 17:44:49"
"created_at": "2018-06-02 17:44:49",
"created_at_iso": "2018-06-02T17:44:49+02:00"
},
{
"id": 4333,
@@ -5282,7 +5372,8 @@
"images/torrent/c/9/c/3qxdyhvuefwu.jpg"
],
"description": "<pre><br>General<br>Complete name : Tek081.mp4<br>Format : MPEG-4<br>Format profile : Base Media / Version 2<br>Codec ID : mp42 (isom/iso2/mp41)<br>File size : 1.49 GiB<br>Duration : 2 h 51 min<br>Overall bit rate mode : Variable<br>Overall bit rate : 1 243 kb/s<br>Encoded date : UTC 2017-02-12 20:24:00<br>Tagged date : UTC 2017-02-12 20:24:00<br>Writing application : HandBrake 1.0.2 2017012200<br><br>Video<br>ID : 1<br>Format : HEVC<br>Format/Info : High Efficiency Video Coding<br>Format profile : Main@L3.1@Main<br>Codec ID : hev1<br>Codec ID/Info : High Efficiency Video Coding<br>Duration : 2 h 51 min<br>Bit rate : 1 139 kb/s<br>Width : 1 280 pixels<br>Height : 720 pixels<br>Display aspect ratio : 16:9<br>Frame rate mode : Variable<br>Frame rate : 28.707 FPS<br>Minimum frame rate : 11.446 FPS<br>Maximum frame rate : 195.652 FPS<br>Color space : YUV<br>Chroma subsampling : 4:2:0<br>Bit depth : 8 bits<br>Bits/(Pixel*Frame) : 0.043<br>Stream size : 1.36 GiB (92%)<br>Writing library : x265 2.1:[Windows][GCC 5.4.0][64 bit] 8bit<br>Encoding settings : wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=1 / tu-inter-depth=1 / me=1 / subme=2 / merange=57 / no-rect / no-amp / max-merge=2 / temporal-mvp / no-early-skip / rskip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu-lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=290 / min-keyint=29 / scenecut=40 / rc-lookahead=20 / lookahead-slices=4 / bframes=4 / bframe-bias=0 / b-adapt=2 / ref=3 / limit-refs=3 / no-limit-modes / weightp / no-weightb / aq-mode=1 / qg-size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=3 / psy-rd=2.00 / rdoq-level=0 / psy-rdoq=0.00 / log2-max-poc-lsb=8 / no-rd-refine / signhide / deblock=0:0 / sao / no-sao-non-deblock / b-pyramid / cutree / no-intra-refresh / rc=crf / crf=22.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ipratio=1.40 / pbratio=1.30<br>Encoded date : UTC 2017-02-12 20:24:00<br>Tagged date : UTC 2017-02-12 20:24:00<br>Color range : Limited<br>Color primaries : BT.709<br>Transfer characteristics : BT.709<br>Matrix coefficients : BT.709<br><br>Audio<br>ID : 2<br>Format : AAC<br>Format/Info : Advanced Audio Codec<br>Format profile : LC<br>Codec ID : mp4a-40-2<br>Duration : 2 h 51 min<br>Bit rate mode : Variable<br>Bit rate : 96.0 kb/s<br>Channel(s) : 2 channels<br>Channel positions : Front: L R<br>Sampling rate : 48.0 kHz<br>Frame rate : 46.875 FPS (1024 SPF)<br>Compression mode : Lossy<br>Stream size : 118 MiB (8%)<br>Title : Stereo / Stereo<br>Language : English<br>Default : Yes<br>Alternate group : 1<br>Encoded date : UTC 2017-02-12 20:24:00<br>Tagged date : UTC 2017-02-12 20:24:00<br><br></pre>",
"created_at": "2018-03-19 06:01:40"
"created_at": "2018-03-19 06:01:40",
"created_at_iso": "2018-03-19T06:01:40+01:00"
},
{
"id": 4241,
@@ -5323,7 +5414,8 @@
"images/torrent/c/4/4/o8jsphfh7rr9.jpg"
],
"description": null,
"created_at": "2018-02-20 02:46:45"
"created_at": "2018-02-20 02:46:45",
"created_at_iso": "2018-02-20T02:46:45+01:00"
},
{
"id": 4191,
@@ -5364,7 +5456,8 @@
"images/torrent/9/6/1/c1szrkxbf6fn.jpg"
],
"description": null,
"created_at": "2018-02-05 05:39:41"
"created_at": "2018-02-05 05:39:41",
"created_at_iso": "2018-02-05T05:39:41+01:00"
},
{
"id": 4101,
@@ -5405,7 +5498,8 @@
"images/torrent/7/4/6/9r3ars6pa9cn.jpg"
],
"description": "<pre><br><br>General<br>Complete name : snis896.mp4<br>Format : MPEG-4<br>Format profile : Base Media / Version 2<br>Codec ID : mp42 (isom/iso2/mp41)<br>File size : 1.40 GiB<br>Duration : 1 h 58 min<br>Overall bit rate mode : Variable<br>Overall bit rate : 1 691 kb/s<br>Encoded date : UTC 2017-05-31 19:30:00<br>Tagged date : UTC 2017-05-31 19:30:00<br>Writing application : HandBrake 1.0.7 2017040900<br><br>Video<br>ID : 1<br>Format : HEVC<br>Format/Info : High Efficiency Video Coding<br>Format profile : Main@L3.1@Main<br>Codec ID : hev1<br>Codec ID/Info : High Efficiency Video Coding<br>Duration : 1 h 58 min<br>Bit rate : 1 588 kb/s<br>Width : 1 280 pixels<br>Height : 720 pixels<br>Display aspect ratio : 16:9<br>Frame rate mode : Constant<br>Frame rate : 30.000 FPS<br>Color space : YUV<br>Chroma subsampling : 4:2:0<br>Bit depth : 8 bits<br>Bits/(Pixel*Frame) : 0.057<br>Stream size : 1.32 GiB (94%)<br>Writing library : x265 2.1:[Windows][GCC 5.3.1][64 bit] 8bit<br>Encoding settings : wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=1 / tu-inter-depth=1 / me=1 / subme=2 / merange=57 / no-rect / no-amp / max-merge=2 / temporal-mvp / no-early-skip / rskip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu-lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=300 / min-keyint=30 / scenecut=40 / rc-lookahead=20 / lookahead-slices=4 / bframes=4 / bframe-bias=0 / b-adapt=2 / ref=3 / limit-refs=3 / no-limit-modes / weightp / no-weightb / aq-mode=1 / qg-size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=3 / psy-rd=2.00 / rdoq-level=0 / psy-rdoq=0.00 / log2-max-poc-lsb=8 / no-rd-refine / signhide / deblock=0:0 / sao / no-sao-non-deblock / b-pyramid / cutree / no-intra-refresh / rc=crf / crf=20.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ipratio=1.40 / pbratio=1.30<br>Encoded date : UTC 2017-05-31 19:30:00<br>Tagged date : UTC 2017-05-31 19:30:00<br>Color range : Limited<br>Color primaries : BT.709<br>Transfer characteristics : BT.709<br>Matrix coefficients : BT.709<br><br>Audio<br>ID : 2<br>Format : AAC<br>Format/Info : Advanced Audio Codec<br>Format profile : LC<br>Codec ID : 40<br>Duration : 1 h 58 min<br>Bit rate mode : Variable<br>Bit rate : 96.0 kb/s<br>Channel(s) : 2 channels<br>Channel positions : Front: L R<br>Sampling rate : 48.0 kHz<br>Frame rate : 46.875 FPS (1024 spf)<br>Compression mode : Lossy<br>Stream size : 81.6 MiB (6%)<br>Title : Stereo / Stereo<br>Default : Yes<br>Alternate group : 1<br>Encoded date : UTC 2017-05-31 19:30:00<br>Tagged date : UTC 2017-05-31 19:30:00<br><br></pre>",
"created_at": "2017-12-24 02:51:02"
"created_at": "2017-12-24 02:51:02",
"created_at_iso": "2017-12-24T02:51:02+01:00"
},
{
"id": 4002,
@@ -5446,7 +5540,8 @@
"images/torrent/7/d/3/wj64npz8aizr.jpg"
],
"description": "<p>三上悠亜<br>TEK-071 快感(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,
@@ -5487,7 +5582,8 @@
"images/torrent/c/1/7/herqbzuq6jj4.jpg"
],
"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,
@@ -5535,7 +5631,8 @@
"images/torrent/8/a/a/ena0fdra1rif.jpg"
],
"description": "<p>[SSNI-030] Mikami Yua Fan Thanksgiving National Idol x General Users 20 People 'Guttyfan and SEX Economy' Hime Meakuri Special<br><br></p>\n<pre><br><br></pre>",
"created_at": "2017-10-15 06:46:48"
"created_at": "2017-10-15 06:46:48",
"created_at_iso": "2017-10-15T06:46:48+02:00"
},
{
"id": 15273,
@@ -5577,7 +5674,8 @@
"images/torrent/f/6/5/srlry3vu9kas.jpg"
],
"description": "<p>SSNI-009 National Idol Life First First Freak!Big Caps 23 Endless Unlimited Sex - Yua Mikami<br><br></p>",
"created_at": "2017-10-11 02:33:59"
"created_at": "2017-10-11 02:33:59",
"created_at_iso": "2017-10-11T02:33:59+02:00"
},
{
"id": 17757,
@@ -5623,7 +5721,8 @@
"images/torrent/3/1/6/21sudpyouj3f.jpg"
],
"description": "SSNI-009 Our National Idol First Gangbang! Three raw scenes. 23 big cocks endless unlimited sex ~ Yua Mikami<br><br><pre><br><br></pre>",
"created_at": "2017-09-14 01:19:43"
"created_at": "2017-09-14 01:19:43",
"created_at_iso": "2017-09-14T01:19:43+02:00"
},
{
"id": 17364,
@@ -5668,7 +5767,8 @@
"images/torrent/f/a/b/tvqctziuy8k2.jpg"
],
"description": "SNIS-964 Covered In Sweat, ?**, And Saliva: Dripping Wet Sex With A National Pop Star ~ YuA Mikami<br><br><pre><br><br></pre>",
"created_at": "2017-09-01 22:56:53"
"created_at": "2017-09-01 22:56:53",
"created_at_iso": "2017-09-01T22:56:53+02:00"
}
],
"first_page_url": "https://exoticaz.to/api/v1/jackett/torrents?search=yua%20mikami&page=1",
File diff suppressed because one or more lines are too long
@@ -109,7 +109,8 @@
}
],
"music_type": null,
"created_at": "2021-03-21 00:24:49"
"created_at": "2021-03-21 00:24:49",
"created_at_iso": "2021-03-21T00:24:49-04:00"
},
{
"id": 78501,
@@ -159,7 +160,8 @@
}
],
"music_type": null,
"created_at": "2021-03-19 21:52:21"
"created_at": "2021-03-19 21:52:21",
"created_at_iso": "2021-03-19T21:52:21-04:00"
},
{
"id": 78496,
@@ -209,7 +211,8 @@
}
],
"music_type": null,
"created_at": "2021-03-19 01:57:43"
"created_at": "2021-03-19 01:57:43",
"created_at_iso": "2021-03-19T01:57:43-04:00"
},
{
"id": 78494,
@@ -259,7 +262,8 @@
}
],
"music_type": null,
"created_at": "2021-03-18 14:36:10"
"created_at": "2021-03-18 14:36:10",
"created_at_iso": "2021-03-18T14:36:10-04:00"
},
{
"id": 78491,
@@ -305,7 +309,8 @@
}
],
"music_type": null,
"created_at": "2021-03-18 09:26:08"
"created_at": "2021-03-18 09:26:08",
"created_at_iso": "2021-03-18T09:26:08-04:00"
},
{
"id": 78490,
@@ -351,7 +356,8 @@
}
],
"music_type": null,
"created_at": "2021-03-18 09:05:55"
"created_at": "2021-03-18 09:05:55",
"created_at_iso": "2021-03-18T09:05:55-04:00"
},
{
"id": 78488,
@@ -465,7 +471,8 @@
}
],
"music_type": null,
"created_at": "2021-03-18 07:29:18"
"created_at": "2021-03-18 07:29:18",
"created_at_iso": "2021-03-18T07:29:18-04:00"
},
{
"id": 78486,
@@ -511,7 +518,8 @@
}
],
"music_type": null,
"created_at": "2021-03-18 07:09:34"
"created_at": "2021-03-18 07:09:34",
"created_at_iso": "2021-03-18T07:09:34-04:00"
},
{
"id": 78485,
@@ -569,7 +577,8 @@
}
],
"music_type": null,
"created_at": "2021-03-18 06:22:28"
"created_at": "2021-03-18 06:22:28",
"created_at_iso": "2021-03-18T06:22:28-04:00"
},
{
"id": 78483,
@@ -615,7 +624,8 @@
}
],
"music_type": null,
"created_at": "2021-03-18 04:28:51"
"created_at": "2021-03-18 04:28:51",
"created_at_iso": "2021-03-18T04:28:51-04:00"
},
{
"id": 78481,
@@ -801,7 +811,8 @@
}
],
"music_type": null,
"created_at": "2021-03-18 03:25:16"
"created_at": "2021-03-18 03:25:16",
"created_at_iso": "2021-03-18T03:25:16-04:00"
},
{
"id": 78480,
@@ -855,7 +866,8 @@
}
],
"music_type": null,
"created_at": "2021-03-18 02:02:22"
"created_at": "2021-03-18 02:02:22",
"created_at_iso": "2021-03-18T02:02:22-04:00"
},
{
"id": 78476,
@@ -909,7 +921,8 @@
}
],
"music_type": null,
"created_at": "2021-03-17 20:31:08"
"created_at": "2021-03-17 20:31:08",
"created_at_iso": "2021-03-17T20:31:08-04:00"
},
{
"id": 78472,
@@ -995,7 +1008,8 @@
}
],
"music_type": null,
"created_at": "2021-03-17 12:01:05"
"created_at": "2021-03-17 12:01:05",
"created_at_iso": "2021-03-17T12:01:05-04:00"
},
{
"id": 78468,
@@ -1045,7 +1059,8 @@
}
],
"music_type": null,
"created_at": "2021-03-16 22:47:11"
"created_at": "2021-03-16 22:47:11",
"created_at_iso": "2021-03-16T22:47:11-04:00"
},
{
"id": 78467,
@@ -1099,7 +1114,8 @@
}
],
"music_type": null,
"created_at": "2021-03-16 22:20:53"
"created_at": "2021-03-16 22:20:53",
"created_at_iso": "2021-03-16T22:20:53-04:00"
},
{
"id": 78466,
@@ -1153,7 +1169,8 @@
}
],
"music_type": null,
"created_at": "2021-03-16 22:01:24"
"created_at": "2021-03-16 22:01:24",
"created_at_iso": "2021-03-16T22:01:24-04:00"
},
{
"id": 78465,
@@ -1203,7 +1220,8 @@
}
],
"music_type": null,
"created_at": "2021-03-16 21:55:29"
"created_at": "2021-03-16 21:55:29",
"created_at_iso": "2021-03-16T21:55:29-04:00"
},
{
"id": 78460,
@@ -1257,7 +1275,8 @@
}
],
"music_type": null,
"created_at": "2021-03-16 14:51:45"
"created_at": "2021-03-16 14:51:45",
"created_at_iso": "2021-03-16T14:51:45-04:00"
},
{
"id": 78459,
@@ -1311,7 +1330,8 @@
}
],
"music_type": null,
"created_at": "2021-03-16 12:44:15"
"created_at": "2021-03-16 12:44:15",
"created_at_iso": "2021-03-16T12:44:15-04:00"
},
{
"id": 78458,
@@ -1361,7 +1381,8 @@
}
],
"music_type": null,
"created_at": "2021-03-16 10:18:22"
"created_at": "2021-03-16 10:18:22",
"created_at_iso": "2021-03-16T10:18:22-04:00"
},
{
"id": 78453,
@@ -1415,7 +1436,8 @@
}
],
"music_type": null,
"created_at": "2021-03-15 20:10:22"
"created_at": "2021-03-15 20:10:22",
"created_at_iso": "2021-03-15T20:10:22-04:00"
},
{
"id": 78446,
@@ -1477,7 +1499,8 @@
}
],
"music_type": null,
"created_at": "2021-03-15 16:37:11"
"created_at": "2021-03-15 16:37:11",
"created_at_iso": "2021-03-15T16:37:11-04:00"
},
{
"id": 78445,
@@ -1523,7 +1546,8 @@
}
],
"music_type": null,
"created_at": "2021-03-15 15:18:32"
"created_at": "2021-03-15 15:18:32",
"created_at_iso": "2021-03-15T15:18:32-04:00"
},
{
"id": 78412,
@@ -1569,7 +1593,8 @@
}
],
"music_type": null,
"created_at": "2021-03-14 17:15:26"
"created_at": "2021-03-14 17:15:26",
"created_at_iso": "2021-03-14T17:15:26-04:00"
},
{
"id": 78408,
@@ -1610,7 +1635,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-03-14 09:19:49"
"created_at": "2021-03-14 09:19:49",
"created_at_iso": "2021-03-14T09:19:49-04:00"
},
{
"id": 78406,
@@ -1656,7 +1682,8 @@
}
],
"music_type": null,
"created_at": "2021-03-14 05:47:02"
"created_at": "2021-03-14 05:47:02",
"created_at_iso": "2021-03-14T05:47:02-04:00"
},
{
"id": 78398,
@@ -1742,7 +1769,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 16:17:07"
"created_at": "2021-03-13 16:17:07",
"created_at_iso": "2021-03-13T16:17:07-04:00"
},
{
"id": 78396,
@@ -1828,7 +1856,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 15:44:33"
"created_at": "2021-03-13 15:44:33",
"created_at_iso": "2021-03-13T15:44:33-04:00"
},
{
"id": 78395,
@@ -1958,7 +1987,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 15:22:23"
"created_at": "2021-03-13 15:22:23",
"created_at_iso": "2021-03-13T15:22:23-04:00"
},
{
"id": 78393,
@@ -2044,7 +2074,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 14:50:50"
"created_at": "2021-03-13 14:50:50",
"created_at_iso": "2021-03-13T14:50:50-04:00"
},
{
"id": 78391,
@@ -2098,7 +2129,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 12:35:34"
"created_at": "2021-03-13 12:35:34",
"created_at_iso": "2021-03-13T12:35:34-04:00"
},
{
"id": 78390,
@@ -2144,7 +2176,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 12:11:32"
"created_at": "2021-03-13 12:11:32",
"created_at_iso": "2021-03-13T12:11:32-04:00"
},
{
"id": 78389,
@@ -2190,7 +2223,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 11:43:17"
"created_at": "2021-03-13 11:43:17",
"created_at_iso": "2021-03-13T11:43:17-04:00"
},
{
"id": 78388,
@@ -2336,7 +2370,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 11:37:52"
"created_at": "2021-03-13 11:37:52",
"created_at_iso": "2021-03-13T11:37:52-04:00"
},
{
"id": 78387,
@@ -2390,7 +2425,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 11:24:07"
"created_at": "2021-03-13 11:24:07",
"created_at_iso": "2021-03-13T11:24:07-04:00"
},
{
"id": 78386,
@@ -2436,7 +2472,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 09:18:58"
"created_at": "2021-03-13 09:18:58",
"created_at_iso": "2021-03-13T09:18:58-04:00"
},
{
"id": 78385,
@@ -2622,7 +2659,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 08:57:00"
"created_at": "2021-03-13 08:57:00",
"created_at_iso": "2021-03-13T08:57:00-04:00"
},
{
"id": 78384,
@@ -2808,7 +2846,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 07:51:16"
"created_at": "2021-03-13 07:51:16",
"created_at_iso": "2021-03-13T07:51:16-04:00"
},
{
"id": 78379,
@@ -2854,7 +2893,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 00:49:43"
"created_at": "2021-03-13 00:49:43",
"created_at_iso": "2021-03-13T00:49:43-04:00"
},
{
"id": 78378,
@@ -2972,7 +3012,8 @@
}
],
"music_type": null,
"created_at": "2021-03-13 00:41:28"
"created_at": "2021-03-13 00:41:28",
"created_at_iso": "2021-03-13T00:41:28-04:00"
},
{
"id": 78374,
@@ -3050,7 +3091,8 @@
}
],
"music_type": null,
"created_at": "2021-03-12 15:14:14"
"created_at": "2021-03-12 15:14:14",
"created_at_iso": "2021-03-12T15:14:14-04:00"
},
{
"id": 78373,
@@ -3212,7 +3254,8 @@
}
],
"music_type": null,
"created_at": "2021-03-12 14:43:58"
"created_at": "2021-03-12 14:43:58",
"created_at_iso": "2021-03-12T14:43:58-04:00"
},
{
"id": 78339,
@@ -3262,7 +3305,8 @@
}
],
"music_type": null,
"created_at": "2021-03-11 18:48:35"
"created_at": "2021-03-11 18:48:35",
"created_at_iso": "2021-03-11T18:48:35-04:00"
},
{
"id": 78332,
@@ -3303,7 +3347,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-03-11 13:46:59"
"created_at": "2021-03-11 13:46:59",
"created_at_iso": "2021-03-11T13:46:59-04:00"
},
{
"id": 78329,
@@ -3353,7 +3398,8 @@
}
],
"music_type": null,
"created_at": "2021-03-11 12:31:05"
"created_at": "2021-03-11 12:31:05",
"created_at_iso": "2021-03-11T12:31:05-04:00"
},
{
"id": 78328,
@@ -3394,7 +3440,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-03-11 12:28:38"
"created_at": "2021-03-11 12:28:38",
"created_at_iso": "2021-03-11T12:28:38-04:00"
},
{
"id": 78320,
@@ -3464,7 +3511,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 20:38:19"
"created_at": "2021-03-10 20:38:19",
"created_at_iso": "2021-03-10T20:38:19-04:00"
},
{
"id": 78319,
@@ -3510,7 +3558,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 19:26:47"
"created_at": "2021-03-10 19:26:47",
"created_at_iso": "2021-03-10T19:26:47-04:00"
},
{
"id": 78318,
@@ -3588,7 +3637,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 18:26:23"
"created_at": "2021-03-10 18:26:23",
"created_at_iso": "2021-03-10T18:26:23-04:00"
},
{
"id": 78317,
@@ -3674,7 +3724,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 16:26:24"
"created_at": "2021-03-10 16:26:24",
"created_at_iso": "2021-03-10T16:26:24-04:00"
},
{
"id": 78315,
@@ -3724,7 +3775,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 13:15:55"
"created_at": "2021-03-10 13:15:55",
"created_at_iso": "2021-03-10T13:15:55-04:00"
},
{
"id": 78313,
@@ -3774,7 +3826,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 11:37:21"
"created_at": "2021-03-10 11:37:21",
"created_at_iso": "2021-03-10T11:37:21-04:00"
},
{
"id": 78309,
@@ -3828,7 +3881,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 06:26:47"
"created_at": "2021-03-10 06:26:47",
"created_at_iso": "2021-03-10T06:26:47-04:00"
},
{
"id": 78308,
@@ -3890,7 +3944,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 06:19:15"
"created_at": "2021-03-10 06:19:15",
"created_at_iso": "2021-03-10T06:19:15-04:00"
},
{
"id": 78307,
@@ -3972,7 +4027,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 06:08:57"
"created_at": "2021-03-10 06:08:57",
"created_at_iso": "2021-03-10T06:08:57-04:00"
},
{
"id": 78305,
@@ -4018,7 +4074,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 04:45:48"
"created_at": "2021-03-10 04:45:48",
"created_at_iso": "2021-03-10T04:45:48-04:00"
},
{
"id": 78304,
@@ -4059,7 +4116,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-03-10 04:45:25"
"created_at": "2021-03-10 04:45:25",
"created_at_iso": "2021-03-10T04:45:25-04:00"
},
{
"id": 78292,
@@ -4109,7 +4167,8 @@
}
],
"music_type": null,
"created_at": "2021-03-10 02:20:29"
"created_at": "2021-03-10 02:20:29",
"created_at_iso": "2021-03-10T02:20:29-04:00"
},
{
"id": 78291,
@@ -4159,7 +4218,8 @@
}
],
"music_type": null,
"created_at": "2021-03-09 21:07:52"
"created_at": "2021-03-09 21:07:52",
"created_at_iso": "2021-03-09T21:07:52-04:00"
},
{
"id": 78290,
@@ -4209,7 +4269,8 @@
}
],
"music_type": null,
"created_at": "2021-03-09 12:35:54"
"created_at": "2021-03-09 12:35:54",
"created_at_iso": "2021-03-09T12:35:54-04:00"
},
{
"id": 78289,
@@ -4259,7 +4320,8 @@
}
],
"music_type": null,
"created_at": "2021-03-09 11:39:51"
"created_at": "2021-03-09 11:39:51",
"created_at_iso": "2021-03-09T11:39:51-04:00"
},
{
"id": 78287,
@@ -4300,7 +4362,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-03-09 09:12:02"
"created_at": "2021-03-09 09:12:02",
"created_at_iso": "2021-03-09T09:12:02-04:00"
},
{
"id": 78279,
@@ -4346,7 +4409,8 @@
}
],
"music_type": null,
"created_at": "2021-03-08 11:47:40"
"created_at": "2021-03-08 11:47:40",
"created_at_iso": "2021-03-08T11:47:40-04:00"
},
{
"id": 78278,
@@ -4392,7 +4456,8 @@
}
],
"music_type": null,
"created_at": "2021-03-08 10:31:18"
"created_at": "2021-03-08 10:31:18",
"created_at_iso": "2021-03-08T10:31:18-04:00"
},
{
"id": 78252,
@@ -4442,7 +4507,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 22:14:12"
"created_at": "2021-03-07 22:14:12",
"created_at_iso": "2021-03-07T22:14:12-04:00"
},
{
"id": 78251,
@@ -4488,7 +4554,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 19:17:10"
"created_at": "2021-03-07 19:17:10",
"created_at_iso": "2021-03-07T19:17:10-04:00"
},
{
"id": 78250,
@@ -4534,7 +4601,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 17:45:21"
"created_at": "2021-03-07 17:45:21",
"created_at_iso": "2021-03-07T17:45:21-04:00"
},
{
"id": 78247,
@@ -4580,7 +4648,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 16:30:21"
"created_at": "2021-03-07 16:30:21",
"created_at_iso": "2021-03-07T16:30:21-04:00"
},
{
"id": 78246,
@@ -4726,7 +4795,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 16:06:55"
"created_at": "2021-03-07 16:06:55",
"created_at_iso": "2021-03-07T16:06:55-04:00"
},
{
"id": 78244,
@@ -4780,7 +4850,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 15:33:16"
"created_at": "2021-03-07 15:33:16",
"created_at_iso": "2021-03-07T15:33:16-04:00"
},
{
"id": 78243,
@@ -4830,7 +4901,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 15:27:18"
"created_at": "2021-03-07 15:27:18",
"created_at_iso": "2021-03-07T15:27:18-04:00"
},
{
"id": 78240,
@@ -4876,7 +4948,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 14:26:53"
"created_at": "2021-03-07 14:26:53",
"created_at_iso": "2021-03-07T14:26:53-04:00"
},
{
"id": 78239,
@@ -4922,7 +4995,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 14:21:46"
"created_at": "2021-03-07 14:21:46",
"created_at_iso": "2021-03-07T14:21:46-04:00"
},
{
"id": 78238,
@@ -4968,7 +5042,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 13:32:16"
"created_at": "2021-03-07 13:32:16",
"created_at_iso": "2021-03-07T13:32:16-04:00"
},
{
"id": 78237,
@@ -5014,7 +5089,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 12:49:22"
"created_at": "2021-03-07 12:49:22",
"created_at_iso": "2021-03-07T12:49:22-04:00"
},
{
"id": 78236,
@@ -5060,7 +5136,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 09:58:14"
"created_at": "2021-03-07 09:58:14",
"created_at_iso": "2021-03-07T09:58:14-04:00"
},
{
"id": 78235,
@@ -5110,7 +5187,8 @@
}
],
"music_type": null,
"created_at": "2021-03-07 06:23:54"
"created_at": "2021-03-07 06:23:54",
"created_at_iso": "2021-03-07T06:23:54-04:00"
},
{
"id": 78216,
@@ -5156,7 +5234,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 15:51:20"
"created_at": "2021-03-06 15:51:20",
"created_at_iso": "2021-03-06T15:51:20-04:00"
},
{
"id": 78215,
@@ -5202,7 +5281,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 14:47:47"
"created_at": "2021-03-06 14:47:47",
"created_at_iso": "2021-03-06T14:47:47-04:00"
},
{
"id": 78214,
@@ -5248,7 +5328,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 14:03:22"
"created_at": "2021-03-06 14:03:22",
"created_at_iso": "2021-03-06T14:03:22-04:00"
},
{
"id": 78213,
@@ -5294,7 +5375,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 13:39:59"
"created_at": "2021-03-06 13:39:59",
"created_at_iso": "2021-03-06T13:39:59-04:00"
},
{
"id": 78212,
@@ -5344,7 +5426,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 12:44:05"
"created_at": "2021-03-06 12:44:05",
"created_at_iso": "2021-03-06T12:44:05-04:00"
},
{
"id": 78210,
@@ -5530,7 +5613,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 11:15:35"
"created_at": "2021-03-06 11:15:35",
"created_at_iso": "2021-03-06T11:15:35-04:00"
},
{
"id": 78208,
@@ -5576,7 +5660,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 10:01:38"
"created_at": "2021-03-06 10:01:38",
"created_at_iso": "2021-03-06T10:01:38-04:00"
},
{
"id": 78206,
@@ -5666,7 +5751,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 07:31:39"
"created_at": "2021-03-06 07:31:39",
"created_at_iso": "2021-03-06T07:31:39-04:00"
},
{
"id": 78204,
@@ -5764,7 +5850,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 02:05:40"
"created_at": "2021-03-06 02:05:40",
"created_at_iso": "2021-03-06T02:05:40-04:00"
},
{
"id": 78203,
@@ -5810,7 +5897,8 @@
}
],
"music_type": null,
"created_at": "2021-03-06 01:01:33"
"created_at": "2021-03-06 01:01:33",
"created_at_iso": "2021-03-06T01:01:33-04:00"
},
{
"id": 78201,
@@ -5860,7 +5948,8 @@
}
],
"music_type": null,
"created_at": "2021-03-05 21:38:15"
"created_at": "2021-03-05 21:38:15",
"created_at_iso": "2021-03-05T21:38:15-04:00"
},
{
"id": 78197,
@@ -5910,7 +5999,8 @@
}
],
"music_type": null,
"created_at": "2021-03-05 15:09:48"
"created_at": "2021-03-05 15:09:48",
"created_at_iso": "2021-03-05T15:09:48-04:00"
},
{
"id": 78185,
@@ -5956,7 +6046,8 @@
}
],
"music_type": null,
"created_at": "2021-03-05 09:22:10"
"created_at": "2021-03-05 09:22:10",
"created_at_iso": "2021-03-05T09:22:10-04:00"
},
{
"id": 78184,
@@ -6046,7 +6137,8 @@
}
],
"music_type": null,
"created_at": "2021-03-05 08:09:13"
"created_at": "2021-03-05 08:09:13",
"created_at_iso": "2021-03-05T08:09:13-04:00"
},
{
"id": 78182,
@@ -6092,7 +6184,8 @@
}
],
"music_type": null,
"created_at": "2021-03-05 06:56:38"
"created_at": "2021-03-05 06:56:38",
"created_at_iso": "2021-03-05T06:56:38-04:00"
},
{
"id": 78181,
@@ -6138,7 +6231,8 @@
}
],
"music_type": null,
"created_at": "2021-03-05 06:55:19"
"created_at": "2021-03-05 06:55:19",
"created_at_iso": "2021-03-05T06:55:19-04:00"
},
{
"id": 78177,
@@ -6184,7 +6278,8 @@
}
],
"music_type": null,
"created_at": "2021-03-05 05:35:07"
"created_at": "2021-03-05 05:35:07",
"created_at_iso": "2021-03-05T05:35:07-04:00"
},
{
"id": 78176,
@@ -6230,7 +6325,8 @@
}
],
"music_type": null,
"created_at": "2021-03-05 05:26:24"
"created_at": "2021-03-05 05:26:24",
"created_at_iso": "2021-03-05T05:26:24-04:00"
},
{
"id": 78159,
@@ -6271,7 +6367,8 @@
],
"subtitle": null,
"music_type": null,
"created_at": "2021-03-04 23:08:06"
"created_at": "2021-03-04 23:08:06",
"created_at_iso": "2021-03-04T23:08:06-04:00"
},
{
"id": 78158,
@@ -6409,7 +6506,8 @@
}
],
"music_type": null,
"created_at": "2021-03-04 21:55:45"
"created_at": "2021-03-04 21:55:45",
"created_at_iso": "2021-03-04T21:55:45-04:00"
},
{
"id": 78157,
@@ -6547,7 +6645,8 @@
}
],
"music_type": null,
"created_at": "2021-03-04 21:32:31"
"created_at": "2021-03-04 21:32:31",
"created_at_iso": "2021-03-04T21:32:31-04:00"
},
{
"id": 78153,
@@ -6593,7 +6692,8 @@
}
],
"music_type": null,
"created_at": "2021-03-04 09:22:51"
"created_at": "2021-03-04 09:22:51",
"created_at_iso": "2021-03-04T09:22:51-04:00"
}
],
"first_page_url": "https:\/\/privatehd.to\/api\/v1\/jackett\/torrents?type=1&page=1",
@@ -11,5 +11,6 @@
</searching>
<categories>
<category id="5070" name="Anime" description="Anime" />
<category id="2020" name="Movies/Other" description="Movies (Anime)" />
</categories>
</caps>
@@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests
torrentInfo.InfoUrl.Should().Be("https://avistaz.to/torrent/187240-japan-sinks-people-of-hope-2021-s01e05-720p-nf-web-dl-ddp20-x264-seikel");
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-11-14 22:26:21"));
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2021-11-14 21:26:21"));
torrentInfo.Size.Should().Be(935127615);
torrentInfo.InfoHash.Should().Be("a879261d4e6e792402f92401141a21de70d51bf2");
torrentInfo.MagnetUrl.Should().Be(null);
@@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.IndexerTests.AvistazTests
torrentInfo.InfoUrl.Should().Be("https://exoticaz.to/torrent/64040-ssis-419-my-first-experience-is-yua-mikami-from-the-day-i-lost-my-virginity-i-was-devoted-to-sex");
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-06-11 10:04:50"));
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-06-11 09:04:50"));
torrentInfo.Size.Should().Be(7085405541);
torrentInfo.InfoHash.Should().Be("asdjfiasdf54asd7f4a2sdf544asdf");
torrentInfo.MagnetUrl.Should().Be(null);
@@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.IndexerTests.FileListTests
torrentInfo.InfoUrl.Should().Be("https://filelist.io/details.php?id=665873");
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2020-01-25 20:20:19"));
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2020-01-25 19:20:19"));
torrentInfo.Size.Should().Be(8300512414);
torrentInfo.InfoHash.Should().Be(null);
torrentInfo.MagnetUrl.Should().Be(null);
@@ -83,17 +83,18 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests
bookCats.Should().Contain("8000");
}
[Test]
public void should_find_sub_categories_as_main_categories()
[TestCase(5070)]
[TestCase(2020)]
public void should_find_sub_categories_as_main_categories(int category)
{
GivenCapsResponse(ReadAllText("Files/Indexers/Torznab/torznab_animetosho_caps.xml"));
var caps = Subject.GetCapabilities(_settings, _definition);
var bookCats = caps.Categories.MapTrackerCatToNewznab("5070");
var indexerCategories = caps.Categories.MapTrackerCatToNewznab(category.ToString());
bookCats.Count.Should().Be(2);
bookCats.First().Id.Should().Be(5070);
indexerCategories.Count.Should().Be(2);
indexerCategories.First().Id.Should().Be(category);
}
[Test]
@@ -50,7 +50,7 @@ namespace NzbDrone.Core.Test.IndexerTests.PTPTests
first.Guid.Should().Be("PassThePopcorn-452135");
first.Title.Should().Be("The.Night.Of.S01.BluRay.AAC2.0.x264-DEPTH");
first.DownloadProtocol.Should().Be(DownloadProtocol.Torrent);
first.DownloadUrl.Should().Be("https://passthepopcorn.me/torrents.php?action=download&id=452135&authkey=00000000000000000000000000000000&torrent_pass=00000000000000000000000000000000");
first.DownloadUrl.Should().Be("https://passthepopcorn.me/torrents.php?action=download&id=452135");
first.InfoUrl.Should().Be("https://passthepopcorn.me/torrents.php?id=148131&torrentid=452135");
//first.PublishDate.Should().Be(DateTime.Parse("2017-04-17T12:13:42+0000").ToUniversalTime()); stupid timezones
@@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks>
<TargetFrameworks>net8.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.0.151" />
<PackageReference Include="Dapper" Version="2.1.66" />
<PackageReference Include="NBuilder" Version="6.1.0" />
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
<PackageReference Include="YamlDotNet" Version="13.1.1" />
<PackageReference Include="YamlDotNet" Version="16.3.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NzbDrone.Test.Common\Prowlarr.Test.Common.csproj" />
@@ -121,9 +121,16 @@ namespace NzbDrone.Core.Applications.Lidarr
{
var indexerCapabilities = GetIndexerCapabilities(indexer);
if (!indexerCapabilities.MusicSearchAvailable && !indexerCapabilities.SearchAvailable)
{
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing music or basic search support by the indexer", indexer.Name, indexer.Id);
return;
}
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Empty())
{
_logger.Trace("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
_logger.Debug("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
return;
}
@@ -178,7 +185,8 @@ namespace NzbDrone.Core.Applications.Lidarr
{
_logger.Debug("Syncing remote indexer with current settings");
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
if ((indexerCapabilities.MusicSearchAvailable || indexerCapabilities.SearchAvailable) &&
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
{
// Retain user fields not-affiliated with Prowlarr
lidarrIndexer.Fields.AddRange(remoteIndexer.Fields.Where(f => lidarrIndexer.Fields.All(s => s.Name != f.Name)));
@@ -204,7 +212,8 @@ namespace NzbDrone.Core.Applications.Lidarr
{
_appIndexerMapService.Delete(indexerMapping.Id);
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
if ((indexerCapabilities.MusicSearchAvailable || indexerCapabilities.SearchAvailable) &&
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
{
_logger.Debug("Remote indexer not found, re-adding {0} [{1}] to Lidarr", indexer.Name, indexer.Id);
lidarrIndexer.Id = 0;
@@ -121,9 +121,16 @@ namespace NzbDrone.Core.Applications.Radarr
{
var indexerCapabilities = GetIndexerCapabilities(indexer);
if (!indexerCapabilities.MovieSearchAvailable && !indexerCapabilities.SearchAvailable)
{
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing movie or basic search support by the indexer", indexer.Name, indexer.Id);
return;
}
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Empty())
{
_logger.Trace("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
_logger.Debug("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
return;
}
@@ -176,7 +183,8 @@ namespace NzbDrone.Core.Applications.Radarr
if (!radarrIndexer.Equals(remoteIndexer) || forceSync)
{
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
if ((indexerCapabilities.MovieSearchAvailable || indexerCapabilities.SearchAvailable) &&
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
{
// Retain user fields not-affiliated with Prowlarr
radarrIndexer.Fields.AddRange(remoteIndexer.Fields.Where(f => radarrIndexer.Fields.All(s => s.Name != f.Name)));
@@ -202,7 +210,8 @@ namespace NzbDrone.Core.Applications.Radarr
{
_appIndexerMapService.Delete(indexerMapping.Id);
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
if ((indexerCapabilities.MovieSearchAvailable || indexerCapabilities.SearchAvailable) &&
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
{
_logger.Debug("Remote indexer not found, re-adding {0} [{1}] to Radarr", indexer.Name, indexer.Id);
radarrIndexer.Id = 0;
@@ -121,9 +121,16 @@ namespace NzbDrone.Core.Applications.Readarr
{
var indexerCapabilities = GetIndexerCapabilities(indexer);
if (!indexerCapabilities.BookSearchAvailable && !indexerCapabilities.SearchAvailable)
{
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing book or basic search support by the indexer", indexer.Name, indexer.Id);
return;
}
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Empty())
{
_logger.Trace("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
_logger.Debug("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
return;
}
@@ -178,7 +185,8 @@ namespace NzbDrone.Core.Applications.Readarr
{
_logger.Debug("Syncing remote indexer with current settings");
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
if ((indexerCapabilities.BookSearchAvailable || indexerCapabilities.SearchAvailable) &&
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
{
// Retain user fields not-affiliated with Prowlarr
readarrIndexer.Fields.AddRange(remoteIndexer.Fields.Where(f => readarrIndexer.Fields.All(s => s.Name != f.Name)));
@@ -204,7 +212,8 @@ namespace NzbDrone.Core.Applications.Readarr
{
_appIndexerMapService.Delete(indexerMapping.Id);
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
if ((indexerCapabilities.BookSearchAvailable || indexerCapabilities.SearchAvailable) &&
indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any())
{
_logger.Debug("Remote indexer not found, re-adding {0} [{1}] to Readarr", indexer.Name, indexer.Id);
readarrIndexer.Id = 0;
@@ -125,10 +125,17 @@ namespace NzbDrone.Core.Applications.Sonarr
{
var indexerCapabilities = GetIndexerCapabilities(indexer);
if (!indexerCapabilities.TvSearchAvailable && !indexerCapabilities.SearchAvailable)
{
_logger.Debug("Skipping add for indexer {0} [{1}] due to missing TV or basic search support by the indexer", indexer.Name, indexer.Id);
return;
}
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Empty() &&
indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Empty())
{
_logger.Trace("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
_logger.Debug("Skipping add for indexer {0} [{1}] due to no app Sync Categories supported by the indexer", indexer.Name, indexer.Id);
return;
}
@@ -183,7 +190,8 @@ namespace NzbDrone.Core.Applications.Sonarr
{
_logger.Debug("Syncing remote indexer with current settings");
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any() || indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Any())
if ((indexerCapabilities.TvSearchAvailable || indexerCapabilities.SearchAvailable) &&
(indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any() || indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Any()))
{
// Retain user fields not-affiliated with Prowlarr
sonarrIndexer.Fields.AddRange(remoteIndexer.Fields.Where(f => sonarrIndexer.Fields.All(s => s.Name != f.Name)));
@@ -210,7 +218,8 @@ namespace NzbDrone.Core.Applications.Sonarr
{
_appIndexerMapService.Delete(indexerMapping.Id);
if (indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any() || indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Any())
if ((indexerCapabilities.TvSearchAvailable || indexerCapabilities.SearchAvailable) &&
(indexerCapabilities.Categories.SupportedCategories(Settings.SyncCategories.ToArray()).Any() || indexerCapabilities.Categories.SupportedCategories(Settings.AnimeSyncCategories.ToArray()).Any()))
{
_logger.Debug("Remote indexer not found, re-adding {0} [{1}] to Sonarr", indexer.Name, indexer.Id);
sonarrIndexer.Id = 0;
@@ -1,8 +1,11 @@
using System;
namespace NzbDrone.Core.Authentication
{
public enum AuthenticationType
{
None = 0,
[Obsolete("Use Forms authentication instead")]
Basic = 1,
Forms = 2,
External = 3
@@ -207,13 +207,24 @@ namespace NzbDrone.Core.Configuration
if (enabled)
{
SetValue("AuthenticationMethod", AuthenticationType.Basic);
return AuthenticationType.Basic;
SetValue("AuthenticationMethod", AuthenticationType.Forms);
return AuthenticationType.Forms;
}
return Enum.TryParse<AuthenticationType>(_authOptions.Method, out var enumValue)
var value = Enum.TryParse<AuthenticationType>(_authOptions.Method, out var enumValue)
? enumValue
: GetValueEnum("AuthenticationMethod", AuthenticationType.None);
#pragma warning disable CS0618 // Type or member is obsolete
if (value == AuthenticationType.Basic)
#pragma warning restore CS0618 // Type or member is obsolete
{
SetValue("AuthenticationMethod", AuthenticationType.Forms);
return AuthenticationType.Forms;
}
return value;
}
}
@@ -389,6 +400,12 @@ namespace NzbDrone.Core.Configuration
{
SetValue("EnableSsl", false);
}
#pragma warning disable CS0618 // Type or member is obsolete
if (AuthenticationMethod == AuthenticationType.Basic)
#pragma warning restore CS0618 // Type or member is obsolete
{
SetValue("AuthenticationMethod", AuthenticationType.Forms);
}
}
private void DeleteOldValues()
@@ -27,7 +27,7 @@ namespace NzbDrone.Core.Datastore
switch (expression.NodeType)
{
case ExpressionType.Lambda:
return VisitLamda((LambdaExpression)expression);
return VisitLambda((LambdaExpression)expression);
case ExpressionType.ArrayLength:
case ExpressionType.Convert:
case ExpressionType.ConvertChecked:
@@ -87,7 +87,7 @@ namespace NzbDrone.Core.Datastore
}
/// <summary>
/// Visits the memeber access expression. To be implemented by user.
/// Visits the member access expression. To be implemented by user.
/// </summary>
/// <param name="expression"></param>
/// <returns></returns>
@@ -130,11 +130,11 @@ namespace NzbDrone.Core.Datastore
}
/// <summary>
/// Visits the lamda expression.
/// Visits the lambda expression.
/// </summary>
/// <param name="lambdaExpression"></param>
/// <returns></returns>
protected virtual Expression VisitLamda(LambdaExpression lambdaExpression)
protected virtual Expression VisitLambda(LambdaExpression lambdaExpression)
{
Visit(lambdaExpression.Body);
return lambdaExpression;
@@ -0,0 +1,22 @@
using System.Data;
using Dapper;
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(043)]
public class newznab_indexers_enable_redirect : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Execute.WithConnection(UpdateNewznabRedirectSetting);
}
private void UpdateNewznabRedirectSetting(IDbConnection conn, IDbTransaction tran)
{
var updateSql = "UPDATE \"Indexers\" SET \"Redirect\" = @Redirect WHERE \"Implementation\" = 'Newznab' AND \"Redirect\" = false";
conn.Execute(updateSql, new { Redirect = true }, transaction: tran);
}
}
}
@@ -1,3 +1,4 @@
using System;
using System.IO;
using System.Linq;
using System.Xml;
@@ -14,10 +15,13 @@ namespace NzbDrone.Core.Download
public class NzbValidationService : IValidateNzbs
{
public void Validate(byte[] fileContent)
{
try
{
var reader = new StreamReader(new MemoryStream(fileContent));
using (var xmlTextReader = XmlReader.Create(reader, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore, IgnoreComments = true }))
using (var xmlTextReader = XmlReader.Create(reader,
new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore, IgnoreComments = true }))
{
var xDoc = XDocument.Load(xmlTextReader);
var nzb = xDoc.Root;
@@ -27,7 +31,7 @@ namespace NzbDrone.Core.Download
throw new InvalidNzbException("Invalid NZB: No Root element");
}
// nZEDb has an bug in their error reporting code spitting out invalid http status codes
// nZEDb has a bug in their error reporting code spitting out invalid http status codes
if (nzb.Name.LocalName.Equals("error") &&
nzb.TryGetAttributeValue("code", out var code) &&
nzb.TryGetAttributeValue("description", out var description))
@@ -37,7 +41,8 @@ namespace NzbDrone.Core.Download
if (!nzb.Name.LocalName.Equals("nzb"))
{
throw new InvalidNzbException("Invalid NZB: Unexpected root element. Expected 'nzb' found '{0}'", nzb.Name.LocalName);
throw new InvalidNzbException(
"Invalid NZB: Unexpected root element. Expected 'nzb' found '{0}'", nzb.Name.LocalName);
}
var ns = nzb.Name.Namespace;
@@ -49,5 +54,15 @@ namespace NzbDrone.Core.Download
}
}
}
catch (InvalidNzbException)
{
// Throw the original exception
throw;
}
catch (Exception ex)
{
throw new InvalidNzbException("Invalid NZB: Unable to parse", ex);
}
}
}
}
@@ -237,13 +237,13 @@ namespace NzbDrone.Core.Indexers.Definitions
return _categories.MapTrackerCatDescToNewznab("OVA/ONA/Special");
}
// Check movies then, cause some of releases could be movies dorama and should go to movies category
// Check movies then, cause some of the releases could be movies dorama and should go to movies category
if (CategorieMovieRegex.IsMatch(rName) || CategorieMovieRegex.IsMatch(rDesc))
{
return _categories.MapTrackerCatDescToNewznab("Movies");
}
// Check dorama. Most of doramas are flaged as doramas in type info, but type info could have a lot of types at same time (movie, etc)
// Check dorama. Most of doramas are flagged as doramas in type info, but type info could have a lot of types at same time (movie, etc)
if (CategorieDoramaRegex.IsMatch(rName) || CategorieDoramaRegex.IsMatch(type))
{
return _categories.MapTrackerCatDescToNewznab("Dorama");
@@ -37,11 +37,6 @@ namespace NzbDrone.Core.Indexers.Definitions
};
}
public override IParseIndexerResponse GetParser()
{
return new AvistaZParser();
}
protected override IndexerCapabilities SetCapabilities()
{
var caps = new IndexerCapabilities
@@ -81,9 +76,4 @@ namespace NzbDrone.Core.Indexers.Definitions
: $"{searchCriteria.EpisodeSearchString}";
}
}
public class AvistaZParser : AvistazParserBase
{
protected override string TimezoneOffset => "+01:00";
}
}
@@ -15,6 +15,9 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
[JsonPropertyName("created_at")]
public string CreatedAt { get; set; }
[JsonPropertyName("created_at_iso")]
public string CreatedAtIso { get; set; }
[JsonPropertyName("file_name")]
public string FileName { get; set; }
@@ -14,7 +14,6 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
{
public class AvistazParserBase : IParseIndexerResponse
{
protected virtual string TimezoneOffset => "-04:00"; // Avistaz does not specify a timezone & returns server time
private readonly HashSet<string> _hdResolutions = new() { "1080p", "1080i", "720p" };
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
@@ -66,7 +65,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
InfoUrl = details,
Guid = details,
Categories = cats,
PublishDate = DateTime.Parse($"{row.CreatedAt} {TimezoneOffset}", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
PublishDate = DateTime.Parse(row.CreatedAtIso, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
Size = row.FileSize,
Files = row.FileCount,
Grabs = row.Completed,
@@ -255,6 +255,11 @@ namespace NzbDrone.Core.Indexers.Definitions
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerHttpResponse.StatusCode} code from indexer request");
}
if (indexerHttpResponse.Headers.ContentType.Contains("text/html"))
{
throw new IndexerException(indexerResponse, $"Indexer responded with HTML content. {(indexerHttpResponse.Content.ContainsIgnoreCase("site maintenance") ? "Site is under maintenance." : "Site is likely blocked or unavailable.")}");
}
if (!indexerHttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value))
{
throw new IndexerException(indexerResponse, $"Unexpected response header {indexerHttpResponse.Headers.ContentType} from indexer request, expected {HttpAccept.Json.Value}");
@@ -8,6 +8,7 @@ using System.Text;
using System.Text.RegularExpressions;
using AngleSharp.Dom;
using Microsoft.AspNetCore.WebUtilities;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
using NzbDrone.Common.Extensions;
@@ -214,19 +215,21 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
if (selector.Selector != null)
{
var selectorSelector = ApplyGoTemplateText(selector.Selector.TrimStart('.'), variables);
selectorSelector = JsonParseFieldSelector(parentObj, selectorSelector);
var fieldSelector = JsonParseFieldSelector(parentObj, selectorSelector);
JToken selection = null;
if (selectorSelector != null)
if (fieldSelector != null)
{
selection = parentObj.SelectToken(selectorSelector);
selection = parentObj.SelectToken(fieldSelector);
}
if (selection == null)
{
if (required)
{
throw new Exception(string.Format("Selector \"{0}\" didn't match {1}", selectorSelector, parentObj.ToString()));
var jsonContent = parentObj.ToString(Formatting.None);
throw new Exception($"Selector \"{selectorSelector}\" didn't match JSON content").WithData("JsonContent", jsonContent[..Math.Min(jsonContent.Length, 5 * 1024)]);
}
return null;
@@ -234,7 +237,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
if (selection.Type is JTokenType.Array)
{
// turn this json array into a comma delimited string
// turn this json array into a comma-delimited string
var valueArray = selection.Value<JArray>();
value = string.Join(",", valueArray);
}
@@ -259,7 +262,9 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
{
if (required)
{
throw new Exception($"None of the case selectors \"{string.Join(",", selector.Case)}\" matched {parentObj}");
var jsonContent = parentObj.ToString(Formatting.None);
throw new Exception($"None of the case selectors \"{string.Join(",", selector.Case)}\" matched JSON content").WithData("JsonContent", jsonContent[..Math.Min(jsonContent.Length, 5 * 1024)]);
}
return null;
@@ -705,15 +710,15 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
var diacriticsOp = (string)filter.Args;
if (diacriticsOp == "replace")
{
// Should replace diacritics charcaters with their base character
// Should replace diacritics characters with their base character
// It's not perfect, e.g. "ŠĐĆŽ - šđčćž" becomes "SĐCZ-sđccz"
var stFormD = data.Normalize(NormalizationForm.FormD);
var len = stFormD.Length;
var sb = new StringBuilder();
for (var i = 0; i < len; i++)
{
var uc = System.Globalization.CharUnicodeInfo.GetUnicodeCategory(stFormD[i]);
if (uc != System.Globalization.UnicodeCategory.NonSpacingMark)
var uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[i]);
if (uc != UnicodeCategory.NonSpacingMark)
{
sb.Append(stFormD[i]);
}
@@ -738,7 +743,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
case "hexdump":
// this is mainly for debugging invisible special char related issues
var hexData = string.Join("", data.Select(c => c + "(" + ((int)c).ToString("X2") + ")"));
_logger.Debug(string.Format("CardigannIndexer ({0}): strdump: {1}", _definition.Id, hexData));
_logger.Debug("CardigannIndexer ({0}): strdump: {1}", _definition.Id, hexData);
break;
case "strdump":
// for debugging
@@ -774,7 +779,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
return headers;
}
// FIXME: fix jackett header handling (allow it to specifiy the same header multipe times)
// FIXME: fix jackett header handling (allow it to specify the same header multiple times)
foreach (var header in customHeaders)
{
headers.Add(header.Key, ApplyGoTemplateText(header.Value[0], variables));
@@ -914,7 +919,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
break;
default:
_logger.Error(string.Format("CardigannIndexer ({0}): Unsupported selector: {1}", _definition.Id, rowSelector));
_logger.Error("CardigannIndexer ({0}): Unsupported selector: {1}", _definition.Id, rowSelector);
continue;
}
}
@@ -105,7 +105,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
}
catch (Exception ex)
{
_logger.Trace(ex, "Failed to parse JSON rows count.");
_logger.Debug(ex, "Failed to parse JSON rows count.");
}
}
@@ -226,7 +226,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
{
results = ApplyFilters(results, search.Preprocessingfilters, variables);
searchResultDocument = searchResultParser.ParseDocument(results);
_logger.Trace(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", _definition.Id, results));
_logger.Trace("CardigannIndexer ({0}): result after preprocessingfilters: {1}", _definition.Id, results);
}
var rowsSelector = ApplyGoTemplateText(search.Rows.Selector, variables);
@@ -241,7 +241,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
{
results = ApplyFilters(results, search.Preprocessingfilters, variables);
searchResultDocument = searchResultParser.ParseDocument(results);
_logger.Trace(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", _definition.Id, results));
_logger.Trace("CardigannIndexer ({0}): result after preprocessingfilters: {1}", _definition.Id, results);
}
var rowsSelector = ApplyGoTemplateText(search.Rows.Selector, variables);
@@ -1203,7 +1203,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
Encoding = _encoding
};
// Add FormData for searchs that POST
// Add FormData for searches that POST
if (method == HttpMethod.Post)
{
foreach (var param in queryCollection)
@@ -54,8 +54,6 @@ namespace NzbDrone.Core.Indexers.Definitions
{
private readonly IndexerCapabilitiesCategories _categories;
protected override string TimezoneOffset => "+01:00";
public ExoticaZParser(IndexerCapabilitiesCategories categories)
{
_categories = categories;
@@ -77,7 +77,7 @@ public class FileListParser : IParseIndexerResponse
InfoUrl = GetInfoUrl(id),
Seeders = row.Seeders,
Peers = row.Leechers + row.Seeders,
PublishDate = DateTime.Parse(row.UploadDate + " +0200", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
PublishDate = DateTime.Parse(row.UploadDate + " +0300", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
Description = row.SmallDescription,
Genres = row.SmallDescription.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries).ToList(),
ImdbId = imdbId,
@@ -148,7 +148,8 @@ namespace NzbDrone.Core.Indexers.Newznab
SupportsSearch = SupportsSearch,
SupportsRedirect = SupportsRedirect,
SupportsPagination = SupportsPagination,
Capabilities = caps
Capabilities = caps,
Redirect = true
};
}
@@ -224,24 +224,28 @@ namespace NzbDrone.Core.Indexers.Newznab
foreach (var xmlCategory in xmlCategories.Elements("category"))
{
var parentName = xmlCategory.Attribute("name").Value;
var parentNameLower = parentName?.ToLowerInvariant();
var parentId = int.Parse(xmlCategory.Attribute("id").Value);
var mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => parentNameLower.Contains(x.Name.ToLower()));
var mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => parentName.Equals(x.Name, StringComparison.OrdinalIgnoreCase));
if (mappedCat == null)
if (mappedCat is null)
{
// Try to find name and Id in AllCats for sub cats that are mapped as parents
mappedCat = NewznabStandardCategory.AllCats.FirstOrDefault(x => x.Id == parentId && x.Name.ToLower().Contains(parentNameLower));
// Try to find name and ID in AllCats for sub cats that are mapped as parents
mappedCat = NewznabStandardCategory.AllCats.FirstOrDefault(x => x.Id == parentId && x.Name.Contains(parentName, StringComparison.OrdinalIgnoreCase));
}
if (mappedCat == null)
if (mappedCat is null)
{
mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => parentName.Contains(x.Name, StringComparison.OrdinalIgnoreCase));
}
if (mappedCat is null)
{
// Try by parent id if name fails
mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => x.Id == parentId);
}
if (mappedCat == null)
if (mappedCat is null)
{
// Fallback to Other
mappedCat = NewznabStandardCategory.Other;
@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using NLog;
using NzbDrone.Common.Http;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Messaging.Events;
@@ -36,7 +38,19 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
public override IParseIndexerResponse GetParser()
{
return new PassThePopcornParser(Settings);
return new PassThePopcornParser(Settings, Capabilities.Categories);
}
protected override Task<HttpRequest> GetDownloadRequest(Uri link)
{
var requestBuilder = new HttpRequestBuilder(link.AbsoluteUri);
var request = requestBuilder
.SetHeader("ApiUser", Settings.APIUser)
.SetHeader("ApiKey", Settings.APIKey)
.Build();
return Task.FromResult(request);
}
private IndexerCapabilities SetCapabilities()
@@ -45,10 +59,6 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
{
LimitsDefault = PageSize,
LimitsMax = PageSize,
TvSearchParams = new List<TvSearchParam>
{
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep, TvSearchParam.ImdbId
},
MovieSearchParams = new List<MovieSearchParam>
{
MovieSearchParam.Q, MovieSearchParam.ImdbId
@@ -63,7 +73,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
caps.Categories.AddCategoryMapping(1, NewznabStandardCategory.Movies, "Feature Film");
caps.Categories.AddCategoryMapping(2, NewznabStandardCategory.Movies, "Short Film");
caps.Categories.AddCategoryMapping(3, NewznabStandardCategory.TV, "Miniseries");
caps.Categories.AddCategoryMapping(3, NewznabStandardCategory.Movies, "Miniseries");
caps.Categories.AddCategoryMapping(4, NewznabStandardCategory.Movies, "Stand-up Comedy");
caps.Categories.AddCategoryMapping(5, NewznabStandardCategory.Movies, "Live Performance");
caps.Categories.AddCategoryMapping(6, NewznabStandardCategory.Movies, "Movie Collection");
@@ -5,21 +5,20 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
public class PassThePopcornResponse
{
public string TotalResults { get; set; }
public List<PassThePopcornMovie> Movies { get; set; }
public IReadOnlyCollection<PassThePopcornMovie> Movies { get; set; }
public string Page { get; set; }
public string AuthKey { get; set; }
public string PassKey { get; set; }
}
public class PassThePopcornMovie
{
public string GroupId { get; set; }
public string CategoryId { get; set; }
public string Title { get; set; }
public string Year { get; set; }
public string Cover { get; set; }
public List<string> Tags { get; set; }
public IReadOnlyCollection<string> Tags { get; set; }
public string ImdbId { get; set; }
public List<PassThePopcornTorrent> Torrents { get; set; }
public IReadOnlyCollection<PassThePopcornTorrent> Torrents { get; set; }
}
public class PassThePopcornTorrent
@@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http;
using NzbDrone.Common.Serializer;
@@ -14,12 +14,12 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
public class PassThePopcornParser : IParseIndexerResponse
{
private readonly PassThePopcornSettings _settings;
private readonly IndexerCapabilitiesCategories _categories;
private static Regex SeasonRegex => new (@"\bS\d{2,3}(E\d{2,3})?\b", RegexOptions.Compiled);
public PassThePopcornParser(PassThePopcornSettings settings)
public PassThePopcornParser(PassThePopcornSettings settings, IndexerCapabilitiesCategories categories)
{
_settings = settings;
_categories = categories;
}
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
@@ -84,13 +84,6 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
flags.Add(PassThePopcornFlag.Approved);
}
var categories = new List<IndexerCategory> { NewznabStandardCategory.Movies };
if (title != null && SeasonRegex.Match(title).Success)
{
categories.Add(NewznabStandardCategory.TV);
}
var uploadVolumeFactor = torrent.FreeleechType?.ToUpperInvariant() switch
{
"NEUTRAL LEECH" => 0,
@@ -103,8 +96,8 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
Title = title,
Year = int.Parse(result.Year),
InfoUrl = GetInfoUrl(result.GroupId, id),
DownloadUrl = GetDownloadUrl(id, jsonResponse.AuthKey, jsonResponse.PassKey),
Categories = categories,
DownloadUrl = GetDownloadUrl(id),
Categories = _categories.MapTrackerCatToNewznab(result.CategoryId),
Size = long.Parse(torrent.Size),
Grabs = int.Parse(torrent.Snatched),
Seeders = int.Parse(torrent.Seeders),
@@ -117,7 +110,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
UploadVolumeFactor = uploadVolumeFactor,
MinimumRatio = 1,
MinimumSeedTime = 345600,
Genres = result.Tags ?? new List<string>(),
Genres = result.Tags?.ToList() ?? new List<string>(),
PosterUrl = GetPosterUrl(result.Cover)
});
}
@@ -128,14 +121,12 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
private string GetDownloadUrl(int torrentId, string authKey, string passKey)
private string GetDownloadUrl(int torrentId)
{
var url = new HttpUri(_settings.BaseUrl)
.CombinePath("/torrents.php")
.AddQueryParam("action", "download")
.AddQueryParam("id", torrentId)
.AddQueryParam("authkey", authKey)
.AddQueryParam("torrent_pass", passKey);
.AddQueryParam("id", torrentId);
return url.FullUri;
}
@@ -78,6 +78,8 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
{ "action", "advanced" },
{ "json", "noredirect" },
{ "grouping", "0" },
{ "order_by", "time" },
{ "order_way", "desc" },
{ "searchstr", searchTerm }
};
@@ -18,6 +18,12 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
{
private static readonly PassThePopcornSettingsValidator Validator = new();
public PassThePopcornSettings()
{
BaseSettings.QueryLimit = 150;
BaseSettings.LimitsUnit = (int)IndexerLimitsUnit.Hour;
}
[FieldDefinition(2, Label = "IndexerSettingsApiUser", HelpText = "IndexerPassThePopcornSettingsApiUserHelpText", Privacy = PrivacyLevel.UserName)]
public string APIUser { get; set; }
@@ -20,7 +20,7 @@ public class SecretCinema : GazelleBase<GazelleSettings>
{
public override string Name => "Secret Cinema";
public override string[] IndexerUrls => new[] { "https://secret-cinema.pw/" };
public override string Description => "A tracker for rare movies.";
public override string Description => "Secret Cinema is a Private ratioless site for rare MOVIES.";
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
public override IndexerCapabilities Capabilities => SetCapabilities();
@@ -151,7 +151,7 @@ public class SecretCinemaParser : IParseIndexerResponse
if (torrent.RemasterTitle.IsNotNullOrWhiteSpace())
{
release.Title += $" [{torrent.RemasterTitle.Trim()}]";
release.Title += $" [{WebUtility.HtmlDecode(torrent.RemasterTitle).Trim()}]";
}
// Replace media formats with standards
@@ -138,7 +138,7 @@ namespace NzbDrone.Core.Indexers.Definitions
}
else if (!string.IsNullOrWhiteSpace(searchString))
{
// Suffix the first occurence of `s01` surrounded by whitespace with *
// Suffix the first occurrence of `s01` surrounded by whitespace with *
// That way we also search for single episodes in a whole season search
var regex = new Regex(@"(^|\s)(s\d{2})(\s|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
queryCollection.Add("searchstring", regex.Replace(searchString.Trim(), @"$1$2*$3"));
@@ -121,53 +121,49 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
caps.Categories.AddCategoryMapping(112, NewznabStandardCategory.MoviesOther, "Anime Movies");
caps.Categories.AddCategoryMapping(111, NewznabStandardCategory.MoviesOther, "Anime TV");
caps.Categories.AddCategoryMapping(150, NewznabStandardCategory.PC, "Apps");
caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.TV, "AV1");
caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.Movies, "AV1");
caps.Categories.AddCategoryMapping(159, NewznabStandardCategory.Movies, "Movie Boxsets AV1");
caps.Categories.AddCategoryMapping(158, NewznabStandardCategory.Movies, "Movies AV1");
caps.Categories.AddCategoryMapping(157, NewznabStandardCategory.TV, "TV AV1");
caps.Categories.AddCategoryMapping(160, NewznabStandardCategory.TV, "TV Boxsets AV1");
caps.Categories.AddCategoryMapping(153, NewznabStandardCategory.Books, "Books");
caps.Categories.AddCategoryMapping(154, NewznabStandardCategory.AudioAudiobook, "Audiobooks");
caps.Categories.AddCategoryMapping(155, NewznabStandardCategory.Books, "Books & Magazines");
caps.Categories.AddCategoryMapping(154, NewznabStandardCategory.AudioAudiobook, "Books Audiobooks");
caps.Categories.AddCategoryMapping(155, NewznabStandardCategory.Books, "Books eBooks & Magazines");
caps.Categories.AddCategoryMapping(68, NewznabStandardCategory.MoviesOther, "Cams/TS");
caps.Categories.AddCategoryMapping(140, NewznabStandardCategory.TVDocumentary, "Documentary");
caps.Categories.AddCategoryMapping(10, NewznabStandardCategory.MoviesDVD, "DVDR");
caps.Categories.AddCategoryMapping(109, NewznabStandardCategory.MoviesBluRay, "Bluray Disc");
caps.Categories.AddCategoryMapping(109, NewznabStandardCategory.MoviesBluRay, "DVDR Bluray Disc");
caps.Categories.AddCategoryMapping(131, NewznabStandardCategory.TVSport, "Fighting");
caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.TVSport, "Fighting/Boxing");
caps.Categories.AddCategoryMapping(133, NewznabStandardCategory.TVSport, "Fighting/MMA");
caps.Categories.AddCategoryMapping(132, NewznabStandardCategory.TVSport, "Fighting/Wrestling");
caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.TVSport, "Fighting Boxing");
caps.Categories.AddCategoryMapping(133, NewznabStandardCategory.TVSport, "Fighting MMA");
caps.Categories.AddCategoryMapping(132, NewznabStandardCategory.TVSport, "Fighting Wrestling");
caps.Categories.AddCategoryMapping(72, NewznabStandardCategory.MoviesForeign, "Foreign");
caps.Categories.AddCategoryMapping(116, NewznabStandardCategory.TVForeign, "Foreign Boxsets");
caps.Categories.AddCategoryMapping(114, NewznabStandardCategory.MoviesForeign, "Foreign Movies");
caps.Categories.AddCategoryMapping(115, NewznabStandardCategory.TVForeign, "Foreign TV");
caps.Categories.AddCategoryMapping(103, NewznabStandardCategory.ConsoleOther, "Games Console");
caps.Categories.AddCategoryMapping(105, NewznabStandardCategory.ConsoleOther, "Games Console/Nintendo");
caps.Categories.AddCategoryMapping(104, NewznabStandardCategory.ConsolePS4, "Games Console/Playstation");
caps.Categories.AddCategoryMapping(106, NewznabStandardCategory.ConsoleXBox, "Games Console/XBOX");
caps.Categories.AddCategoryMapping(105, NewznabStandardCategory.ConsoleOther, "Games Console Nintendo");
caps.Categories.AddCategoryMapping(104, NewznabStandardCategory.ConsolePS4, "Games Console Playstation");
caps.Categories.AddCategoryMapping(106, NewznabStandardCategory.ConsoleXBox, "Games Console XBOX");
caps.Categories.AddCategoryMapping(6, NewznabStandardCategory.PCGames, "Games PC");
caps.Categories.AddCategoryMapping(108, NewznabStandardCategory.PC, "Games PC/Linux");
caps.Categories.AddCategoryMapping(107, NewznabStandardCategory.PCMac, "Games PC/Mac");
caps.Categories.AddCategoryMapping(108, NewznabStandardCategory.PC, "Games PC Linux");
caps.Categories.AddCategoryMapping(107, NewznabStandardCategory.PCMac, "Games PC Mac");
caps.Categories.AddCategoryMapping(11, NewznabStandardCategory.Movies, "Movie Boxsets");
caps.Categories.AddCategoryMapping(118, NewznabStandardCategory.MoviesUHD, "Movie Boxsets/Boxset 4K");
caps.Categories.AddCategoryMapping(143, NewznabStandardCategory.MoviesHD, "Movie Boxsets/Boxset HD");
caps.Categories.AddCategoryMapping(119, NewznabStandardCategory.MoviesHD, "Movie Boxsets/Boxset HEVC");
caps.Categories.AddCategoryMapping(144, NewznabStandardCategory.MoviesSD, "Movie Boxsets/Boxset SD");
caps.Categories.AddCategoryMapping(118, NewznabStandardCategory.MoviesUHD, "Movie Boxsets 4K");
caps.Categories.AddCategoryMapping(162, NewznabStandardCategory.MoviesHD, "Movie Boxsets AV1");
caps.Categories.AddCategoryMapping(143, NewznabStandardCategory.MoviesHD, "Movie Boxsets HD");
caps.Categories.AddCategoryMapping(119, NewznabStandardCategory.MoviesHD, "Movie Boxsets HEVC");
caps.Categories.AddCategoryMapping(144, NewznabStandardCategory.MoviesSD, "Movie Boxsets SD");
caps.Categories.AddCategoryMapping(12, NewznabStandardCategory.Movies, "Movies");
caps.Categories.AddCategoryMapping(117, NewznabStandardCategory.MoviesUHD, "Movies 4K");
caps.Categories.AddCategoryMapping(163, NewznabStandardCategory.MoviesHD, "Movies AV1");
caps.Categories.AddCategoryMapping(145, NewznabStandardCategory.MoviesHD, "Movies HD");
caps.Categories.AddCategoryMapping(100, NewznabStandardCategory.MoviesHD, "Movies HEVC");
caps.Categories.AddCategoryMapping(146, NewznabStandardCategory.MoviesSD, "Movies SD");
caps.Categories.AddCategoryMapping(13, NewznabStandardCategory.Audio, "Music");
caps.Categories.AddCategoryMapping(135, NewznabStandardCategory.AudioLossless, "Music/FLAC");
caps.Categories.AddCategoryMapping(151, NewznabStandardCategory.Audio, "Karaoke");
caps.Categories.AddCategoryMapping(135, NewznabStandardCategory.AudioLossless, "Music FLAC");
caps.Categories.AddCategoryMapping(151, NewznabStandardCategory.Audio, "Music Karaoke");
caps.Categories.AddCategoryMapping(136, NewznabStandardCategory.Audio, "Music Boxset");
caps.Categories.AddCategoryMapping(148, NewznabStandardCategory.AudioVideo, "Music Videos");
caps.Categories.AddCategoryMapping(9, NewznabStandardCategory.Other, "Other");
caps.Categories.AddCategoryMapping(125, NewznabStandardCategory.Other, "Other/Pictures");
caps.Categories.AddCategoryMapping(54, NewznabStandardCategory.TVOther, "Soaps");
caps.Categories.AddCategoryMapping(83, NewznabStandardCategory.TVOther, "Specials");
caps.Categories.AddCategoryMapping(125, NewznabStandardCategory.Other, "Other Pictures");
caps.Categories.AddCategoryMapping(54, NewznabStandardCategory.TVOther, "Other Soaps");
caps.Categories.AddCategoryMapping(83, NewznabStandardCategory.TVOther, "Other Specials");
caps.Categories.AddCategoryMapping(139, NewznabStandardCategory.TV, "TOTM (Freeleech)");
caps.Categories.AddCategoryMapping(138, NewznabStandardCategory.TV, "TOTW (x2 upload)");
caps.Categories.AddCategoryMapping(139, NewznabStandardCategory.Movies, "TOTM (Freeleech)");
@@ -177,16 +173,18 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
caps.Categories.AddCategoryMapping(86, NewznabStandardCategory.TVSport, "Sports/MotorSports");
caps.Categories.AddCategoryMapping(89, NewznabStandardCategory.TVSport, "Sports/Olympics");
caps.Categories.AddCategoryMapping(126, NewznabStandardCategory.TV, "TV");
caps.Categories.AddCategoryMapping(149, NewznabStandardCategory.TV, "TV Specials");
caps.Categories.AddCategoryMapping(127, NewznabStandardCategory.TVUHD, "TV 4K");
caps.Categories.AddCategoryMapping(164, NewznabStandardCategory.TVHD, "TV AV1");
caps.Categories.AddCategoryMapping(129, NewznabStandardCategory.TVHD, "TV HD");
caps.Categories.AddCategoryMapping(130, NewznabStandardCategory.TVHD, "TV HEVC");
caps.Categories.AddCategoryMapping(128, NewznabStandardCategory.TVSD, "TV SD");
caps.Categories.AddCategoryMapping(149, NewznabStandardCategory.TV, "TV Specials");
caps.Categories.AddCategoryMapping(21, NewznabStandardCategory.TVSD, "TV Boxsets");
caps.Categories.AddCategoryMapping(120, NewznabStandardCategory.TVUHD, "Boxset TV 4K");
caps.Categories.AddCategoryMapping(76, NewznabStandardCategory.TVHD, "Boxset TV HD");
caps.Categories.AddCategoryMapping(97, NewznabStandardCategory.TVHD, "Boxset TV HEVC");
caps.Categories.AddCategoryMapping(147, NewznabStandardCategory.TVSD, "Boxset TV SD");
caps.Categories.AddCategoryMapping(120, NewznabStandardCategory.TVUHD, "TV Boxset 4K");
caps.Categories.AddCategoryMapping(165, NewznabStandardCategory.TVUHD, "TV Boxset AV1");
caps.Categories.AddCategoryMapping(76, NewznabStandardCategory.TVHD, "TV Boxset HD");
caps.Categories.AddCategoryMapping(97, NewznabStandardCategory.TVHD, "TV Boxset HEVC");
caps.Categories.AddCategoryMapping(147, NewznabStandardCategory.TVSD, "TV Boxset SD");
return caps;
}
@@ -250,7 +250,11 @@ namespace NzbDrone.Core.Indexers
{
var response = await _httpClient.ExecuteProxiedAsync(request, Definition);
if (response.StatusCode is HttpStatusCode.MovedPermanently or HttpStatusCode.Found or HttpStatusCode.SeeOther)
if (response.StatusCode is HttpStatusCode.MovedPermanently
or HttpStatusCode.Found
or HttpStatusCode.SeeOther
or HttpStatusCode.TemporaryRedirect
or HttpStatusCode.PermanentRedirect)
{
var autoRedirectChain = new List<string> { request.Url.ToString() };
+1 -1
View File
@@ -195,7 +195,7 @@ namespace NzbDrone.Core.Indexers
}
else if (settings.BaseUrl.IsNotNullOrWhiteSpace() && LegacyUrls.Contains(settings.BaseUrl))
{
_logger.Debug(string.Format("Changing legacy site link from {0} to {1}", settings.BaseUrl, defaultLink));
_logger.Debug("Changing legacy site link from {0} to {1}", settings.BaseUrl, defaultLink);
settings.BaseUrl = defaultLink;
}
@@ -92,7 +92,6 @@ namespace NzbDrone.Core.Indexers
public static readonly IndexerCategory[] ParentCats =
{
ZedOther,
Console,
Movies,
Audio,
@@ -100,7 +99,8 @@ namespace NzbDrone.Core.Indexers
TV,
XXX,
Books,
Other
Other,
ZedOther
};
public static readonly IndexerCategory[] AllCats =
+300 -5
View File
@@ -362,11 +362,11 @@
"Theme": "Tema",
"Track": "Pista",
"Year": "Any",
"UpdateAvailableHealthCheckMessage": "Nova actualització disponible",
"UpdateAvailableHealthCheckMessage": "Nova actualització disponible: {version}",
"ConnectionLostReconnect": "{appName} intentarà connectar-se automàticament, o podeu fer clic a recarregar.",
"ConnectionLostToBackend": "{appName} ha perdut la connexió amb el backend i s'haurà de tornar a carregar per a restaurar la funcionalitat.",
"RecentChanges": "Canvis recents",
"WhatsNew": "Novetats",
"WhatsNew": "Què hi ha de nou?",
"minutes": "minuts",
"DeleteAppProfileMessageText": "Esteu segur que voleu suprimir el perfil de l'aplicació '{name}'?",
"NotificationStatusSingleClientHealthCheckMessage": "Notificacions no disponibles a causa d'errors: {notificationNames}",
@@ -484,7 +484,7 @@
"InfoUrl": "URL d'informació",
"PublishedDate": "Data de publicació",
"Redirected": "Redirecció",
"AllSearchResultsHiddenByFilter": "Tots els resultats estan ocults pel filtre aplicat",
"AllSearchResultsHiddenByFilter": "Tots els resultats estan ocults pel filtre aplicat.",
"HealthMessagesInfoBox": "Podeu trobar més informació sobre la causa d'aquests missatges de comprovació de salut fent clic a l'enllaç wiki (icona del llibre) al final de la fila o consultant els vostres [registres]({link}). Si teniu problemes per a interpretar aquests missatges, podeu posar-vos en contacte amb el nostre suport als enllaços següents.",
"AptUpdater": "Utilitzeu apt per a instal·lar l'actualització",
"DockerUpdater": "actualitzeu el contenidor Docker per a rebre l'actualització",
@@ -496,7 +496,7 @@
"Logout": "Tanca la sessió",
"NoEventsFound": "No s'han trobat esdeveniments",
"RestartReloadNote": "Nota: {appName} es reiniciarà i tornarà a carregar automàticament la interfície d'usuari durant el procés de restauració.",
"TheLogLevelDefault": "El nivell de registre per defecte és \"Info\" i es pot canviar a [Configuració general](/configuració/general)",
"TheLogLevelDefault": "El nivell de registre per defecte és \"Debug\" i es pot canviar a [Configuració general](/settings/general)",
"UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,",
"WouldYouLikeToRestoreBackup": "Voleu restaurar la còpia de seguretat '{name}'?",
"InstallLatest": "Instal·la l'últim",
@@ -512,5 +512,300 @@
"MinimumSeeders": "Seeders mínims",
"SeedRatio": "Ràtio de la llavor",
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Si un torrent està bloquejat per un hash, pot ser que no es rebutgi correctament durant el RSS/Search per a alguns indexadors, habilitant això permetrà que es rebutgi després que s'agafi el torrent, però abans que s'enviï al client.",
"SeedTime": "Temps de la llavor"
"SeedTime": "Temps de la llavor",
"DefaultCategory": "Categoria predeterminada",
"IndexerVipExpiredHealthCheckMessage": "Els beneficis VIP de l'indexador han caducat: {indexerNames}",
"MassEditor": "Editor de masses",
"NoSearchResultsFound": "No s'han trobat resultats de cerca, proveu de realitzar una nova cerca a continuació.",
"NotSupported": "No suportat",
"OverrideAndAddToDownloadClient": "Sobreescriu i afegeix al client de baixada",
"PackSeedTime": "Temps de la llavor del paquet",
"SearchAllIndexers": "Cerca tots els indexadors",
"SearchIndexers": "Cerca indexadors",
"SeedTimeHelpText": "L'hora en què un torrent s'ha de sembrar abans d'aturar-se, buit és el predeterminat de l'aplicació",
"SettingsIndexerLogging": "Registre de l'indexador millorat",
"TotalIndexerSuccessfulGrabs": "Indexador total correcte",
"BookSearch": "Cerca de llibres",
"ClearHistoryMessageText": "Esteu segur que voleu netejar tot l'historial de {appName}?",
"IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
"ClearHistory": "Neteja l'historial",
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "Clau de l'API del lloc",
"IndexerGazelleGamesSettingsApiKeyHelpText": "Clau API del lloc (trobada a Configuració => Accés)",
"IndexerBeyondHDSettingsRssKeyHelpText": "Clau RSS del lloc (trobada a Seguretat => Clau RSS)",
"ApplicationsLoadError": "No s'ha pogut carregar la llista d'aplicacions",
"BookSearchTypes": "Tipus de cerca de llibres",
"DownloadClientCategory": "Baixa la categoria del client",
"IndexerAuth": "Autor de l'indexador",
"IndexerBeyondHDSettingsLimitedOnly": "Només limitat",
"IndexerBeyondHDSettingsRefundOnly": "Només el reemborsament",
"IndexerBeyondHDSettingsRefundOnlyHelpText": "Cerca només el reemborsament",
"IndexerBeyondHDSettingsRewindOnlyHelpText": "Cerca només el rebobinat",
"IndexerBeyondHDSettingsSearchTypes": "Tipus de cerca",
"IndexerBeyondHDSettingsSearchTypesHelpText": "Seleccioneu els tipus de llançaments que us interessin. Si no hi ha cap seleccionat, s'utilitzen totes les opcions.",
"IndexerDownloadClientHelpText": "Especifiqueu quin client de baixada s'utilitza per a les captures fetes a {appName} des d'aquest indexador",
"IndexerGazelleGamesSettingsApiKeyHelpTextWarning": "Ha de tenir permisos d'usuari i torrents",
"IndexerGazelleGamesSettingsSearchGroupNames": "Cerca noms de grup",
"IndexerHDBitsSettingsFreeleechOnlyHelpText": "Mostra només els llançaments de freeleech",
"IndexerHDBitsSettingsUseFilenames": "Utilitza els noms de fitxer",
"IndexerHDBitsSettingsUseFilenamesHelpText": "Marqueu aquesta opció si voleu utilitzar noms de fitxer torrent com a títols de llançament",
"IndexerHDBitsSettingsUsernameHelpText": "Nom d'usuari del lloc",
"IndexerHealthCheckNoIndexers": "No hi ha indexadors activats, {appName} no retornarà els resultats de la cerca",
"IndexerHistoryLoadError": "Error en carregar l'historial de l'indexador",
"IndexerIPTorrentsSettingsCookieUserAgent": "Agent d'usuari de la galeta",
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
"IndexerInfo": "Informació de l'indexador",
"IndexerNebulanceSettingsApiKeyHelpText": "Clau API de la Configuració de l'usuari . Claus Api. La clau ha de tenir permisos de llista i baixada",
"IndexerNewznabSettingsVipExpirationHelpText": "Data d'entrada (yyyy-mm-dd) per a la caducitat VIP o en blanc, {appName} notificarà 1 setmana des de la caducitat de VIP",
"IndexerNoDefinitionCheckHealthCheckMessage": "Els indexadors no tenen definició i no funcionaran: {indexerNames}. Suprimiu i (o torneu a afegir) a {appName}.",
"IndexerObsoleteCheckMessage": "Els indexadors estan obsolets o s'han actualitzat: {0}. Suprimiu i (o torneu a afegir) a {appName}",
"IndexerPassThePopcornSettingsApiKeyHelpText": "Clau de l'API del lloc",
"IndexerRss": "Indexador RSS",
"IndexerSettingsGrabLimitHelpText": "El nombre màxim de captures especificat per la unitat respectiva que {appName} permetrà al lloc",
"IndexerSettingsPackSeedTimeIndexerHelpText": "L'hora en què un paquet (temporada o discografia) s'ha de sembrar el torrent abans d'aturar-se, buit és el valor predeterminat de l'aplicació",
"IndexerSettingsPreferMagnetUrl": "Prefereix l'URL de l'imant",
"IndexerSettingsPreferMagnetUrlHelpText": "Quan està activat, aquest indexador preferirà l'ús d'URLs magnet per a les captures amb enllaços de reserva a torrents",
"IndexerSettingsQueryLimitHelpText": "El nombre màxim de consultes especificat per la unitat respectiva que {appName} permetrà al lloc",
"InitialFailure": "Fallada inicial",
"NoIndexerCategories": "No s'ha trobat cap categoria per a aquest indexador",
"RepeatSearch": "Cerca repetida",
"SettingsLogRotateHelpText": "Nombre màxim de fitxers de registre a mantenir desats a la carpeta de registres",
"SyncProfile": "Perfil de sincronització",
"TotalUserAgentGrabs": "Total d'agents d'usuari",
"UnableToLoadAppProfiles": "No s'han pogut carregar els perfils de l'aplicació",
"VipExpiration": "Caducitat VIP",
"IndexerOrpheusSettingsApiKeyHelpText": "Clau API del lloc (trobada a Configuració => Accés)",
"IndexerRedactedSettingsApiKeyHelpText": "Clau API del lloc (trobada a Configuració => Accés)",
"ProwlarrSupportsAnyIndexer": "{appName} admet molts indexadors, a més de qualsevol indexador que utilitzi l'estàndard Newznab/Torznab utilitzant 'Generic Newznab' (per usenet) o 'Generic Torznab' (per torrents). Cerca i selecciona el teu indexador des de sota.",
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "Categoria alternativa predeterminada si no hi ha cap categoria assignada per a un llançament. Afegir una categoria específica a {appName} evita conflictes amb baixades no relacionades amb {appName}. L'ús d'una categoria és opcional, però molt recomanable.",
"AppProfileSelectHelpText": "Els perfils d'aplicació s'utilitzen per controlar RSS, la cerca automàtica i la configuració de cerca interactiva en sincronitzar aplicacions",
"AudioSearch": "Cerca d'àudio",
"IndexerSettingsAppsMinimumSeeders": "Aplicacions de cercadors mínims",
"DeleteApplication": "Suprimeix l'aplicació",
"DownloadClientSettingsPriorityItemHelpText": "Prioritat a usar en capturar elements",
"DownloadClientSettingsDefaultCategoryHelpText": "Categoria alternativa predeterminada si no hi ha cap categoria assignada per a un llançament. Afegir una categoria específica a {appName} evita conflictes amb baixades no relacionades amb {appName}. L'ús d'una categoria és opcional, però molt recomanable.",
"EditCategory": "Edita la categoria",
"IndexerQuery": "Consulta de l'indexador",
"IndexerSettingsBaseUrl": "Url base",
"IndexerSettingsCookieHelpText": "Cookie del lloc",
"IndexerSettingsLimitsUnitHelpText": "La unitat de temps per comptar els límits per indexador",
"IndexerSettingsPackSeedTime": "Temps de la llavor del paquet",
"IndexerSite": "Lloc indexador",
"IndexerTagsHelpTextWarning": "Les etiquetes s'han d'utilitzar amb precaució, poden tenir efectes no desitjats. Un indexador amb una etiqueta només sincronitzarà amb aplicacions amb la mateixa etiqueta.",
"IndexerSettingsSummary": "Configura diversos paràmetres globals de l'indexador.",
"ManageApplications": "Gestiona les aplicacions",
"PackSeedTimeHelpText": "L'hora en què un paquet (temporada o discografia) s'ha de sembrar el torrent abans d'aturar-se, buit és el valor predeterminat de l'aplicació",
"PreferMagnetUrl": "Prefereix l'URL de l'imant",
"PreferMagnetUrlHelpText": "Quan està activat, aquest indexador preferirà l'ús d'URLs magnet per a les captures amb enllaços de reserva a torrents",
"ProwlarrDownloadClientsInAppOnlyAlert": "Els clients de baixada només són per a les cerques a l'aplicació {appName} i no sincronitzen amb les aplicacions. No hi ha plans per afegir aquesta funcionalitat.",
"IndexerBeyondHDSettingsRewindOnly": "Només rebobina",
"ProxyValidationUnableToConnect": "No s'ha pogut connectar al servidor intermediari: {exceptionMessage}. Comprova els detalls del registre que envolta aquest error",
"QueryOptions": "Opcions de la consulta",
"TestAllApps": "Prova totes les aplicacions",
"TotalHostQueries": "Total de consultes de l'amfitrió",
"AverageGrabs": "Mitjana d'herba",
"AverageQueries": "Mitjana de consultes",
"FilterPlaceHolder": "Cerca indexadors",
"IndexerBeyondHDSettingsLimitedOnlyHelpText": "Cerca només freeleech (Limited UL)",
"IndexerBeyondHDSettingsApiKeyHelpText": "Clau API del lloc (trobada a Seguretat => Clau API)",
"IndexerSettingsVipExpiration": "Caducitat VIP",
"IndexerVipExpiringHealthCheckMessage": "Els beneficis VIP de l'indexador expiraran aviat: {indexerNames}",
"LastFailure": "Darrera fallada",
"MovieSearch": "Cerca de pel·lícules",
"MovieSearchTypes": "Tipus de cerca de pel·lícules",
"MusicSearchTypes": "Tipus de cerca de música",
"QueryType": "Tipus de consulta",
"RssQueries": "Consultes RSS",
"SyncLevelFull": "Sincronització completa: mantindrà els indexadors d'aquesta aplicació completament sincronitzats. Els canvis fets als indexadors a {appName} se sincronitzen amb aquesta aplicació. Qualsevol canvi fet a indexadors remotament dins d'aquesta aplicació serà anul·lat per {appName} en la següent sincronització.",
"TotalHostGrabs": "Total d'amfitrions",
"TotalQueries": "Total de consultes",
"NoApplicationsFound": "No s'ha trobat cap aplicació",
"SyncProfiles": "Sincronitza els perfils",
"TorznabUrl": "Url Torznab",
"TvSearch": "Cerca de TV",
"DeleteIndexerProxy": "Suprimeix el servidor intermediari de l'indexador",
"DisabledUntil": "Desactivat fins",
"GrabTitle": "Captura el títol",
"SettingsIndexerLoggingHelpText": "Registra dades addicionals de l'indexador",
"SyncLevel": "Nivell de sincronització",
"AdvancedSettingsHiddenClickToShow": "Configuració avançada oculta, feu clic per mostrar",
"AdvancedSettingsShownClickToHide": "Configuració avançada mostrada, feu clic per amagar",
"AppsMinimumSeeders": "Aplicacions de cercadors mínims",
"AppsMinimumSeedersHelpText": "«Mínims filtradors requerits per les Aplicacions perquè l'indexador s'agafi",
"CountIndexersAvailable": "{count} indexador(s) disponible",
"HistoryCleanup": "Neteja de l'historial",
"HistoryDetails": "Detalls de l'historial",
"SettingsFilterSentryEventsHelpText": "Filtra els esdeveniments d'error d'usuari coneguts perquè s'enviïn com a Analytics",
"MappedCategories": "Categories assignades",
"AppSettingsSummary": "Aplicacions i paràmetres per configurar com {appName} interactua amb els vostres programes PVR",
"ConnectSettingsSummary": "Notificacions i scripts personalitzats",
"DeleteClientCategory": "Suprimeix la categoria del client de baixada",
"FullSync": "Sincronització completa",
"IndexerAlreadySetup": "Almenys una instància de l'indexador ja està configurada",
"RawSearchSupported": "S'admet la cerca RAW",
"RssFeed": "Canal RSS",
"SearchTypes": "Tipus de cerca",
"SeedRatioHelpText": "La relació a la qual ha d'arribar un torrent abans d'aturar-se, buida és la predeterminada de l'aplicació",
"SemiPrivate": "Semi-Privada",
"TotalIndexerQueries": "Total de consultes de l'indexador",
"TotalUserAgentQueries": "Total de consultes d'agents d'usuari",
"GoToApplication": "Ves a l'aplicació",
"Url": "Url",
"AreYouSureYouWantToDeleteIndexer": "Esteu segur que voleu suprimir '{name}' de {appName}?",
"AverageResponseTimesMs": "Temps mitjà de resposta de l'indexador (ms)",
"FoundCountReleases": "S'han trobat {itemCount} versions",
"AuthQueries": "Consultes d'Autorització",
"BasicSearch": "Cerca bàsica",
"IndexerName": "Nom de l'indexador",
"IndexerStatus": "Estat de l'indexador",
"IndexerTagsHelpText": "Utilitzeu etiquetes per especificar els intermediaris de l'indexador o a quines aplicacions se sincronitza l'indexador.",
"NewznabUrl": "Url Newznab",
"SearchCountIndexers": "Cerca {count} indexador",
"UnableToLoadDevelopmentSettings": "No s'han pogut carregar els paràmetres de desenvolupament",
"SettingsFilterSentryEvents": "Filtra els esdeveniments d'anàlisi",
"ApplicationTagsHelpText": "Sincronitza els indexadors d'aquesta aplicació que tenen una o més etiquetes coincidents. Si no es llisten etiquetes aquí, llavors no s'impedirà la sincronització d'indexadors a causa de les seves etiquetes.",
"ApplicationTagsHelpTextWarning": "Les etiquetes s'han d'utilitzar amb precaució, poden tenir efectes no desitjats. Una aplicació amb una etiqueta només sincronitzarà amb els indexadors que tinguin la mateixa etiqueta.",
"DeleteSelectedApplications": "Suprimeix les aplicacions seleccionades",
"DownloadClientsSettingsSummary": "Baixa la configuració dels clients per a la integració a la cerca de la interfície d'usuari {appName}",
"ElapsedTime": "Temps transcorregut",
"EnableIndexer": "Habilita l'indexador",
"EnableRssHelpText": "Habilita el canal RSS per a l'indexador",
"IncludeManualGrabsHelpText": "Inclou les notes manuals fetes a {appName}",
"IndexerFailureRate": "Taxa de fallada de l'indexador",
"ProwlarrSupportsAnyDownloadClient": "{appName} admet qualsevol dels clients de baixada que es llisten a continuació.",
"TotalGrabs": "Grabs totals",
"IndexerDetails": "Detalls de l'indexador",
"IndexerPriorityHelpText": "Prioritat de l'indexador des de l'1 (el més alt) fins al 50 (el més oest). Per defecte: 25.",
"IndexerProxy": "Servidor intermediari de l'indexador",
"UISettingsSummary": "Opcions de data, idioma i color defectuoses",
"IndexerCategories": "Categories de l'indexador",
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
"SearchCapabilities": "Capacitats de cerca",
"SearchType": "Tipus de cerca",
"SettingsLogSql": "Registre Sql",
"SyncLevelAddRemove": "Afegeix i elimina només: quan s'afegeixen o s'eliminen els indexadors de {appName}, s'actualitzarà aquesta aplicació remota.",
"IndexerProxies": "Propis de l'indexador",
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Sincronitza les fulles del torrent de la llista de blocs en bloc mentre s'agafa",
"CertificateValidationHelpText": "Canvia l'estricta validació de la certificació HTTPS",
"IndexerDisabled": "Indexador desactivat",
"IndexerFileListSettingsPasskeyHelpText": "Contrasenya del lloc (Aquesta és la cadena alfanumèrica a l'URL del seguidor que es mostra al client de baixada)",
"IndexerSettingsQueryLimit": "Límit de consulta",
"IndexerHDBitsSettingsPasskeyHelpText": "Contrasenya dels detalls de l'usuari",
"IndexerSettingsPasskey": "Clau de pas",
"ClickToChangeQueryOptions": "Feu clic per a canviar les opcions de consulta",
"EnabledRedirected": "Activat, redirigit",
"Parameters": "Paràmetres",
"QueryResults": "Resultats de la consulta",
"RedirectHelpText": "Redirigeix la sol·licitud de baixada entrant per a l'indexador i passa la captura directament en lloc de intermediaris a través de {appName}",
"UnableToLoadIndexerProxies": "No s'han pogut carregar els intermediaris de l'indexador",
"IndexerId": "ID de l'indexador",
"IndexerAlphaRatioSettingsExcludeScene": "Exclou l'escena",
"IndexerAlphaRatioSettingsExcludeSceneHelpText": "Exclou els llançaments d'escenes dels resultats",
"IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
"IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
"IndexerFileListSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
"IndexerFileListSettingsUsernameHelpText": "Nom d'usuari del lloc",
"IndexerGazelleGamesSettingsSearchGroupNamesHelpText": "Cerca publicacions per noms de grup",
"IndexerHDBitsSettingsOrigins": "Orígens",
"IndexerIPTorrentsSettingsCookieUserAgentHelpText": "Agent d'usuari associat a la cookie utilitzada des del navegador",
"IndexerNewznabSettingsApiKeyHelpText": "Clau de l'API del lloc",
"IndexerNzbIndexSettingsApiKeyHelpText": "Clau de l'API del lloc",
"IndexerSettingsAppsMinimumSeedersHelpText": "«Mínims filtradors requerits per les Aplicacions perquè l'indexador s'agafi",
"IndexerSettingsFreeleechOnly": "Només Freeleech",
"IndexerSettingsGrabLimit": "Límit de captura",
"IndexerSettingsLimitsUnit": "Unitats de límits",
"IndexerSettingsRssKey": "Clau RSS",
"SelectIndexers": "Selecciona els indexadors",
"SettingsSqlLoggingHelpText": "Registra totes les consultes SQL de {appName}",
"SyncAppIndexers": "Sincronitza els indexadors d'aplicacions",
"AppProfileInUse": "Perfil d'aplicació en ús",
"DeleteAppProfile": "Suprimeix el perfil de l'aplicació",
"TVSearchTypes": "Tipus de cerca de TV",
"IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
"IndexerMTeamTpSettingsApiKeyHelpText": "Clau API del Lloc (trobada a Tauler de control de l'usuari => Seguretat => Laboratori)",
"MinimumSeedersHelpText": "Visors mínims requerits per l'aplicació perquè l'indexador s'agafi",
"NoIndexerHistory": "No s'ha trobat cap historial per a aquest indexador",
"SearchQueries": "Cerca consultes",
"SettingsConsoleLogLevel": "Nivell de registre de la consola",
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Només blat de moro daurat",
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Cerca només els llançaments Golden Popcorn",
"Open": "Obre",
"ProwlarrDownloadClientsAlert": "Si voleu fer cerques directament dins de {appName}, heu d'afegir Clients de Baixades. En cas contrari, no cal afegir-les aquí. Per a les cerques des de les teves Apps, els clients de descàrrega configurats s'utilitzen en el seu lloc.",
"Website": "Lloc web",
"DownloadClientQbittorrentSettingsUseSslHelpText": "Utilitza una connexió segura. Vegeu Opcions -> Interfície web -> 'Utilitza HTTPS en comptes d'HTTP' a qBittorrent.",
"IndexerAvistazSettingsFreeleechOnlyHelpText": "Cerca només els llançaments de freeleech",
"IndexerAvistazSettingsPasswordHelpText": "Contrasenya del lloc",
"IndexerAvistazSettingsPidHelpText": "PID de la pàgina del meu compte o del meu perfil",
"IndexerAvistazSettingsUsernameHelpText": "Nom d'usuari del lloc",
"IndexerAvistazSettingsUsernameHelpTextWarning": "Només el rang de membre i superior pot utilitzar l'API en aquest indexador.",
"SelectedCountOfCountReleases": "S'han seleccionat {selectedCount} de les versions {itemCount}",
"SettingsLogRotate": "Rotació del registre",
"AreYouSureYouWantToDeleteCategory": "Esteu segur que voleu suprimir la categoria assignada?",
"Book": "Llibre",
"IndexerSettingsCookie": "Cookie",
"DownloadClientFreeboxSettingsAppIdHelpText": "ID d'aplicació indicat en crear accés a l'API de Freebox (ex: 'app_id')",
"DownloadClientFreeboxSettingsHostHelpText": "Nom d'amfitrió o adreça IP de l'amfitrió del Freebox, per defecte a '{url}' (només funcionarà si es troba a la mateixa xarxa)",
"DownloadClientFreeboxSettingsPortHelpText": "Port utilitzat per accedir a la interfície Freebox, per defecte a '{port}'",
"DownloadClientRTorrentSettingsUrlPath": "Camí de l'Url",
"IndexerHDBitsSettingsMediumsHelpText": "Si no s'especifica, s'utilitzen totes les opcions.",
"NotificationsEmailSettingsUseEncryptionHelpText": "Si s'ha de preferir l'ús de l'encriptatge si es configura al servidor, per utilitzar sempre l'encriptatge mitjançant SSL (només Port 465) o StartTLS (qualsevol altre port) o per no utilitzar mai l'encriptatge",
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Primer i últim",
"DownloadClientFloodSettingsTagsHelpText": "Etiquetes inicials d'una baixada. Per ser reconegut, una baixada ha de tenir totes les etiquetes inicials. Això evita conflictes amb baixades no relacionades.",
"DownloadClientQbittorrentSettingsSequentialOrder": "Ordre seqüencial",
"DownloadClientSettingsUseSslHelpText": "Usa una connexió segura quan es connecti a {clientName}",
"InstallMajorVersionUpdate": "Instal·la l'actualització",
"InstallMajorVersionUpdateMessageLink": "Si us plau, comproveu [{domain}]({url}) per a més informació.",
"OverrideGrabModalTitle": "Sobreescriu i Captura - {title}",
"SecretToken": "Testimoni secret",
"TorrentBlackholeSaveMagnetFilesExtension": "Desa l'extensió dels fitxers magnètics",
"FailedToFetchSettings": "No s'ha pogut recuperar la configuració",
"DownloadClientFreeboxSettingsApiUrlHelpText": "Defineix l'URL base de l'API de Freebox amb la versió de l'API, p. ex. '{url}', per defecte a '{defaultApiUrl}'",
"IndexerSettingsSeedTime": "Temps de la llavor",
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Carpeta compartida opcional per posar les baixades, deixeu en blanc per utilitzar la ubicació predeterminada de l'estació de baixada",
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Aquesta carpeta haurà de ser accessible des de XBMC",
"DownloadClientPneumaticSettingsStrmFolder": "Carpeta Strm",
"DownloadClientSettingsDestinationHelpText": "Especifica manualment la destinació de la baixada, deixeu-ho en blanc per a utilitzar el predeterminat",
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Afegeix un prefix a l'URL rpc de {clientName}, ex. {url}, per defecte a {defaultUrl}",
"IndexerSettingsApiPathHelpText": "Camí a l'api, normalment {url}",
"LogSizeLimitHelpText": "Mida màxima del fitxer de registre en MB abans d'arxivar. Per defecte és 1MB.",
"IndexerNewznabSettingsAdditionalParametersHelpText": "Paràmetres addicionals de Newznab",
"InstallMajorVersionUpdateMessage": "Aquesta actualització instal·larà una nova versió principal i pot no ser compatible amb el vostre sistema. Esteu segur que voleu instal·lar aquesta actualització?",
"PackageVersionInfo": "{packageVersion} per {packageAuthor}",
"UpdaterLogFiles": "Fitxers de registre de l'actualitzador",
"NotificationsEmailSettingsUseEncryption": "Utilitza l'encriptatge",
"NotificationsTelegramSettingsIncludeAppNameHelpText": "Opcionalment prefixa el títol del missatge amb {appName} per diferenciar les notificacions de diferents aplicacions",
"DownloadClientSettingsInitialState": "Estat inicial",
"DownloadClientSettingsInitialStateHelpText": "Estat inicial dels torrents afegits a {clientName}",
"IndexerPassThePopcornSettingsApiUserHelpText": "Aquests paràmetres es troben a la configuració de seguretat de PassThePopcorn (Edita el perfil > Seguretat).",
"DownloadClientRTorrentSettingsUrlPathHelpText": "Camí al extrem XMLRPC, vegeu {url}. Normalment és RPC2 o [camí a ruTorrent]{url2} quan s'utilitza ruTorrent.",
"IndexerSettingsApiPath": "Camí de l'API",
"IndexerHDBitsSettingsCodecsHelpText": "Si no s'especifica, s'utilitzen totes les opcions.",
"IndexerSettingsApiUser": "Usuari de l'API",
"IndexerSettingsSeedTimeHelpText": "El temps en què s'ha de sembrar un torrent abans d'aturar-lo, el buit utilitza el valor per defecte del client de baixada",
"IndexerSettingsSeedRatio": "Ràtio de la llavor",
"IndexerSettingsSeedRatioHelpText": "Ràtio a la qual ha d'arribar un torrent abans d'aturar-se, buit utilitza el valor per defecte del client de baixada. La relació ha de ser com a mínim 1.0 i seguir les regles dels indexadors",
"IndexerSettingsAdditionalParameters": "Paràmetres addicionals",
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Afegeix les propietats dels suports com a etiquetes. Els consells són exemples.",
"DownloadClientFloodSettingsUrlBaseHelpText": "Afegeix un prefix a l'API de Flood, com ara {url}",
"DownloadClientFreeboxSettingsAppToken": "Testimoni d'aplicació",
"DownloadClientNzbgetSettingsAddPausedHelpText": "Aquesta opció requereix com a mínim la versió 16.0 de NzbGet",
"DownloadClientPneumaticSettingsNzbFolder": "Carpeta Nzb",
"DownloadClientPneumaticSettingsStrmFolderHelpText": "Els fitxers .strm d'aquesta carpeta s'importaran amb el dron",
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Baixeu primer i primer les últimes peces (qBittorrent 4.1.0+)",
"DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Baixada en ordre seqüencial (qBittorrent 4.1.0+)",
"LabelIsRequired": "L'etiqueta és necessària",
"NotificationsTelegramSettingsIncludeAppName": "Inclou {appName} al títol",
"TorrentBlackholeSaveMagnetFiles": "Desa els fitxers Magnet",
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Extensió a utilitzar per als enllaços magnet, per defecte és '.magnet'",
"TorrentBlackholeSaveMagnetFilesHelpText": "Desa l'enllaç magnet si no hi ha cap fitxer .torrent disponible (només útil si el client de baixada admet magnets desats a un fitxer)",
"TorrentBlackholeTorrentFolder": "Carpeta torrent",
"UseSsl": "Usa SSL",
"UsenetBlackholeNzbFolder": "Carpeta Nzb",
"XmlRpcPath": "Camí RPC XML",
"DownloadClientRTorrentSettingsAddStopped": "Afegeix aturat",
"DownloadClientRTorrentSettingsAddStoppedHelpText": "En activar s'afegiran torrents i imants a rTorrent en un estat aturat. Això pot trencar els fitxers magnet.",
"DownloadClientFreeboxSettingsAppTokenHelpText": "S'ha recuperat el testimoni de l'aplicació en crear l'accés a l'API de Freebox (ex: 'app_token')",
"DownloadClientUTorrentProviderMessage": "uTorrent té un historial d'inclusió de criptominers, programari maliciós i anuncis, us animem a triar un client diferent.",
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Estat inicial dels torrents afegits a qBittorrent. Tingueu en compte que els torrents forçats no compleixen amb les restriccions de llavors",
"LogSizeLimit": "Límit de la mida del registre",
"SelectDownloadClientModalTitle": "{modalTitle} - Seleccioneu el client de baixada"
}
+1 -1
View File
@@ -296,7 +296,7 @@
"Title": "Titul",
"Today": "Dnes",
"Tomorrow": "Zítra",
"Torrent": "Torrenty",
"Torrent": "Torrent",
"Torrents": "Torrenty",
"Type": "Typ",
"UI": "UI",
+11 -10
View File
@@ -118,7 +118,7 @@
"ElapsedTime": "Vergangene Zeit",
"Enable": "Aktivieren",
"EnableAutomaticSearch": "Automatische Suche einschalten",
"EnableAutomaticSearchHelpText": "Wird verwendet, wenn die automatische Suche über die Benutzeroberfläche oder durch {appName} durchgeführt wird.",
"EnableAutomaticSearchHelpText": "Wird verwendet, wenn die automatische Suche über die Benutzeroberfläche oder durch {appName} durchgeführt wird",
"EnableIndexer": "Indexer aktivieren",
"EnableInteractiveSearch": "Interaktive Suche einschalten",
"EnableInteractiveSearchHelpText": "Wird verwendet, wenn die interaktive Suche verwendet wird",
@@ -179,7 +179,7 @@
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Alle Indexer sind aufgrund von Fehlern länger als 6 Stunden nicht verfügbar",
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Indexer sind aufgrund von Fehlern länger als 6 Stunden nicht verfügbar: {indexerNames}",
"IndexerName": "Indexer-Name",
"IndexerNoDefinitionCheckHealthCheckMessage": "Indexer haben keine Definition und werden nicht funktionieren: {indexerNames}. Bitte entferne und (oder) füge diese neu zu {appName} hinzu",
"IndexerNoDefinitionCheckHealthCheckMessage": "Indexer haben keine Definition und werden nicht funktionieren: {indexerNames}. Bitte entferne und (oder) füge diese neu zu {appName} hinzu.",
"IndexerObsoleteCheckMessage": "Indexer sind nicht mehr verfügbar oder wurden aktualiiert: {0}. Bitte enfernen und (oder) neu zu {appName} hinzufügen",
"IndexerPriority": "Indexer-Priorität",
"IndexerPriorityHelpText": "Indexer Priorität von 1 (höchste) bis 50 (niedrigste). Standard: 25.",
@@ -496,7 +496,7 @@
"RecentChanges": "Kürzliche Änderungen",
"WhatsNew": "Was ist neu?",
"minutes": "Minuten",
"DeleteAppProfileMessageText": "Qualitätsprofil '{0}' wirklich löschen?",
"DeleteAppProfileMessageText": "Qualitätsprofil '{name}' wirklich löschen?",
"AddConnection": "Verbindung hinzufügen",
"NotificationStatusAllClientHealthCheckMessage": "Alle Benachrichtigungen sind aufgrund von Fehlern nicht verfügbar",
"NotificationStatusSingleClientHealthCheckMessage": "Benachrichtigungen nicht verfügbar wegen Fehlern: {notificationNames}",
@@ -563,7 +563,7 @@
"IndexerBeyondHDSettingsSearchTypes": "Suchtyp",
"DownloadClientFloodSettingsUrlBaseHelpText": "Fügt der Flood-API ein Präfix hinzu, z. B. {url}",
"DownloadClientFreeboxSettingsApiUrl": "API-URL",
"DownloadClientFreeboxSettingsApiUrlHelpText": "Definiere die Freebox-API-Basis-URL mit der API-Version, z. B. '{url}', standardmäßig '{defaultApiUrl}'.",
"DownloadClientFreeboxSettingsApiUrlHelpText": "Definiere die Freebox-API-Basis-URL mit der API-Version, z. B. '{url}', standardmäßig '{defaultApiUrl}'",
"DownloadClientRTorrentSettingsUrlPathHelpText": "Pfad zum XMLRPC-Endpunkt, siehe {url}. Dies ist normalerweise RPC2 oder [Pfad zu ruTorrent]{url2}, wenn ruTorrent verwendet wird.",
"DownloadClientSettingsAddPaused": "Pausiert hinzufügen",
"SelectDownloadClientModalTitle": "{modalTitle} Wähle Download-Client",
@@ -596,7 +596,7 @@
"TorrentBlackholeTorrentFolder": "Torrent-Ordner",
"UseSsl": "SSL verwenden",
"UsenetBlackholeNzbFolder": "NZB-Ordner",
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Für Magnet-Links zu verwendende Erweiterung, standardmäßig „.magnet“.",
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Für Magnet-Links zu verwendende Erweiterung, standardmäßig „.magnet“",
"XmlRpcPath": "XML-RPC-Pfad",
"ProxyValidationBadRequest": "Proxy konnte nicht getestet werden. StatusCode: {statusCode}",
"SecretToken": "Geheimer Token",
@@ -612,15 +612,15 @@
"BuiltIn": "Eingebaut",
"PublishedDate": "Veröffentlichungsdatum",
"Redirected": "Umleiten",
"AllSearchResultsHiddenByFilter": "Alle Ergebnisse werden durch den angewendeten Filter ausgeblendet",
"AllSearchResultsHiddenByFilter": "Alle Ergebnisse werden durch den angewendeten Filter ausgeblendet.",
"DockerUpdater": "Aktualisieren Sie den Docker-Container, um das Update zu erhalten",
"Download": "Herunterladen",
"ErrorRestoringBackup": "Fehler beim Wiederherstellen der Sicherung",
"ExternalUpdater": "{appName} ist so konfiguriert, dass es einen externen Aktualisierungsmechanismus verwendet",
"NoEventsFound": "Keine Ereignisse gefunden",
"RestartReloadNote": "Hinweis: {appName} startet während des Wiederherstellungsvorgangs automatisch neu und lädt die Benutzeroberfläche neu.",
"TheLogLevelDefault": "Die Protokollebene ist standardmäßig auf „Info“ eingestellt und kann unter „Allgemeine Einstellungen“ (/settings/general) geändert werden.",
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden.",
"TheLogLevelDefault": "Die Protokollebene ist standardmäßig auf „Debug“ eingestellt und kann unter „Allgemeine Einstellungen“ (/settings/general) geändert werden",
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden,",
"UpdaterLogFiles": "Updater-Protokolldateien",
"WouldYouLikeToRestoreBackup": "Willst du das Backup '{name}' wiederherstellen?",
"AptUpdater": "Verwenden Sie apt, um das Update zu installieren",
@@ -658,7 +658,7 @@
"IndexerSettingsApiPath": "API-Pfad",
"IndexerSettingsApiPathHelpText": "Pfad zur API, normalerweise {url}",
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Fügt der {clientName}-rpc-URL ein Präfix hinzu, z. B. {url}, standardmäßig '{defaultUrl}'",
"IndexerSettingsSeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen muss, bevor er gestoppt wird. Leer verwendet das Standardverhältnis des Download-Clients. Das Verhältnis sollte mindestens 1,0 betragen und den Regeln des Indexers folgen.",
"IndexerSettingsSeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen muss, bevor er gestoppt wird. Leer verwendet das Standardverhältnis des Download-Clients. Das Verhältnis sollte mindestens 1,0 betragen und den Regeln des Indexers folgen",
"IndexerSettingsSeedTimeHelpText": "Die Zeit, die ein Torrent gesät werden sollte, bevor er gestoppt wird. Leer verwendet die Standardzeit des Download-Clients",
"InstallMajorVersionUpdate": "Update installieren",
"InstallMajorVersionUpdateMessage": "Dieses Update wird eine neue Hauptversion installieren und ist möglicherweise nicht mit deinem System kompatibel. Bist du sicher, dass du dieses Update installieren möchtest?",
@@ -806,5 +806,6 @@
"IndexerSettingsBaseUrlHelpText": "Wähle die Basis-Url aus, die {appName} für Anfragen an die Seite verwenden soll",
"RepeatSearch": "Suche wiederholen",
"AverageResponseTimesMs": "Durchschnittliche Indexer-Antwortzeiten (ms)",
"BasicSearch": "Einfache Suche"
"BasicSearch": "Einfache Suche",
"DownloadClientUTorrentProviderMessage": "uTorrent ist dafür bekannt, dass es Kryptominer, Malware und Werbung enthält. Wir empfehlen dringend einen anderen Client zu wählen."
}
+1 -1
View File
@@ -485,7 +485,7 @@
"Theme": "Θέμα",
"Track": "Ιχνος",
"Year": "Ετος",
"UpdateAvailableHealthCheckMessage": "Νέα ενημέρωση είναι διαθέσιμη",
"UpdateAvailableHealthCheckMessage": "Νέα ενημέρωση είναι διαθέσιμη: {version}",
"Artist": "Καλλιτέχνης",
"Author": "Συγγραφέας",
"Book": "Βιβλίο",
+1 -1
View File
@@ -724,7 +724,7 @@
"TestAllApps": "Test All Apps",
"TestAllClients": "Test All Clients",
"TestAllIndexers": "Test All Indexers",
"TheLogLevelDefault": "The log level defaults to 'Info' and can be changed in [General Settings](/settings/general)",
"TheLogLevelDefault": "The log level defaults to 'Debug' and can be changed in [General Settings](/settings/general)",
"Theme": "Theme",
"ThemeHelpText": "Change Application UI Theme, 'Auto' Theme will use your OS Theme to set Light or Dark mode. Inspired by {inspiredBy}.",
"Time": "Time",
+6 -5
View File
@@ -207,7 +207,7 @@
"StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta",
"StartupDirectory": "Käynnistyskansio",
"TableOptions": "Taulukkonäkymän asetukset",
"TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys",
"TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys.",
"TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille hakupalveluille.",
"UnableToAddANewAppProfilePleaseTryAgain": "Virhe lisättäessä sovellusprofiilia. Yritä uudelleen.",
"UnableToAddANewNotificationPleaseTryAgain": "Ilmoituspalvelun lisääminen epäonnistui. Yritä uudelleen.",
@@ -668,7 +668,7 @@
"DownloadClientFreeboxSettingsPortHelpText": "Freebox-liittymän portti. Oletus on {port}.",
"DownloadClientPneumaticSettingsNzbFolder": "NZB-kansio",
"DownloadClientQbittorrentSettingsSequentialOrder": "Peräkkäinen järjestys",
"CustomFilter": "Oma suodatin",
"CustomFilter": "Mukautettu suodatin",
"DownloadClientFreeboxSettingsAppIdHelpText": "Freebox-rajapinnan käyttöoikeutta määritettäessä käytettävä App ID -sovellustunniste.",
"DownloadClientFreeboxSettingsAppToken": "Sovellustietue",
"DownloadClientNzbgetSettingsAddPausedHelpText": "Tämä vaatii vähintään NzbGetin version 16.0.",
@@ -710,7 +710,7 @@
"Logout": "Kirjaudu ulos",
"NoEventsFound": "Tapahtumia ei löytynyt",
"RestartReloadNote": "Huomioi: {appName} käynnistyy palautusprosessin aikana automaattisesti uudelleen.",
"TheLogLevelDefault": "Lokikirjauksen oletusarvoinen laajuus on \"Informatiivinen\". Laajuutta voidaan muuttaa [Yleisistä asetuksista](/settings/general).",
"TheLogLevelDefault": "Lokikirjauksen oletusarvoinen laajuus on \"Vianselvitys\". Laajuutta voidaan muuttaa [Yleisistä asetuksista](/settings/general).",
"UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan,",
"UpdaterLogFiles": "Päivittäjän lokitiedostot",
"WouldYouLikeToRestoreBackup": "Haluatko palauttaa varmuuskopion \"{name}\"?",
@@ -805,6 +805,7 @@
"IndexerPassThePopcornSettingsGoldenPopcornOnly": "Vain \"Golden Popcorn\"",
"IndexerPassThePopcornSettingsGoldenPopcornOnlyHelpText": "Etsi vain ns. kultaisella pocornilla merkittyjä julkaisuja.",
"IndexerSettingsFreeleechOnly": "Vain \"Freeleech\"",
"IndexerSettingsCookieHelpText": "Jos sivusto vaatii kirjautumisevästeen, se on noudettava selaimen kautta.",
"IndexerAvistazSettingsPasswordHelpText": "Sivuston salasana"
"IndexerSettingsCookieHelpText": "Jos sivusto vaatii kirjautumisevästeen, on se noudettava selaimen avulla.",
"IndexerAvistazSettingsPasswordHelpText": "Sivuston salasana",
"DownloadClientUTorrentProviderMessage": "Koska uTorrent on tullut tunnetuksi kryptolouhinnasta sekä haitta- ja mainossisällöstä, suosittelemme valitsemaan jonkin muun työkalun."
}
+1 -1
View File
@@ -785,7 +785,7 @@
"Logout": "Se déconnecter",
"NoEventsFound": "Aucun événement trouvé",
"RestartReloadNote": "Remarque : {appName} redémarrera et rechargera automatiquement l'interface utilisateur pendant le processus de restauration.",
"TheLogLevelDefault": "Le niveau de journalisation est par défaut à « Information » et peut être modifié dans les [paramètres généraux](/settings/general)",
"TheLogLevelDefault": "Le niveau de journalisation est par défaut à «Debug» et peut être modifié dans les [paramètres généraux](/settings/general)",
"UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName},",
"UpdaterLogFiles": "Journaux du programme de mise à jour",
"WouldYouLikeToRestoreBackup": "Souhaitez-vous restaurer la sauvegarde « {name} » ?",
+1 -1
View File
@@ -481,7 +481,7 @@
"Genre": "Műfajok",
"Theme": "Téma",
"Track": "Dal",
"UpdateAvailableHealthCheckMessage": "Új frissítés elérhető",
"UpdateAvailableHealthCheckMessage": "Új frissítés elérhető: {version}",
"Year": "Év",
"Book": "Könyv",
"Season": "Évad",
+8 -2
View File
@@ -482,7 +482,7 @@
"More": "Altro",
"Season": "Stagione",
"Year": "Anno",
"UpdateAvailableHealthCheckMessage": "Nuovo aggiornamento disponibile",
"UpdateAvailableHealthCheckMessage": "Nuovo aggiornamento disponibile: {version}",
"Author": "Autore",
"ApplyChanges": "Applica Cambiamenti",
"ApiKeyValidationHealthCheckMessage": "Aggiorna la tua chiave API in modo che abbia una lunghezza di almeno {length} caratteri. Puoi farlo dalle impostazioni o dal file di configurazione",
@@ -661,5 +661,11 @@
"InstallLatest": "Installa il più recente",
"CurrentlyInstalled": "Attualmente Installato",
"PreviouslyInstalled": "Precedentemente Installato",
"Mixed": "Fissato"
"Mixed": "Fissato",
"ApplicationTagsHelpText": "Sincronizza gli indexer con questa applicazione se hanno uno o più tag corrispondenti. Se non sono elencati tag, nessun indexer verrà escluso dalla sincronizzazione a causa dei propri tag.",
"ApplicationTagsHelpTextWarning": "I tag devono essere usati con cautela, poiché possono avere effetti indesiderati. Un'app con un tag si sincronizzerà solo con gli indexer che hanno lo stesso tag.",
"AuthQueries": "Query di autenticazione",
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Se un torrent è bloccato tramite hash, potrebbe non essere correttamente rifiutato durante luso di RSS/Ricerca con alcuni indexer. Abilitando questa opzione, il torrent verrà rifiutato dopo essere stato acquisito, ma prima di essere inviato al client.",
"AppsMinimumSeedersHelpText": "Numero minimo di seeders richiesti dallapplicazione affinché lindexer possa acquisire il torrent; se vuoto, viene utilizzato il valore predefinito del profilo di sincronizzazione",
"IndexerSettingsAppsMinimumSeedersHelpText": "Numero minimo di seeders richiesti dallapplicazione affinché lindexer possa acquisire il torrent; se vuoto, viene utilizzato il valore predefinito del profilo di sincronizzazione"
}
@@ -161,5 +161,6 @@
"Discord": "Discord",
"AddCustomFilter": "Legg til eget filter",
"Clone": "Lukk",
"AddDownloadClientImplementation": "Ny Nedlastingsklient - {implementationName}"
"AddDownloadClientImplementation": "Ny Nedlastingsklient - {implementationName}",
"History": "Historikk"
}
+1 -1
View File
@@ -438,7 +438,7 @@
"DownloadClientPriorityHelpText": "Geef prioriteit aan meerdere downloaders. Round-Robin wordt gebruikt voor downloaders met dezelfde prioriteit.",
"Genre": "Genres",
"Year": "Jaar",
"UpdateAvailableHealthCheckMessage": "Nieuwe update is beschikbaar",
"UpdateAvailableHealthCheckMessage": "Nieuwe update is beschikbaar: {version}",
"Label": "Label",
"Publisher": "Uitgever",
"ApplyChanges": "Pas Wijzigingen Toe",
+1 -1
View File
@@ -357,7 +357,7 @@
"DeleteSelectedIndexersMessageText": "Czy na pewno chcesz usunąć indeksator „{0}”?",
"DownloadClientPriorityHelpText": "Nadaj priorytet wielu klientom pobierania. W przypadku klientów o tym samym priorytecie używane jest działanie okrężne.",
"Track": "Ślad",
"UpdateAvailableHealthCheckMessage": "Dostępna jest aktualizacja",
"UpdateAvailableHealthCheckMessage": "Dostępna jest aktualizacja: {version}",
"Genre": "Gatunki",
"ApplyChanges": "Zastosuj zmiany",
"ApiKeyValidationHealthCheckMessage": "Zaktualizuj swój klucz API aby był długi na co najmniej {length} znaków. Możesz to zrobić poprzez ustawienia lub plik konfiguracyjny",
+7 -2
View File
@@ -431,7 +431,7 @@
"Season": "Temporada",
"Theme": "Tema",
"Track": "Rastreio",
"UpdateAvailableHealthCheckMessage": "Nova atualização disponível",
"UpdateAvailableHealthCheckMessage": "Nova atualização disponível: {version}",
"Label": "Rótulo",
"ConnectionLostReconnect": "O {appName} tentará ligar-se automaticamente, ou você pode clicar em Recarregar abaixo.",
"ConnectionLostToBackend": "O {appName} perdeu a ligação com o back-end e precisará ser recarregado para restaurar a funcionalidade.",
@@ -503,5 +503,10 @@
"UpdateAppDirectlyLoadError": "Não foi possível atualizar o {appName} diretamente,",
"InstallLatest": "Instalar o mais recente",
"CurrentlyInstalled": "Atualmente instalado",
"Mixed": "Corrigido"
"Mixed": "Corrigido",
"FailedToFetchSettings": "Falha ao obter as definições",
"FailedToFetchUpdates": "Falha a obter atualizações",
"External": "Externo",
"Categories": "Categorias",
"days": "dias"
}
@@ -794,7 +794,7 @@
"LogFilesLocation": "Os arquivos de log estão localizados em: {location}",
"Logout": "Sair",
"NoEventsFound": "Nenhum evento encontrado",
"TheLogLevelDefault": "O nível de registro é padronizado como 'Info' e pode ser alterado em [Configurações Gerais](/settings/general)",
"TheLogLevelDefault": "O nível de log padrão é ' Debug ' e pode ser alterado em [ Configurações gerais](/ configurações/geral)",
"UpdateAppDirectlyLoadError": "Incapaz de atualizar o {appName} diretamente,",
"UpdaterLogFiles": "Arquivos de log do atualizador",
"WouldYouLikeToRestoreBackup": "Gostaria de restaurar o backup '{name}'?",
+2 -2
View File
@@ -396,7 +396,7 @@
"AddRemoveOnly": "Sadece Ekle ve Kaldır",
"AddSyncProfile": "Eşitleme Profili Ekle",
"AddDownloadClientToProwlarr": "İndirme istemcisi eklemek, görsel arayüz üzerinde manuel arama yaparak indirilecek içeriği {appName} uygulamasına direkt olarak eklemenize olanak sağlar.",
"AddApplication": "Uygulama Ekle",
"AddApplication": "Add Application",
"AddCategory": "Kategori Ekle",
"AddNewIndexer": "Yeni İndekleyici Ekle",
"ActiveApps": "Aktif Uygulamalar",
@@ -544,7 +544,7 @@
"LogFilesLocation": "Log kayıtlarının bulunduğu konum: {location}",
"NoEventsFound": "Etkinlik bulunamadı",
"RestartReloadNote": "Not: {appName} geri yükleme işlemi sırasında otomatik olarak yeniden başlatılacak ve kullanıcı arayüzünü yeniden yükleyecektir.",
"TheLogLevelDefault": "Log seviyesi varsayılan olarak 'Bilgi' şeklindedir ve [Genel Ayarlar](/ayarlar/genel) bölümünden değiştirilebilir",
"TheLogLevelDefault": "Günlük düzeyi varsayılan olarak 'Hata Ayıklama'dır ve [Genel Ayarlar](/ayarlar/genel) bölümünden değiştirilebilir",
"UpdateAppDirectlyLoadError": "{appName} doğrudan güncellenemiyor,",
"DockerUpdater": "Güncellemeyi almak için docker konteynerini güncelleyin",
"FailedToFetchUpdates": "Güncellemeler alınamadı",
+119 -2
View File
@@ -353,7 +353,7 @@
"More": "Більше",
"Track": "Трасувати",
"Year": "Рік",
"UpdateAvailableHealthCheckMessage": "Доступне нове оновлення",
"UpdateAvailableHealthCheckMessage": "Доступне нове оновлення: {version}",
"Genre": "Жанри",
"ConnectionLostReconnect": "{appName} спробує підключитися автоматично, або ви можете натиснути «Перезавантажити» нижче.",
"ConnectionLostToBackend": "{appName} втратив з’єднання з серверною частиною, і його потрібно перезавантажити, щоб відновити роботу.",
@@ -449,5 +449,122 @@
"Author": "Автор",
"OnHealthRestoredHelpText": "При відновленні стану",
"IndexerHDBitsSettingsOriginsHelpText": "Якщо не вказано, використовуються всі параметри.",
"days": "дні(в)"
"days": "дні(в)",
"XmlRpcPath": "Шлях XML RPC",
"Directory": "Тека",
"DownloadClientFreeboxSettingsAppId": "ID додатку",
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Перше і останнє спочатку",
"FailedToFetchUpdates": "Не вдалося завантажити оновлення",
"OverrideGrabModalTitle": "Перевизначити та захопити - {title}",
"UpdaterLogFiles": "Файли журналу оновлення",
"UseSsl": "Використовувати SSL",
"WouldYouLikeToRestoreBackup": "Бажаєте відновити резервну копію '{name}'?",
"DownloadClientSettingsInitialState": "Початковий стан",
"Install": "Встановити",
"InstallMajorVersionUpdateMessage": "Це оновлення встановить нову основну версію і може бути несумісним з вашою системою. Ви впевнені, що хочете встановити це оновлення?",
"Logout": "Завершити сеанс",
"NoDownloadClientsFound": "Клієнти завантаження не знайдено",
"PackageVersionInfo": "{packageVersion} створено {packageAuthor}",
"SecretToken": "Таємний токен",
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Додає властивості мультимедіа у вигляді тегів. Підказки є прикладами.",
"DownloadClientRTorrentSettingsUrlPathHelpText": "Шлях до кінцевої точки XMLRPC див. {url}. Зазвичай це RPC2 або [шлях до ruTorrent]{url2}, коли використовується ruTorrent.",
"DownloadClientSettingsAddPaused": "Додати призупинені",
"FailedToFetchSettings": "Не вдалося отримати налаштування",
"IndexerNewznabSettingsAdditionalParametersHelpText": "Додаткові параметри Newznab",
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Ця тека повинна бути доступна з XBMC",
"DownloadClientPneumaticSettingsStrmFolder": "Тека STRM",
"DownloadClientPneumaticSettingsStrmFolderHelpText": "Файли .strm у цій теці будуть імпортовані дроном",
"InfoUrl": "URL-адреса інформації",
"DownloadClientUTorrentProviderMessage": "uTorrent має історію включення криптомайнерів, шкідливого програмного забезпечення та реклами. Ми наполегливо рекомендуємо вибрати інший клієнт.",
"EditSelectedDownloadClients": "Редагувати вибрані клієнти завантаження",
"IndexerHDBitsSettingsMediumsHelpText": "Якщо не вказано, використовуються всі параметри.",
"IndexerSettingsAdditionalParameters": "Додаткові параметри",
"IndexerSettingsCookie": "Cookie",
"InstallMajorVersionUpdateMessageLink": "Будь ласка, перевірте [{domain}]({url}) для отримання додаткової інформації.",
"InvalidUILanguage": "У вашому інтерфейсі встановлена недопустима мова. Виправте її та збережіть налаштування",
"LogFilesLocation": "Файли журналу знаходяться в: {location}",
"Menu": "Меню",
"OnHealthRestored": "При відновленні стану",
"PasswordConfirmation": "Підтвердження пароля",
"PreviouslyInstalled": "Раніше встановлений",
"LogSizeLimit": "Обмеження розміру журналу",
"LogSizeLimitHelpText": "Максимальний розмір файлу журналу в МБ перед архівацією. За замовчуванням - 1 МБ.",
"SelectDownloadClientModalTitle": "{modalTitle} - Вибрати клієнт завантаження",
"IndexerSettingsApiPath": "Шлях API",
"IndexerSettingsApiPathHelpText": "Шлях до API, зазвичай {url}",
"IndexerSettingsApiUser": "API Користувач",
"Implementation": "Реалізація",
"ManageDownloadClients": "Керування клієнтами завантаження",
"No": "Ні",
"IndexerSettingsSeedRatioHelpText": "Рейтинг, якого має досягти торрент перед зупинкою. Якщо порожньо — використовується значення за замовчуванням клієнта завантаження. Рейтинг має бути не менше 1,0 і відповідати правилам індексаторів",
"IndexerSettingsSeedTimeHelpText": "Час, протягом якого торрент має залишатися на роздачі перед зупинкою, якщо порожньо — використовується значення клієнта завантаження за замовчуванням",
"NotificationsTelegramSettingsIncludeAppName": "Включити {appName} у заголовок",
"NotificationsTelegramSettingsIncludeAppNameHelpText": "При необхідності додати до заголовка повідомлення префікс {appName}, щоб відрізняти сповіщення від різних додатків",
"DownloadClientQbittorrentSettingsContentLayout": "Макет контента",
"External": "Зовнішній",
"TorrentBlackholeTorrentFolder": "Тека торрента",
"Donate": "Задонатити",
"EditSelectedIndexers": "Редагувати вибраний індексатор",
"IndexerSettingsSeedTime": "Час сидіння",
"Label": "Мітка",
"LabelIsRequired": "Необхідна мітка",
"UsenetBlackholeNzbFolder": "Тека NZB",
"NoHistoryFound": "Історія не знайдена",
"NoIndexersFound": "Индексаторі не знайдено",
"DownloadClientNzbgetSettingsAddPausedHelpText": "Для роботи цього параметра потрібна версія NzbGet не нижче 16.0",
"DownloadClientPneumaticSettingsNzbFolder": "Тека NZB",
"IndexerHDBitsSettingsCodecsHelpText": "Якщо не вказано, використовуються всі параметри.",
"DefaultNameCopiedProfile": "{name} - Копіювати",
"Destination": "Місце призначення",
"DownloadClientFloodSettingsTagsHelpText": "Початкові теги завантаження. Щоб бути розпізнаним, завантаження повинно мати всі початкові теги. Це запобігає конфліктам з незв'язаними завантаженнями.",
"DownloadClientFreeboxSettingsAppIdHelpText": "ID програми, отримане під час створення доступу до Freebox API (наприклад, 'app_id')",
"DownloadClientFreeboxSettingsAppToken": "Токен додатку",
"DownloadClientFreeboxSettingsAppTokenHelpText": "Токен додатку, отриманий під час створення доступу до Freebox API (наприклад, 'app_token')",
"DownloadClientFreeboxSettingsHostHelpText": "Ім'я хоста або IP-адреса хоста Freebox, за замовчуванням — '{url}' (працює тільки якщо знаходиться в тій самій мережі)",
"DownloadClientFreeboxSettingsPortHelpText": "Порт, що використовується для доступу до інтерфейсу Freebox, за замовчуванням — '{port}'",
"DownloadClientQbittorrentSettingsInitialStateHelpText": "Початковий стан торрентів, доданих до qBittorrent. Зверніть увагу, що примусові торренти не дотримуються обмежень на роздачу",
"DownloadClientQbittorrentSettingsSequentialOrder": "Завантажувати послідовно",
"DownloadClientRTorrentSettingsAddStopped": "Додати зупинені",
"DownloadClientRTorrentSettingsAddStoppedHelpText": "Увімкнення додасть торренти та магнет-посилання в rTorrent у зупиненому стані. Це може призвести до пошкодження магнет-файлів.",
"DownloadClientRTorrentSettingsUrlPath": "URL-путь",
"NotificationsEmailSettingsUseEncryptionHelpText": "Виберіть режим шифрування: віддавати перевагу шифруванню, якщо воно налаштоване на сервері; завжди використовувати шифрування через SSL (тільки порт 465) або StartTLS (будь-який інший порт); ніколи не використовувати шифрування",
"DownloadClientFreeboxSettingsApiUrlHelpText": "Вкажіть базову URL-адресу Freebox API з версією API, наприклад, '{url}', за замовчуванням — '{defaultApiUrl}'",
"DownloadClientSettingsDestinationHelpText": "Ручне налаштування місця для завантаження, залиште порожнім для використання значення за замовчуванням",
"DownloadClientSettingsUseSslHelpText": "Використовувати захищене з'єднання при підключенні до {clientName}",
"HealthMessagesInfoBox": "Додаткову інформацію про причину появи цих повідомлень перевірки працездатності можна знайти, перейшовши за посиланням wiki (іконка книги) в кінці рядка або перевірити [журнали]({link}). Якщо у вас виникли труднощі з розумінням цих повідомлень, ви можете звернутися до нашої служби підтримки за посиланнями нижче.",
"IndexerDownloadClientHealthCheckMessage": "Індексатори з недопустимими клієнтами завантаження: {indexerNames}.",
"Episode": "Епізод",
"InstallMajorVersionUpdate": "Встановити оновлення",
"ManageClients": "Керування клієнтами",
"PrioritySettings": "Пріоритет: {0}",
"IndexerPassThePopcornSettingsApiUserHelpText": "Ці налаштування можна знайти в налаштуваннях безпеки вашого PassThePopcorn (Редагувати профіль > Безпека).",
"NotificationsEmailSettingsUseEncryption": "Використовувати шифрування",
"TorrentBlackholeSaveMagnetFiles": "Зберігати магнітні файли",
"TorrentBlackholeSaveMagnetFilesExtension": "Зберегти магнет-файли з розширенням",
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "Розширення для магнет-посилань, за замовчуванням '.magnet'",
"TorrentBlackholeSaveMagnetFilesHelpText": "Зберегти магнет-посилання, якщо файл .torrent недоступний (корисно тільки в разі, якщо клієнт завантаження підтримує магнет-посилання, збережені у файлі)",
"DownloadClientDelugeSettingsUrlBaseHelpText": "Додає префікс до URL-адреси json, {url}",
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Додає префікс до URL-адреси RPC {clientName}, наприклад {url}, за замовчуванням — '{defaultUrl}'",
"IndexerSettingsSeedRatio": "Коефіцієнт роздачі",
"ManualGrab": "Захват вручну",
"StopSelecting": "Скасувати вибір",
"ActiveApps": "Активні додатки",
"ActiveIndexers": "Активні індексери",
"AppSettingsSummary": "Застосунки та налаштування для конфігурації взаємодії {appName} з вашими PVR-програмами",
"AppProfileSelectHelpText": "Профілі застосунків використовуються для керування налаштуваннями RSS, автоматичного пошуку та інтерактивного пошуку під час синхронізації застосунку",
"ApplicationTagsHelpText": "Синхронізувати індексатори з цим застосунком, які мають один або кілька відповідних тегів. Якщо тут не вказано жодного тегу, жоден індексатор не буде виключено із синхронізації через свої теги.",
"ApplicationsLoadError": "Не вдалося завантажити список застосунків",
"AddToDownloadClient": "Додати реліз в клієнт завантаження",
"AdvancedSettingsHiddenClickToShow": "Розширені налаштування приховано, натисніть, щоб показати",
"AdvancedSettingsShownClickToHide": "Розширені налаштування відображено, натисніть, щоб приховати",
"AddSyncProfile": "Додати профіль синхронізації",
"AddDownloadClientToProwlarr": "Додавання клієнта завантаження дозволяє {appName} надсилати релізи безпосередньо з інтерфейсу під час ручного пошуку.",
"AddNewIndexer": "Додати новий індексер",
"AddRemoveOnly": "Лише додати та видалити",
"AddedToDownloadClient": "Реліз додано до клієнта",
"Apps": "Застосунки",
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Синхронізувати та відхиляти заблоковані за хешем торренти під час збору",
"ApplicationTagsHelpTextWarning": "Теги слід використовувати обережно, оскільки вони можуть мати непередбачувані наслідки. Застосунок із тегом буде синхронізуватися лише з індексаторами, що мають такий самий тег.",
"AddApplication": "Додати додаток",
"AddCategory": "Додати Категорію"
}
@@ -464,7 +464,7 @@
"UnsavedChanges": "未保存更改",
"UnselectAll": "取消全选",
"UpdateAutomaticallyHelpText": "自动下载并安装更新。您还可以在「“系统”->“更新”」中安装",
"UpdateAvailableHealthCheckMessage": "有新的更新可用",
"UpdateAvailableHealthCheckMessage": "有新的更新可用: {version}",
"UpdateStartupNotWritableHealthCheckMessage": "无法安装更新,因为用户“{userName}”对于启动文件夹“{startupFolder}”没有写入权限。",
"UpdateStartupTranslocationHealthCheckMessage": "无法安装更新,因为启动文件夹“{0}”在一个应用程序迁移文件夹。Cannot install update because startup folder '{startupFolder}' is in an App Translocation folder.",
"UpdateUiNotWritableHealthCheckMessage": "无法安装升级,因为用户“{userName}”不可写入界面文件夹“{uiFolder}”。",
@@ -754,5 +754,6 @@
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "只搜索免费发布",
"IndexerFileListSettingsFreeleechOnlyHelpText": "只搜索免费发布",
"IndexerFileListSettingsUsernameHelpText": "网站用户名",
"IndexerBeyondHDSettingsRefundOnlyHelpText": "Search refund only"
"IndexerBeyondHDSettingsRefundOnlyHelpText": "Search refund only",
"DownloadClientUTorrentProviderMessage": "由于uTorrent以加密软件、恶意软件和广告而闻名,我们建议切换到更好的客户端,例如qBittorrent、Deluge或ruTorrent。"
}
@@ -3,5 +3,7 @@
"Add": "添加",
"Analytics": "分析",
"Username": "用户名",
"AcceptConfirmationModal": "中文"
"AcceptConfirmationModal": "中文",
"Backup": "备份",
"BackupNow": "立即备份"
}
@@ -106,7 +106,8 @@ namespace NzbDrone.Core.Messaging.Events
_taskFactory.StartNew(() =>
{
handlerLocal.HandleAsync(@event);
}, TaskCreationOptions.PreferFairness)
},
TaskCreationOptions.PreferFairness)
.LogExceptions();
}
@@ -119,7 +120,8 @@ namespace NzbDrone.Core.Messaging.Events
_logger.Trace("{0} ~> {1}", eventName, handlerLocal.GetType().Name);
handlerLocal.HandleAsync(@event);
_logger.Trace("{0} <~ {1}", eventName, handlerLocal.GetType().Name);
}, TaskCreationOptions.PreferFairness)
},
TaskCreationOptions.PreferFairness)
.LogExceptions();
}
}
@@ -91,7 +91,7 @@ namespace NzbDrone.Core.Notifications.Apprise
{
if (httpException.Response.StatusCode == HttpStatusCode.Unauthorized)
{
_logger.Error(ex, $"HTTP Auth credentials are invalid: {0}", ex.Message);
_logger.Error(ex, "HTTP Auth credentials are invalid: {0}", ex.Message);
return new ValidationFailure("AuthUsername", $"HTTP Auth credentials are invalid: {ex.Message}");
}
@@ -99,7 +99,7 @@ namespace NzbDrone.Core.Notifications.Apprise
{
var error = Json.Deserialize<AppriseError>(httpException.Response.Content);
_logger.Error(ex, $"Unable to send test message. Response from API: {0}", error.Error);
_logger.Error(ex, "Unable to send test message. Response from API: {0}", error.Error);
return new ValidationFailure(string.Empty, $"Unable to send test message. Response from API: {error.Error}");
}
@@ -44,7 +44,7 @@ namespace NzbDrone.Core.Notifications.Mailgun
const string body = "This is a test message from Prowlarr, though Mailgun.";
_proxy.SendNotification(title, body, Settings);
_logger.Info("Successsfully sent email though Mailgun.");
_logger.Info("Successfully sent email though Mailgun.");
}
catch (Exception ex)
{
@@ -34,7 +34,7 @@ namespace NzbDrone.Core.Notifications.Mailgun
{
if (ex.Response.StatusCode == HttpStatusCode.Unauthorized)
{
_logger.Error("Unathorized - ApiKey is invalid");
_logger.Error("Unauthorized - ApiKey is invalid");
throw new MailgunException("Unauthorized - ApiKey is invalid");
}

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