mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2026-04-14 21:14:35 -04:00
Compare commits
117 Commits
v2.0.0.509
...
v2.3.6.535
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c687bdb1fb | ||
|
|
b2d49164bc | ||
|
|
28bd80d3aa | ||
|
|
0ffcfccf1d | ||
|
|
3c4efa0226 | ||
|
|
50d31d0c5e | ||
|
|
f48c9f9f88 | ||
|
|
1ba2f26649 | ||
|
|
c880b6c09c | ||
|
|
6fca0d0b6c | ||
|
|
9907342055 | ||
|
|
71d1a59008 | ||
|
|
33fa39dc84 | ||
|
|
d133c82537 | ||
|
|
6b446e1404 | ||
|
|
b0e879da5c | ||
|
|
5edde8d9bd | ||
|
|
ef5d670c39 | ||
|
|
f568906876 | ||
|
|
331e92ac62 | ||
|
|
ec46b25be2 | ||
|
|
8b3837cb6e | ||
|
|
ade5aee4a9 | ||
|
|
c486013113 | ||
|
|
c512cafb4a | ||
|
|
454641e8b5 | ||
|
|
7cac3fc174 | ||
|
|
43aca69840 | ||
|
|
e8d4415a5c | ||
|
|
5858c2dda6 | ||
|
|
ce315afb2a | ||
|
|
407acb6844 | ||
|
|
c3a7fbdd86 | ||
|
|
472c6f4273 | ||
|
|
baa4baf3ca | ||
|
|
852d62dcf0 | ||
|
|
13493ddbce | ||
|
|
a4a8e890c1 | ||
|
|
688434ced9 | ||
|
|
2ed910459f | ||
|
|
878818e950 | ||
|
|
0884ac92ff | ||
|
|
9508329b99 | ||
|
|
15a03007d9 | ||
|
|
b188746f1a | ||
|
|
ed3b25b3d6 | ||
|
|
c006079ce6 | ||
|
|
9437ff9498 | ||
|
|
e4fb36e08f | ||
|
|
ff22fdf7d3 | ||
|
|
b3d46465ae | ||
|
|
eb57d20545 | ||
|
|
775b716c0f | ||
|
|
f7f3648dac | ||
|
|
c669048767 | ||
|
|
c282e4bef8 | ||
|
|
574721bfb5 | ||
|
|
3c7575b58e | ||
|
|
93d8f81750 | ||
|
|
364c7c9c7e | ||
|
|
54af7fd3d0 | ||
|
|
e6bc7fa062 | ||
|
|
98608e75a6 | ||
|
|
160320f3a2 | ||
|
|
c9baaf634e | ||
|
|
8bf2f68abe | ||
|
|
9434091912 | ||
|
|
2f7d821d45 | ||
|
|
471c9910a0 | ||
|
|
98ff2f5cb6 | ||
|
|
4d9982872a | ||
|
|
ae9326480e | ||
|
|
624cbd548f | ||
|
|
f5f98e4f53 | ||
|
|
8585dd447e | ||
|
|
dfffb3aa4e | ||
|
|
7eb2d956cf | ||
|
|
8da493dbaf | ||
|
|
f17cf6144f | ||
|
|
1b3adc4529 | ||
|
|
389f049a8b | ||
|
|
99b0fcd750 | ||
|
|
516b09ca91 | ||
|
|
770fd64013 | ||
|
|
f67c672ec7 | ||
|
|
80425f5ea4 | ||
|
|
758cae3f40 | ||
|
|
fbf4ff6777 | ||
|
|
98ee9c1703 | ||
|
|
c537e94f0f | ||
|
|
9e5dd2a2e6 | ||
|
|
f601ff98a2 | ||
|
|
540fafdebf | ||
|
|
532bffe772 | ||
|
|
bf80f7916c | ||
|
|
2f6a9dfffb | ||
|
|
94477e9cf9 | ||
|
|
52e21b3dfc | ||
|
|
cb4cc81ad0 | ||
|
|
7ada036480 | ||
|
|
f1c9ba40c4 | ||
|
|
8664fc095d | ||
|
|
23b9973ef7 | ||
|
|
d9f1d96e00 | ||
|
|
d9d045a548 | ||
|
|
c417c41133 | ||
|
|
d5853735ac | ||
|
|
dbc159f536 | ||
|
|
231cc91f97 | ||
|
|
1a075f201c | ||
|
|
de7f42cf30 | ||
|
|
fab74b58fa | ||
|
|
2b332a00d7 | ||
|
|
a0b0c1555c | ||
|
|
86b81948af | ||
|
|
54918e0c30 | ||
|
|
01dd793c0a |
13
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
13
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -4,11 +4,18 @@ labels: ['Type: Bug', 'Status: Needs Triage']
|
||||
body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Is there an existing issue for this?
|
||||
label: I attest that there is not an existing issue for this?
|
||||
description: Please search to see if an open or closed issue already exists for the bug you encountered. If a bug exists and is closed note that it may only be fixed in an unstable branch.
|
||||
options:
|
||||
- label: I have searched the existing open and closed issues
|
||||
required: true
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: I attest this is not related to a Cardigann YML Indexer.
|
||||
description: Please search to see if this is for a tracker [that is yml-based (Cardigann)](https://github.com/Prowlarr/indexers) these are synced to Prowlarr/Indexers from Jackett/Jackett.
|
||||
options:
|
||||
- label: I confirm this is not related to a Cardigann YML Indexer
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Current Behavior
|
||||
@@ -73,8 +80,8 @@ body:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Trace Logs have been provided as applicable. Reports may be closed if the required logs are not provided.
|
||||
label: I attest that Trace Logs have been provided as applicable. Reports will be closed if the required logs are not provided.
|
||||
description: Trace logs are generally required for all bug reports and contain `trace`. Info logs are invalid for bug reports and do not contain `debug` nor `trace`
|
||||
options:
|
||||
- label: I have read and followed the steps in the wiki link above and provided the required trace logs - the logs contain `trace` - that are relevant and show this issue.
|
||||
- label: I attest that I have read and followed the steps in the wiki link above and provided the required trace logs - the logs contain `trace` - that are relevant and show this issue.
|
||||
required: true
|
||||
|
||||
26
.github/workflows/close_invalid_issues.yml
vendored
Normal file
26
.github/workflows/close_invalid_issues.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Close issues without labels
|
||||
|
||||
on:
|
||||
issues:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
|
||||
jobs:
|
||||
close-issue:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
sparse-checkout: |
|
||||
.github
|
||||
- name: Close issue if no labels found
|
||||
if: join(github.event.issue.labels) == ''
|
||||
run: |
|
||||
gh issue comment ${{ github.event.issue.number }} --body ":wave: @${{ github.event.issue.user.login }}, this issue was closed automatically because it was created without following an issue template. Please update the issue following the correct template for this issue. Once updated please reply to this issue so we can review and re-open. In the future, use the [issue templates](https://github.com/${{ github.repository }}/issues/new/choose) instead of creating your own."
|
||||
gh issue close ${{ github.event.issue.number }} --reason "not planned"
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
8
SECURITY.md
Normal file
8
SECURITY.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please report (suspected) security vulnerabilities on Discord (preferred) to
|
||||
any of the Servarr Dev role holders (red names) or via email: development@servarr.com. You will receive a response from
|
||||
us within 72 hours. If the issue is confirmed, we will release a patch as soon
|
||||
as possible depending on complexity/severity.
|
||||
@@ -9,7 +9,7 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '2.0.0'
|
||||
majorVersion: '2.3.6'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
prowlarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
|
||||
@@ -17,10 +17,10 @@ variables:
|
||||
sentryUrl: 'https://sentry.servarr.com'
|
||||
dotnetVersion: '8.0.405'
|
||||
nodeVersion: '20.X'
|
||||
innoVersion: '6.2.2'
|
||||
windowsImage: 'windows-2022'
|
||||
linuxImage: 'ubuntu-22.04'
|
||||
macImage: 'macOS-13'
|
||||
innoVersion: '6.7.1'
|
||||
windowsImage: 'windows-2025'
|
||||
linuxImage: 'ubuntu-24.04'
|
||||
macImage: 'macOS-15'
|
||||
|
||||
trigger:
|
||||
branches:
|
||||
@@ -1158,7 +1158,7 @@ stages:
|
||||
extraProperties: |
|
||||
sonar.exclusions=**/obj/**,**/*.dll,**/NzbDrone.Core.Test/Files/**/*,./frontend/**,**/ExternalModules/**,./src/Libraries/**
|
||||
sonar.coverage.exclusions=**/Prowlarr.Api.V1/**/*
|
||||
sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml
|
||||
sonar.cs.cobertura.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.cobertura.xml
|
||||
sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml
|
||||
- bash: |
|
||||
./build.sh --backend -f net8.0 -r win-x64
|
||||
@@ -1170,10 +1170,11 @@ stages:
|
||||
- task: reportgenerator@5
|
||||
displayName: Generate Coverage Report
|
||||
inputs:
|
||||
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'
|
||||
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.cobertura.xml'
|
||||
targetdir: '$(Build.SourcesDirectory)/CoverageResults/combined'
|
||||
reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
|
||||
publishCodeCoverageResults: true
|
||||
sourcedirs: src
|
||||
|
||||
- stage: Report_Out
|
||||
dependsOn:
|
||||
|
||||
4
build.sh
4
build.sh
@@ -253,8 +253,10 @@ InstallInno()
|
||||
{
|
||||
ProgressStart "Installing portable Inno Setup"
|
||||
|
||||
INNOVERSION=${INNOVERSION:-6.7.1}
|
||||
|
||||
rm -rf _inno
|
||||
curl -s --output innosetup.exe "https://files.jrsoftware.org/is/6/innosetup-${INNOVERSION:-6.2.2}.exe"
|
||||
curl -s -L --output innosetup.exe "https://github.com/jrsoftware/issrc/releases/download/is-${INNOVERSION//./_}/innosetup-${INNOVERSION}.exe"
|
||||
mkdir _inno
|
||||
./innosetup.exe //portable=1 //silent //currentuser //dir=.\\_inno
|
||||
rm innosetup.exe
|
||||
|
||||
@@ -133,6 +133,12 @@ module.exports = (env) => {
|
||||
{
|
||||
source: 'frontend/src/Content/robots.txt',
|
||||
destination: path.join(distFolder, 'Content/robots.txt')
|
||||
},
|
||||
|
||||
// manifest.json and browserconfig.xml
|
||||
{
|
||||
source: 'frontend/src/Content/*.(json|xml)',
|
||||
destination: path.join(distFolder, 'Content')
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
.modal {
|
||||
position: relative;
|
||||
display: flex;
|
||||
max-width: 90%;
|
||||
max-height: 90%;
|
||||
border-radius: 6px;
|
||||
opacity: 1;
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/Content/Images/Icons/mstile-150x150.png"/>
|
||||
<TileColor>#00ccff</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"name": "Prowlarr",
|
||||
"icons": [
|
||||
{
|
||||
"src": "android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"start_url": "../../../../",
|
||||
"theme_color": "#3a3f51",
|
||||
"background_color": "#3a3f51",
|
||||
"display": "standalone"
|
||||
}
|
||||
11
frontend/src/Content/browserconfig.xml
Normal file
11
frontend/src/Content/browserconfig.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="__URL_BASE__/Content/Images/Icons/mstile-150x150.png" />
|
||||
<TileColor>
|
||||
#00ccff
|
||||
</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
19
frontend/src/Content/manifest.json
Normal file
19
frontend/src/Content/manifest.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "__INSTANCE_NAME__",
|
||||
"icons": [
|
||||
{
|
||||
"src": "android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"start_url": "__URL_BASE__/",
|
||||
"theme_color": "#3a3f51",
|
||||
"background_color": "#3a3f51",
|
||||
"display": "standalone"
|
||||
}
|
||||
56
frontend/src/Helpers/Hooks/useTheme.ts
Normal file
56
frontend/src/Helpers/Hooks/useTheme.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import AppState from 'App/State/AppState';
|
||||
import themes from 'Styles/Themes';
|
||||
|
||||
function createThemeSelector() {
|
||||
return createSelector(
|
||||
(state: AppState) => state.settings.ui.item.theme || window.Prowlarr.theme,
|
||||
(theme) => theme
|
||||
);
|
||||
}
|
||||
|
||||
const useTheme = () => {
|
||||
const selectedTheme = useSelector(createThemeSelector());
|
||||
const [resolvedTheme, setResolvedTheme] = useState(selectedTheme);
|
||||
|
||||
useEffect(() => {
|
||||
if (selectedTheme !== 'auto') {
|
||||
setResolvedTheme(selectedTheme);
|
||||
return;
|
||||
}
|
||||
|
||||
const applySystemTheme = () => {
|
||||
setResolvedTheme(
|
||||
window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||
? 'dark'
|
||||
: 'light'
|
||||
);
|
||||
};
|
||||
|
||||
applySystemTheme();
|
||||
|
||||
window
|
||||
.matchMedia('(prefers-color-scheme: dark)')
|
||||
.addEventListener('change', applySystemTheme);
|
||||
|
||||
return () => {
|
||||
window
|
||||
.matchMedia('(prefers-color-scheme: dark)')
|
||||
.removeEventListener('change', applySystemTheme);
|
||||
};
|
||||
}, [selectedTheme]);
|
||||
|
||||
return resolvedTheme;
|
||||
};
|
||||
|
||||
export default useTheme;
|
||||
|
||||
export const useThemeColor = (color: string) => {
|
||||
const theme = useTheme();
|
||||
const themeVariables = themes[theme];
|
||||
|
||||
// @ts-expect-error - themeVariables is a string indexable type
|
||||
return themeVariables[color];
|
||||
};
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
.scroller {
|
||||
flex: 1 1 auto;
|
||||
min-height: 400px;
|
||||
}
|
||||
|
||||
.filterRow {
|
||||
@@ -57,29 +58,68 @@
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.filtersToggle {
|
||||
display: none;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid var(--borderColor);
|
||||
border-radius: 4px;
|
||||
background: transparent;
|
||||
color: var(--textColor);
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.filtersToggle:hover {
|
||||
background-color: var(--hoverBackgroundColor);
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $breakpointSmall) {
|
||||
.filterInput {
|
||||
margin-bottom: 5px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.alert {
|
||||
.notice {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.filtersToggle {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.filterRow {
|
||||
display: block;
|
||||
margin-bottom: 10px;
|
||||
padding: 10px;
|
||||
border: 1px solid var(--borderColor);
|
||||
border-radius: 4px;
|
||||
background-color: var(--cardBackgroundColor);
|
||||
}
|
||||
|
||||
.filterRowCollapsed {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.filterContainer {
|
||||
margin-right: 0;
|
||||
margin-bottom: 5px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.filterContainer:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.scroller {
|
||||
margin-right: -30px;
|
||||
margin-bottom: -30px;
|
||||
margin-left: -30px;
|
||||
margin-right: -15px;
|
||||
margin-bottom: -15px;
|
||||
margin-left: -15px;
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.modalBody {
|
||||
padding: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ interface CssExports {
|
||||
'filterInput': string;
|
||||
'filterLabel': string;
|
||||
'filterRow': string;
|
||||
'filterRowCollapsed': string;
|
||||
'filtersToggle': string;
|
||||
'indexers': string;
|
||||
'modalBody': string;
|
||||
'modalFooter': string;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import classNames from 'classnames';
|
||||
import { some } from 'lodash';
|
||||
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
@@ -7,6 +8,7 @@ import Alert from 'Components/Alert';
|
||||
import EnhancedSelectInput from 'Components/Form/EnhancedSelectInput';
|
||||
import NewznabCategorySelectInputConnector from 'Components/Form/NewznabCategorySelectInputConnector';
|
||||
import TextInput from 'Components/Form/TextInput';
|
||||
import Icon from 'Components/Icon';
|
||||
import Button from 'Components/Link/Button';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import ModalBody from 'Components/Modal/ModalBody';
|
||||
@@ -16,7 +18,7 @@ import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import Scroller from 'Components/Scroller/Scroller';
|
||||
import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import { kinds, scrollDirections } from 'Helpers/Props';
|
||||
import { icons, kinds, scrollDirections } from 'Helpers/Props';
|
||||
import Indexer, { IndexerCategory } from 'Indexer/Indexer';
|
||||
import {
|
||||
fetchIndexerSchema,
|
||||
@@ -152,6 +154,7 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
|
||||
const [filterLanguages, setFilterLanguages] = useState<string[]>([]);
|
||||
const [filterPrivacyLevels, setFilterPrivacyLevels] = useState<string[]>([]);
|
||||
const [filterCategories, setFilterCategories] = useState<number[]>([]);
|
||||
const [isFiltersCollapsed, setIsFiltersCollapsed] = useState(true);
|
||||
|
||||
useEffect(
|
||||
() => {
|
||||
@@ -196,6 +199,10 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
|
||||
[setFilterCategories]
|
||||
);
|
||||
|
||||
const handleToggleFilters = useCallback(() => {
|
||||
setIsFiltersCollapsed(!isFiltersCollapsed);
|
||||
}, [isFiltersCollapsed]);
|
||||
|
||||
const onIndexerSelect = useCallback(
|
||||
({
|
||||
implementation,
|
||||
@@ -322,7 +329,17 @@ function AddIndexerModalContent(props: AddIndexerModalContentProps) {
|
||||
onChange={onFilterChange}
|
||||
/>
|
||||
|
||||
<div className={styles.filterRow}>
|
||||
<Button className={styles.filtersToggle} onPress={handleToggleFilters}>
|
||||
<Icon name={isFiltersCollapsed ? icons.EXPAND : icons.COLLAPSE} />
|
||||
{translate('Filters')}
|
||||
</Button>
|
||||
|
||||
<div
|
||||
className={classNames(
|
||||
styles.filterRow,
|
||||
isFiltersCollapsed && styles.filterRowCollapsed
|
||||
)}
|
||||
>
|
||||
<div className={styles.filterContainer}>
|
||||
<label className={styles.filterLabel}>
|
||||
{translate('Protocol')}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
sizes="16x16"
|
||||
href="/Content/Images/Icons/favicon-16x16.png"
|
||||
/>
|
||||
<link rel="manifest" href="/Content/Images/Icons/manifest.json" crossorigin="use-credentials" />
|
||||
<link rel="manifest" href="/Content/manifest.json" crossorigin="use-credentials" />
|
||||
<link
|
||||
rel="mask-icon"
|
||||
href="/Content/Images/Icons/safari-pinned-tab.svg"
|
||||
@@ -47,7 +47,7 @@
|
||||
/>
|
||||
<meta
|
||||
name="msapplication-config"
|
||||
content="/Content/Images/Icons/browserconfig.xml"
|
||||
content="/Content/browserconfig.xml"
|
||||
/>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/Content/Fonts/fonts.css">
|
||||
|
||||
@@ -11,8 +11,11 @@
|
||||
<!-- Android/Apple Phone -->
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<meta
|
||||
name="apple-mobile-web-app-status-bar-style"
|
||||
content="black-translucent"
|
||||
/>
|
||||
<meta name="format-detection" content="telephone=no" />
|
||||
|
||||
<meta name="description" content="Prowlarr" />
|
||||
|
||||
@@ -33,7 +36,11 @@
|
||||
sizes="16x16"
|
||||
href="/Content/Images/Icons/favicon-16x16.png"
|
||||
/>
|
||||
<link rel="manifest" href="/Content/Images/Icons/manifest.json" crossorigin="use-credentials" />
|
||||
<link
|
||||
rel="manifest"
|
||||
href="/Content/manifest.json"
|
||||
crossorigin="use-credentials"
|
||||
/>
|
||||
<link
|
||||
rel="mask-icon"
|
||||
href="/Content/Images/Icons/safari-pinned-tab.svg"
|
||||
@@ -45,10 +52,7 @@
|
||||
href="/favicon.ico"
|
||||
data-no-hash
|
||||
/>
|
||||
<meta
|
||||
name="msapplication-config"
|
||||
content="/Content/Images/Icons/browserconfig.xml"
|
||||
/>
|
||||
<meta name="msapplication-config" content="/Content/browserconfig.xml" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/Content/styles.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/Content/Fonts/fonts.css" />
|
||||
@@ -59,7 +63,7 @@
|
||||
body {
|
||||
background-color: var(--pageBackground);
|
||||
color: var(--textColor);
|
||||
font-family: "Roboto", "open sans", "Helvetica Neue", Helvetica, Arial,
|
||||
font-family: 'Roboto', 'open sans', 'Helvetica Neue', Helvetica, Arial,
|
||||
sans-serif;
|
||||
}
|
||||
|
||||
@@ -209,9 +213,7 @@
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="sign-in">
|
||||
SIGN IN TO CONTINUE
|
||||
</div>
|
||||
<div class="sign-in">SIGN IN TO CONTINUE</div>
|
||||
|
||||
<form
|
||||
role="form"
|
||||
@@ -230,8 +232,8 @@
|
||||
pattern=".{1,}"
|
||||
required
|
||||
title="User name is required"
|
||||
autoFocus="true"
|
||||
autoCapitalize="false"
|
||||
autofocus="true"
|
||||
autocapitalize="false"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -282,16 +284,16 @@
|
||||
</body>
|
||||
|
||||
<script type="text/javascript">
|
||||
var yearSpan = document.getElementById("year");
|
||||
yearSpan.innerHTML = "2010-" + new Date().getFullYear();
|
||||
var yearSpan = document.getElementById('year');
|
||||
yearSpan.innerHTML = '2010-' + new Date().getFullYear();
|
||||
|
||||
var copyDiv = document.getElementById("copy");
|
||||
copyDiv.classList.remove("hidden");
|
||||
var copyDiv = document.getElementById('copy');
|
||||
copyDiv.classList.remove('hidden');
|
||||
|
||||
if (window.location.search.indexOf("loginFailed=true") > -1) {
|
||||
var loginFailedDiv = document.getElementById("login-failed");
|
||||
if (window.location.search.indexOf('loginFailed=true') > -1) {
|
||||
var loginFailedDiv = document.getElementById('login-failed');
|
||||
|
||||
loginFailedDiv.classList.remove("hidden");
|
||||
loginFailedDiv.classList.remove('hidden');
|
||||
}
|
||||
|
||||
var light = {
|
||||
@@ -311,7 +313,7 @@
|
||||
primaryHoverBorderColor: '#3483e7',
|
||||
failedColor: '#f05050',
|
||||
forgotPasswordColor: '#909fa7',
|
||||
forgotPasswordAltColor: '#748690'
|
||||
forgotPasswordAltColor: '#748690',
|
||||
};
|
||||
|
||||
var dark = {
|
||||
@@ -331,21 +333,16 @@
|
||||
primaryHoverBorderColor: '#3483e7',
|
||||
failedColor: '#f05050',
|
||||
forgotPasswordColor: '#737d83',
|
||||
forgotPasswordAltColor: '#546067'
|
||||
forgotPasswordAltColor: '#546067',
|
||||
};
|
||||
|
||||
var theme = "_THEME_";
|
||||
var theme = '_THEME_';
|
||||
var defaultDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||
var finalTheme = theme === 'dark' || (theme === 'auto' && defaultDark) ?
|
||||
dark :
|
||||
light;
|
||||
var finalTheme =
|
||||
theme === 'dark' || (theme === 'auto' && defaultDark) ? dark : light;
|
||||
|
||||
Object.entries(finalTheme).forEach(([key, value]) => {
|
||||
document.documentElement.style.setProperty(
|
||||
`--${key}`,
|
||||
value
|
||||
);
|
||||
document.documentElement.style.setProperty(`--${key}`, value);
|
||||
});
|
||||
|
||||
</script>
|
||||
</html>
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
<Deterministic Condition="$(AssemblyVersion.EndsWith('*'))">False</Deterministic>
|
||||
|
||||
<PathMap>$(MSBuildProjectDirectory)=./$(MSBuildProjectName)/</PathMap>
|
||||
<PathMap>$(MSBuildThisFileDirectory)=./</PathMap>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Set the AssemblyConfiguration attribute for projects -->
|
||||
@@ -123,14 +123,11 @@
|
||||
|
||||
<!-- Standard testing packages -->
|
||||
<ItemGroup Condition="'$(TestProject)'=='true'">
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
||||
<PackageReference Include="NUnit" Version="3.14.0" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageReference Include="NunitXml.TestLogger" Version="3.0.131" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TestProject)'=='true' and '$(TargetFramework)'=='net8.0'">
|
||||
<PackageReference Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="5.1.0" />
|
||||
<PackageReference Include="NunitXml.TestLogger" Version="3.1.20" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(ProwlarrProject)'=='true' and '$(EnableAnalyzers)'=='false'">
|
||||
|
||||
@@ -5,8 +5,5 @@
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
||||
<add key="dotnet-bsd-crossbuild" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/dotnet-bsd-crossbuild/nuget/v3/index.json" />
|
||||
<add key="Mono.Posix.NETStandard" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/Mono.Posix.NETStandard/nuget/v3/index.json" />
|
||||
<add key="SQLite" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/SQLite/nuget/v3/index.json" />
|
||||
<add key="coverlet-nightly" value="https://pkgs.dev.azure.com/Servarr/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json" />
|
||||
<add key="FluentMigrator" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/FluentMigrator/nuget/v3/index.json" />
|
||||
</packageSources>
|
||||
</configuration>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.Http;
|
||||
@@ -9,6 +10,12 @@ namespace NzbDrone.Common.Test.Http
|
||||
[TestFixture]
|
||||
public class HttpRequestBuilderFixture : TestBase
|
||||
{
|
||||
[OneTimeSetUp]
|
||||
public void RegisterEncodingProvider()
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
}
|
||||
|
||||
[TestCase("http://host/{seg}/some", "http://host/dir/some")]
|
||||
[TestCase("http://host/some/{seg}", "http://host/some/dir")]
|
||||
public void should_add_single_segment_url_segments(string url, string result)
|
||||
@@ -36,5 +43,70 @@ namespace NzbDrone.Common.Test.Http
|
||||
|
||||
request.Url.FullUri.Should().Be("http://domain/v1/");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_encode_form_parameters_with_utf8_by_default()
|
||||
{
|
||||
var builder = new HttpRequestBuilder("http://domain/login")
|
||||
.Post()
|
||||
.AddFormParameter("username", "Привет");
|
||||
|
||||
var request = builder.Build();
|
||||
var body = Encoding.UTF8.GetString(request.ContentData);
|
||||
|
||||
// UTF-8 encoding: Привет = %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82
|
||||
body.Should().Contain("username=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_encode_form_parameters_with_windows_1251_for_cyrillic()
|
||||
{
|
||||
var windows1251 = Encoding.GetEncoding("windows-1251");
|
||||
|
||||
var builder = new HttpRequestBuilder("http://domain/login")
|
||||
.Post()
|
||||
.SetEncoding(windows1251)
|
||||
.AddFormParameter("username", "Привет");
|
||||
|
||||
var request = builder.Build();
|
||||
var body = windows1251.GetString(request.ContentData);
|
||||
|
||||
// Windows-1251 encoding: Привет = %CF%F0%E8%E2%E5%F2
|
||||
body.Should().Contain("username=%CF%F0%E8%E2%E5%F2");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_encode_form_parameters_with_iso_8859_1_for_extended_latin()
|
||||
{
|
||||
var iso88591 = Encoding.GetEncoding("iso-8859-1");
|
||||
|
||||
var builder = new HttpRequestBuilder("http://domain/login")
|
||||
.Post()
|
||||
.SetEncoding(iso88591)
|
||||
.AddFormParameter("username", "café");
|
||||
|
||||
var request = builder.Build();
|
||||
var body = iso88591.GetString(request.ContentData);
|
||||
|
||||
// ISO-8859-1 encoding: é = %E9
|
||||
body.Should().Contain("username=caf%E9");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_encode_form_parameters_ascii_same_regardless_of_encoding()
|
||||
{
|
||||
var windows1251 = Encoding.GetEncoding("windows-1251");
|
||||
|
||||
var builder = new HttpRequestBuilder("http://domain/login")
|
||||
.Post()
|
||||
.SetEncoding(windows1251)
|
||||
.AddFormParameter("username", "testuser")
|
||||
.AddFormParameter("password", "pass123");
|
||||
|
||||
var request = builder.Build();
|
||||
var body = windows1251.GetString(request.ContentData);
|
||||
|
||||
body.Should().Be("username=testuser&password=pass123");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ namespace NzbDrone.Common.Composition
|
||||
static AssemblyLoader()
|
||||
{
|
||||
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ContainerResolveEventHandler);
|
||||
RegisterSQLiteResolver();
|
||||
}
|
||||
|
||||
public static IList<Assembly> Load(IList<string> assemblyNames)
|
||||
@@ -23,6 +22,10 @@ namespace NzbDrone.Common.Composition
|
||||
toLoad.Add("Prowlarr.Common");
|
||||
toLoad.Add(OsInfo.IsWindows ? "Prowlarr.Windows" : "Prowlarr.Mono");
|
||||
|
||||
var toRegisterResolver = new List<string> { "System.Data.SQLite" };
|
||||
toRegisterResolver.AddRange(assemblyNames.Intersect(new[] { "Prowlarr.Core" }));
|
||||
RegisterNativeResolver(toRegisterResolver);
|
||||
|
||||
var startupPath = AppDomain.CurrentDomain.BaseDirectory;
|
||||
|
||||
return toLoad
|
||||
@@ -43,27 +46,46 @@ namespace NzbDrone.Common.Composition
|
||||
return AssemblyLoadContext.Default.LoadFromAssemblyPath(assemblyPath);
|
||||
}
|
||||
|
||||
public static void RegisterSQLiteResolver()
|
||||
public static void RegisterNativeResolver(IEnumerable<string> assemblyNames)
|
||||
{
|
||||
// This ensures we look for sqlite3 using libsqlite3.so.0 on Linux and not libsqlite3.so which
|
||||
// is less likely to exist.
|
||||
var sqliteAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(
|
||||
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "System.Data.SQLite.dll"));
|
||||
foreach (var name in assemblyNames)
|
||||
{
|
||||
// This ensures we look for sqlite3 using libsqlite3.so.0 on Linux and not libsqlite3.so which
|
||||
// is less likely to exist.
|
||||
var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(
|
||||
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{name}.dll"));
|
||||
|
||||
try
|
||||
{
|
||||
NativeLibrary.SetDllImportResolver(sqliteAssembly, LoadSqliteNativeLib);
|
||||
}
|
||||
catch (InvalidOperationException)
|
||||
{
|
||||
// This can only be set once per assembly
|
||||
// Catch required for NzbDrone.Host tests
|
||||
try
|
||||
{
|
||||
NativeLibrary.SetDllImportResolver(assembly, LoadNativeLib);
|
||||
}
|
||||
catch (InvalidOperationException)
|
||||
{
|
||||
// This can only be set once per assembly
|
||||
// Catch required for NzbDrone.Host tests
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IntPtr LoadSqliteNativeLib(string libraryName, Assembly assembly, DllImportSearchPath? dllImportSearchPath)
|
||||
private static IntPtr LoadNativeLib(string libraryName, Assembly assembly, DllImportSearchPath? dllImportSearchPath)
|
||||
{
|
||||
var mappedName = OsInfo.IsLinux && libraryName == "sqlite3" ? "libsqlite3.so.0" : libraryName;
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(libraryName);
|
||||
|
||||
var mappedName = libraryName;
|
||||
|
||||
if (libraryName is "sqlite3" or "e_sqlite3")
|
||||
{
|
||||
if (OsInfo.IsLinux)
|
||||
{
|
||||
if (NativeLibrary.TryLoad(libraryName, assembly, dllImportSearchPath, out var libHandle))
|
||||
{
|
||||
return libHandle;
|
||||
}
|
||||
|
||||
mappedName = "libsqlite3.so.0";
|
||||
}
|
||||
}
|
||||
|
||||
return NativeLibrary.Load(mappedName, assembly, dllImportSearchPath);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,7 +231,7 @@ namespace NzbDrone.Common.Http
|
||||
}
|
||||
else
|
||||
{
|
||||
var parameters = FormData.Select(v => string.Format("{0}={1}", v.Name, Uri.EscapeDataString(Encoding.GetString(v.ContentData))));
|
||||
var parameters = FormData.Select(v => string.Format("{0}={1}", v.Name, Encoding.GetString(v.ContentData).UrlEncode(Encoding)));
|
||||
var urlencoded = string.Join("&", parameters);
|
||||
var body = Encoding.GetBytes(urlencoded);
|
||||
|
||||
|
||||
@@ -6,13 +6,14 @@ using NzbDrone.Common.Extensions;
|
||||
|
||||
namespace NzbDrone.Common.Http
|
||||
{
|
||||
public class HttpUri : IEquatable<HttpUri>
|
||||
public partial class HttpUri : IEquatable<HttpUri>
|
||||
{
|
||||
private static readonly Regex RegexUri = new Regex(@"^(?:(?<scheme>[a-z]+):)?(?://(?<host>[-_A-Z0-9.]+|\[[[A-F0-9:]+\])(?::(?<port>[0-9]{1,5}))?)?(?<path>(?:(?:(?<=^)|/+)[^/?#\r\n]+)+/*|/+)?(?:\?(?<query>[^#\r\n]*))?(?:\#(?<fragment>.*))?$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
private readonly string _uri;
|
||||
public string FullUri => _uri;
|
||||
|
||||
[GeneratedRegex(@"^(?:(?<scheme>[a-z]+):)?(?://(?<host>[-_A-Z0-9.]+|\[[[A-F0-9:]+\])(?::(?<port>[0-9]{1,5}))?)?(?<path>(?:(?:(?<=^)|/+)[^/?#\r\n]+)+/*|/+)?(?:\?(?<query>[^#\r\n]*))?(?:\#(?<fragment>.*))?$", RegexOptions.IgnoreCase | RegexOptions.Compiled)]
|
||||
private static partial Regex UriRegex();
|
||||
|
||||
public HttpUri(string uri)
|
||||
{
|
||||
_uri = uri ?? string.Empty;
|
||||
@@ -70,9 +71,9 @@ namespace NzbDrone.Common.Http
|
||||
|
||||
private void Parse()
|
||||
{
|
||||
var parseSuccess = Uri.TryCreate(_uri, UriKind.RelativeOrAbsolute, out var uri);
|
||||
var parseSuccess = Uri.TryCreate(_uri, UriKind.RelativeOrAbsolute, out _);
|
||||
|
||||
var match = RegexUri.Match(_uri);
|
||||
var match = UriRegex().Match(_uri);
|
||||
|
||||
var scheme = match.Groups["scheme"];
|
||||
var host = match.Groups["host"];
|
||||
|
||||
@@ -202,6 +202,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
c.ForLogger("Microsoft.*").WriteToNil(LogLevel.Warn);
|
||||
c.ForLogger("Microsoft.Hosting.Lifetime*").WriteToNil(LogLevel.Info);
|
||||
c.ForLogger("Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware").WriteToNil(LogLevel.Fatal);
|
||||
c.ForLogger("Prowlarr.Http.Authentication.ApiKeyAuthenticationHandler").WriteToNil(LogLevel.Info);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<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="Newtonsoft.Json" Version="13.0.4" />
|
||||
<PackageReference Include="NLog" Version="5.4.0" />
|
||||
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.3" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" />
|
||||
@@ -16,9 +16,11 @@
|
||||
<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="8.0.5" />
|
||||
<PackageReference Include="SourceGear.sqlite3" Version="3.50.4.2" />
|
||||
<PackageReference Include="System.Data.SQLite" Version="2.0.2" />
|
||||
<PackageReference Include="System.Private.Uri" Version="4.3.2" />
|
||||
<PackageReference Include="System.Text.Json" Version="8.0.6" />
|
||||
<PackageReference Include="System.ValueTuple" Version="4.6.1" />
|
||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.1" />
|
||||
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
|
||||
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
|
||||
|
||||
@@ -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",
|
||||
@@ -4869,4 +4969,4 @@
|
||||
"prev_page_url": null,
|
||||
"to": 100,
|
||||
"total": 31393
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
{
|
||||
"current_page": 1,
|
||||
"data": [
|
||||
{
|
||||
@@ -50,7 +50,8 @@
|
||||
"images/torrent/1/4/0/mxgwdlpk4pt2.jpg"
|
||||
],
|
||||
"description": "<p>[SSIS-419] My first experience is Yua Mikami. From the day I lost my virginity, I was devoted to sex.</p>\n<p>Actress: Yua Mikami</p>\n<p>Studio: S1 NO.1 STYLE</p>\n<p>Runtime: 2:41:00</p>\n<p>Movies Genres: Minimal Mosaic,Cherry Boy,Documentary,Featured Actress,Idol & Celebrity</p>",
|
||||
"created_at": "2022-06-11 11:04:50"
|
||||
"created_at": "2022-06-11 11:04:50",
|
||||
"created_at_iso": "2022-06-11T11:04:50+02:00"
|
||||
},
|
||||
{
|
||||
"id": 61953,
|
||||
@@ -106,7 +107,8 @@
|
||||
"images/torrent/0/4/0/gsuctius9zw2.jpg"
|
||||
],
|
||||
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00338/</p>\n<p>SSIS-338</p>\n<p>Ultimate Lover Swamp. Ideal Sex-Only Relationship That Is Not Disturbed By Work Or Family With Yua Mikami</p>",
|
||||
"created_at": "2022-05-23 23:41:25"
|
||||
"created_at": "2022-05-23 23:41:25",
|
||||
"created_at_iso": "2022-05-23T23:41:25+02:00"
|
||||
},
|
||||
{
|
||||
"id": 61947,
|
||||
@@ -161,7 +163,8 @@
|
||||
"images/torrent/0/0/e/g6tquwvlmfdx.jpg"
|
||||
],
|
||||
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00313/</p>\n<p>SSIS-313</p>\n<p>Yua Mikami's Ecstasy Lotion Special. Offering The Best-ever Slick Servicing To Work Cum Loads Out.</p>",
|
||||
"created_at": "2022-05-23 08:34:34"
|
||||
"created_at": "2022-05-23 08:34:34",
|
||||
"created_at_iso": "2022-05-23T08:34:34+02:00"
|
||||
},
|
||||
{
|
||||
"id": 61630,
|
||||
@@ -223,7 +226,8 @@
|
||||
"images/torrent/f/2/5/kdihq6gibacb.jpg"
|
||||
],
|
||||
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00287/</p>\n<p>SSIS-287</p>\n<p>Drool, The Effects Of A Few Sips, Her Face During Sex, And Peeing Released All At Once. Yua Mikami Flies Indecently.</p>",
|
||||
"created_at": "2022-05-21 10:25:32"
|
||||
"created_at": "2022-05-21 10:25:32",
|
||||
"created_at_iso": "2022-05-21T10:25:32+02:00"
|
||||
},
|
||||
{
|
||||
"id": 61514,
|
||||
@@ -275,7 +279,8 @@
|
||||
"images/torrent/e/2/a/ujrvmtgjakko.jpg"
|
||||
],
|
||||
"description": "<p>https://www.r18.com/videos/vod/movies/detail/-/id=ssis00241/</p>\n<p>SSIS-241</p>\n<p>Forbidden Teacher Love. Yua Mikami</p>",
|
||||
"created_at": "2022-05-20 09:17:10"
|
||||
"created_at": "2022-05-20 09:17:10",
|
||||
"created_at_iso": "2022-05-20T09:17:10+02:00"
|
||||
},
|
||||
{
|
||||
"id": 59929,
|
||||
@@ -325,7 +330,8 @@
|
||||
"images/torrent/c/4/a/hycbduxlw3ei.jpg"
|
||||
],
|
||||
"description": "<p><strong>[SSIS-392] Let's Do It At A Men's Massage Parlor. Yua Mikami</strong></p>\n<p><strong>+++ [FHD] SSIS-392 メンエスでしようよ 三上悠亜</strong></p>\n<p><strong>ID:</strong> SSIS-392<br><strong>Release Date:</strong> May 6, 2022<br><strong>Runtime:</strong> 1 hour 58 minutes 59 seconds [01:59:00]<br><strong>Studio:</strong> S1 NO.1 STYLE<br><strong>Label:</strong> S1 NO.1 STYLE<br><strong>Director:</strong> TAKE-D<br><strong>Series:</strong> A Super Gorgeous Men's Massage Parlor<br><strong>Actresses:</strong> Yua Mikami<br><strong>Categories:</strong> Featured Actress, Idol & Celebrity, Massage Parlor, Lotion, Minimal Mosaic, Hi-Def, 4K<br><br></p>\n<p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS392/ <br><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00392/ <br><strong>DMM:</strong> https://www.dmm.co.jp/digital/videoa/-/detail/=/cid=ssis00392/</p>\n<p>Uploaded by a Bot</p>",
|
||||
"created_at": "2022-05-06 03:48:23"
|
||||
"created_at": "2022-05-06 03:48:23",
|
||||
"created_at_iso": "2022-05-06T03:48:23+02:00"
|
||||
},
|
||||
{
|
||||
"id": 58235,
|
||||
@@ -374,7 +380,8 @@
|
||||
"images/torrent/3/6/1/6fuhfb5kcbpz.jpg"
|
||||
],
|
||||
"description": "<p><strong>[SSIS-365] \"What!? We're Gonna Fuck Here?\" Sticking Close To Yua Mikami For A Whole Month, Taking Advantage Any Time There's A Chance For A Quick Fuck! Unprecedented Hidden Camera AV Primetime Challenge.</strong></p>\n <p><strong>+++ [HD] SSIS-365 「えっ!ここでヤルの?」三上悠亜に一ヶ月密着して隙あらばいきなり即ズボッ! 前代未聞ドッキリAV大作戦</strong></p>\n <p><strong>ID:</strong> SSIS-365<br>\n <strong>Release Date:</strong> Apr 8, 2022<br>\n <strong>Runtime:</strong> 2 hours 5 minutes 59 seconds\n [02:06:00]<br>\n <strong>Studio:</strong> S1 NO.1 STYLE<br>\n <strong>Label:</strong> S1 NO.1 STYLE<br>\n <strong>Director:</strong> Kyosei<br>\n <strong>Series:</strong> -<br>\n <strong>Actresses:</strong> Yua Mikami<br>\n <strong>Categories:</strong> Big Tits, Quickie, Featured Actress, Blowjob, Minimal Mosaic, Hi-Def<br><br>\n </p><p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS365/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00365/</p><p>Uploaded by a Bot</p>",
|
||||
"created_at": "2022-04-08 06:31:27"
|
||||
"created_at": "2022-04-08 06:31:27",
|
||||
"created_at_iso": "2022-04-08T06:31:27+02:00"
|
||||
},
|
||||
{
|
||||
"id": 57416,
|
||||
@@ -640,7 +647,8 @@
|
||||
"images/torrent/3/8/f/hxzly7alqt9f.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2022-03-29 20:58:49"
|
||||
"created_at": "2022-03-29 20:58:49",
|
||||
"created_at_iso": "2022-03-29T20:58:49+02:00"
|
||||
},
|
||||
{
|
||||
"id": 56332,
|
||||
@@ -690,7 +698,8 @@
|
||||
"images/torrent/2/9/6/bw4kyn1ckz5u.jpg"
|
||||
],
|
||||
"description": "<p>De-censored with AI algorithm. </p>\n<p>Originated from [OFJE-304] Gorgeous Big Tits Bouncing All Over The Place! All G-Cup And Bigger Actresses Ride Dick Until They Cum 50 Rounds</p>\n<p>+++ [HD] OFJE-304 縦横無尽に神乳が揺れまくりっ!オールGcup超えS1女優のおっぱい激揺れ激イキ激ピスSEX50本番</p>\n<p>https://www.r18.com/videos/vod/movies/detail/-/id=ofje00304/</p>",
|
||||
"created_at": "2022-03-10 09:06:27"
|
||||
"created_at": "2022-03-10 09:06:27",
|
||||
"created_at_iso": "2022-03-10T09:06:27+01:00"
|
||||
},
|
||||
{
|
||||
"id": 56108,
|
||||
@@ -742,7 +751,8 @@
|
||||
"images/torrent/d/6/b/gexzyognkxeb.jpg"
|
||||
],
|
||||
"description": "<p><strong>[SSIS-338] Ultimate Lover Swamp. Ideal Sex-Only Relationship That Is Not Disturbed By Work Or Family With Yua Mikami</strong></p>\n <p><strong>+++ [HD] SSIS-338 最高の愛人沼 仕事にも家庭にも干渉してこない、セックスだけの理想関係を三上悠亜と…。</strong></p>\n <p><strong>ID:</strong> SSIS-338<br>\n <strong>Release Date:</strong> Mar 4, 2022<br>\n <strong>Runtime:</strong> 2 hours 25 minutes 59 seconds\n [02:26:00]<br>\n <strong>Studio:</strong> S1 NO.1 STYLE<br>\n <strong>Label:</strong> S1 NO.1 STYLE<br>\n <strong>Director:</strong> Amazing Meat<br>\n <strong>Series:</strong> -<br>\n <strong>Actresses:</strong> Yua Mikami<br>\n <strong>Categories:</strong> Adultery, Featured Actress, Cheating Wife, Drama, Minimal Mosaic, Hi-Def, 4K<br><br>\n </p><p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS338/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00338/</p><p>Uploaded by a Bot</p>",
|
||||
"created_at": "2022-03-04 05:28:49"
|
||||
"created_at": "2022-03-04 05:28:49",
|
||||
"created_at_iso": "2022-03-04T05:28:49+01:00"
|
||||
},
|
||||
{
|
||||
"id": 54324,
|
||||
@@ -797,7 +807,8 @@
|
||||
"images/torrent/9/7/d/ujzu5he0deum.jpg"
|
||||
],
|
||||
"description": "<p><strong>[SSIS-313] Yua Mikami's Ecstasy Lotion Special. Offering The Best-ever Slick Servicing To Work Cum Loads Out.</strong></p>\n<p><strong>SSIS-313 三上悠亜の有頂天ローションSP 人生最高ヌルヌルご奉仕で射精させてあげる</strong></p>\n<p><strong>ID:</strong> SSIS-313<br><strong>Release Date:</strong> Feb 4, 2022<br><strong>Runtime:</strong> 2 hours 27 minutes 59 seconds [02:28:00]<br><strong>Studio:</strong> S1 NO.1 STYLE<br><strong>Label:</strong> S1 NO.1 STYLE<br><strong>Director:</strong> TAKE-D<br><strong>Series:</strong> Ecstatic Lotion SP<br><strong>Actresses:</strong> Yua Mikami<br><strong>Categories:</strong> Big Tits, Featured Actress, Idol & Celebrity, Titty Fuck, Lotion, Minimal Mosaic, Hi-Def, 4K<br><br></p>\n<p><strong>Website:</strong> https://s1s1s1.com/works/detail/SSIS313/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00313/</p>",
|
||||
"created_at": "2022-02-04 07:02:14"
|
||||
"created_at": "2022-02-04 07:02:14",
|
||||
"created_at_iso": "2022-02-04T07:02:14+01:00"
|
||||
},
|
||||
{
|
||||
"id": 53526,
|
||||
@@ -864,7 +875,8 @@
|
||||
"images/torrent/7/d/0/w4lraenuqmos.jpg"
|
||||
],
|
||||
"description": "<p><strong>[OFJE-281] Yua Mikami x Shame Special This National-Grade Idol Is Getting Continuously Fucked 8 Hours</strong></p>\n <p><strong>+++ [HD] OFJE-281 三上悠亜×レ●プSpecial 国民的アイドルをひたすら犯し続ける8時間</strong></p>\n <p><strong>ID:</strong> OFJE-281<br>\n <strong>Release Date:</strong> Nov 6, 2020<br>\n <strong>Runtime:</strong> 7 hours 56 minutes 59 seconds\n [07:57:00]<br>\n <strong>Studio:</strong> S1 NO.1 STYLE<br>\n <strong>Label:</strong> S1 NO.1 STYLE<br>\n <strong>Director:</strong> <br>\n <strong>Series:</strong> S1 GIRLS COLLECTION<br>\n <strong>Actresses:</strong> Yua Mikami<br>\n <strong>Categories:</strong> Beautiful Girl, Featured Actress, Nymphomaniac, Idol & Celebrity, Over 4 Hours, Hi-Def, Actress Best Compilation<br><br>\n </p><p><strong>Website:</strong> https://s1s1s1.com/works/detail/OFJE281/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ofje00281/</p><p>Uploaded by a Bot</p>",
|
||||
"created_at": "2022-01-26 12:46:09"
|
||||
"created_at": "2022-01-26 12:46:09",
|
||||
"created_at_iso": "2022-01-26T12:46:09+01:00"
|
||||
},
|
||||
{
|
||||
"id": 52648,
|
||||
@@ -915,7 +927,8 @@
|
||||
"images/torrent/8/7/2/92ph60ekxpkx.jpg"
|
||||
],
|
||||
"description": "<p>Actresses: Yua Mikami<br>Categories<br>Big TitsFeatured ActressNymphomaniacIdol & CelebritySquirtingMinimal MosaicHi-Def4K<br>Studio: S1 NO.1 STYLE <br>Series: Release All At Once And Fly Vulgarly<br> Release date: Jan 7, 2022<br>Runtime: 150min<br>Director: Mon C<br>Label: S1 NO.1 STYLE<br>Content ID: ssis00287<br>DVD ID: SSIS-287<br>Languages: Japanese<br><br></p>",
|
||||
"created_at": "2022-01-07 13:01:13"
|
||||
"created_at": "2022-01-07 13:01:13",
|
||||
"created_at_iso": "2022-01-07T13:01:13+01:00"
|
||||
},
|
||||
{
|
||||
"id": 52438,
|
||||
@@ -972,7 +985,8 @@
|
||||
"images/torrent/0/9/2/yhdsjr2jrf2k.gif"
|
||||
],
|
||||
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&search=KnickerZ&uploader=&verifier=\"><img src=\"https://i.exoticaz.to/images/torrent/e/3/9/i7bfled2kuss.jpg\" width=\"824\" height=\"300\" alt=\"i7bfled2kuss.jpg\"></a></p>\n<p>[SSIS-270] Yua Mikami - Earnestly Small Devil Chikubiti All-round 200 Minutes Nipple Licking Blame Rolling (4K)</p>\n<p>Scene 1: Yua plays with a toy boob<br>Scene 2: Yua seduces teacher, missionary and cums on tits<br>Various Sex Acts Included : Oral, Doggy, One on One sex, MF sex, Facials, Cumshots, Missionary Sex, Handjob, Blowjobs, Blowbangs, Handjobs, Cowgirl & Reverse-Cowgirl, Deep-throat, Solo tease, Solo Masturbation, Toy/Dildo play, Kissing, etc</p>\n\n<p> <img src=\"https://i.exoticaz.to/images/torrent/0/9/2/yhdsjr2jrf2k.gif\" alt=\"yhdsjr2jrf2k.gif\"></p>",
|
||||
"created_at": "2022-01-03 12:59:46"
|
||||
"created_at": "2022-01-03 12:59:46",
|
||||
"created_at_iso": "2022-01-03T12:59:46+01:00"
|
||||
},
|
||||
{
|
||||
"id": 52436,
|
||||
@@ -1023,7 +1037,8 @@
|
||||
"images/torrent/1/0/9/rj8pemdpmdce.gif"
|
||||
],
|
||||
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&search=KnickerZ&uploader=&verifier=\"><img src=\"https://i.exoticaz.to/images/torrent/e/3/9/i7bfled2kuss.jpg\" width=\"824\" height=\"300\" alt=\"i7bfled2kuss.jpg\"></a></p>\n<p>[SSIS-211] Yua Mikami - You're At A Whore House, And One Of Japan's Top Pornstars Appears Right In Front Of You! Do You Fuck Her Or Fuck Off? (4K)</p>\n<p>Scene 1: Yua gives a handjob<br>Scene 2: Blowjob & doggy<br>Various Sex Acts Included : Oral, Doggy, One on One sex, MF sex, Facials, Cumshots, Missionary Sex, Handjob, Blowjobs, Blowbangs, Handjobs, Cowgirl & Reverse-Cowgirl, Deep-throat, Solo tease, Solo Masturbation, Toy/Dildo play, Kissing, etc</p>\n\n<p> <img src=\"https://i.exoticaz.to/images/torrent/1/0/9/rj8pemdpmdce.gif\" alt=\"rj8pemdpmdce.gif\"></p>",
|
||||
"created_at": "2022-01-03 12:55:28"
|
||||
"created_at": "2022-01-03 12:55:28",
|
||||
"created_at_iso": "2022-01-03T12:55:28+01:00"
|
||||
},
|
||||
{
|
||||
"id": 52434,
|
||||
@@ -1074,7 +1089,8 @@
|
||||
"images/torrent/9/0/6/jpoyeqdohhft.gif"
|
||||
],
|
||||
"description": "<p><a href=\"https://exoticaz.to/torrents?in=1&search=KnickerZ&uploader=&verifier=\"><img src=\"https://i.exoticaz.to/images/torrent/e/3/9/i7bfled2kuss.jpg\" width=\"824\" height=\"300\" alt=\"i7bfled2kuss.jpg\"></a></p>\n<p>[SSIS-181] Yua Mikami - Getting A Lick Down From Step-dad. 3 Full Days Indecency While The Husband Is Away (4K)</p>\n<p>Scene 1: Yua while asleep gets tits sucked, missionary<br>Scene 2: Yua plays with toothbrush<br>Scene 3: Blowjob<br>Various Sex Acts Included : Oral, Doggy, One on One sex, MF sex, Facials, Cumshots, Missionary Sex, Handjob, Blowjobs, Blowbangs, Handjobs, Cowgirl & Reverse-Cowgirl, Deep-throat, Solo tease, Solo Masturbation, Toy/Dildo play, Kissing, etc</p>\n\n<p> <img src=\"https://i.exoticaz.to/images/torrent/9/0/6/jpoyeqdohhft.gif\" alt=\"jpoyeqdohhft.gif\"></p>",
|
||||
"created_at": "2022-01-03 12:49:49"
|
||||
"created_at": "2022-01-03 12:49:49",
|
||||
"created_at_iso": "2022-01-03T12:49:49+01:00"
|
||||
},
|
||||
{
|
||||
"id": 51414,
|
||||
@@ -1125,7 +1141,8 @@
|
||||
"images/torrent/7/a/2/v4bbhqrhfaic.jpg"
|
||||
],
|
||||
"description": "<p>Yua Mikami's Devilish 200 Minutes of All Round Nipple Licking, Teasing and Kneading</p>\n<p>Actresses: Yua Mikami<br>Studio: S1 NO.1 STYLE<br>Series: Just A Little Devil Chick.<br>Release date: Dec 10, 2021<br>Runtime: 197min<br>Director: ZAMPA<br>Label: S1 NO.1 STYLE<br>Content ID: ssis00270<br>DVD ID: SSIS-270<br>Languages: Japanese</p>",
|
||||
"created_at": "2021-12-10 16:59:45"
|
||||
"created_at": "2021-12-10 16:59:45",
|
||||
"created_at_iso": "2021-12-10T16:59:45+01:00"
|
||||
},
|
||||
{
|
||||
"id": 50935,
|
||||
@@ -1178,7 +1195,8 @@
|
||||
"images/torrent/4/d/2/8ppl4ibq95se.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-27 21:51:25"
|
||||
"created_at": "2021-11-27 21:51:25",
|
||||
"created_at_iso": "2021-11-27T21:51:25+01:00"
|
||||
},
|
||||
{
|
||||
"id": 50154,
|
||||
@@ -1244,7 +1262,8 @@
|
||||
"images/torrent/a/7/7/t90zggbrwwf5.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-12 10:26:20"
|
||||
"created_at": "2021-11-12 10:26:20",
|
||||
"created_at_iso": "2021-11-12T10:26:20+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49718,
|
||||
@@ -1312,7 +1331,8 @@
|
||||
"images/torrent/5/9/9/7uo17medy6ib.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 11:39:32"
|
||||
"created_at": "2021-11-02 11:39:32",
|
||||
"created_at_iso": "2021-11-02T11:39:32+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49717,
|
||||
@@ -1368,7 +1388,8 @@
|
||||
"images/torrent/2/4/0/f99j7rtxwlni.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 11:25:47"
|
||||
"created_at": "2021-11-02 11:25:47",
|
||||
"created_at_iso": "2021-11-02T11:25:47+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49715,
|
||||
@@ -1423,7 +1444,8 @@
|
||||
"images/torrent/7/3/5/6e8mmocet7pq.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 11:16:12"
|
||||
"created_at": "2021-11-02 11:16:12",
|
||||
"created_at_iso": "2021-11-02T11:16:12+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49714,
|
||||
@@ -1477,7 +1499,8 @@
|
||||
"images/torrent/5/a/b/bchwfgrs4jm4.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 11:06:08"
|
||||
"created_at": "2021-11-02 11:06:08",
|
||||
"created_at_iso": "2021-11-02T11:06:08+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49712,
|
||||
@@ -1532,7 +1555,8 @@
|
||||
"images/torrent/d/8/0/n8wlosqiuz92.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 10:46:18"
|
||||
"created_at": "2021-11-02 10:46:18",
|
||||
"created_at_iso": "2021-11-02T10:46:18+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49647,
|
||||
@@ -1588,7 +1612,8 @@
|
||||
"images/torrent/c/5/f/nc1q6ejlvyqu.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-11-02 10:29:43"
|
||||
"created_at": "2021-11-02 10:29:43",
|
||||
"created_at_iso": "2021-11-02T10:29:43+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49646,
|
||||
@@ -1640,7 +1665,8 @@
|
||||
"images/torrent/c/5/8/c1wfncbm1eve.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-31 14:28:38"
|
||||
"created_at": "2021-10-31 14:28:38",
|
||||
"created_at_iso": "2021-10-31T14:28:38+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49645,
|
||||
@@ -1696,7 +1722,8 @@
|
||||
"images/torrent/8/4/e/wc4toojco9dx.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-31 14:17:13"
|
||||
"created_at": "2021-10-31 14:17:13",
|
||||
"created_at_iso": "2021-10-31T14:17:13+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49644,
|
||||
@@ -1752,7 +1779,8 @@
|
||||
"images/torrent/7/7/c/4qp3mqsokrnw.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-31 14:02:50"
|
||||
"created_at": "2021-10-31 14:02:50",
|
||||
"created_at_iso": "2021-10-31T14:02:50+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49643,
|
||||
@@ -1804,7 +1832,8 @@
|
||||
"images/torrent/0/9/f/fgwbfeqmzftr.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-31 13:50:27"
|
||||
"created_at": "2021-10-31 13:50:27",
|
||||
"created_at_iso": "2021-10-31T13:50:27+01:00"
|
||||
},
|
||||
{
|
||||
"id": 49079,
|
||||
@@ -1858,7 +1887,8 @@
|
||||
"images/torrent/7/d/d/xe1gcbp5acwx.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 16:50:12"
|
||||
"created_at": "2021-10-16 16:50:12",
|
||||
"created_at_iso": "2021-10-16T16:50:12+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49056,
|
||||
@@ -1912,7 +1942,8 @@
|
||||
"images/torrent/e/1/1/yv3ablrdkgfv.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 07:10:29"
|
||||
"created_at": "2021-10-16 07:10:29",
|
||||
"created_at_iso": "2021-10-16T07:10:29+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49050,
|
||||
@@ -1963,7 +1994,8 @@
|
||||
"images/torrent/3/3/1/uorz1hpm1hld.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 02:11:54"
|
||||
"created_at": "2021-10-16 02:11:54",
|
||||
"created_at_iso": "2021-10-16T02:11:54+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49049,
|
||||
@@ -2018,7 +2050,8 @@
|
||||
"images/torrent/9/6/e/bahbhr2gaqeq.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 00:06:39"
|
||||
"created_at": "2021-10-16 00:06:39",
|
||||
"created_at_iso": "2021-10-16T00:06:39+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49048,
|
||||
@@ -2073,7 +2106,8 @@
|
||||
"images/torrent/7/8/b/eq1jkrz8icoi.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-16 00:01:42"
|
||||
"created_at": "2021-10-16 00:01:42",
|
||||
"created_at_iso": "2021-10-16T00:01:42+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49038,
|
||||
@@ -2129,7 +2163,8 @@
|
||||
"images/torrent/0/1/7/c2hcjiknuv26.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-15 14:15:16"
|
||||
"created_at": "2021-10-15 14:15:16",
|
||||
"created_at_iso": "2021-10-15T14:15:16+02:00"
|
||||
},
|
||||
{
|
||||
"id": 49037,
|
||||
@@ -2185,7 +2220,8 @@
|
||||
"images/torrent/f/c/c/sir7gae1bnjv.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-10-15 13:58:51"
|
||||
"created_at": "2021-10-15 13:58:51",
|
||||
"created_at_iso": "2021-10-15T13:58:51+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48883,
|
||||
@@ -2234,7 +2270,8 @@
|
||||
"images/torrent/1/5/7/myv4v8tpa6d6.jpg"
|
||||
],
|
||||
"description": "<p>ISO: https://exoticaz.to/torrent/48124</p>",
|
||||
"created_at": "2021-10-12 07:11:18"
|
||||
"created_at": "2021-10-12 07:11:18",
|
||||
"created_at_iso": "2021-10-12T07:11:18+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48364,
|
||||
@@ -2276,7 +2313,8 @@
|
||||
"images/torrent/f/b/f/lw6fcsf6fz9z.jpg"
|
||||
],
|
||||
"description": "<p>Somebody requested this separately from pack that is already on here.</p>",
|
||||
"created_at": "2021-09-29 03:12:14"
|
||||
"created_at": "2021-09-29 03:12:14",
|
||||
"created_at_iso": "2021-09-29T03:12:14+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48189,
|
||||
@@ -2331,7 +2369,8 @@
|
||||
"images/torrent/6/3/2/5yvhovuhybyd.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 14:32:49"
|
||||
"created_at": "2021-09-24 14:32:49",
|
||||
"created_at_iso": "2021-09-24T14:32:49+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48186,
|
||||
@@ -2388,7 +2427,8 @@
|
||||
"images/torrent/6/0/8/e6jahgfjtvkf.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 14:17:46"
|
||||
"created_at": "2021-09-24 14:17:46",
|
||||
"created_at_iso": "2021-09-24T14:17:46+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48184,
|
||||
@@ -2444,7 +2484,8 @@
|
||||
"images/torrent/9/a/b/msjcjdcarxj2.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 13:59:44"
|
||||
"created_at": "2021-09-24 13:59:44",
|
||||
"created_at_iso": "2021-09-24T13:59:44+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48181,
|
||||
@@ -2500,7 +2541,8 @@
|
||||
"images/torrent/f/c/c/hkmy2iaaessw.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 13:46:50"
|
||||
"created_at": "2021-09-24 13:46:50",
|
||||
"created_at_iso": "2021-09-24T13:46:50+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48179,
|
||||
@@ -2555,7 +2597,8 @@
|
||||
"images/torrent/9/8/3/fw84szdvrmk4.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 13:34:17"
|
||||
"created_at": "2021-09-24 13:34:17",
|
||||
"created_at_iso": "2021-09-24T13:34:17+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48178,
|
||||
@@ -2611,7 +2654,8 @@
|
||||
"images/torrent/5/c/5/y7fjqvupby01.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-24 13:22:30"
|
||||
"created_at": "2021-09-24 13:22:30",
|
||||
"created_at_iso": "2021-09-24T13:22:30+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48125,
|
||||
@@ -2666,7 +2710,8 @@
|
||||
"images/torrent/f/2/1/wj8axuerttva.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-23 06:34:55"
|
||||
"created_at": "2021-09-23 06:34:55",
|
||||
"created_at_iso": "2021-09-23T06:34:55+02:00"
|
||||
},
|
||||
{
|
||||
"id": 48124,
|
||||
@@ -2721,7 +2766,8 @@
|
||||
"images/torrent/b/6/8/qa5nfh9blige.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-23 05:38:43"
|
||||
"created_at": "2021-09-23 05:38:43",
|
||||
"created_at_iso": "2021-09-23T05:38:43+02:00"
|
||||
},
|
||||
{
|
||||
"id": 46870,
|
||||
@@ -2770,7 +2816,8 @@
|
||||
"images/torrent/d/4/1/rpn5ywrgch3m.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-09-01 13:28:55"
|
||||
"created_at": "2021-09-01 13:28:55",
|
||||
"created_at_iso": "2021-09-01T13:28:55+02:00"
|
||||
},
|
||||
{
|
||||
"id": 46193,
|
||||
@@ -2826,7 +2873,8 @@
|
||||
"images/torrent/7/6/8/o87ujrsbmehp.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-08-19 09:44:36"
|
||||
"created_at": "2021-08-19 09:44:36",
|
||||
"created_at_iso": "2021-08-19T09:44:36+02:00"
|
||||
},
|
||||
{
|
||||
"id": 45171,
|
||||
@@ -2874,7 +2922,8 @@
|
||||
"images/torrent/6/d/b/wm8ikfbzpecs.jpg"
|
||||
],
|
||||
"description": "<p>I don't know why the source was 25 fps</p>",
|
||||
"created_at": "2021-07-30 14:34:43"
|
||||
"created_at": "2021-07-30 14:34:43",
|
||||
"created_at_iso": "2021-07-30T14:34:43+02:00"
|
||||
},
|
||||
{
|
||||
"id": 43663,
|
||||
@@ -2923,7 +2972,8 @@
|
||||
"images/torrent/b/7/d/qswq8vdshnyb.jpg"
|
||||
],
|
||||
"description": "<p>Yua Mikami 4th Anniversary Memorial Best - Her 12 Latest Titles In Full, 72 Scenes, 480 Minutes Special</p>\n<p>Release Date: Mar. 06, 2021<br>Runtime: 477min. (HD: 477min.)<br>Director: ----<br>Studio: S1 NO.1 STYLE<br>Label: S1 NO.1 STYLE</p>\n<p>Channel: ----<br>Content ID: ofje00300<br>DVD ID: OFJE-300<br>Series: S1 GIRLS COLLECTION<br>Languages: Japanese</p>\n<p>Actress(es): Yua Mikami</p>",
|
||||
"created_at": "2021-07-04 16:17:44"
|
||||
"created_at": "2021-07-04 16:17:44",
|
||||
"created_at_iso": "2021-07-04T16:17:44+02:00"
|
||||
},
|
||||
{
|
||||
"id": 39515,
|
||||
@@ -3001,7 +3051,8 @@
|
||||
"images/torrent/a/0/c/5dgyfrjx6x7p.png"
|
||||
],
|
||||
"description": "<pre>+++ [HD] SSIS-013 アナタの五感を刺激する三上悠亜のシコシコサポートラグジュアリー 脳をエロスで満たす6つの癒され勃起シチュエーション</pre>\n<p><strong>Full title:</strong> <em>Yua Mikami Will Stimulate Your Five Senses In A Soothing, Stroking, Masturbatory Luxury Support Role 6 Soothing Erection Situations Of Fully Satisfying Eros Company Excitement To Blow Your Mind</em></p>\n<p><strong>Release Date:</strong> Mar. 18, 2021</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssis00013/</p>\n<p><strong>Studio:</strong> https://www.s1s1s1.com/works/detail/ssis013/</p>",
|
||||
"created_at": "2021-03-22 14:40:56"
|
||||
"created_at": "2021-03-22 14:40:56",
|
||||
"created_at_iso": "2021-03-22T14:40:56+01:00"
|
||||
},
|
||||
{
|
||||
"id": 39245,
|
||||
@@ -3049,7 +3100,8 @@
|
||||
"images/torrent/f/5/1/nqjy8fpqskdj.jpg"
|
||||
],
|
||||
"description": "<p>BDISO: https://exoticaz.to/torrent/34023</p>",
|
||||
"created_at": "2021-03-17 01:27:10"
|
||||
"created_at": "2021-03-17 01:27:10",
|
||||
"created_at_iso": "2021-03-17T01:27:10+01:00"
|
||||
},
|
||||
{
|
||||
"id": 38628,
|
||||
@@ -3098,7 +3150,8 @@
|
||||
"images/torrent/6/f/e/juc07vprbndp.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2021-02-28 08:42:42"
|
||||
"created_at": "2021-02-28 08:42:42",
|
||||
"created_at_iso": "2021-02-28T08:42:42+01:00"
|
||||
},
|
||||
{
|
||||
"id": 38281,
|
||||
@@ -3159,7 +3212,8 @@
|
||||
"images/torrent/8/6/8/vazvb4ycnmb8.jpg"
|
||||
],
|
||||
"description": "<p><strong>During Her Business Trip, To Her Surprise, She Was Booked Into The Same Hotel Room With Her Asshole Boss (Whom She Hates With A Passion) ... So He Banged Her With Excessive Lust And Relentless Piston-Pounding Thrusts And Kept This Big Tits Office Lady Cumming All Night Long Yua Mikami</strong></p>\n<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni989/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00989/</p>\n<p>+++ [HD] SSNI-989 出張先の旅館で大嫌いなセクハラ上司とまさかの相部屋に…絶倫過ぎる粘着ピストンで一晩中イカされ続けた巨乳OL 三上悠亜</p>",
|
||||
"created_at": "2021-02-17 22:42:58"
|
||||
"created_at": "2021-02-17 22:42:58",
|
||||
"created_at_iso": "2021-02-17T22:42:58+01:00"
|
||||
},
|
||||
{
|
||||
"id": 37072,
|
||||
@@ -3215,7 +3269,8 @@
|
||||
"images/torrent/6/6/9/1ms8yiiif82h.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni963/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00963/</p>\n<p>+++ [HD] SSNI-963 日本一のSEXコスプレイヤー 三上悠亜</p>",
|
||||
"created_at": "2021-01-16 02:52:11"
|
||||
"created_at": "2021-01-16 02:52:11",
|
||||
"created_at_iso": "2021-01-16T02:52:11+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36791,
|
||||
@@ -3269,7 +3324,8 @@
|
||||
"images/torrent/b/b/4/pampaacdzpoa.jpg"
|
||||
],
|
||||
"description": "<p>credits to perfectcanary</p>",
|
||||
"created_at": "2021-01-09 03:44:31"
|
||||
"created_at": "2021-01-09 03:44:31",
|
||||
"created_at_iso": "2021-01-09T03:44:31+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36790,
|
||||
@@ -3324,7 +3380,8 @@
|
||||
"images/torrent/a/a/c/hyaed34gxuic.jpg"
|
||||
],
|
||||
"description": "<p>credits to perfectcanary</p>",
|
||||
"created_at": "2021-01-09 03:44:02"
|
||||
"created_at": "2021-01-09 03:44:02",
|
||||
"created_at_iso": "2021-01-09T03:44:02+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36789,
|
||||
@@ -3379,7 +3436,8 @@
|
||||
"images/torrent/7/8/6/3uotc2hw7s6l.jpg"
|
||||
],
|
||||
"description": "<p>credits to perfectcanary</p>",
|
||||
"created_at": "2021-01-09 03:42:52"
|
||||
"created_at": "2021-01-09 03:42:52",
|
||||
"created_at_iso": "2021-01-09T03:42:52+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36465,
|
||||
@@ -3436,7 +3494,8 @@
|
||||
"images/torrent/1/1/a/x6yztt33psfz.jpg"
|
||||
],
|
||||
"description": "<p>配信開始日: 2020/02/07<br>商品発売日: 2020/02/07<br>収録時間: 87分 (HQ版:87分)<br>出演者: 三上悠亜<br>監督: ZAMPA<br>シリーズ: S1 VR<br>メーカー: エスワン ナンバーワンスタイル<br>レーベル: S1 VR<br>コンテンツタイプ: 3D<br>ジャンル: ハイクオリティVR 独占配信 単体作品 VR専用 騎乗位 巨乳 アイドル・芸能人 主観<br>品番: sivr00067</p>\n<p>待望のHQ超なめらか高画質VRで三上悠亜とボクのエッチで可愛すぎる神同棲生活!「僕の彼女はトップAVアイドルの、あの三上悠亜.・」超多忙なトップAVアイドルでありながら、実はこっそりボクと付き合っている夢のような展開!愛されて、心配されて、嫉妬されて、普段は見れない等身大のアイドルの素顔を完全独占!最高の距離感で四六時中SEXに明け暮れる究極同棲VR</p>",
|
||||
"created_at": "2020-12-30 13:29:53"
|
||||
"created_at": "2020-12-30 13:29:53",
|
||||
"created_at_iso": "2020-12-30T13:29:53+01:00"
|
||||
},
|
||||
{
|
||||
"id": 36096,
|
||||
@@ -3491,7 +3550,8 @@
|
||||
"images/torrent/1/9/e/dtxkxrwdpf3m.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni939/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00939/</p>\n<p><strong>1080p</strong> : https://exoticaz.to/torrent/35862</p>",
|
||||
"created_at": "2020-12-22 00:57:11"
|
||||
"created_at": "2020-12-22 00:57:11",
|
||||
"created_at_iso": "2020-12-22T00:57:11+01:00"
|
||||
},
|
||||
{
|
||||
"id": 35862,
|
||||
@@ -3546,7 +3606,8 @@
|
||||
"images/torrent/a/9/4/ksgywpxmjg9h.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni939/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00939/</p>\n<p>+++ [HD] SSNI-939 執拗な焦らしと寸止めで極限まで感度を高めた恍惚キメセク大絶頂FUCK 三上悠亜</p>",
|
||||
"created_at": "2020-12-17 03:16:29"
|
||||
"created_at": "2020-12-17 03:16:29",
|
||||
"created_at_iso": "2020-12-17T03:16:29+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34686,
|
||||
@@ -3608,7 +3669,8 @@
|
||||
"images/torrent/3/0/4/dtb70p4cfkhi.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni916/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00916/</p>\n<p>+++ [HD] SSNI-916 スク水巨乳の水泳部顧問は元グラビアアイドル…濡れ透ける先生の巨乳に我慢できなくて、じっとり汗だくひたすら密着交尾 三上悠亜</p>\n<p>Play with the water in the classroom or in the pool.... Wet nipples, spilling god milk, high leg that eats into the crotch. Meat feeling Sk water dynamite to nail the students! Healthy BODY and Rodro Special SEX Bathed In The Shining Midsummer Sun! Unstoppable sexual desire of the unending men flocking to the squiring big that attach perfectly with dripping sweat! The Swimsuit Big That Shake Violently Is While Wearing It! All boys love their teachers.</p>\n<p>Release Date:<br>Nov. 19, 2020</p>\n<p>Runtime:<br>145min. (HD: 145min.)</p>\n<p>Director:<br>ZAMPA</p>\n<p>Studio:<br>S1 NO.1 STYLE</p>\n<p>Label:<br>S1 NO.1 STYLE</p>\n<p>Channel:<br>----</p>\n<p>Content ID:<br>ssni00916</p>\n<p>DVD ID:<br>SSNI-916</p>\n<p>Series:<br>----</p>\n<p>Languages:<br>Japanese</p>",
|
||||
"created_at": "2020-11-18 23:55:07"
|
||||
"created_at": "2020-11-18 23:55:07",
|
||||
"created_at_iso": "2020-11-18T23:55:07+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34051,
|
||||
@@ -3660,7 +3722,8 @@
|
||||
"images/torrent/9/e/9/0ocpe6n3lsc6.jpg"
|
||||
],
|
||||
"description": "<p>Title: Ever Since That Day When My Father-In-Law Raped Me… Yua Mikami</p>\n<p>Date: October 22, 2019 </p>\n<p>Time: 02:29:00<br><br>Pornstars: Yua Mikami</p>\n<p>Studio: S1 NO.1 Style</p>",
|
||||
"created_at": "2020-11-03 06:16:30"
|
||||
"created_at": "2020-11-03 06:16:30",
|
||||
"created_at_iso": "2020-11-03T06:16:30+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34049,
|
||||
@@ -3713,7 +3776,8 @@
|
||||
"images/torrent/9/0/4/5yho2mvumies.jpg"
|
||||
],
|
||||
"description": "<p>Title: TEK-072 Climax x 4 Hardcore Scenes Yua Mikami</p>\n<p>Date: August 1, 2020</p>\n<p>Time: 02:55:00</p>\n<p>Pornstars: Yua Mikami</p>\n<p>Studio: MUTEKI</p>\n<p>https://www.javlibrary.com/en/?v=javlild2tm</p>",
|
||||
"created_at": "2020-11-03 06:06:51"
|
||||
"created_at": "2020-11-03 06:06:51",
|
||||
"created_at_iso": "2020-11-03T06:06:51+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34024,
|
||||
@@ -3764,7 +3828,8 @@
|
||||
"images/torrent/d/3/2/qeylkbizibzy.jpg"
|
||||
],
|
||||
"description": "<p>Titile: Yua Mikami Is Completely Tied Down And Unable To Move Unlimited Piston Pounding Fucks That</p>\n<p>Date: October 22, 2019 </p>\n<p>Time: 02:34:00</p>\n<p>Pornstars: Yua Mikami</p>\n<p>Studio: S1 NO.1 Style</p>",
|
||||
"created_at": "2020-11-02 05:13:10"
|
||||
"created_at": "2020-11-02 05:13:10",
|
||||
"created_at_iso": "2020-11-02T05:13:10+01:00"
|
||||
},
|
||||
{
|
||||
"id": 34023,
|
||||
@@ -3813,7 +3878,8 @@
|
||||
"images/torrent/c/0/2/pvoql1zscpdl.jpg"
|
||||
],
|
||||
"description": "<p>Title: SSNI-388 Yua Mikami In A 16-Consecutive Cum Shot Slut Assault She’s Tied Up Men For Some</p>\n<p>Date: October 22, 2019</p>\n<p>Pornstars: Yua Mikami</p>\n<p>Studio: S1 NO.1 Style</p>\n<p>Time: 02:04:00</p>",
|
||||
"created_at": "2020-11-02 04:57:51"
|
||||
"created_at": "2020-11-02 04:57:51",
|
||||
"created_at_iso": "2020-11-02T04:57:51+01:00"
|
||||
},
|
||||
{
|
||||
"id": 33466,
|
||||
@@ -3870,7 +3936,8 @@
|
||||
"images/torrent/1/6/0/bwivpujoltwr.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni888/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00888/</p>\n<p>+++ [HD] SSNI-888 絶頂の向こう側でイッてイッてイキまくる確変オーガズム状態のまま48時間耐久で一生分ハメまくった三上悠亜のヤバい性交</p>",
|
||||
"created_at": "2020-10-17 01:29:36"
|
||||
"created_at": "2020-10-17 01:29:36",
|
||||
"created_at_iso": "2020-10-17T01:29:36+02:00"
|
||||
},
|
||||
{
|
||||
"id": 32469,
|
||||
@@ -3925,7 +3992,8 @@
|
||||
"images/torrent/7/f/4/qn6q2w8bgjzg.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni865/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00865/</p>\n<p>+++ [HD] SSNI-865 巨乳OLと絶倫童貞上司の毎週エスカレートする週末のセックス残業 三上悠亜</p>",
|
||||
"created_at": "2020-09-17 03:27:12"
|
||||
"created_at": "2020-09-17 03:27:12",
|
||||
"created_at_iso": "2020-09-17T03:27:12+02:00"
|
||||
},
|
||||
{
|
||||
"id": 31490,
|
||||
@@ -4118,7 +4186,8 @@
|
||||
"images/torrent/1/0/d/9wmpejovzbg7.jpg"
|
||||
],
|
||||
"description": "<p>A quarter terabyte of Yua Mikami videos. Pretty close to a complete solo discography as of this date. Mostly 1080p, a few 720p. No super loud Chinese language ads at the beginnings of any videos, mostly unobtrusive watermarks. A few of the Muteki vids are decensored with the sorta annoying JAVPlayer watermark.</p>",
|
||||
"created_at": "2020-08-20 00:49:29"
|
||||
"created_at": "2020-08-20 00:49:29",
|
||||
"created_at_iso": "2020-08-20T00:49:29+02:00"
|
||||
},
|
||||
{
|
||||
"id": 31465,
|
||||
@@ -4175,7 +4244,8 @@
|
||||
"images/torrent/7/4/f/npjdewgqw8bj.jpg"
|
||||
],
|
||||
"description": "<p><strong>Website:</strong> https://www.s1s1s1.com/works/detail/ssni802/</p>\n<p><strong>R18:</strong> https://www.r18.com/videos/vod/movies/detail/-/id=ssni00802/</p>\n<p>+++ [HD] SSNI-802 『教師失格』帰宅困難になったあの日、嵐が過ぎるまでひたすら男子生徒とハメまくりました…。 三上悠亜</p>\n<p>Release Date: June 14, 2020<br>Runtime: 117min. (HD: 117min.)<br>Director: Amazing Meat<br>Studio: S1 NO.1 STYLE<br>Label: S1 NO.1 STYLE</p>\n<p>I'm a slut priest... On that day when a large typhoon hit directly, the two broke their line... On the night when it was difficult to return home, the unstoppable desire of a female teacher who shakes her big tits until the morning and gets turbulent like a storm. \"Much more... messed up... Ah... No... Iku...!!!\" \"Before I am a teacher, I am a woman...\"</p>",
|
||||
"created_at": "2020-08-19 12:04:41"
|
||||
"created_at": "2020-08-19 12:04:41",
|
||||
"created_at_iso": "2020-08-19T12:04:41+02:00"
|
||||
},
|
||||
{
|
||||
"id": 30383,
|
||||
@@ -4220,7 +4290,8 @@
|
||||
"images/torrent/9/9/9/i3ciw7xmwson.jpg"
|
||||
],
|
||||
"description": "<p>[SSNI-826] Yua Mikami 三上悠亜のPLATINUM SOAP 三上悠亞</p>\n<p>The finest customs to serve with the best body and best service! No matter how many times I ejaculate, the full erection doesn’t stop… I just ejaculated, but I’m jealous of any number of shots! Unlimited firing within the time. “Please give out as many shots as you want today.” Yua’s awesome technique will fulfill all your desires. For a while, Onakura, men’s esthetic, pin salo, SM club, finest soap. Platinum BODY and the finest service a total of 15 shots will ejaculate a special sex custom!</p>",
|
||||
"created_at": "2020-07-27 10:51:58"
|
||||
"created_at": "2020-07-27 10:51:58",
|
||||
"created_at_iso": "2020-07-27T10:51:58+02:00"
|
||||
},
|
||||
{
|
||||
"id": 29815,
|
||||
@@ -4269,7 +4340,8 @@
|
||||
"images/torrent/b/9/3/wvu3uhkwmxbz.jpg"
|
||||
],
|
||||
"description": "<p>【VR】エスワン15周年スペシャル共演 日本一のAV女優2人と超豪華ハーレム逆3P体験</p>\n<p>【VR】 15th Anniversary Of Esuan Special Co-starring 2 Best AV Actresses In Japan And A Super Luxury Harem Reverse 3P Experience</p>",
|
||||
"created_at": "2020-07-14 07:28:09"
|
||||
"created_at": "2020-07-14 07:28:09",
|
||||
"created_at_iso": "2020-07-14T07:28:09+02:00"
|
||||
},
|
||||
{
|
||||
"id": 29356,
|
||||
@@ -4315,7 +4387,8 @@
|
||||
"images/torrent/5/6/4/kdkmgw9mxjiy.jpg"
|
||||
],
|
||||
"description": "<p>Title: TEK-067 Princess Peach Mikami YuA</p>\n<p>ID: TEK-067<br>Release Date: 2015-06-01<br>Length: 180 min(s)<br>Director: ----<br>Maker: Muteki <br>Label: Muteki </p>\n<p>Ps: It was claimed to be the first real porn that Yua Mikami participated.</p>",
|
||||
"created_at": "2020-07-08 01:32:21"
|
||||
"created_at": "2020-07-08 01:32:21",
|
||||
"created_at_iso": "2020-07-08T01:32:21+02:00"
|
||||
},
|
||||
{
|
||||
"id": 29261,
|
||||
@@ -4366,7 +4439,8 @@
|
||||
"images/torrent/9/a/c/hocvufnx1xxg.jpg"
|
||||
],
|
||||
"description": "<p><span style=\"font-size:20px;\"><strong>Full Title</strong></span>: <span style=\"font-size:20px;\"><strong>Massive Cocks x Follow-Up Fucks x Large Orgies These 24 Massive Cocks Will Relentlessly Pump These Twitching And Cumming Pussies In A Furious Follow-Up Piston Pumping Ultra Large Orgies Special Yua Mikami<br></strong><br><span style=\"font-size:18px;\">Release Date: Oct. 18, 2018</span><br><span style=\"font-size:18px;\">Runtime: 117min. (HD: 117min.)</span><br><span style=\"font-size:18px;\">Director: ZAMPA</span><br><span style=\"font-size:18px;\">Studio: S1 NO.1 STYLE</span><br><span style=\"font-size:18px;\">Label: S1 NO.1 STYLE<br>Channel: S1 NO.1 STYLE, PRIME<br>Content ID: ssni00322<br>DVD ID: SSNI-322<br><br><a href=\"https://awscc3001.r18.com/litevideo/freepv/s/ssn/ssni00322/ssni00322_dmb_w.mp4\">Trailer</a></span></span></p>",
|
||||
"created_at": "2020-07-06 02:25:40"
|
||||
"created_at": "2020-07-06 02:25:40",
|
||||
"created_at_iso": "2020-07-06T02:25:40+02:00"
|
||||
},
|
||||
{
|
||||
"id": 27208,
|
||||
@@ -4419,7 +4493,8 @@
|
||||
"images/torrent/8/6/3/br1smc0lvdfy.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2020-05-31 03:07:27"
|
||||
"created_at": "2020-05-31 03:07:27",
|
||||
"created_at_iso": "2020-05-31T03:07:27+02:00"
|
||||
},
|
||||
{
|
||||
"id": 26018,
|
||||
@@ -4464,7 +4539,8 @@
|
||||
"images/torrent/c/e/d/fjzmigqdm3qt.jpg"
|
||||
],
|
||||
"description": "<p><strong>Yua Mikami in awesome POV scene working as a 5star soapland popstar girI</strong></p>\n<p><strong>Infiltrate the soapland where the strongest national idol you have ever dreamed of works! ! Immediate scale blowjob & immediate etch of greeting unwashed cock! Full body lip to anal & toes! Vacuum periscope Blow while bathing in the bath! Adhesive slimy mat that will serve hard! Full charter feeling full course 180 minutes unlimited firing! \"Please go and enjoy today!\"</strong></p>\n<p><a href=\"https://www.r18.com/videos/vod/movies/detail/-/id=tek00076/?i3_ref=search&i3_ord=1\">https://www.r18.com/videos/vod/movies/detail/-/id=tek00076/?i3_ref=search&i3_ord=1</a></p>",
|
||||
"created_at": "2020-03-16 20:11:31"
|
||||
"created_at": "2020-03-16 20:11:31",
|
||||
"created_at_iso": "2020-03-16T20:11:31+01:00"
|
||||
},
|
||||
{
|
||||
"id": 26005,
|
||||
@@ -4510,7 +4586,8 @@
|
||||
"images/torrent/6/5/4/lhkdfbqlsqlu.jpg"
|
||||
],
|
||||
"description": "<p>One day before summer vacation, I had a crazy sex in the classroom at sunset when no one was there. Push down to the bed in the nurse's room, fill the face in the skirt, and rub the young and tender big tits and peach ass. Titty fuck and fellatio into school swimsuit. The best girl in school, take off the uniform of a national idol school girl who is too angelic and roll up after school! Youth school sex! \"It's a secret to everyone.\"</p>\n<p><a href=\"https://www.r18.com/videos/vod/movies/detail/-/id=tek00079/\">https://www.r18.com/videos/vod/movies/detail/-/id=tek00079/</a></p>",
|
||||
"created_at": "2020-03-16 05:22:31"
|
||||
"created_at": "2020-03-16 05:22:31",
|
||||
"created_at_iso": "2020-03-16T05:22:31+01:00"
|
||||
},
|
||||
{
|
||||
"id": 26004,
|
||||
@@ -4553,7 +4630,8 @@
|
||||
"images/torrent/c/5/d/n5ciceiboq1l.jpg"
|
||||
],
|
||||
"description": "<p>\"More ... more kiss ...\" The obscene and hot sexy Kiss that the national idol Yua Mikami shows for the first time and the passion SEX that burns up! Temptation hot Licking Handjob & Footjob With A Lot Of drips. Saliva and pussy juice are intertwined and the pussy gets wet so shamefully! The climax FUCK of an odious kiss that licks the whole body of the idol! The most erotic idol of the strongest idol who pulls a string in love popularity sweaty kissing sex! !</p>\n<p><a href=\"https://www.r18.com/videos/vod/movies/detail/-/id=tek00080/\">https://www.r18.com/videos/vod/movies/detail/-/id=tek00080/</a></p>",
|
||||
"created_at": "2020-03-16 05:15:51"
|
||||
"created_at": "2020-03-16 05:15:51",
|
||||
"created_at_iso": "2020-03-16T05:15:51+01:00"
|
||||
},
|
||||
{
|
||||
"id": 25958,
|
||||
@@ -4598,7 +4676,8 @@
|
||||
"images/torrent/e/5/b/dtmfbfmqsekh.jpg"
|
||||
],
|
||||
"description": "<p>Yua Mikami is my one of my favourite JAV Actress, she is so pretty and have killer body. In this video she acts as your girlfriend.<br>she waits you at home, wash your dick and handjob it. she likes to kiss. in the bedroom she HJ you and you fingering her then she rides you cow girl style, missionary and doggy style. she likes travelling with you and give you nice service in the bathroom during vacation and fucks around in the bathtub then continue fucking in the bedroom hotels.</p>",
|
||||
"created_at": "2020-03-10 04:08:49"
|
||||
"created_at": "2020-03-10 04:08:49",
|
||||
"created_at_iso": "2020-03-10T04:08:49+01:00"
|
||||
},
|
||||
{
|
||||
"id": 25204,
|
||||
@@ -4646,7 +4725,8 @@
|
||||
"images/torrent/f/c/a/5rsj5fnyw7sy.jpg"
|
||||
],
|
||||
"description": "<p>Release Date: Oct. 12, 2019<br>Runtime: 149min. (HD: 149min.)<br>Director: Mon C<br>Studio: S1 NO.1 STYLE<br>Label: S1 NO.1 STYLE<br>Content ID: ssni00589<br>DVD ID: SSNI-589<br>Series: Full-Power Cumming Cowgirl<br>Languages: Japanese</p>\n<p>三上悠亜の全力イクイク騎乗位マニアックス 三上悠亜</p>\n<p>「ほら、おま●こに挿ってるの丸見えだよ…」国民的アイドルの大胆!騎乗位マニアックス!前後左右360°尻肉揺れまくり徹底アングル!クビレ腰と肉弾ヒップを一心不乱に振りまくる!男根を咥え込む騎乗位の乱舞!イッてもイッても止めない高速グラインド!!イキまくるクビレ、尻肉大迫力神アングル!絶頂汁を撒き散らしそれでも振り続けるアグレッシブFUCK!! ※こちらはBlu-ray Disc専用ソフトです。対応プレイヤー以外では再生できませんのでご注意ください。 ★アダルトブック「三上悠亜写真集」の商品ご購入はこちらから★ 「コンビニ受取」対象商品です。詳しくはこちらをご覧ください。</p>",
|
||||
"created_at": "2019-12-13 00:30:33"
|
||||
"created_at": "2019-12-13 00:30:33",
|
||||
"created_at_iso": "2019-12-13T00:30:33+01:00"
|
||||
},
|
||||
{
|
||||
"id": 24777,
|
||||
@@ -4729,7 +4809,8 @@
|
||||
"images/torrent/4/0/1/qiq9l0g9b4lb.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2019-10-12 07:37:42"
|
||||
"created_at": "2019-10-12 07:37:42",
|
||||
"created_at_iso": "2019-10-12T07:37:42+02:00"
|
||||
},
|
||||
{
|
||||
"id": 24714,
|
||||
@@ -4793,7 +4874,8 @@
|
||||
"images/torrent/0/0/c/pz6a1om1zcj6.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2019-10-03 07:22:22"
|
||||
"created_at": "2019-10-03 07:22:22",
|
||||
"created_at_iso": "2019-10-03T07:22:22+02:00"
|
||||
},
|
||||
{
|
||||
"id": 24432,
|
||||
@@ -4832,7 +4914,8 @@
|
||||
"images/torrent/c/3/e/ivi2v3xvuxvf.png"
|
||||
],
|
||||
"description": "<p>Yua mikami (mosaic removed) not exactly more like digitally altered person seems to have done a good job albeit the quality is not the greatest.</p>",
|
||||
"created_at": "2019-08-06 05:01:10"
|
||||
"created_at": "2019-08-06 05:01:10",
|
||||
"created_at_iso": "2019-08-06T05:01:10+02:00"
|
||||
},
|
||||
{
|
||||
"id": 22633,
|
||||
@@ -4880,7 +4963,8 @@
|
||||
"images/torrent/d/1/d/siepkvzdjdjm.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2019-02-16 01:52:32"
|
||||
"created_at": "2019-02-16 01:52:32",
|
||||
"created_at_iso": "2019-02-16T01:52:32+01:00"
|
||||
},
|
||||
{
|
||||
"id": 22606,
|
||||
@@ -4926,7 +5010,8 @@
|
||||
"images/torrent/f/9/9/scjrral5midb.png"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2019-02-14 09:58:29"
|
||||
"created_at": "2019-02-14 09:58:29",
|
||||
"created_at_iso": "2019-02-14T09:58:29+01:00"
|
||||
},
|
||||
{
|
||||
"id": 21647,
|
||||
@@ -4975,7 +5060,8 @@
|
||||
"images/torrent/1/e/9/zb4gphrposw0.gif"
|
||||
],
|
||||
"description": "<p>no sexual activity in the show.</p>\n<p>for details : http://www.r18.com/videos/vod/movies/detail/-/id=oae00165/?i3_ref=search&i3_ord=1</p>",
|
||||
"created_at": "2018-12-16 20:31:03"
|
||||
"created_at": "2018-12-16 20:31:03",
|
||||
"created_at_iso": "2018-12-16T20:31:03+01:00"
|
||||
},
|
||||
{
|
||||
"id": 21564,
|
||||
@@ -5021,7 +5107,8 @@
|
||||
"images/torrent/b/5/f/r0ml2pj3xrvq.jpg"
|
||||
],
|
||||
"description": "<p>MUTEKI 10th Anniversary Special Project.</p>",
|
||||
"created_at": "2018-12-06 02:16:35"
|
||||
"created_at": "2018-12-06 02:16:35",
|
||||
"created_at_iso": "2018-12-06T02:16:35+01:00"
|
||||
},
|
||||
{
|
||||
"id": 21561,
|
||||
@@ -5075,7 +5162,8 @@
|
||||
"images/torrent/7/c/3/kvjyuskn3mkf.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-12-05 19:43:15"
|
||||
"created_at": "2018-12-05 19:43:15",
|
||||
"created_at_iso": "2018-12-05T19:43:15+01:00"
|
||||
},
|
||||
{
|
||||
"id": 20515,
|
||||
@@ -5200,7 +5288,8 @@
|
||||
"images/torrent/a/1/9/5ngcygiazvrv.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-09-07 07:56:21"
|
||||
"created_at": "2018-09-07 07:56:21",
|
||||
"created_at_iso": "2018-09-07T07:56:21+02:00"
|
||||
},
|
||||
{
|
||||
"id": 15261,
|
||||
@@ -5241,7 +5330,8 @@
|
||||
"images/torrent/e/f/6/ubgilv5db5mo.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-06-02 17:44:49"
|
||||
"created_at": "2018-06-02 17:44:49",
|
||||
"created_at_iso": "2018-06-02T17:44:49+02:00"
|
||||
},
|
||||
{
|
||||
"id": 4333,
|
||||
@@ -5282,7 +5372,8 @@
|
||||
"images/torrent/c/9/c/3qxdyhvuefwu.jpg"
|
||||
],
|
||||
"description": "<pre><br>General<br>Complete name : Tek081.mp4<br>Format : MPEG-4<br>Format profile : Base Media / Version 2<br>Codec ID : mp42 (isom/iso2/mp41)<br>File size : 1.49 GiB<br>Duration : 2 h 51 min<br>Overall bit rate mode : Variable<br>Overall bit rate : 1 243 kb/s<br>Encoded date : UTC 2017-02-12 20:24:00<br>Tagged date : UTC 2017-02-12 20:24:00<br>Writing application : HandBrake 1.0.2 2017012200<br><br>Video<br>ID : 1<br>Format : HEVC<br>Format/Info : High Efficiency Video Coding<br>Format profile : Main@L3.1@Main<br>Codec ID : hev1<br>Codec ID/Info : High Efficiency Video Coding<br>Duration : 2 h 51 min<br>Bit rate : 1 139 kb/s<br>Width : 1 280 pixels<br>Height : 720 pixels<br>Display aspect ratio : 16:9<br>Frame rate mode : Variable<br>Frame rate : 28.707 FPS<br>Minimum frame rate : 11.446 FPS<br>Maximum frame rate : 195.652 FPS<br>Color space : YUV<br>Chroma subsampling : 4:2:0<br>Bit depth : 8 bits<br>Bits/(Pixel*Frame) : 0.043<br>Stream size : 1.36 GiB (92%)<br>Writing library : x265 2.1:[Windows][GCC 5.4.0][64 bit] 8bit<br>Encoding settings : wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=1 / tu-inter-depth=1 / me=1 / subme=2 / merange=57 / no-rect / no-amp / max-merge=2 / temporal-mvp / no-early-skip / rskip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu-lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=290 / min-keyint=29 / scenecut=40 / rc-lookahead=20 / lookahead-slices=4 / bframes=4 / bframe-bias=0 / b-adapt=2 / ref=3 / limit-refs=3 / no-limit-modes / weightp / no-weightb / aq-mode=1 / qg-size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=3 / psy-rd=2.00 / rdoq-level=0 / psy-rdoq=0.00 / log2-max-poc-lsb=8 / no-rd-refine / signhide / deblock=0:0 / sao / no-sao-non-deblock / b-pyramid / cutree / no-intra-refresh / rc=crf / crf=22.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ipratio=1.40 / pbratio=1.30<br>Encoded date : UTC 2017-02-12 20:24:00<br>Tagged date : UTC 2017-02-12 20:24:00<br>Color range : Limited<br>Color primaries : BT.709<br>Transfer characteristics : BT.709<br>Matrix coefficients : BT.709<br><br>Audio<br>ID : 2<br>Format : AAC<br>Format/Info : Advanced Audio Codec<br>Format profile : LC<br>Codec ID : mp4a-40-2<br>Duration : 2 h 51 min<br>Bit rate mode : Variable<br>Bit rate : 96.0 kb/s<br>Channel(s) : 2 channels<br>Channel positions : Front: L R<br>Sampling rate : 48.0 kHz<br>Frame rate : 46.875 FPS (1024 SPF)<br>Compression mode : Lossy<br>Stream size : 118 MiB (8%)<br>Title : Stereo / Stereo<br>Language : English<br>Default : Yes<br>Alternate group : 1<br>Encoded date : UTC 2017-02-12 20:24:00<br>Tagged date : UTC 2017-02-12 20:24:00<br><br></pre>",
|
||||
"created_at": "2018-03-19 06:01:40"
|
||||
"created_at": "2018-03-19 06:01:40",
|
||||
"created_at_iso": "2018-03-19T06:01:40+01:00"
|
||||
},
|
||||
{
|
||||
"id": 4241,
|
||||
@@ -5323,7 +5414,8 @@
|
||||
"images/torrent/c/4/4/o8jsphfh7rr9.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-02-20 02:46:45"
|
||||
"created_at": "2018-02-20 02:46:45",
|
||||
"created_at_iso": "2018-02-20T02:46:45+01:00"
|
||||
},
|
||||
{
|
||||
"id": 4191,
|
||||
@@ -5364,7 +5456,8 @@
|
||||
"images/torrent/9/6/1/c1szrkxbf6fn.jpg"
|
||||
],
|
||||
"description": null,
|
||||
"created_at": "2018-02-05 05:39:41"
|
||||
"created_at": "2018-02-05 05:39:41",
|
||||
"created_at_iso": "2018-02-05T05:39:41+01:00"
|
||||
},
|
||||
{
|
||||
"id": 4101,
|
||||
@@ -5405,7 +5498,8 @@
|
||||
"images/torrent/7/4/6/9r3ars6pa9cn.jpg"
|
||||
],
|
||||
"description": "<pre><br><br>General<br>Complete name : snis896.mp4<br>Format : MPEG-4<br>Format profile : Base Media / Version 2<br>Codec ID : mp42 (isom/iso2/mp41)<br>File size : 1.40 GiB<br>Duration : 1 h 58 min<br>Overall bit rate mode : Variable<br>Overall bit rate : 1 691 kb/s<br>Encoded date : UTC 2017-05-31 19:30:00<br>Tagged date : UTC 2017-05-31 19:30:00<br>Writing application : HandBrake 1.0.7 2017040900<br><br>Video<br>ID : 1<br>Format : HEVC<br>Format/Info : High Efficiency Video Coding<br>Format profile : Main@L3.1@Main<br>Codec ID : hev1<br>Codec ID/Info : High Efficiency Video Coding<br>Duration : 1 h 58 min<br>Bit rate : 1 588 kb/s<br>Width : 1 280 pixels<br>Height : 720 pixels<br>Display aspect ratio : 16:9<br>Frame rate mode : Constant<br>Frame rate : 30.000 FPS<br>Color space : YUV<br>Chroma subsampling : 4:2:0<br>Bit depth : 8 bits<br>Bits/(Pixel*Frame) : 0.057<br>Stream size : 1.32 GiB (94%)<br>Writing library : x265 2.1:[Windows][GCC 5.3.1][64 bit] 8bit<br>Encoding settings : wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=1 / tu-inter-depth=1 / me=1 / subme=2 / merange=57 / no-rect / no-amp / max-merge=2 / temporal-mvp / no-early-skip / rskip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu-lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=300 / min-keyint=30 / scenecut=40 / rc-lookahead=20 / lookahead-slices=4 / bframes=4 / bframe-bias=0 / b-adapt=2 / ref=3 / limit-refs=3 / no-limit-modes / weightp / no-weightb / aq-mode=1 / qg-size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=3 / psy-rd=2.00 / rdoq-level=0 / psy-rdoq=0.00 / log2-max-poc-lsb=8 / no-rd-refine / signhide / deblock=0:0 / sao / no-sao-non-deblock / b-pyramid / cutree / no-intra-refresh / rc=crf / crf=20.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ipratio=1.40 / pbratio=1.30<br>Encoded date : UTC 2017-05-31 19:30:00<br>Tagged date : UTC 2017-05-31 19:30:00<br>Color range : Limited<br>Color primaries : BT.709<br>Transfer characteristics : BT.709<br>Matrix coefficients : BT.709<br><br>Audio<br>ID : 2<br>Format : AAC<br>Format/Info : Advanced Audio Codec<br>Format profile : LC<br>Codec ID : 40<br>Duration : 1 h 58 min<br>Bit rate mode : Variable<br>Bit rate : 96.0 kb/s<br>Channel(s) : 2 channels<br>Channel positions : Front: L R<br>Sampling rate : 48.0 kHz<br>Frame rate : 46.875 FPS (1024 spf)<br>Compression mode : Lossy<br>Stream size : 81.6 MiB (6%)<br>Title : Stereo / Stereo<br>Default : Yes<br>Alternate group : 1<br>Encoded date : UTC 2017-05-31 19:30:00<br>Tagged date : UTC 2017-05-31 19:30:00<br><br></pre>",
|
||||
"created_at": "2017-12-24 02:51:02"
|
||||
"created_at": "2017-12-24 02:51:02",
|
||||
"created_at_iso": "2017-12-24T02:51:02+01:00"
|
||||
},
|
||||
{
|
||||
"id": 4002,
|
||||
@@ -5446,7 +5540,8 @@
|
||||
"images/torrent/7/d/3/wj64npz8aizr.jpg"
|
||||
],
|
||||
"description": "<p>三上悠亜<br>TEK-071 快感(MUTEKI-2016年1月1日)</p>",
|
||||
"created_at": "2017-11-16 03:02:55"
|
||||
"created_at": "2017-11-16 03:02:55",
|
||||
"created_at_iso": "2017-11-16T03:02:55+01:00"
|
||||
},
|
||||
{
|
||||
"id": 3951,
|
||||
@@ -5487,7 +5582,8 @@
|
||||
"images/torrent/c/1/7/herqbzuq6jj4.jpg"
|
||||
],
|
||||
"description": "<p>三上悠亜<br>TEK-067 Princess Peach(MUTEKI-2015年6月1日)</p>",
|
||||
"created_at": "2017-11-12 14:47:18"
|
||||
"created_at": "2017-11-12 14:47:18",
|
||||
"created_at_iso": "2017-11-12T14:47:18+01:00"
|
||||
},
|
||||
{
|
||||
"id": 16896,
|
||||
@@ -5535,7 +5631,8 @@
|
||||
"images/torrent/8/a/a/ena0fdra1rif.jpg"
|
||||
],
|
||||
"description": "<p>[SSNI-030] Mikami Yua Fan Thanksgiving National Idol x General Users 20 People 'Guttyfan and SEX Economy' Hime Meakuri Special<br><br></p>\n<pre><br><br></pre>",
|
||||
"created_at": "2017-10-15 06:46:48"
|
||||
"created_at": "2017-10-15 06:46:48",
|
||||
"created_at_iso": "2017-10-15T06:46:48+02:00"
|
||||
},
|
||||
{
|
||||
"id": 15273,
|
||||
@@ -5577,7 +5674,8 @@
|
||||
"images/torrent/f/6/5/srlry3vu9kas.jpg"
|
||||
],
|
||||
"description": "<p>SSNI-009 National Idol Life First First Freak!Big Caps 23 Endless Unlimited Sex - Yua Mikami<br><br></p>",
|
||||
"created_at": "2017-10-11 02:33:59"
|
||||
"created_at": "2017-10-11 02:33:59",
|
||||
"created_at_iso": "2017-10-11T02:33:59+02:00"
|
||||
},
|
||||
{
|
||||
"id": 17757,
|
||||
@@ -5623,7 +5721,8 @@
|
||||
"images/torrent/3/1/6/21sudpyouj3f.jpg"
|
||||
],
|
||||
"description": "SSNI-009 Our National Idol First Gangbang! Three raw scenes. 23 big cocks endless unlimited sex ~ Yua Mikami<br><br><pre><br><br></pre>",
|
||||
"created_at": "2017-09-14 01:19:43"
|
||||
"created_at": "2017-09-14 01:19:43",
|
||||
"created_at_iso": "2017-09-14T01:19:43+02:00"
|
||||
},
|
||||
{
|
||||
"id": 17364,
|
||||
@@ -5668,7 +5767,8 @@
|
||||
"images/torrent/f/a/b/tvqctziuy8k2.jpg"
|
||||
],
|
||||
"description": "SNIS-964 Covered In Sweat, ?**, And Saliva: Dripping Wet Sex With A National Pop Star ~ YuA Mikami<br><br><pre><br><br></pre>",
|
||||
"created_at": "2017-09-01 22:56:53"
|
||||
"created_at": "2017-09-01 22:56:53",
|
||||
"created_at_iso": "2017-09-01T22:56:53+02:00"
|
||||
}
|
||||
],
|
||||
"first_page_url": "https://exoticaz.to/api/v1/jackett/torrents?search=yua%20mikami&page=1",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -15,24 +15,24 @@ namespace NzbDrone.Core.Test.Http
|
||||
return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com,172.16.0.0/12", true, null, null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_bypass_proxy()
|
||||
[TestCase("http://eu.httpbin.org/get")]
|
||||
[TestCase("http://google.com/get")]
|
||||
[TestCase("http://localhost:8654/get")]
|
||||
[TestCase("http://172.21.0.1:8989/api/v3/indexer/schema")]
|
||||
public void should_bypass_proxy(string url)
|
||||
{
|
||||
var settings = GetProxySettings();
|
||||
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://eu.httpbin.org/get")).Should().BeTrue();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://google.com/get")).Should().BeTrue();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://localhost:8654/get")).Should().BeTrue();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.21.0.1:8989/api/v3/indexer/schema")).Should().BeTrue();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri(url)).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_bypass_proxy()
|
||||
[TestCase("http://bing.com/get")]
|
||||
[TestCase("http://172.3.0.1:8989/api/v3/indexer/schema")]
|
||||
public void should_not_bypass_proxy(string url)
|
||||
{
|
||||
var settings = GetProxySettings();
|
||||
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://bing.com/get")).Should().BeFalse();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.3.0.1:8989/api/v3/indexer/schema")).Should().BeFalse();
|
||||
Subject.ShouldProxyBeBypassed(settings, new HttpUri(url)).Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ namespace NzbDrone.Core.Test.IndexerTests.BroadcastheNetTests
|
||||
query.Tvrage.Should().BeNull();
|
||||
query.Search.Should().BeNull();
|
||||
query.Category.Should().Be("Episode");
|
||||
query.Name.Should().Be("2023.01.03");
|
||||
query.Name.Should().Be("2023.01.03%");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -275,7 +275,7 @@ namespace NzbDrone.Core.Test.IndexerTests.BroadcastheNetTests
|
||||
query.Tvrage.Should().BeNull();
|
||||
query.Search.Should().Be("The%Late%Show%with%Stephen%Colbert");
|
||||
query.Category.Should().Be("Episode");
|
||||
query.Name.Should().Be("2023.01.03");
|
||||
query.Name.Should().Be("2023.01.03%");
|
||||
}
|
||||
|
||||
private static BroadcastheNetTorrentQuery ParseTorrentQueryFromRequest(HttpRequest httpRequest)
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
<ItemGroup>
|
||||
<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="16.3.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -211,9 +211,20 @@ namespace NzbDrone.Core.Configuration
|
||||
return AuthenticationType.Forms;
|
||||
}
|
||||
|
||||
return Enum.TryParse<AuthenticationType>(_authOptions.Method, out var enumValue)
|
||||
var value = Enum.TryParse<AuthenticationType>(_authOptions.Method, out var enumValue)
|
||||
? enumValue
|
||||
: GetValueEnum("AuthenticationMethod", AuthenticationType.None);
|
||||
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
if (value == AuthenticationType.Basic)
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
{
|
||||
SetValue("AuthenticationMethod", AuthenticationType.Forms);
|
||||
|
||||
return AuthenticationType.Forms;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -389,6 +400,12 @@ namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
SetValue("EnableSsl", false);
|
||||
}
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
if (AuthenticationMethod == AuthenticationType.Basic)
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
{
|
||||
SetValue("AuthenticationMethod", AuthenticationType.Forms);
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteOldValues()
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SQLite;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using Dapper;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Instrumentation;
|
||||
using NzbDrone.Core.Datastore.Events;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using Polly;
|
||||
using Polly.Retry;
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
@@ -40,12 +45,31 @@ namespace NzbDrone.Core.Datastore
|
||||
public class BasicRepository<TModel> : IBasicRepository<TModel>
|
||||
where TModel : ModelBase, new()
|
||||
{
|
||||
private static readonly ILogger Logger = NzbDroneLogger.GetLogger(typeof(BasicRepository<TModel>));
|
||||
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly PropertyInfo _keyProperty;
|
||||
private readonly List<PropertyInfo> _properties;
|
||||
private readonly string _updateSql;
|
||||
private readonly string _insertSql;
|
||||
|
||||
private static ResiliencePipeline RetryStrategy => new ResiliencePipelineBuilder()
|
||||
.AddRetry(new RetryStrategyOptions
|
||||
{
|
||||
ShouldHandle = new PredicateBuilder().Handle<SQLiteException>(ex => ex.ResultCode == SQLiteErrorCode.Busy),
|
||||
Delay = TimeSpan.FromMilliseconds(100),
|
||||
MaxRetryAttempts = 3,
|
||||
BackoffType = DelayBackoffType.Exponential,
|
||||
UseJitter = true,
|
||||
OnRetry = args =>
|
||||
{
|
||||
Logger.Warn(args.Outcome.Exception, "Failed writing to database. Retry #{0}", args.AttemptNumber);
|
||||
|
||||
return default;
|
||||
}
|
||||
})
|
||||
.Build();
|
||||
|
||||
protected readonly IDatabase _database;
|
||||
protected readonly string _table;
|
||||
|
||||
@@ -186,7 +210,9 @@ namespace NzbDrone.Core.Datastore
|
||||
private TModel Insert(IDbConnection connection, IDbTransaction transaction, TModel model)
|
||||
{
|
||||
SqlBuilderExtensions.LogQuery(_insertSql, model);
|
||||
var multi = connection.QueryMultiple(_insertSql, model, transaction);
|
||||
|
||||
var multi = RetryStrategy.Execute(static (state, _) => state.connection.QueryMultiple(state._insertSql, state.model, state.transaction), (connection, _insertSql, model, transaction));
|
||||
|
||||
var multiRead = multi.Read();
|
||||
var id = (int)(multiRead.First().id ?? multiRead.First().Id);
|
||||
_keyProperty.SetValue(model, id);
|
||||
@@ -383,7 +409,7 @@ namespace NzbDrone.Core.Datastore
|
||||
|
||||
SqlBuilderExtensions.LogQuery(sql, model);
|
||||
|
||||
connection.Execute(sql, model, transaction: transaction);
|
||||
RetryStrategy.Execute(static (state, _) => state.connection.Execute(state.sql, state.model, transaction: state.transaction), (connection, sql, model, transaction));
|
||||
}
|
||||
|
||||
private void UpdateFields(IDbConnection connection, IDbTransaction transaction, IList<TModel> models, List<PropertyInfo> propertiesToUpdate)
|
||||
@@ -395,7 +421,7 @@ namespace NzbDrone.Core.Datastore
|
||||
SqlBuilderExtensions.LogQuery(sql, model);
|
||||
}
|
||||
|
||||
connection.Execute(sql, models, transaction: transaction);
|
||||
RetryStrategy.Execute(static (state, _) => state.connection.Execute(state.sql, state.models, transaction: state.transaction), (connection, sql, models, transaction));
|
||||
}
|
||||
|
||||
protected virtual SqlBuilder PagedBuilder() => Builder();
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace NzbDrone.Core.Datastore
|
||||
JournalMode = OsInfo.IsOsx ? SQLiteJournalModeEnum.Truncate : SQLiteJournalModeEnum.Wal,
|
||||
Pooling = true,
|
||||
Version = 3,
|
||||
BusyTimeout = 100
|
||||
BusyTimeout = 1000
|
||||
};
|
||||
|
||||
if (OsInfo.IsOsx)
|
||||
|
||||
@@ -7,7 +7,7 @@ using NzbDrone.Common.Instrumentation;
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Maintenance(MigrationStage.BeforeAll, TransactionBehavior.None)]
|
||||
public class DatabaseEngineVersionCheck : FluentMigrator.Migration
|
||||
public class DatabaseEngineVersionCheck : ForwardOnlyMigration
|
||||
{
|
||||
protected readonly Logger _logger;
|
||||
|
||||
@@ -22,11 +22,6 @@ namespace NzbDrone.Core.Datastore.Migration
|
||||
IfDatabase("postgres").Execute.WithConnection(LogPostgresVersion);
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
// No-op
|
||||
}
|
||||
|
||||
private void LogSqliteVersion(IDbConnection conn, IDbTransaction tran)
|
||||
{
|
||||
using (var versionCmd = conn.CreateCommand())
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,6 @@ using FluentMigrator.Runner.Generators;
|
||||
using FluentMigrator.Runner.Initialization;
|
||||
using FluentMigrator.Runner.Processors;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NLog;
|
||||
using NLog.Extensions.Logging;
|
||||
|
||||
@@ -20,13 +19,10 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
public class MigrationController : IMigrationController
|
||||
{
|
||||
private readonly Logger _logger;
|
||||
private readonly ILoggerProvider _migrationLoggerProvider;
|
||||
|
||||
public MigrationController(Logger logger,
|
||||
ILoggerProvider migrationLoggerProvider)
|
||||
public MigrationController(Logger logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_migrationLoggerProvider = migrationLoggerProvider;
|
||||
}
|
||||
|
||||
public void Migrate(string connectionString, MigrationContext migrationContext, DatabaseType databaseType)
|
||||
@@ -35,16 +31,13 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
|
||||
_logger.Info("*** Migrating {0} ***", connectionString);
|
||||
|
||||
ServiceProvider serviceProvider;
|
||||
|
||||
var db = databaseType == DatabaseType.SQLite ? "sqlite" : "postgres";
|
||||
|
||||
serviceProvider = new ServiceCollection()
|
||||
var serviceProvider = new ServiceCollection()
|
||||
.AddLogging(b => b.AddNLog())
|
||||
.AddFluentMigratorCore()
|
||||
.Configure<RunnerOptions>(cfg => cfg.IncludeUntaggedMaintenances = true)
|
||||
.ConfigureRunner(
|
||||
builder => builder
|
||||
.ConfigureRunner(builder => builder
|
||||
.AddPostgres()
|
||||
.AddNzbDroneSQLite()
|
||||
.WithGlobalConnectionString(connectionString)
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
using FluentMigrator;
|
||||
using System.Data;
|
||||
using FluentMigrator;
|
||||
using FluentMigrator.Builders.Create;
|
||||
using FluentMigrator.Builders.Create.Table;
|
||||
using FluentMigrator.Runner;
|
||||
using FluentMigrator.Runner.BatchParser;
|
||||
using FluentMigrator.Runner.Generators;
|
||||
using FluentMigrator.Runner.Generators.SQLite;
|
||||
using FluentMigrator.Runner.Initialization;
|
||||
using FluentMigrator.Runner.Processors;
|
||||
using FluentMigrator.Runner.Processors.SQLite;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
{
|
||||
@@ -16,23 +22,49 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
return expressionRoot.Table(name).WithColumn("Id").AsInt32().PrimaryKey().Identity();
|
||||
}
|
||||
|
||||
public static void AddParameter(this System.Data.IDbCommand command, object value)
|
||||
public static IDbCommand CreateCommand(this IDbConnection conn, IDbTransaction tran, string query)
|
||||
{
|
||||
var command = conn.CreateCommand();
|
||||
command.Transaction = tran;
|
||||
command.CommandText = query;
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
public static void AddParameter(this IDbCommand command, object value)
|
||||
{
|
||||
var parameter = command.CreateParameter();
|
||||
parameter.Value = value;
|
||||
command.Parameters.Add(parameter);
|
||||
}
|
||||
|
||||
public static IMigrationRunnerBuilder AddNzbDroneSQLite(this IMigrationRunnerBuilder builder)
|
||||
public static IMigrationRunnerBuilder AddNzbDroneSQLite(this IMigrationRunnerBuilder builder, bool binaryGuid = false, bool useStrictTables = false)
|
||||
{
|
||||
builder.Services
|
||||
.AddTransient<SQLiteBatchParser>()
|
||||
.AddScoped<SQLiteDbFactory>()
|
||||
.AddScoped<NzbDroneSQLiteProcessor>()
|
||||
.AddScoped<NzbDroneSQLiteProcessor>(sp =>
|
||||
{
|
||||
var factory = sp.GetService<SQLiteDbFactory>();
|
||||
var logger = sp.GetService<ILogger<NzbDroneSQLiteProcessor>>();
|
||||
var options = sp.GetService<IOptionsSnapshot<ProcessorOptions>>();
|
||||
var connectionStringAccessor = sp.GetService<IConnectionStringAccessor>();
|
||||
var sqliteQuoter = new SQLiteQuoter(false);
|
||||
return new NzbDroneSQLiteProcessor(factory, sp.GetService<SQLiteGenerator>(), logger, options, connectionStringAccessor, sp, sqliteQuoter);
|
||||
})
|
||||
.AddScoped<ISQLiteTypeMap>(_ => new NzbDroneSQLiteTypeMap(useStrictTables))
|
||||
.AddScoped<IMigrationProcessor>(sp => sp.GetRequiredService<NzbDroneSQLiteProcessor>())
|
||||
.AddScoped<SQLiteQuoter>()
|
||||
.AddScoped<SQLiteGenerator>()
|
||||
.AddScoped(
|
||||
sp =>
|
||||
{
|
||||
var typeMap = sp.GetRequiredService<ISQLiteTypeMap>();
|
||||
return new SQLiteGenerator(
|
||||
new SQLiteQuoter(binaryGuid),
|
||||
typeMap,
|
||||
new OptionsWrapper<GeneratorOptions>(new GeneratorOptions()));
|
||||
})
|
||||
.AddScoped<IMigrationGenerator>(sp => sp.GetRequiredService<SQLiteGenerator>());
|
||||
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
{
|
||||
public class NzbDroneSQLiteProcessor : SQLiteProcessor
|
||||
{
|
||||
private readonly SQLiteQuoter _quoter;
|
||||
|
||||
public NzbDroneSQLiteProcessor(SQLiteDbFactory factory,
|
||||
SQLiteGenerator generator,
|
||||
ILogger<NzbDroneSQLiteProcessor> logger,
|
||||
@@ -24,6 +26,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
SQLiteQuoter quoter)
|
||||
: base(factory, generator, logger, options, connectionStringAccessor, serviceProvider, quoter)
|
||||
{
|
||||
_quoter = quoter;
|
||||
}
|
||||
|
||||
public override void Process(AlterColumnExpression expression)
|
||||
@@ -35,7 +38,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
|
||||
if (columnIndex == -1)
|
||||
{
|
||||
throw new ApplicationException(string.Format("Column {0} does not exist on table {1}.", expression.Column.Name, expression.TableName));
|
||||
throw new ApplicationException($"Column {expression.Column.Name} does not exist on table {expression.TableName}.");
|
||||
}
|
||||
|
||||
columnDefinitions[columnIndex] = expression.Column;
|
||||
@@ -45,6 +48,28 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
ProcessAlterTable(tableDefinition);
|
||||
}
|
||||
|
||||
public override void Process(AlterDefaultConstraintExpression expression)
|
||||
{
|
||||
var tableDefinition = GetTableSchema(expression.TableName);
|
||||
|
||||
var columnDefinitions = tableDefinition.Columns.ToList();
|
||||
var columnIndex = columnDefinitions.FindIndex(c => c.Name == expression.ColumnName);
|
||||
|
||||
if (columnIndex == -1)
|
||||
{
|
||||
throw new ApplicationException($"Column {expression.ColumnName} does not exist on table {expression.TableName}.");
|
||||
}
|
||||
|
||||
var changedColumn = columnDefinitions[columnIndex];
|
||||
changedColumn.DefaultValue = expression.DefaultValue;
|
||||
|
||||
columnDefinitions[columnIndex] = changedColumn;
|
||||
|
||||
tableDefinition.Columns = columnDefinitions;
|
||||
|
||||
ProcessAlterTable(tableDefinition);
|
||||
}
|
||||
|
||||
public override void Process(DeleteColumnExpression expression)
|
||||
{
|
||||
var tableDefinition = GetTableSchema(expression.TableName);
|
||||
@@ -62,7 +87,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
|
||||
if (columnsToRemove.Any())
|
||||
{
|
||||
throw new ApplicationException(string.Format("Column {0} does not exist on table {1}.", columnsToRemove.First(), expression.TableName));
|
||||
throw new ApplicationException($"Column {columnsToRemove.First()} does not exist on table {expression.TableName}.");
|
||||
}
|
||||
|
||||
ProcessAlterTable(tableDefinition);
|
||||
@@ -78,12 +103,12 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
|
||||
if (columnIndex == -1)
|
||||
{
|
||||
throw new ApplicationException(string.Format("Column {0} does not exist on table {1}.", expression.OldName, expression.TableName));
|
||||
throw new ApplicationException($"Column {expression.OldName} does not exist on table {expression.TableName}.");
|
||||
}
|
||||
|
||||
if (columnDefinitions.Any(c => c.Name == expression.NewName))
|
||||
{
|
||||
throw new ApplicationException(string.Format("Column {0} already exists on table {1}.", expression.NewName, expression.TableName));
|
||||
throw new ApplicationException($"Column {expression.NewName} already exists on table {expression.TableName}.");
|
||||
}
|
||||
|
||||
oldColumnDefinitions[columnIndex] = (ColumnDefinition)columnDefinitions[columnIndex].Clone();
|
||||
@@ -128,21 +153,20 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
}
|
||||
|
||||
// What is the cleanest way to do this? Add function to Generator?
|
||||
var quoter = new SQLiteQuoter();
|
||||
var columnsToInsert = string.Join(", ", tableDefinition.Columns.Select(c => quoter.QuoteColumnName(c.Name)));
|
||||
var columnsToFetch = string.Join(", ", (oldColumnDefinitions ?? tableDefinition.Columns).Select(c => quoter.QuoteColumnName(c.Name)));
|
||||
var columnsToInsert = string.Join(", ", tableDefinition.Columns.Select(c => _quoter.QuoteColumnName(c.Name)));
|
||||
var columnsToFetch = string.Join(", ", (oldColumnDefinitions ?? tableDefinition.Columns).Select(c => _quoter.QuoteColumnName(c.Name)));
|
||||
|
||||
Process(new CreateTableExpression() { TableName = tempTableName, Columns = tableDefinition.Columns.ToList() });
|
||||
Process(new CreateTableExpression { TableName = tempTableName, Columns = tableDefinition.Columns.ToList() });
|
||||
|
||||
Process(string.Format("INSERT INTO {0} ({1}) SELECT {2} FROM {3}", quoter.QuoteTableName(tempTableName), columnsToInsert, columnsToFetch, quoter.QuoteTableName(tableName)));
|
||||
Process($"INSERT INTO {_quoter.QuoteTableName(tempTableName)} ({columnsToInsert}) SELECT {columnsToFetch} FROM {_quoter.QuoteTableName(tableName)}");
|
||||
|
||||
Process(new DeleteTableExpression() { TableName = tableName });
|
||||
Process(new DeleteTableExpression { TableName = tableName });
|
||||
|
||||
Process(new RenameTableExpression() { OldName = tempTableName, NewName = tableName });
|
||||
Process(new RenameTableExpression { OldName = tempTableName, NewName = tableName });
|
||||
|
||||
foreach (var index in tableDefinition.Indexes)
|
||||
{
|
||||
Process(new CreateIndexExpression() { Index = index });
|
||||
Process(new CreateIndexExpression { Index = index });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
using System.Data;
|
||||
using FluentMigrator.Runner.Generators.Base;
|
||||
using FluentMigrator.Runner.Generators.SQLite;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
// Based on https://github.com/fluentmigrator/fluentmigrator/blob/v6.2.0/src/FluentMigrator.Runner.SQLite/Generators/SQLite/SQLiteTypeMap.cs
|
||||
public sealed class NzbDroneSQLiteTypeMap : TypeMapBase, ISQLiteTypeMap
|
||||
{
|
||||
public bool UseStrictTables { get; }
|
||||
|
||||
public NzbDroneSQLiteTypeMap(bool useStrictTables = false)
|
||||
{
|
||||
UseStrictTables = useStrictTables;
|
||||
|
||||
SetupTypeMaps();
|
||||
}
|
||||
|
||||
// Must be kept in sync with upstream
|
||||
protected override void SetupTypeMaps()
|
||||
{
|
||||
SetTypeMap(DbType.Binary, "BLOB");
|
||||
SetTypeMap(DbType.Byte, "INTEGER");
|
||||
SetTypeMap(DbType.Int16, "INTEGER");
|
||||
SetTypeMap(DbType.Int32, "INTEGER");
|
||||
SetTypeMap(DbType.Int64, "INTEGER");
|
||||
SetTypeMap(DbType.SByte, "INTEGER");
|
||||
SetTypeMap(DbType.UInt16, "INTEGER");
|
||||
SetTypeMap(DbType.UInt32, "INTEGER");
|
||||
SetTypeMap(DbType.UInt64, "INTEGER");
|
||||
|
||||
if (!UseStrictTables)
|
||||
{
|
||||
SetTypeMap(DbType.Currency, "NUMERIC");
|
||||
SetTypeMap(DbType.Decimal, "NUMERIC");
|
||||
SetTypeMap(DbType.Double, "NUMERIC");
|
||||
SetTypeMap(DbType.Single, "NUMERIC");
|
||||
SetTypeMap(DbType.VarNumeric, "NUMERIC");
|
||||
SetTypeMap(DbType.Date, "DATETIME");
|
||||
SetTypeMap(DbType.DateTime, "DATETIME");
|
||||
SetTypeMap(DbType.DateTime2, "DATETIME");
|
||||
SetTypeMap(DbType.Time, "DATETIME");
|
||||
SetTypeMap(DbType.Guid, "UNIQUEIDENTIFIER");
|
||||
|
||||
// Custom so that we can use DateTimeOffset in Postgres for appropriate DB typing
|
||||
SetTypeMap(DbType.DateTimeOffset, "DATETIME");
|
||||
}
|
||||
else
|
||||
{
|
||||
SetTypeMap(DbType.Currency, "TEXT");
|
||||
SetTypeMap(DbType.Decimal, "TEXT");
|
||||
SetTypeMap(DbType.Double, "REAL");
|
||||
SetTypeMap(DbType.Single, "REAL");
|
||||
SetTypeMap(DbType.VarNumeric, "TEXT");
|
||||
SetTypeMap(DbType.Date, "TEXT");
|
||||
SetTypeMap(DbType.DateTime, "TEXT");
|
||||
SetTypeMap(DbType.DateTime2, "TEXT");
|
||||
SetTypeMap(DbType.Time, "TEXT");
|
||||
SetTypeMap(DbType.Guid, "TEXT");
|
||||
|
||||
// Custom so that we can use DateTimeOffset in Postgres for appropriate DB typing
|
||||
SetTypeMap(DbType.DateTimeOffset, "TEXT");
|
||||
}
|
||||
|
||||
SetTypeMap(DbType.AnsiString, "TEXT");
|
||||
SetTypeMap(DbType.String, "TEXT");
|
||||
SetTypeMap(DbType.AnsiStringFixedLength, "TEXT");
|
||||
SetTypeMap(DbType.StringFixedLength, "TEXT");
|
||||
SetTypeMap(DbType.Boolean, "INTEGER");
|
||||
}
|
||||
|
||||
public override string GetTypeMap(DbType type, int? size, int? precision)
|
||||
{
|
||||
return base.GetTypeMap(type, size: null, precision: null);
|
||||
}
|
||||
}
|
||||
@@ -120,7 +120,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
column.IsPrimaryKey = upper.Contains("PRIMARY KEY");
|
||||
column.IsIdentity = upper.Contains("AUTOINCREMENT");
|
||||
column.IsNullable = !upper.Contains("NOT NULL") && !upper.Contains("PRIMARY KEY");
|
||||
column.IsUnique = upper.Contains("UNIQUE") || upper.Contains("PRIMARY KEY");
|
||||
column.IsUnique = upper.Contains("UNIQUE");
|
||||
}
|
||||
|
||||
return column;
|
||||
|
||||
@@ -424,8 +424,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
}
|
||||
catch (HttpException ex)
|
||||
{
|
||||
_logger.Debug("qbitTorrent authentication failed.");
|
||||
if (ex.Response.StatusCode == HttpStatusCode.Forbidden)
|
||||
_logger.Debug(ex, "qbitTorrent authentication failed.");
|
||||
if (ex.Response.StatusCode is HttpStatusCode.Unauthorized or HttpStatusCode.Forbidden)
|
||||
{
|
||||
throw new DownloadClientAuthenticationException("Failed to authenticate with qBittorrent.", ex);
|
||||
}
|
||||
@@ -437,9 +437,9 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
throw new DownloadClientUnavailableException("Failed to connect to qBittorrent, please check your settings.", ex);
|
||||
}
|
||||
|
||||
if (response.Content != "Ok.")
|
||||
// returns "Fails." on bad login
|
||||
if (response.Content.IsNotNullOrWhiteSpace() && response.Content != "Ok.")
|
||||
{
|
||||
// returns "Fails." on bad login
|
||||
_logger.Debug("qbitTorrent authentication failed.");
|
||||
throw new DownloadClientAuthenticationException("Failed to authenticate with qBittorrent.");
|
||||
}
|
||||
|
||||
@@ -669,7 +669,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var advancedSeasonRegex = new Regex(@"\b(?:(?<season>\d+)(?:st|nd|rd|th) Season|Season (?<season>\d+))\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
var seasonCharactersRegex = new Regex(@"(I{2,})$", RegexOptions.Compiled);
|
||||
var seasonNumberRegex = new Regex(@"\b(?<!Part[- ._])(?<!\d[/])(?:S)?(?<season>[2-9])$", RegexOptions.Compiled);
|
||||
var seasonNumberRegex = new Regex(@"\b(?<!(Part|No\.)[- ._])(?<!\d[/])(?<!\#)(?:S)?(?<season>[2-9])$", RegexOptions.Compiled);
|
||||
|
||||
foreach (var title in titles)
|
||||
{
|
||||
|
||||
@@ -1,341 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using AngleSharp.Html.Parser;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers.Exceptions;
|
||||
using NzbDrone.Core.Indexers.Settings;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
public class AnimeTorrents : TorrentIndexerBase<AnimeTorrentsSettings>
|
||||
{
|
||||
public override string Name => "AnimeTorrents";
|
||||
public override string[] IndexerUrls => new[] { "https://animetorrents.me/" };
|
||||
public override string Description => "Definitive source for anime and manga";
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
||||
public override bool SupportsPagination => true;
|
||||
public override TimeSpan RateLimit => TimeSpan.FromSeconds(4);
|
||||
public override IndexerCapabilities Capabilities => SetCapabilities();
|
||||
|
||||
public AnimeTorrents(IIndexerHttpClient httpClient, IEventAggregator eventAggregator, IIndexerStatusService indexerStatusService, IConfigService configService, Logger logger)
|
||||
: base(httpClient, eventAggregator, indexerStatusService, configService, logger)
|
||||
{
|
||||
}
|
||||
|
||||
public override IIndexerRequestGenerator GetRequestGenerator()
|
||||
{
|
||||
return new AnimeTorrentsRequestGenerator(Settings, Capabilities);
|
||||
}
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
{
|
||||
return new AnimeTorrentsParser(Settings, Capabilities.Categories);
|
||||
}
|
||||
|
||||
protected override bool CheckIfLoginNeeded(HttpResponse httpResponse)
|
||||
{
|
||||
if (httpResponse.Content.Contains("Access Denied!") || httpResponse.Content.Contains("login.php"))
|
||||
{
|
||||
throw new IndexerAuthException("AnimeTorrents authentication with cookies failed.");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override IDictionary<string, string> GetCookies()
|
||||
{
|
||||
return CookieUtil.CookieHeaderToDictionary(Settings.Cookie);
|
||||
}
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
{
|
||||
var caps = new IndexerCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
{
|
||||
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
|
||||
},
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q
|
||||
}
|
||||
};
|
||||
|
||||
caps.Categories.AddCategoryMapping(1, NewznabStandardCategory.MoviesSD, "Anime Movie");
|
||||
caps.Categories.AddCategoryMapping(6, NewznabStandardCategory.MoviesHD, "Anime Movie HD");
|
||||
caps.Categories.AddCategoryMapping(2, NewznabStandardCategory.TVAnime, "Anime Series");
|
||||
caps.Categories.AddCategoryMapping(7, NewznabStandardCategory.TVAnime, "Anime Series HD");
|
||||
caps.Categories.AddCategoryMapping(5, NewznabStandardCategory.XXXDVD, "Hentai (censored)");
|
||||
caps.Categories.AddCategoryMapping(9, NewznabStandardCategory.XXXDVD, "Hentai (censored) HD");
|
||||
caps.Categories.AddCategoryMapping(4, NewznabStandardCategory.XXXDVD, "Hentai (un-censored)");
|
||||
caps.Categories.AddCategoryMapping(8, NewznabStandardCategory.XXXDVD, "Hentai (un-censored) HD");
|
||||
caps.Categories.AddCategoryMapping(13, NewznabStandardCategory.BooksForeign, "Light Novel");
|
||||
caps.Categories.AddCategoryMapping(3, NewznabStandardCategory.BooksComics, "Manga");
|
||||
caps.Categories.AddCategoryMapping(10, NewznabStandardCategory.BooksComics, "Manga 18+");
|
||||
caps.Categories.AddCategoryMapping(11, NewznabStandardCategory.TVAnime, "OVA");
|
||||
caps.Categories.AddCategoryMapping(12, NewznabStandardCategory.TVAnime, "OVA HD");
|
||||
caps.Categories.AddCategoryMapping(14, NewznabStandardCategory.BooksComics, "Doujin Anime");
|
||||
caps.Categories.AddCategoryMapping(15, NewznabStandardCategory.XXXDVD, "Doujin Anime 18+");
|
||||
caps.Categories.AddCategoryMapping(16, NewznabStandardCategory.AudioForeign, "Doujin Music");
|
||||
caps.Categories.AddCategoryMapping(17, NewznabStandardCategory.BooksComics, "Doujinshi");
|
||||
caps.Categories.AddCategoryMapping(18, NewznabStandardCategory.BooksComics, "Doujinshi 18+");
|
||||
caps.Categories.AddCategoryMapping(19, NewznabStandardCategory.Audio, "OST");
|
||||
caps.Categories.AddCategoryMapping(20, NewznabStandardCategory.AudioAudiobook, "Audiobooks");
|
||||
|
||||
return caps;
|
||||
}
|
||||
}
|
||||
|
||||
public class AnimeTorrentsRequestGenerator : IIndexerRequestGenerator
|
||||
{
|
||||
private readonly AnimeTorrentsSettings _settings;
|
||||
private readonly IndexerCapabilities _capabilities;
|
||||
|
||||
public AnimeTorrentsRequestGenerator(AnimeTorrentsSettings settings, IndexerCapabilities capabilities)
|
||||
{
|
||||
_settings = settings;
|
||||
_capabilities = capabilities;
|
||||
}
|
||||
|
||||
public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
var searchTerm = $"{searchCriteria.SanitizedSearchTerm}";
|
||||
|
||||
foreach (var category in GetTrackerCategories(searchTerm, searchCriteria))
|
||||
{
|
||||
pageableRequests.Add(GetPagedRequests(searchTerm, category, searchCriteria));
|
||||
}
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
|
||||
public IndexerPageableRequestChain GetSearchRequests(MusicSearchCriteria searchCriteria)
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
var searchTerm = $"{searchCriteria.SanitizedSearchTerm}";
|
||||
|
||||
foreach (var category in GetTrackerCategories(searchTerm, searchCriteria))
|
||||
{
|
||||
pageableRequests.Add(GetPagedRequests(searchTerm, category, searchCriteria));
|
||||
}
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
|
||||
public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
var searchTerm = $"{searchCriteria.SanitizedSearchTerm}";
|
||||
|
||||
foreach (var category in GetTrackerCategories(searchTerm, searchCriteria))
|
||||
{
|
||||
pageableRequests.Add(GetPagedRequests(searchTerm, category, searchCriteria));
|
||||
}
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
|
||||
public IndexerPageableRequestChain GetSearchRequests(BookSearchCriteria searchCriteria)
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
var searchTerm = $"{searchCriteria.SanitizedSearchTerm}";
|
||||
|
||||
foreach (var category in GetTrackerCategories(searchTerm, searchCriteria))
|
||||
{
|
||||
pageableRequests.Add(GetPagedRequests(searchTerm, category, searchCriteria));
|
||||
}
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
|
||||
public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria)
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
var searchTerm = $"{searchCriteria.SanitizedSearchTerm}";
|
||||
|
||||
foreach (var category in GetTrackerCategories(searchTerm, searchCriteria))
|
||||
{
|
||||
pageableRequests.Add(GetPagedRequests(searchTerm, category, searchCriteria));
|
||||
}
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
|
||||
private IEnumerable<IndexerRequest> GetPagedRequests(string term, string category, SearchCriteriaBase searchCriteria)
|
||||
{
|
||||
var searchUrl = _settings.BaseUrl + "ajax/torrents_data.php";
|
||||
|
||||
// replace non-word characters with % (wildcard)
|
||||
var searchString = Regex.Replace(term.Trim(), @"[\W]+", "%");
|
||||
|
||||
var page = searchCriteria.Limit is > 0 && searchCriteria.Offset is > 0 ? (int)(searchCriteria.Offset / searchCriteria.Limit) + 1 : 1;
|
||||
|
||||
var refererUri = new HttpUri(_settings.BaseUrl)
|
||||
.CombinePath("/torrents.php")
|
||||
.AddQueryParam("cat", $"{category}");
|
||||
|
||||
if (_settings.DownloadableOnly)
|
||||
{
|
||||
refererUri = refererUri.AddQueryParam("dlable", "1");
|
||||
}
|
||||
|
||||
var requestBuilder = new HttpRequestBuilder(searchUrl)
|
||||
.AddQueryParam("total", "100") // Assuming the total number of pages
|
||||
.AddQueryParam("cat", $"{category}")
|
||||
.AddQueryParam("searchin", "filename")
|
||||
.AddQueryParam("search", searchString)
|
||||
.AddQueryParam("page", page)
|
||||
.SetHeader("X-Requested-With", "XMLHttpRequest")
|
||||
.SetHeader("Referer", refererUri.FullUri)
|
||||
.Accept(HttpAccept.Html);
|
||||
|
||||
if (_settings.DownloadableOnly)
|
||||
{
|
||||
requestBuilder.AddQueryParam("dlable", "1");
|
||||
}
|
||||
|
||||
yield return new IndexerRequest(requestBuilder.Build());
|
||||
}
|
||||
|
||||
private List<string> GetTrackerCategories(string term, SearchCriteriaBase searchCriteria)
|
||||
{
|
||||
var searchTerm = term.Trim();
|
||||
|
||||
var categoryMapping = _capabilities.Categories
|
||||
.MapTorznabCapsToTrackers(searchCriteria.Categories)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
|
||||
return searchTerm.IsNullOrWhiteSpace() && categoryMapping.Count == 2
|
||||
? categoryMapping
|
||||
: new List<string> { categoryMapping.FirstIfSingleOrDefault("0") };
|
||||
}
|
||||
|
||||
public Func<IDictionary<string, string>> GetCookies { get; set; }
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
}
|
||||
|
||||
public class AnimeTorrentsParser : IParseIndexerResponse
|
||||
{
|
||||
private readonly AnimeTorrentsSettings _settings;
|
||||
private readonly IndexerCapabilitiesCategories _categories;
|
||||
|
||||
public AnimeTorrentsParser(AnimeTorrentsSettings settings, IndexerCapabilitiesCategories categories)
|
||||
{
|
||||
_settings = settings;
|
||||
_categories = categories;
|
||||
}
|
||||
|
||||
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
|
||||
{
|
||||
var releaseInfos = new List<ReleaseInfo>();
|
||||
|
||||
var parser = new HtmlParser();
|
||||
using var dom = parser.ParseDocument(indexerResponse.Content);
|
||||
|
||||
var rows = dom.QuerySelectorAll("table tr");
|
||||
foreach (var (row, index) in rows.Skip(1).Select((v, i) => (v, i)))
|
||||
{
|
||||
var downloadVolumeFactor = row.QuerySelector("img[alt=\"Gold Torrent\"]") != null ? 0 : row.QuerySelector("img[alt=\"Silver Torrent\"]") != null ? 0.5 : 1;
|
||||
|
||||
// skip non-freeleech results when freeleech only is set
|
||||
if (_settings.FreeleechOnly && downloadVolumeFactor != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var qTitleLink = row.QuerySelector("td:nth-of-type(2) a:nth-of-type(1)");
|
||||
var title = qTitleLink?.TextContent.Trim();
|
||||
|
||||
// If we search and get no results, we still get a table just with no info.
|
||||
if (title.IsNullOrWhiteSpace())
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
var infoUrl = qTitleLink?.GetAttribute("href");
|
||||
|
||||
// newbie users don't see DL links
|
||||
// use details link as placeholder
|
||||
// skipping the release prevents newbie users from adding the tracker (empty result)
|
||||
var downloadUrl = row.QuerySelector("td:nth-of-type(3) a")?.GetAttribute("href") ?? infoUrl;
|
||||
|
||||
var connections = row.QuerySelector("td:nth-of-type(8)").TextContent.Trim().Split('/', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);
|
||||
var seeders = ParseUtil.CoerceInt(connections[0]);
|
||||
var leechers = ParseUtil.CoerceInt(connections[1]);
|
||||
var grabs = ParseUtil.CoerceInt(connections[2]);
|
||||
|
||||
var categoryLink = row.QuerySelector("td:nth-of-type(1) a")?.GetAttribute("href") ?? string.Empty;
|
||||
var categoryId = ParseUtil.GetArgumentFromQueryString(categoryLink, "cat");
|
||||
|
||||
var publishedDate = DateTime.ParseExact(row.QuerySelector("td:nth-of-type(5)").TextContent, "dd MMM yy", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
|
||||
|
||||
if (publishedDate.Date == DateTime.Today)
|
||||
{
|
||||
publishedDate = publishedDate.Date + DateTime.Now.TimeOfDay - TimeSpan.FromMinutes(index);
|
||||
}
|
||||
|
||||
var release = new TorrentInfo
|
||||
{
|
||||
Guid = infoUrl,
|
||||
InfoUrl = infoUrl,
|
||||
DownloadUrl = downloadUrl,
|
||||
Title = title,
|
||||
Categories = _categories.MapTrackerCatToNewznab(categoryId),
|
||||
PublishDate = publishedDate,
|
||||
Size = ParseUtil.GetBytes(row.QuerySelector("td:nth-of-type(6)").TextContent.Trim()),
|
||||
Seeders = seeders,
|
||||
Peers = leechers + seeders,
|
||||
Grabs = grabs,
|
||||
DownloadVolumeFactor = downloadVolumeFactor,
|
||||
UploadVolumeFactor = 1,
|
||||
Genres = row.QuerySelectorAll("td:nth-of-type(2) a.tortags").Select(t => t.TextContent.Trim()).ToList()
|
||||
};
|
||||
|
||||
var uploadFactor = row.QuerySelector("img[alt*=\"x Multiplier Torrent\"]")?.GetAttribute("alt");
|
||||
if (uploadFactor != null)
|
||||
{
|
||||
release.UploadVolumeFactor = ParseUtil.CoerceDouble(uploadFactor.Split('x')[0]);
|
||||
}
|
||||
|
||||
releaseInfos.Add(release);
|
||||
}
|
||||
|
||||
return releaseInfos.ToArray();
|
||||
}
|
||||
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
}
|
||||
|
||||
public class AnimeTorrentsSettings : CookieTorrentBaseSettings
|
||||
{
|
||||
public AnimeTorrentsSettings()
|
||||
{
|
||||
FreeleechOnly = false;
|
||||
DownloadableOnly = false;
|
||||
}
|
||||
|
||||
[FieldDefinition(4, Label = "Freeleech Only", Type = FieldType.Checkbox, HelpText = "Show freeleech torrents only")]
|
||||
public bool FreeleechOnly { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "Downloadable Only", Type = FieldType.Checkbox, HelpText = "Search downloadable torrents only (enable this only if your account class is Newbie)", Advanced = true)]
|
||||
public bool DownloadableOnly { get; set; }
|
||||
}
|
||||
}
|
||||
156
src/NzbDrone.Core/Indexers/Definitions/AnimeZ.cs
Normal file
156
src/NzbDrone.Core/Indexers/Definitions/AnimeZ.cs
Normal file
@@ -0,0 +1,156 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Exceptions;
|
||||
using NzbDrone.Core.Indexers.Definitions.Avistaz;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
|
||||
namespace NzbDrone.Core.Indexers.Definitions;
|
||||
|
||||
public class AnimeZ : AvistazBase
|
||||
{
|
||||
public override string Name => "AnimeZ";
|
||||
public override string[] IndexerUrls => new[] { "https://animez.to/" };
|
||||
public override string Description => "AnimeZ (ex-AnimeTorrents) is a Private Torrent Tracker for ANIME / MANGA";
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
||||
|
||||
public AnimeZ(IIndexerRepository indexerRepository,
|
||||
IIndexerHttpClient httpClient,
|
||||
IEventAggregator eventAggregator,
|
||||
IIndexerStatusService indexerStatusService,
|
||||
IConfigService configService,
|
||||
Logger logger)
|
||||
: base(indexerRepository, httpClient, eventAggregator, indexerStatusService, configService, logger)
|
||||
{
|
||||
}
|
||||
|
||||
public override IIndexerRequestGenerator GetRequestGenerator()
|
||||
{
|
||||
return new AnimeZRequestGenerator
|
||||
{
|
||||
Settings = Settings,
|
||||
Capabilities = Capabilities,
|
||||
PageSize = PageSize,
|
||||
HttpClient = _httpClient,
|
||||
Logger = _logger
|
||||
};
|
||||
}
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
{
|
||||
return new AnimeZParser(Capabilities.Categories);
|
||||
}
|
||||
|
||||
public override async Task<IndexerDownloadResponse> Download(Uri link)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await base.Download(link).ConfigureAwait(false);
|
||||
}
|
||||
catch (ReleaseDownloadException ex) when (ex.InnerException is HttpException httpException &&
|
||||
httpException.Response.StatusCode is HttpStatusCode.Unauthorized)
|
||||
{
|
||||
await DoLogin().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return await base.Download(link).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
protected override Task<HttpRequest> GetDownloadRequest(Uri link)
|
||||
{
|
||||
var request = new HttpRequestBuilder(link.AbsoluteUri)
|
||||
.Accept(HttpAccept.Json)
|
||||
.SetHeader("Authorization", $"Bearer {Settings.Token}")
|
||||
.Build();
|
||||
|
||||
return Task.FromResult(request);
|
||||
}
|
||||
|
||||
protected override IndexerCapabilities SetCapabilities()
|
||||
{
|
||||
var caps = new IndexerCapabilities
|
||||
{
|
||||
LimitsDefault = PageSize,
|
||||
LimitsMax = PageSize,
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
{
|
||||
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
|
||||
},
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q
|
||||
},
|
||||
BookSearchParams = new List<BookSearchParam>
|
||||
{
|
||||
BookSearchParam.Q,
|
||||
}
|
||||
};
|
||||
|
||||
caps.Categories.AddCategoryMapping("TV", NewznabStandardCategory.TVAnime, "Anime > TV");
|
||||
caps.Categories.AddCategoryMapping("TV_SHORT", NewznabStandardCategory.TVAnime, "Anime > TV Short");
|
||||
caps.Categories.AddCategoryMapping("MOVIE", NewznabStandardCategory.Movies, "Anime > Movie");
|
||||
caps.Categories.AddCategoryMapping("SPECIAL", NewznabStandardCategory.TVAnime, "Anime > Special");
|
||||
caps.Categories.AddCategoryMapping("OVA", NewznabStandardCategory.TVAnime, "Anime > OVA");
|
||||
caps.Categories.AddCategoryMapping("ONA", NewznabStandardCategory.TVAnime, "Anime > ONA");
|
||||
caps.Categories.AddCategoryMapping("MUSIC", NewznabStandardCategory.TVAnime, "Anime > Music");
|
||||
caps.Categories.AddCategoryMapping("MANGA", NewznabStandardCategory.BooksComics, "Manga > Manga");
|
||||
caps.Categories.AddCategoryMapping("NOVEL", NewznabStandardCategory.BooksForeign, "Manga > Novel");
|
||||
caps.Categories.AddCategoryMapping("ONE_SHOT", NewznabStandardCategory.BooksForeign, "Manga > One-Shot");
|
||||
|
||||
return caps;
|
||||
}
|
||||
}
|
||||
|
||||
public class AnimeZRequestGenerator : AvistazRequestGenerator
|
||||
{
|
||||
protected override List<KeyValuePair<string, string>> GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string genre = null)
|
||||
{
|
||||
var parameters = new List<KeyValuePair<string, string>>
|
||||
{
|
||||
{ "limit", Math.Min(PageSize, searchCriteria.Limit.GetValueOrDefault(PageSize)).ToString() }
|
||||
};
|
||||
|
||||
var categoryMappings = Capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories).Distinct().ToList();
|
||||
|
||||
if (categoryMappings.Any())
|
||||
{
|
||||
foreach (var category in categoryMappings)
|
||||
{
|
||||
parameters.Add("format[]", category);
|
||||
}
|
||||
}
|
||||
|
||||
if (searchCriteria.Limit is > 0 && searchCriteria.Offset is > 0)
|
||||
{
|
||||
var page = (int)(searchCriteria.Offset / searchCriteria.Limit) + 1;
|
||||
parameters.Add("page", page.ToString());
|
||||
}
|
||||
|
||||
if (Settings.FreeleechOnly)
|
||||
{
|
||||
parameters.Add("freeleech", "1");
|
||||
}
|
||||
|
||||
return parameters;
|
||||
}
|
||||
}
|
||||
|
||||
public class AnimeZParser(IndexerCapabilitiesCategories categories) : AvistazParserBase
|
||||
{
|
||||
protected override List<IndexerCategory> ParseCategories(AvistazRelease row)
|
||||
{
|
||||
return categories.MapTrackerCatToNewznab(row.Format).ToList();
|
||||
}
|
||||
|
||||
protected override string ParseTitle(AvistazRelease row)
|
||||
{
|
||||
return row.ReleaseTitle.IsNotNullOrWhiteSpace() ? row.ReleaseTitle : row.FileName;
|
||||
}
|
||||
}
|
||||
@@ -37,11 +37,6 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
};
|
||||
}
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
{
|
||||
return new AvistaZParser();
|
||||
}
|
||||
|
||||
protected override IndexerCapabilities SetCapabilities()
|
||||
{
|
||||
var caps = new IndexerCapabilities
|
||||
@@ -81,9 +76,4 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
: $"{searchCriteria.EpisodeSearchString}";
|
||||
}
|
||||
}
|
||||
|
||||
public class AvistaZParser : AvistazParserBase
|
||||
{
|
||||
protected override string TimezoneOffset => "+02:00";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,69 +5,77 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
{
|
||||
public class AvistazRelease
|
||||
{
|
||||
public string Url { get; set; }
|
||||
public string Download { get; set; }
|
||||
public Dictionary<string, string> Category { get; set; }
|
||||
public string Url { get; init; }
|
||||
public string Download { get; init; }
|
||||
public Dictionary<string, string> Category { get; init; }
|
||||
|
||||
[JsonPropertyName("movie_tv")]
|
||||
public AvistazIdInfo MovieTvinfo { get; set; }
|
||||
public AvistazIdInfo MovieTvinfo { get; init; }
|
||||
|
||||
[JsonPropertyName("created_at")]
|
||||
public string CreatedAt { get; set; }
|
||||
[JsonPropertyName("created_at_iso")]
|
||||
public string CreatedAtIso { get; init; }
|
||||
|
||||
[JsonPropertyName("file_name")]
|
||||
public string FileName { get; set; }
|
||||
public string FileName { get; init; }
|
||||
|
||||
[JsonPropertyName("release_title")]
|
||||
public string ReleaseTitle { get; init; }
|
||||
|
||||
[JsonPropertyName("info_hash")]
|
||||
public string InfoHash { get; set; }
|
||||
public int? Leech { get; set; }
|
||||
public int? Completed { get; set; }
|
||||
public int? Seed { get; set; }
|
||||
public string InfoHash { get; init; }
|
||||
|
||||
public int? Leech { get; init; }
|
||||
public int? Completed { get; init; }
|
||||
public int? Seed { get; init; }
|
||||
|
||||
[JsonPropertyName("file_size")]
|
||||
public long? FileSize { get; set; }
|
||||
public long? FileSize { get; init; }
|
||||
|
||||
[JsonPropertyName("file_count")]
|
||||
public int? FileCount { get; set; }
|
||||
public int? FileCount { get; init; }
|
||||
|
||||
[JsonPropertyName("download_multiply")]
|
||||
public double? DownloadMultiply { get; set; }
|
||||
public double? DownloadMultiply { get; init; }
|
||||
|
||||
[JsonPropertyName("upload_multiply")]
|
||||
public double? UploadMultiply { get; set; }
|
||||
public double? UploadMultiply { get; init; }
|
||||
|
||||
[JsonPropertyName("video_quality")]
|
||||
public string VideoQuality { get; set; }
|
||||
public string Type { get; set; }
|
||||
public List<AvistazLanguage> Audio { get; set; }
|
||||
public List<AvistazLanguage> Subtitle { get; set; }
|
||||
public string VideoQuality { get; init; }
|
||||
|
||||
public string Type { get; init; }
|
||||
|
||||
public string Format { get; init; }
|
||||
|
||||
public IReadOnlyCollection<AvistazLanguage> Audio { get; init; }
|
||||
public IReadOnlyCollection<AvistazLanguage> Subtitle { get; init; }
|
||||
}
|
||||
|
||||
public class AvistazLanguage
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Language { get; set; }
|
||||
public int Id { get; init; }
|
||||
public string Language { get; init; }
|
||||
}
|
||||
|
||||
public class AvistazResponse
|
||||
{
|
||||
public List<AvistazRelease> Data { get; set; }
|
||||
public IReadOnlyCollection<AvistazRelease> Data { get; init; }
|
||||
}
|
||||
|
||||
public class AvistazErrorResponse
|
||||
{
|
||||
public string Message { get; set; }
|
||||
public string Message { get; init; }
|
||||
}
|
||||
|
||||
public class AvistazIdInfo
|
||||
{
|
||||
public string Tmdb { get; set; }
|
||||
public string Tvdb { get; set; }
|
||||
public string Imdb { get; set; }
|
||||
public string Tmdb { get; init; }
|
||||
public string Tvdb { get; init; }
|
||||
public string Imdb { get; init; }
|
||||
}
|
||||
|
||||
public class AvistazAuthResponse
|
||||
{
|
||||
public string Token { get; set; }
|
||||
public string Token { get; init; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using FluentValidation.Results;
|
||||
using NLog;
|
||||
@@ -21,7 +20,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
public override TimeSpan RateLimit => TimeSpan.FromSeconds(6);
|
||||
public override IndexerCapabilities Capabilities => SetCapabilities();
|
||||
protected virtual string LoginUrl => Settings.BaseUrl + "api/v1/jackett/auth";
|
||||
private IIndexerRepository _indexerRepository;
|
||||
private readonly IIndexerRepository _indexerRepository;
|
||||
|
||||
public AvistazBase(IIndexerRepository indexerRepository,
|
||||
IIndexerHttpClient httpClient,
|
||||
@@ -57,7 +56,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
{
|
||||
try
|
||||
{
|
||||
Settings.Token = await GetToken();
|
||||
Settings.Token = await GetToken().ConfigureAwait(false);
|
||||
|
||||
if (Definition.Id > 0)
|
||||
{
|
||||
@@ -66,7 +65,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
|
||||
_logger.Debug("Avistaz authentication succeeded.");
|
||||
}
|
||||
catch (HttpException ex) when (ex.Response.StatusCode == HttpStatusCode.Unauthorized)
|
||||
catch (HttpException ex) when (ex.Response.StatusCode is HttpStatusCode.Unauthorized or HttpStatusCode.UnprocessableEntity)
|
||||
{
|
||||
_logger.Warn(ex, "Failed to authenticate with Avistaz");
|
||||
|
||||
@@ -90,11 +89,11 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
{
|
||||
try
|
||||
{
|
||||
await GetToken();
|
||||
await GetToken().ConfigureAwait(false);
|
||||
}
|
||||
catch (HttpException ex)
|
||||
{
|
||||
if (ex.Response.StatusCode == HttpStatusCode.Unauthorized)
|
||||
if (ex.Response.StatusCode is HttpStatusCode.Unauthorized or HttpStatusCode.UnprocessableEntity)
|
||||
{
|
||||
_logger.Warn(ex, "Unauthorized request to indexer");
|
||||
|
||||
@@ -110,10 +109,10 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
{
|
||||
_logger.Warn(ex, "Unable to connect to indexer");
|
||||
|
||||
return new ValidationFailure(string.Empty, "Unable to connect to indexer, check the log above the ValidationFailure for more details");
|
||||
return new ValidationFailure(string.Empty, "Unable to connect to indexer, check the log above the ValidationFailure for more details. " + ex.Message);
|
||||
}
|
||||
|
||||
return await base.TestConnection();
|
||||
return await base.TestConnection().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task<string> GetToken()
|
||||
@@ -121,18 +120,17 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
var requestBuilder = new HttpRequestBuilder(LoginUrl)
|
||||
{
|
||||
LogResponseContent = true,
|
||||
Method = HttpMethod.Post
|
||||
};
|
||||
|
||||
// TODO: Change to HttpAccept.Json after they fix the issue with missing headers
|
||||
var authLoginRequest = requestBuilder
|
||||
.Post()
|
||||
.AddFormParameter("username", Settings.Username)
|
||||
.AddFormParameter("password", Settings.Password)
|
||||
.AddFormParameter("pid", Settings.Pid.Trim())
|
||||
.Accept(HttpAccept.Html)
|
||||
.Accept(HttpAccept.Json)
|
||||
.Build();
|
||||
|
||||
var response = await ExecuteAuth(authLoginRequest);
|
||||
var response = await ExecuteAuth(authLoginRequest).ConfigureAwait(false);
|
||||
|
||||
if (!STJson.TryDeserialize<AvistazAuthResponse>(response.Content, out var authResponse))
|
||||
{
|
||||
|
||||
@@ -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; }
|
||||
@@ -25,7 +24,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
|
||||
if (indexerResponse.HttpResponse.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
return releaseInfos.ToArray();
|
||||
return releaseInfos;
|
||||
}
|
||||
|
||||
if (indexerResponse.HttpResponse.StatusCode == HttpStatusCode.TooManyRequests)
|
||||
@@ -53,31 +52,28 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
|
||||
foreach (var row in jsonResponse.Data)
|
||||
{
|
||||
var details = row.Url;
|
||||
var link = row.Download;
|
||||
|
||||
var cats = ParseCategories(row);
|
||||
var detailsUrl = row.Url;
|
||||
|
||||
var release = new TorrentInfo
|
||||
{
|
||||
Title = row.FileName,
|
||||
DownloadUrl = link,
|
||||
Guid = detailsUrl,
|
||||
InfoUrl = detailsUrl,
|
||||
Title = ParseTitle(row),
|
||||
DownloadUrl = row.Download,
|
||||
Categories = ParseCategories(row).ToList(),
|
||||
InfoHash = row.InfoHash,
|
||||
InfoUrl = details,
|
||||
Guid = details,
|
||||
Categories = cats,
|
||||
PublishDate = DateTime.Parse($"{row.CreatedAt} {TimezoneOffset}", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
|
||||
Size = row.FileSize,
|
||||
Files = row.FileCount,
|
||||
Grabs = row.Completed,
|
||||
Seeders = row.Seed,
|
||||
Peers = row.Leech + row.Seed,
|
||||
PublishDate = DateTime.Parse(row.CreatedAtIso, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal),
|
||||
DownloadVolumeFactor = row.DownloadMultiply,
|
||||
UploadVolumeFactor = row.UploadMultiply,
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 259200, // 72 hours
|
||||
Languages = row.Audio?.Select(x => x.Language).ToList() ?? new List<string>(),
|
||||
Subs = row.Subtitle?.Select(x => x.Language).ToList() ?? new List<string>()
|
||||
Languages = row.Audio?.Select(x => x.Language).ToList() ?? [],
|
||||
Subs = row.Subtitle?.Select(x => x.Language).ToList() ?? []
|
||||
};
|
||||
|
||||
if (row.FileSize is > 0)
|
||||
@@ -91,54 +87,57 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
};
|
||||
}
|
||||
|
||||
if (row.MovieTvinfo != null)
|
||||
if (row.MovieTvinfo is not null)
|
||||
{
|
||||
release.ImdbId = ParseUtil.GetImdbId(row.MovieTvinfo.Imdb).GetValueOrDefault();
|
||||
release.TmdbId = row.MovieTvinfo.Tmdb.IsNullOrWhiteSpace() ? 0 : ParseUtil.TryCoerceInt(row.MovieTvinfo.Tmdb, out var tmdbResult) ? tmdbResult : 0;
|
||||
release.TvdbId = row.MovieTvinfo.Tvdb.IsNullOrWhiteSpace() ? 0 : ParseUtil.TryCoerceInt(row.MovieTvinfo.Tvdb, out var tvdbResult) ? tvdbResult : 0;
|
||||
release.TmdbId = row.MovieTvinfo.Tmdb.IsNotNullOrWhiteSpace() && ParseUtil.TryCoerceInt(row.MovieTvinfo.Tmdb, out var tmdbResult) ? tmdbResult : 0;
|
||||
release.TvdbId = row.MovieTvinfo.Tvdb.IsNotNullOrWhiteSpace() && ParseUtil.TryCoerceInt(row.MovieTvinfo.Tvdb, out var tvdbResult) ? tvdbResult : 0;
|
||||
}
|
||||
|
||||
releaseInfos.Add(release);
|
||||
}
|
||||
|
||||
// order by date
|
||||
return releaseInfos
|
||||
.OrderByDescending(o => o.PublishDate)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
// hook to adjust category parsing
|
||||
protected virtual List<IndexerCategory> ParseCategories(AvistazRelease row)
|
||||
protected virtual IReadOnlyList<IndexerCategory> ParseCategories(AvistazRelease row)
|
||||
{
|
||||
var cats = new List<IndexerCategory>();
|
||||
var resolution = row.VideoQuality;
|
||||
var categories = new List<IndexerCategory>();
|
||||
var videoQuality = row.VideoQuality;
|
||||
|
||||
switch (row.Type)
|
||||
switch (row.Type.ToUpperInvariant())
|
||||
{
|
||||
case "Movie":
|
||||
cats.Add(resolution switch
|
||||
case "MOVIE":
|
||||
categories.Add(videoQuality switch
|
||||
{
|
||||
var res when _hdResolutions.Contains(res) => NewznabStandardCategory.MoviesHD,
|
||||
"2160p" => NewznabStandardCategory.MoviesUHD,
|
||||
_ => NewznabStandardCategory.MoviesSD
|
||||
});
|
||||
break;
|
||||
case "TV-Show":
|
||||
cats.Add(resolution switch
|
||||
case "TV-SHOW":
|
||||
categories.Add(videoQuality switch
|
||||
{
|
||||
var res when _hdResolutions.Contains(res) => NewznabStandardCategory.TVHD,
|
||||
"2160p" => NewznabStandardCategory.TVUHD,
|
||||
_ => NewznabStandardCategory.TVSD
|
||||
});
|
||||
break;
|
||||
case "Music":
|
||||
cats.Add(NewznabStandardCategory.Audio);
|
||||
case "MUSIC":
|
||||
categories.Add(NewznabStandardCategory.Audio);
|
||||
break;
|
||||
default:
|
||||
throw new Exception($"Error parsing Avistaz category type {row.Type}");
|
||||
throw new Exception($"Error parsing Avistaz category type \"{row.Type}\"");
|
||||
}
|
||||
|
||||
return cats;
|
||||
return categories;
|
||||
}
|
||||
|
||||
protected virtual string ParseTitle(AvistazRelease row)
|
||||
{
|
||||
return row.FileName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,11 +82,10 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
{
|
||||
var searchUrl = SearchUrl + "?" + searchParameters.GetQueryString();
|
||||
|
||||
// TODO: Change to HttpAccept.Json after they fix the issue with missing headers
|
||||
var request = new IndexerRequest(searchUrl, HttpAccept.Html);
|
||||
request.HttpRequest.Headers.Add("Authorization", $"Bearer {Settings.Token}");
|
||||
var request = new IndexerRequest(searchUrl, HttpAccept.Json);
|
||||
request.HttpRequest.Headers.Set("Authorization", $"Bearer {Settings.Token}");
|
||||
|
||||
request.HttpRequest.SuppressHttpErrorStatusCodes = new[] { HttpStatusCode.NotFound };
|
||||
request.HttpRequest.SuppressHttpErrorStatusCodes = [HttpStatusCode.NotFound];
|
||||
|
||||
yield return request;
|
||||
}
|
||||
|
||||
@@ -19,13 +19,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
||||
{
|
||||
private static readonly AvistazSettingsValidator Validator = new();
|
||||
|
||||
public AvistazSettings()
|
||||
{
|
||||
Token = "";
|
||||
FreeleechOnly = false;
|
||||
}
|
||||
|
||||
public string Token { get; set; }
|
||||
public string Token { get; set; } = string.Empty;
|
||||
|
||||
[FieldDefinition(2, Label = "Username", HelpText = "IndexerAvistazSettingsUsernameHelpText", HelpTextWarning = "IndexerAvistazSettingsUsernameHelpTextWarning", Privacy = PrivacyLevel.UserName)]
|
||||
public string Username { get; set; }
|
||||
|
||||
@@ -126,7 +126,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
}
|
||||
else if (tmdbId > 0)
|
||||
{
|
||||
body.Add("tmdb_id", tmdbId);
|
||||
body.Add("tmdb_id", $"movie/{tmdbId}");
|
||||
}
|
||||
|
||||
if (searchTerm.IsNotNullOrWhiteSpace())
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||
else if (DateTime.TryParseExact($"{searchCriteria.Season} {searchCriteria.Episode}", "yyyy MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var showDate))
|
||||
{
|
||||
// Daily Episode
|
||||
parameters.Name = showDate.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture);
|
||||
parameters.Name = showDate.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture) + "%";
|
||||
parameters.Category = "Episode";
|
||||
pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset));
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers.Definitions.Gazelle;
|
||||
@@ -5,6 +6,7 @@ using NzbDrone.Core.Messaging.Events;
|
||||
|
||||
namespace NzbDrone.Core.Indexers.Definitions;
|
||||
|
||||
[Obsolete("Moved to YML for Cardigann")]
|
||||
public class CGPeers : GazelleBase<GazelleSettings>
|
||||
{
|
||||
public override string Name => "CGPeers";
|
||||
|
||||
@@ -426,6 +426,12 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
||||
{
|
||||
((TorrentInfo)c).InfoHash = MagnetLinkBuilder.GetInfoHashFromMagnet(((TorrentInfo)c).MagnetUrl);
|
||||
}
|
||||
|
||||
// Add Internal flag if description starts with Internal
|
||||
if (c.Description.IsNotNullOrWhiteSpace() && c.Description.StartsWith("Internal"))
|
||||
{
|
||||
c.IndexerFlags.Add(IndexerFlag.Internal);
|
||||
}
|
||||
});
|
||||
|
||||
_logger.Trace("Cardigann ({0}): Got {1} releases", _definition.Id, releases.Count);
|
||||
|
||||
@@ -54,8 +54,6 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
private readonly IndexerCapabilitiesCategories _categories;
|
||||
|
||||
protected override string TimezoneOffset => "+02:00";
|
||||
|
||||
public ExoticaZParser(IndexerCapabilitiesCategories categories)
|
||||
{
|
||||
_categories = categories;
|
||||
|
||||
@@ -11,10 +11,17 @@ namespace NzbDrone.Core.Indexers.Definitions.FileList;
|
||||
public class FileList : TorrentIndexerBase<FileListSettings>
|
||||
{
|
||||
public override string Name => "FileList.io";
|
||||
public override string[] IndexerUrls => new[] { "https://filelist.io/" };
|
||||
public override string[] IndexerUrls => new[]
|
||||
{
|
||||
"https://filelist.io/",
|
||||
"https://thefl.org/",
|
||||
};
|
||||
public override string[] LegacyUrls => new[]
|
||||
{
|
||||
"https://filelist.io",
|
||||
"https://filelist.ro/",
|
||||
"http://filelist.ro/",
|
||||
"http://flro.org/",
|
||||
"https://flro.org/"
|
||||
};
|
||||
public override string Description => "FileList (FL) is a ROMANIAN Private Torrent Tracker for 0DAY / GENERAL";
|
||||
@@ -105,6 +112,7 @@ public class FileList : TorrentIndexerBase<FileListSettings>
|
||||
caps.Categories.AddCategoryMapping(27, NewznabStandardCategory.TVUHD, "Seriale 4K");
|
||||
caps.Categories.AddCategoryMapping(28, NewznabStandardCategory.MoviesForeign, "RO Dubbed");
|
||||
caps.Categories.AddCategoryMapping(28, NewznabStandardCategory.TVForeign, "RO Dubbed");
|
||||
caps.Categories.AddCategoryMapping(31, NewznabStandardCategory.TVForeign, "K-Drama");
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ public class FunFile : TorrentIndexerBase<UserPassTorrentBaseSettings>
|
||||
};
|
||||
|
||||
var authLoginRequest = requestBuilder
|
||||
.SetEncoding(Encoding)
|
||||
.AddFormParameter("username", Settings.Username)
|
||||
.AddFormParameter("password", Settings.Password)
|
||||
.AddFormParameter("returnto", "")
|
||||
|
||||
@@ -120,7 +120,7 @@ namespace NzbDrone.Core.Indexers.Headphones
|
||||
baseUrl += "&apikey=" + Settings.ApiKey;
|
||||
}
|
||||
|
||||
if (searchCriteria.Limit.HasValue)
|
||||
if (searchCriteria.Limit is > 0)
|
||||
{
|
||||
parameters.Add("limit", searchCriteria.Limit.ToString());
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
@@ -112,25 +111,26 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
var queryParams = new NebulanceQuery
|
||||
var queryParams = new NameValueCollection
|
||||
{
|
||||
Age = ">0"
|
||||
{ "action", "search" },
|
||||
{ "age", ">0" },
|
||||
};
|
||||
|
||||
if (searchCriteria.TvMazeId is > 0)
|
||||
{
|
||||
queryParams.TvMaze = searchCriteria.TvMazeId.Value;
|
||||
queryParams.Set("tvmaze", searchCriteria.TvMazeId.ToString());
|
||||
}
|
||||
else if (searchCriteria.ImdbId.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
queryParams.Imdb = searchCriteria.FullImdbId;
|
||||
queryParams.Set("imdb", searchCriteria.FullImdbId);
|
||||
}
|
||||
|
||||
var searchQuery = searchCriteria.SanitizedSearchTerm.Trim();
|
||||
|
||||
if (searchQuery.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
queryParams.Release = searchQuery;
|
||||
queryParams.Set("release", searchQuery);
|
||||
}
|
||||
|
||||
if (searchCriteria.Season.HasValue &&
|
||||
@@ -139,43 +139,43 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
if (searchQuery.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
queryParams.Name = searchQuery;
|
||||
queryParams.Set("name", searchQuery);
|
||||
}
|
||||
|
||||
queryParams.Release = showDate.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture);
|
||||
queryParams.Set("release", showDate.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (searchCriteria.Season.HasValue)
|
||||
{
|
||||
queryParams.Season = searchCriteria.Season.Value;
|
||||
queryParams.Set("season", searchCriteria.Season.Value.ToString());
|
||||
}
|
||||
|
||||
if (searchCriteria.Episode.IsNotNullOrWhiteSpace() && int.TryParse(searchCriteria.Episode, out var episodeNumber))
|
||||
{
|
||||
queryParams.Episode = episodeNumber;
|
||||
queryParams.Set("episode", episodeNumber.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
if ((queryParams.Season.HasValue || queryParams.Episode.HasValue) &&
|
||||
queryParams.Name.IsNullOrWhiteSpace() &&
|
||||
queryParams.Release.IsNullOrWhiteSpace() &&
|
||||
!queryParams.TvMaze.HasValue &&
|
||||
queryParams.Imdb.IsNullOrWhiteSpace())
|
||||
if ((queryParams.Get("season").IsNotNullOrWhiteSpace() || queryParams.Get("episode").IsNotNullOrWhiteSpace()) &&
|
||||
queryParams.Get("name").IsNullOrWhiteSpace() &&
|
||||
queryParams.Get("release").IsNullOrWhiteSpace() &&
|
||||
queryParams.Get("tvmaze").IsNullOrWhiteSpace() &&
|
||||
queryParams.Get("imdb").IsNullOrWhiteSpace())
|
||||
{
|
||||
_logger.Debug("NBL API does not support season calls without name, series, id, imdb, tvmaze, or time keys.");
|
||||
_logger.Warn("NBL API does not support season calls without name, series, id, imdb, tvmaze, or time keys.");
|
||||
|
||||
return new IndexerPageableRequestChain();
|
||||
}
|
||||
|
||||
if (queryParams.Name is { Length: > 0 and < 3 } || queryParams.Release is { Length: > 0 and < 3 })
|
||||
if (queryParams.Get("name") is { Length: > 0 and < 3 } || queryParams.Get("release") is { Length: > 0 and < 3 })
|
||||
{
|
||||
_logger.Debug("NBL API does not support release calls that are 2 characters or fewer.");
|
||||
_logger.Warn("NBL API does not support release calls that are 2 characters or fewer.");
|
||||
|
||||
return new IndexerPageableRequestChain();
|
||||
}
|
||||
|
||||
pageableRequests.Add(GetPagedRequests(queryParams, searchCriteria.Limit, searchCriteria.Offset));
|
||||
pageableRequests.Add(GetPagedRequests(queryParams, searchCriteria));
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
@@ -189,40 +189,45 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
var queryParams = new NebulanceQuery
|
||||
var queryParams = new NameValueCollection
|
||||
{
|
||||
Age = ">0"
|
||||
{ "action", "search" },
|
||||
{ "age", ">0" },
|
||||
};
|
||||
|
||||
var searchQuery = searchCriteria.SanitizedSearchTerm.Trim();
|
||||
|
||||
if (searchQuery.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
queryParams.Release = searchQuery;
|
||||
queryParams.Set("release", searchQuery);
|
||||
}
|
||||
|
||||
if (queryParams.Release is { Length: > 0 and < 3 })
|
||||
if (queryParams.Get("release") is { Length: > 0 and < 3 })
|
||||
{
|
||||
_logger.Debug("NBL API does not support release calls that are 2 characters or fewer.");
|
||||
|
||||
return new IndexerPageableRequestChain();
|
||||
}
|
||||
|
||||
pageableRequests.Add(GetPagedRequests(queryParams, searchCriteria.Limit, searchCriteria.Offset));
|
||||
pageableRequests.Add(GetPagedRequests(queryParams, searchCriteria));
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
|
||||
private IEnumerable<IndexerRequest> GetPagedRequests(NebulanceQuery parameters, int? results, int? offset)
|
||||
private IEnumerable<IndexerRequest> GetPagedRequests(NameValueCollection parameters, SearchCriteriaBase searchCriteria)
|
||||
{
|
||||
var apiUrl = _settings.BaseUrl + "api.php";
|
||||
parameters.Set("api_key", _settings.ApiKey);
|
||||
parameters.Set("per_page", searchCriteria.Limit.GetValueOrDefault(100).ToString());
|
||||
|
||||
var builder = new JsonRpcRequestBuilder(apiUrl)
|
||||
.Call("getTorrents", _settings.ApiKey, parameters, results ?? 100, offset ?? 0);
|
||||
if (searchCriteria.Limit > 0 && searchCriteria.Offset > 0)
|
||||
{
|
||||
var page = searchCriteria.Offset / searchCriteria.Limit;
|
||||
parameters.Set("page", page.ToString());
|
||||
}
|
||||
|
||||
builder.SuppressHttpError = true;
|
||||
var apiUrl = $"{_settings.BaseUrl}api.php?{parameters.GetQueryString()}";
|
||||
|
||||
yield return new IndexerRequest(builder.Build());
|
||||
yield return new IndexerRequest(apiUrl, HttpAccept.Json);
|
||||
}
|
||||
|
||||
public Func<IDictionary<string, string>> GetCookies { get; set; }
|
||||
@@ -244,16 +249,14 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
STJson.TryDeserialize<JsonRpcResponse<NebulanceErrorResponse>>(indexerResponse.HttpResponse.Content, out var errorResponse);
|
||||
|
||||
throw new IndexerException(indexerResponse, "Unexpected response status '{0}' code from indexer request: {1}", indexerResponse.HttpResponse.StatusCode, errorResponse?.Result?.Error?.Message ?? "Check the logs for more information.");
|
||||
throw new IndexerException(indexerResponse, "Unexpected response status '{0}' code from indexer request. Check the logs for more information.", indexerResponse.HttpResponse.StatusCode);
|
||||
}
|
||||
|
||||
JsonRpcResponse<NebulanceResponse> jsonResponse;
|
||||
NebulanceResponse jsonResponse;
|
||||
|
||||
try
|
||||
{
|
||||
jsonResponse = STJson.Deserialize<JsonRpcResponse<NebulanceResponse>>(indexerResponse.HttpResponse.Content);
|
||||
jsonResponse = STJson.Deserialize<NebulanceResponse>(indexerResponse.HttpResponse.Content);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -262,19 +265,17 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
throw new IndexerException(indexerResponse, "Unexpected response from indexer request: {0}", ex, response?.Result ?? ex.Message);
|
||||
}
|
||||
|
||||
if (jsonResponse.Error != null || jsonResponse.Result == null)
|
||||
if (jsonResponse.Error != null)
|
||||
{
|
||||
throw new IndexerException(indexerResponse, "Indexer API call returned an error [{0}]", jsonResponse.Error);
|
||||
throw new IndexerException(indexerResponse, "Indexer API call returned an error [{0}]", jsonResponse.Error?.Message);
|
||||
}
|
||||
|
||||
if (jsonResponse.Result?.Items == null || jsonResponse.Result.Items.Count == 0)
|
||||
if (jsonResponse.TotalResults == 0 || jsonResponse.Items == null || jsonResponse.Items.Count == 0)
|
||||
{
|
||||
return torrentInfos;
|
||||
}
|
||||
|
||||
var rows = jsonResponse.Result.Items;
|
||||
|
||||
foreach (var row in rows)
|
||||
foreach (var row in jsonResponse.Items)
|
||||
{
|
||||
var details = _settings.BaseUrl + "torrents.php?id=" + row.TorrentId;
|
||||
|
||||
@@ -284,26 +285,30 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
Guid = details,
|
||||
InfoUrl = details,
|
||||
DownloadUrl = row.Download,
|
||||
DownloadUrl = row.DownloadLink,
|
||||
Title = title.Trim(),
|
||||
Categories = new List<IndexerCategory> { TvCategoryFromQualityParser.ParseTvShowQuality(row.ReleaseTitle) },
|
||||
Size = ParseUtil.CoerceLong(row.Size),
|
||||
Files = row.FileList.Count(),
|
||||
Size = row.Size,
|
||||
Files = row.FileList.Count,
|
||||
PublishDate = DateTime.Parse(row.PublishDateUtc, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal),
|
||||
Grabs = ParseUtil.CoerceInt(row.Snatch),
|
||||
Seeders = ParseUtil.CoerceInt(row.Seed),
|
||||
Peers = ParseUtil.CoerceInt(row.Seed) + ParseUtil.CoerceInt(row.Leech),
|
||||
Grabs = row.Snatch,
|
||||
Seeders = row.Seed,
|
||||
Peers = row.Seed + row.Leech,
|
||||
Scene = row.Tags?.ContainsIgnoreCase("scene"),
|
||||
MinimumRatio = 0, // ratioless
|
||||
MinimumSeedTime = row.Category.ToLower() == "season" ? 432000 : 86400, // 120 hours for seasons and 24 hours for episodes
|
||||
MinimumSeedTime = row.Category.ToUpperInvariant() == "SEASON" ? 432000 : 86400, // 120 hours for seasons and 24 hours for episodes
|
||||
DownloadVolumeFactor = 0, // ratioless tracker
|
||||
UploadVolumeFactor = 1,
|
||||
PosterUrl = row.Banner
|
||||
};
|
||||
|
||||
if (row.TvMazeId.IsNotNullOrWhiteSpace())
|
||||
if (row.ImdbId.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
release.TvMazeId = ParseUtil.CoerceInt(row.TvMazeId);
|
||||
release.ImdbId = ParseUtil.GetImdbId(row.ImdbId).GetValueOrDefault();
|
||||
}
|
||||
|
||||
if (row.TvMazeId is > 0)
|
||||
{
|
||||
release.TvMazeId = row.TvMazeId.Value;
|
||||
}
|
||||
|
||||
torrentInfos.Add(release);
|
||||
@@ -326,100 +331,55 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public string ApiKey { get; set; }
|
||||
}
|
||||
|
||||
public class NebulanceQuery
|
||||
{
|
||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Time { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName="age", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Age { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName="tvmaze", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public int? TvMaze { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName="imdb", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Imdb { get; set; }
|
||||
|
||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Hash { get; set; }
|
||||
|
||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string[] Tags { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName="name", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Name { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName="release", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Release { get; set; }
|
||||
|
||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Category { get; set; }
|
||||
|
||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Series { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName="season", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public int? Season { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName="episode", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public int? Episode { get; set; }
|
||||
|
||||
public NebulanceQuery Clone()
|
||||
{
|
||||
return MemberwiseClone() as NebulanceQuery;
|
||||
}
|
||||
}
|
||||
|
||||
public class NebulanceResponse
|
||||
{
|
||||
public List<NebulanceTorrent> Items { get; set; }
|
||||
[JsonPropertyName("total_results")]
|
||||
public int TotalResults { get; init; }
|
||||
|
||||
public IReadOnlyCollection<NebulanceTorrent> Items { get; init; }
|
||||
|
||||
public NebulanceErrorMessage Error { get; init; }
|
||||
}
|
||||
|
||||
public class NebulanceTorrent
|
||||
{
|
||||
[JsonPropertyName("rls_name")]
|
||||
public string ReleaseTitle { get; set; }
|
||||
public string ReleaseTitle { get; init; }
|
||||
|
||||
[JsonPropertyName("cat")]
|
||||
public string Category { get; set; }
|
||||
public string Category { get; init; }
|
||||
|
||||
public string Size { get; set; }
|
||||
public string Seed { get; set; }
|
||||
public string Leech { get; set; }
|
||||
public string Snatch { get; set; }
|
||||
public string Download { get; set; }
|
||||
public long Size { get; init; }
|
||||
public int Seed { get; init; }
|
||||
public int Leech { get; init; }
|
||||
public int Snatch { get; init; }
|
||||
|
||||
[JsonPropertyName("download")]
|
||||
public string DownloadLink { get; init; }
|
||||
|
||||
[JsonPropertyName("file_list")]
|
||||
public IEnumerable<string> FileList { get; set; } = Array.Empty<string>();
|
||||
public IReadOnlyCollection<string> FileList { get; init; } = [];
|
||||
|
||||
[JsonPropertyName("group_name")]
|
||||
public string GroupName { get; set; }
|
||||
|
||||
[JsonPropertyName("series_banner")]
|
||||
public string Banner { get; set; }
|
||||
public string GroupName { get; init; }
|
||||
|
||||
[JsonPropertyName("group_id")]
|
||||
public string TorrentId { get; set; }
|
||||
public int TorrentId { get; init; }
|
||||
|
||||
[JsonPropertyName("series_id")]
|
||||
public string TvMazeId { get; set; }
|
||||
[JsonPropertyName("imdb_id")]
|
||||
public string ImdbId { get; init; }
|
||||
|
||||
[JsonPropertyName("tvmaze_id")]
|
||||
public int? TvMazeId { get; init; }
|
||||
|
||||
[JsonPropertyName("rls_utc")]
|
||||
public string PublishDateUtc { get; set; }
|
||||
public string PublishDateUtc { get; init; }
|
||||
|
||||
public IEnumerable<string> Tags { get; set; } = Array.Empty<string>();
|
||||
}
|
||||
|
||||
public class NebulanceErrorResponse
|
||||
{
|
||||
public NebulanceErrorMessage Error { get; set; }
|
||||
public IReadOnlyCollection<string> Tags { get; init; } = [];
|
||||
}
|
||||
|
||||
public class NebulanceErrorMessage
|
||||
{
|
||||
public string Message { get; set; }
|
||||
public string Message { get; init; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
yield return GetDefinition("Miatrix", GetSettings("https://www.miatrix.com"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("Newz69", GetSettings("https://newz69.keagaming.com"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("NinjaCentral", GetSettings("https://ninjacentral.co.za"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("Nzb.su", GetSettings("https://api.nzb.su"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("Nzb.life", GetSettings("https://api.nzb.life"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
yield return GetDefinition("NZBCat", GetSettings("https://nzb.cat"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000 });
|
||||
yield return GetDefinition("NZBFinder", GetSettings("https://nzbfinder.ws"), categories: new[] { 2000, 3000, 5000, 6000, 7000 });
|
||||
yield return GetDefinition("NZBgeek", GetSettings("https://api.nzbgeek.info"), categories: new[] { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 });
|
||||
|
||||
@@ -263,7 +263,7 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
searchUrl += "&apikey=" + Settings.ApiKey;
|
||||
}
|
||||
|
||||
if (searchCriteria.Limit.HasValue)
|
||||
if (searchCriteria.Limit is > 0)
|
||||
{
|
||||
parameters.Set("limit", searchCriteria.Limit.ToString());
|
||||
}
|
||||
|
||||
@@ -9,10 +9,10 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
{
|
||||
public class NewznabSettingsValidator : AbstractValidator<NewznabSettings>
|
||||
{
|
||||
private static readonly string[] ApiKeyWhiteList =
|
||||
private static readonly string[] ApiKeyAllowList =
|
||||
{
|
||||
"nzbs.org",
|
||||
"nzb.su",
|
||||
"nzb.life",
|
||||
"dognzb.cr",
|
||||
"nzbplanet.net",
|
||||
"nzbid.org",
|
||||
@@ -22,7 +22,7 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
|
||||
private static bool ShouldHaveApiKey(NewznabSettings settings)
|
||||
{
|
||||
return settings.BaseUrl != null && ApiKeyWhiteList.Any(c => settings.BaseUrl.ToLowerInvariant().Contains(c));
|
||||
return settings.BaseUrl != null && ApiKeyAllowList.Any(c => settings.BaseUrl.ToLowerInvariant().Contains(c));
|
||||
}
|
||||
|
||||
private static readonly Regex AdditionalParametersRegex = new Regex(@"(&.+?\=.+?)+", RegexOptions.Compiled);
|
||||
|
||||
@@ -35,6 +35,16 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
throw new RequestLimitReachedException(indexerResponse, "PTP Query Limit Reached. Please try again later.");
|
||||
}
|
||||
|
||||
if (httpResponse.StatusCode == HttpStatusCode.TooManyRequests && indexerResponse.Content.Contains("We are not a TV indexer"))
|
||||
{
|
||||
throw new IndexerException(indexerResponse, "Invalid indexer request: We are not a TV indexer", HttpStatusCode.BadRequest);
|
||||
}
|
||||
|
||||
if (httpResponse.StatusCode == HttpStatusCode.TooManyRequests)
|
||||
{
|
||||
throw new RequestLimitReachedException(indexerResponse, "PTP Request Limit Reached. Please try again later.");
|
||||
}
|
||||
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerResponse.HttpResponse.StatusCode} code from indexer request");
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
@@ -115,6 +116,7 @@ namespace NzbDrone.Core.Indexers.Definitions.PassThePopcorn
|
||||
var request = new IndexerRequest(searchUrl, HttpAccept.Json);
|
||||
request.HttpRequest.Headers.Add("ApiUser", _settings.APIUser);
|
||||
request.HttpRequest.Headers.Add("ApiKey", _settings.APIKey);
|
||||
request.HttpRequest.SuppressHttpErrorStatusCodes = new[] { HttpStatusCode.TooManyRequests };
|
||||
|
||||
yield return request;
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
};
|
||||
|
||||
var authLoginRequest = requestBuilder
|
||||
.SetEncoding(Encoding)
|
||||
.AddFormParameter("login_username", Settings.Username)
|
||||
.AddFormParameter("login_password", Settings.Password)
|
||||
.AddFormParameter("login", "Login")
|
||||
|
||||
@@ -66,6 +66,7 @@ public class PreToMe : TorrentIndexerBase<PreToMeSettings>
|
||||
};
|
||||
|
||||
var authLoginRequest = requestBuilder
|
||||
.SetEncoding(Encoding)
|
||||
.SetCookies(loginPage.GetCookies())
|
||||
.AddFormParameter("username", Settings.Username)
|
||||
.AddFormParameter("password", Settings.Password)
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
public override string Name => "PrivateHD";
|
||||
public override string[] IndexerUrls => new[] { "https://privatehd.to/" };
|
||||
public override string Description => "PrivateHD (PHD) is a Private Torrent Tracker for HD MOVIES / TV and the sister-site of AvistaZ, CinemaZ, ExoticaZ, and AnimeTorrents";
|
||||
public override string Description => "PrivateHD (PHD) is a Private Torrent Tracker for HD MOVIES / TV and the sister-site of AvistaZ, CinemaZ, ExoticaZ, and AnimeZ";
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
||||
|
||||
public PrivateHD(IIndexerRepository indexerRepository,
|
||||
|
||||
@@ -23,7 +23,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
public override string Name => "RevolutionTT";
|
||||
|
||||
public override string[] IndexerUrls => new[] { "https://revolutiontt.me/" };
|
||||
public override string[] IndexerUrls => new[] { "https://revott.me/" };
|
||||
public override string[] LegacyUrls => new[] { "https://revolutiontt.me/" };
|
||||
public override string Description => "The Revolution has begun";
|
||||
private string LoginUrl => Settings.BaseUrl + "takelogin.php";
|
||||
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
||||
|
||||
@@ -91,6 +91,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
Cookies = null;
|
||||
|
||||
var authLoginRequest = requestBuilder.Post()
|
||||
.SetEncoding(Encoding)
|
||||
.AddFormParameter("login_username", Settings.Username)
|
||||
.AddFormParameter("login_password", Settings.Password)
|
||||
.AddFormParameter("login", "Login")
|
||||
@@ -1541,7 +1542,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
if (season != 0)
|
||||
{
|
||||
searchString += " Сезон: " + season;
|
||||
searchString += " ТВ | Сезон: " + season;
|
||||
}
|
||||
|
||||
parameters.Set("nm", searchString);
|
||||
@@ -1712,6 +1713,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
private readonly Regex _tvTitleRusSeasonRegex = new(@"Сезон\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleRusEpisodeOfRegex = new(@"(?:Серии|Эпизод|Выпуски)+\s*[:]*\s+(\d+(?:-\d+)?)\s*из\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleRusEpisodeRegex = new(@"(?:Серии|Эпизод|Выпуски)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleRusSeasonAnimeRegex = new(@"ТВ[-]*(?:(\d+))", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleRusEpisodeAnimeOfRegex = new(@"\[(\d+(\+\d+)?)\s+из\s+(\d+(\+\d+)?)\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
public string Parse(string title,
|
||||
ICollection<IndexerCategory> categories,
|
||||
@@ -1736,6 +1739,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
title = _tvTitleRusSeasonRegex.Replace(title, "S$1");
|
||||
title = _tvTitleRusEpisodeOfRegex.Replace(title, "E$1 of $2");
|
||||
title = _tvTitleRusEpisodeRegex.Replace(title, "E$1");
|
||||
title = _tvTitleRusSeasonAnimeRegex.Replace(title, "S$1");
|
||||
title = _tvTitleRusEpisodeAnimeOfRegex.Replace(title, "E$1 of $3");
|
||||
}
|
||||
else if (IsAnyMovieCategory(categories))
|
||||
{
|
||||
@@ -1749,7 +1754,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
// rutracker movies titles look like: russian name / english name (russian director / english director) other stuff
|
||||
// Ирландец / The Irishman (Мартин Скорсезе / Martin Scorsese) [2019, США, криминал, драма, биография, WEB-DL 1080p] Dub (Пифагор) + MVO (Jaskier) + AVO (Юрий Сербин) + Sub Rus, Eng + Original Eng
|
||||
// this part should be removed: (Мартин Скорсезе / Martin Scorsese)
|
||||
title = Regex.Replace(title, @"(\([\p{IsCyrillic}\W]+)\s/\s(.+?)\)", string.Empty, RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
title = Regex.Replace(title, @"(\([\p{IsCyrillic}\W]+)(?:\s/\s(.+?))?\)", string.Empty, RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
// Remove VO, MVO and DVO from titles
|
||||
var vo = new Regex(@"((?:\dx\s)?(?:[A-Z])?VO\s\(.+?\))");
|
||||
|
||||
@@ -19,6 +19,7 @@ using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
[Obsolete("Migrated to YAML for Torznab API")]
|
||||
public class SceneTime : TorrentIndexerBase<SceneTimeSettings>
|
||||
{
|
||||
public override string Name => "SceneTime";
|
||||
@@ -41,7 +42,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
{
|
||||
return new SceneTimeParser(Settings, Capabilities.Categories);
|
||||
return new SceneTimeParser(Settings, Capabilities.Categories, _logger);
|
||||
}
|
||||
|
||||
protected override bool CheckIfLoginNeeded(HttpResponse httpResponse)
|
||||
@@ -59,7 +60,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
return CookieUtil.CookieHeaderToDictionary(Settings.Cookie);
|
||||
}
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
private static IndexerCapabilities SetCapabilities()
|
||||
{
|
||||
var caps = new IndexerCapabilities
|
||||
{
|
||||
@@ -213,11 +214,13 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
private readonly SceneTimeSettings _settings;
|
||||
private readonly IndexerCapabilitiesCategories _categories;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public SceneTimeParser(SceneTimeSettings settings, IndexerCapabilitiesCategories categories)
|
||||
public SceneTimeParser(SceneTimeSettings settings, IndexerCapabilitiesCategories categories, Logger logger)
|
||||
{
|
||||
_settings = settings;
|
||||
_categories = categories;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
|
||||
@@ -227,29 +230,30 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
var parser = new HtmlParser();
|
||||
using var dom = parser.ParseDocument(indexerResponse.Content);
|
||||
|
||||
var table = dom.QuerySelector("table.movehere");
|
||||
var table = dom.QuerySelector("table#torrenttable");
|
||||
if (table == null)
|
||||
{
|
||||
return releaseInfos; // no results
|
||||
_logger.Error("No results, table element is not present in page.");
|
||||
return releaseInfos;
|
||||
}
|
||||
|
||||
var headerColumns = table.QuerySelectorAll("tbody > tr > td.cat_Head").Select(x => x.TextContent).ToList();
|
||||
var categoryIndex = headerColumns.FindIndex(x => x.Equals("Type"));
|
||||
var nameIndex = headerColumns.FindIndex(x => x.Equals("Name"));
|
||||
var sizeIndex = headerColumns.FindIndex(x => x.Equals("Size"));
|
||||
var seedersIndex = headerColumns.FindIndex(x => x.Equals("Seeders"));
|
||||
var leechersIndex = headerColumns.FindIndex(x => x.Equals("Leechers"));
|
||||
var headerColumns = table.QuerySelectorAll("thead > tr > th")
|
||||
.Select(x => x.GetAttribute("title") ?? x.QuerySelector("a[title]")?.GetAttribute("title") ?? x.TextContent)
|
||||
.ToList();
|
||||
|
||||
var rows = dom.QuerySelectorAll("tr.browse");
|
||||
var categoryIndex = headerColumns.FindIndex(x => x.Equals("Type", StringComparison.OrdinalIgnoreCase));
|
||||
var nameIndex = headerColumns.FindIndex(x => x.Equals("Name", StringComparison.OrdinalIgnoreCase));
|
||||
var sizeIndex = headerColumns.FindIndex(x => x.Equals("Size", StringComparison.OrdinalIgnoreCase));
|
||||
var seedersIndex = headerColumns.FindIndex(x => x.Equals("Seeders", StringComparison.OrdinalIgnoreCase));
|
||||
var leechersIndex = headerColumns.FindIndex(x => x.Equals("Leechers", StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
var rows = table.QuerySelectorAll("tbody > tr");
|
||||
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var qDescCol = row.Children[nameIndex];
|
||||
var qLink = qDescCol.QuerySelector("a");
|
||||
|
||||
// Clean up title
|
||||
qLink.QuerySelectorAll("font[color=\"green\"]").ToList().ForEach(e => e.Remove());
|
||||
var title = qLink.TextContent.Trim();
|
||||
var title = qLink.QuerySelector("span.bw-torrent-name").TextContent.Trim();
|
||||
|
||||
var infoUrl = _settings.BaseUrl + qLink.GetAttribute("href")?.TrimStart('/');
|
||||
var torrentId = ParseUtil.GetArgumentFromQueryString(infoUrl, "id");
|
||||
@@ -274,7 +278,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
Size = ParseUtil.GetBytes(row.Children[sizeIndex].TextContent),
|
||||
Seeders = seeders,
|
||||
Peers = ParseUtil.CoerceInt(row.Children[leechersIndex].TextContent.Trim()) + seeders,
|
||||
DownloadVolumeFactor = row.QuerySelector("font > b:contains(Freeleech)") != null ? 0 : 1,
|
||||
DownloadVolumeFactor = row.QuerySelector("span.tag.free") is not null ? 0 : 1,
|
||||
UploadVolumeFactor = 1,
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 259200 // 72 hours
|
||||
|
||||
@@ -27,7 +27,8 @@ namespace NzbDrone.Core.Indexers.Definitions;
|
||||
public class Shazbat : TorrentIndexerBase<ShazbatSettings>
|
||||
{
|
||||
public override string Name => "Shazbat";
|
||||
public override string[] IndexerUrls => new[] { "https://www.shazbat.tv/" };
|
||||
public override string[] IndexerUrls => new[] { "https://www.shazbat.tube/" };
|
||||
public override string[] LegacyUrls => new[] { "https://www.shazbat.tv/" };
|
||||
public override string Description => "Shazbat is a PRIVATE Torrent Tracker with highly curated TV content";
|
||||
public override string Language => "en-US";
|
||||
public override Encoding Encoding => Encoding.UTF8;
|
||||
@@ -68,8 +69,8 @@ public class Shazbat : TorrentIndexerBase<ShazbatSettings>
|
||||
.AddFormParameter("referer", "")
|
||||
.AddFormParameter("query", "")
|
||||
.AddFormParameter("tv_timezone", "0")
|
||||
.AddFormParameter("tv_login", Settings.Username)
|
||||
.AddFormParameter("tv_password", Settings.Password)
|
||||
.AddFormParameter("username", Settings.Username)
|
||||
.AddFormParameter("password", Settings.Password)
|
||||
.SetHeader("Content-Type", "application/x-www-form-urlencoded")
|
||||
.SetHeader("Referer", loginUrl)
|
||||
.Build();
|
||||
@@ -91,9 +92,11 @@ public class Shazbat : TorrentIndexerBase<ShazbatSettings>
|
||||
_logger.Debug("Authentication succeeded.");
|
||||
}
|
||||
|
||||
protected override bool CheckIfLoginNeeded(HttpResponse response)
|
||||
protected override bool CheckIfLoginNeeded(HttpResponse httpResponse)
|
||||
{
|
||||
return response.Content.ContainsIgnoreCase("sign in now");
|
||||
return (httpResponse.HasHttpRedirect && httpResponse.RedirectUrl.ContainsIgnoreCase("login")) ||
|
||||
httpResponse.Content.ContainsIgnoreCase("sign in now") ||
|
||||
(httpResponse.Content.ContainsIgnoreCase("fullRedirect") && httpResponse.Content.ContainsIgnoreCase("login"));
|
||||
}
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
@@ -167,9 +170,9 @@ public class ShazbatRequestGenerator : IIndexerRequestGenerator
|
||||
|
||||
if (term.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
var request = new HttpRequestBuilder(_settings.BaseUrl + "search").Post()
|
||||
.AddFormParameter("search", term)
|
||||
.SetHeader("Content-Type", "application/x-www-form-urlencoded")
|
||||
var request = new HttpRequestBuilder(_settings.BaseUrl + "search")
|
||||
.AddQueryParam("search", term)
|
||||
.AddQueryParam("portlet", "true")
|
||||
.SetHeader("X-Requested-With", "XMLHttpRequest")
|
||||
.SetHeader("Referer", _settings.BaseUrl)
|
||||
.Accept(HttpAccept.Html)
|
||||
@@ -194,14 +197,14 @@ public class ShazbatRequestGenerator : IIndexerRequestGenerator
|
||||
term = Regex.Replace(term, @"(.+)\b\d{4}(\.\d{2}\.\d{2})?\b", "$1");
|
||||
term = Regex.Replace(term, @"[\.\s\(\)\[\]]+", " ");
|
||||
|
||||
return term.ToLower().Trim();
|
||||
return term.ToLowerInvariant().Trim();
|
||||
}
|
||||
|
||||
public Func<IDictionary<string, string>> GetCookies { get; set; }
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
}
|
||||
|
||||
public class ShazbatParser : IParseIndexerResponse
|
||||
public partial class ShazbatParser : IParseIndexerResponse
|
||||
{
|
||||
private readonly ProviderDefinition _definition;
|
||||
private readonly ShazbatSettings _settings;
|
||||
@@ -209,8 +212,10 @@ public class ShazbatParser : IParseIndexerResponse
|
||||
private readonly IIndexerHttpClient _httpClient;
|
||||
private readonly Logger _logger;
|
||||
|
||||
private readonly Regex _torrentInfoRegex = new(@"\((?<size>\d+)\):(?<seeders>\d+) \/ :(?<leechers>\d+)$", RegexOptions.Compiled);
|
||||
private readonly HashSet<string> _hdResolutions = new() { "1080p", "1080i", "720p" };
|
||||
private readonly HashSet<string> _hdResolutions = ["1080p", "1080i", "720p"];
|
||||
|
||||
[GeneratedRegex(@"\((?<size>\d+)\)\s*:(?<seeders>\d+) \/ :(?<leechers>\d+)$", RegexOptions.Compiled)]
|
||||
private static partial Regex TorrentInfoRegex();
|
||||
|
||||
public ShazbatParser(ProviderDefinition definition, ShazbatSettings settings, TimeSpan rateLimit, IIndexerHttpClient httpClient, Logger logger)
|
||||
{
|
||||
@@ -257,15 +262,15 @@ public class ShazbatParser : IParseIndexerResponse
|
||||
var showPageUrl = new HttpRequestBuilder(_settings.BaseUrl + "show")
|
||||
.AddQueryParam("id", show.GetAttribute("data-id"))
|
||||
.Build()
|
||||
.Url.FullUri;
|
||||
.Url
|
||||
.FullUri;
|
||||
|
||||
var showRequest = new HttpRequestBuilder(_settings.BaseUrl + "show").Post()
|
||||
var showRequest = new HttpRequestBuilder(_settings.BaseUrl + "show")
|
||||
.SetCookies(indexerResponse.HttpResponse.GetCookies() ?? new Dictionary<string, string>())
|
||||
.AddQueryParam("id", show.GetAttribute("data-id"))
|
||||
.AddQueryParam("show_mode", "torrents")
|
||||
.AddFormParameter("portlet", "true")
|
||||
.AddFormParameter("tab", "true")
|
||||
.SetHeader("Content-Type", "application/x-www-form-urlencoded")
|
||||
.AddQueryParam("portlet", "true")
|
||||
.AddQueryParam("tab", "true")
|
||||
.SetHeader("X-Requested-With", "XMLHttpRequest")
|
||||
.SetHeader("Referer", showPageUrl)
|
||||
.Accept(HttpAccept.Html)
|
||||
@@ -277,7 +282,8 @@ public class ShazbatParser : IParseIndexerResponse
|
||||
var releaseRequest = new IndexerRequest(showRequest);
|
||||
var releaseResponse = new IndexerResponse(releaseRequest, _httpClient.ExecuteProxied(releaseRequest.HttpRequest, _definition));
|
||||
|
||||
if (releaseResponse.HttpResponse.Content.ContainsIgnoreCase("sign in now"))
|
||||
if ((releaseResponse.HttpResponse.HasHttpRedirect && releaseResponse.HttpResponse.RedirectUrl.ContainsIgnoreCase("login")) ||
|
||||
releaseResponse.HttpResponse.Content.ContainsIgnoreCase("sign in now"))
|
||||
{
|
||||
// Remove cookie cache
|
||||
CookiesUpdater(null, null);
|
||||
@@ -323,13 +329,15 @@ public class ShazbatParser : IParseIndexerResponse
|
||||
var title = ParseTitle(row.QuerySelector("td:nth-of-type(3)"));
|
||||
|
||||
var infoString = row.QuerySelector("td:nth-of-type(4)")?.TextContent.Trim() ?? string.Empty;
|
||||
var matchInfo = _torrentInfoRegex.Match(infoString);
|
||||
var matchInfo = TorrentInfoRegex().Match(infoString);
|
||||
var size = matchInfo.Groups["size"].Success && long.TryParse(matchInfo.Groups["size"].Value, out var outSize) ? outSize : 0;
|
||||
var seeders = matchInfo.Groups["seeders"].Success && int.TryParse(matchInfo.Groups["seeders"].Value, out var outSeeders) ? outSeeders : 0;
|
||||
var leechers = matchInfo.Groups["leechers"].Success && int.TryParse(matchInfo.Groups["leechers"].Value, out var outLeechers) ? outLeechers : 0;
|
||||
|
||||
var dateTimestamp = row.QuerySelector(".datetime[data-timestamp]")?.GetAttribute("data-timestamp");
|
||||
publishDate = dateTimestamp != null && ParseUtil.TryCoerceDouble(dateTimestamp, out var timestamp) ? DateTimeUtil.UnixTimestampToDateTime(timestamp) : publishDate.AddMinutes(-1);
|
||||
publishDate = dateTimestamp != null && ParseUtil.TryCoerceLong(dateTimestamp, out var timestamp)
|
||||
? DateTimeUtil.UnixTimestampToDateTime(timestamp)
|
||||
: publishDate.AddMinutes(-1);
|
||||
|
||||
var release = new TorrentInfo
|
||||
{
|
||||
@@ -363,10 +371,10 @@ public class ShazbatParser : IParseIndexerResponse
|
||||
return title?.TextContent.Trim();
|
||||
}
|
||||
|
||||
protected virtual List<IndexerCategory> ParseCategories(string title)
|
||||
private List<IndexerCategory> ParseCategories(string title)
|
||||
{
|
||||
var categories = new List<IndexerCategory>
|
||||
{
|
||||
return
|
||||
[
|
||||
NewznabStandardCategory.TV,
|
||||
title switch
|
||||
{
|
||||
@@ -374,9 +382,7 @@ public class ShazbatParser : IParseIndexerResponse
|
||||
_ when title.Contains("2160p") => NewznabStandardCategory.TVUHD,
|
||||
_ => NewznabStandardCategory.TVSD
|
||||
}
|
||||
};
|
||||
|
||||
return categories;
|
||||
];
|
||||
}
|
||||
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
|
||||
@@ -448,11 +448,11 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
private readonly Regex _tvTitleMultipleSeasonsRegex = new(@"(?:Сезон|Seasons?)\s*[:]*\s+(\d+-\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
private readonly Regex _tvTitleUkrSeasonEpisodeOfRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrSeasonEpisodeRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrSeasonEpisodeOfRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrSeasonEpisodeRegex = new(@"Сезон\s*[:]*\s+(\d+).+(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrSeasonRegex = new(@"Сезон\s*[:]*\s+(\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrEpisodeOfRegex = new(@"(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrEpisodeRegex = new(@"(?:Серії|Серія|Серій|Епізод)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrEpisodeOfRegex = new(@"(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)\s*з\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleUkrEpisodeRegex = new(@"(?:Серії|Серія|Серій|Епізоди?)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
private readonly Regex _tvTitleEngSeasonEpisodeOfRegex = new(@"Season\s*[:]*\s+(\d+).+(?:Episodes?)+\s*[:]*\s+(\d+(?:-\d+)?)\s*of\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private readonly Regex _tvTitleEngSeasonEpisodeRegex = new(@"Season\s*[:]*\s+(\d+).+(?:Episodes?)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
@@ -506,7 +506,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
title = Regex.Replace(title, @"[\[\(]\s*[\)\]]", "", RegexOptions.Compiled);
|
||||
|
||||
title = title.Trim(' ', '&', ',', '.', '!', '?', '+', '-', '_', '|', '/', '\\', ':');
|
||||
title = title.Trim(' ', '&', ',', '.', '!', '?', '+', '-', '_', '|', '/', '\\', ':', ';', 'ʼ', '`');
|
||||
|
||||
// replace multiple spaces with a single space
|
||||
title = Regex.Replace(title, @"\s+", " ");
|
||||
@@ -521,7 +521,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
private static string MoveFirstTagsToEndOfReleaseTitle(string input)
|
||||
{
|
||||
var output = input;
|
||||
var output = input.Trim(' ', '&', ',', '.', '!', '?', '+', '-', '_', '|', '/', '\\', ':', ';', 'ʼ', '`');
|
||||
foreach (var findTagsRegex in FindTagsInTitlesRegexList)
|
||||
{
|
||||
var expectedIndex = 0;
|
||||
|
||||
@@ -58,6 +58,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
Cookies = null;
|
||||
|
||||
var authLoginRequest = requestBuilder
|
||||
.SetEncoding(Encoding)
|
||||
.AddFormParameter("username", Settings.Username)
|
||||
.AddFormParameter("password", Settings.Password)
|
||||
.AddFormParameter("returnto", "/")
|
||||
|
||||
@@ -83,10 +83,11 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
}
|
||||
};
|
||||
|
||||
caps.Categories.AddCategoryMapping(96, NewznabStandardCategory.MoviesUHD, "Movie/4K");
|
||||
caps.Categories.AddCategoryMapping(25, NewznabStandardCategory.MoviesSD, "Movies/480p");
|
||||
caps.Categories.AddCategoryMapping(96, NewznabStandardCategory.MoviesUHD, "Movie/4K");
|
||||
caps.Categories.AddCategoryMapping(11, NewznabStandardCategory.MoviesBluRay, "Movies/Bluray");
|
||||
caps.Categories.AddCategoryMapping(5, NewznabStandardCategory.MoviesBluRay, "Movies/Bluray-Full");
|
||||
caps.Categories.AddCategoryMapping(103, NewznabStandardCategory.MoviesSD, "Movies/Cam");
|
||||
caps.Categories.AddCategoryMapping(3, NewznabStandardCategory.MoviesDVD, "Movies/DVD-R");
|
||||
caps.Categories.AddCategoryMapping(21, NewznabStandardCategory.MoviesSD, "Movies/MP4");
|
||||
caps.Categories.AddCategoryMapping(22, NewznabStandardCategory.MoviesForeign, "Movies/Non-English");
|
||||
@@ -96,6 +97,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
caps.Categories.AddCategoryMapping(1, NewznabStandardCategory.MoviesSD, "Movies/XviD");
|
||||
|
||||
caps.Categories.AddCategoryMapping(24, NewznabStandardCategory.TVSD, "TV/480p");
|
||||
caps.Categories.AddCategoryMapping(104, NewznabStandardCategory.TVUHD, "TV/4K");
|
||||
caps.Categories.AddCategoryMapping(32, NewznabStandardCategory.TVHD, "TV/Bluray");
|
||||
caps.Categories.AddCategoryMapping(31, NewznabStandardCategory.TVSD, "TV/DVD-R");
|
||||
caps.Categories.AddCategoryMapping(33, NewznabStandardCategory.TVSD, "TV/DVD-Rip");
|
||||
@@ -104,13 +106,13 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
caps.Categories.AddCategoryMapping(14, NewznabStandardCategory.TV, "TV/Packs");
|
||||
caps.Categories.AddCategoryMapping(26, NewznabStandardCategory.TVSD, "TV/SD/x264");
|
||||
caps.Categories.AddCategoryMapping(7, NewznabStandardCategory.TVHD, "TV/x264");
|
||||
caps.Categories.AddCategoryMapping(34, NewznabStandardCategory.TVUHD, "TV/x265");
|
||||
caps.Categories.AddCategoryMapping(34, NewznabStandardCategory.TVx265, "TV/x265");
|
||||
caps.Categories.AddCategoryMapping(2, NewznabStandardCategory.TVSD, "TV/XviD");
|
||||
|
||||
caps.Categories.AddCategoryMapping(10, NewznabStandardCategory.ConsoleNDS, "Nintendo");
|
||||
caps.Categories.AddCategoryMapping(4, NewznabStandardCategory.PCGames, "PC/Games");
|
||||
caps.Categories.AddCategoryMapping(18, NewznabStandardCategory.ConsolePS3, "PS");
|
||||
caps.Categories.AddCategoryMapping(8, NewznabStandardCategory.ConsolePSP, "PSP");
|
||||
caps.Categories.AddCategoryMapping(10, NewznabStandardCategory.ConsoleNDS, "Nintendo");
|
||||
caps.Categories.AddCategoryMapping(9, NewznabStandardCategory.ConsoleXBox, "Xbox");
|
||||
|
||||
caps.Categories.AddCategoryMapping(17, NewznabStandardCategory.AudioMP3, "Music/Audio");
|
||||
|
||||
@@ -11,11 +11,11 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
{
|
||||
public class TorznabSettingsValidator : AbstractValidator<TorznabSettings>
|
||||
{
|
||||
private static readonly string[] ApiKeyWhiteList = Array.Empty<string>();
|
||||
private static readonly string[] ApiKeyAllowList = Array.Empty<string>();
|
||||
|
||||
private static bool ShouldHaveApiKey(TorznabSettings settings)
|
||||
{
|
||||
return settings.BaseUrl != null && ApiKeyWhiteList.Any(c => settings.BaseUrl.ToLowerInvariant().Contains(c));
|
||||
return settings.BaseUrl != null && ApiKeyAllowList.Any(c => settings.BaseUrl.ToLowerInvariant().Contains(c));
|
||||
}
|
||||
|
||||
private static readonly Regex AdditionalParametersRegex = new Regex(@"(&.+?\=.+?)+", RegexOptions.Compiled);
|
||||
|
||||
@@ -121,53 +121,49 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
|
||||
caps.Categories.AddCategoryMapping(112, NewznabStandardCategory.MoviesOther, "Anime Movies");
|
||||
caps.Categories.AddCategoryMapping(111, NewznabStandardCategory.MoviesOther, "Anime TV");
|
||||
caps.Categories.AddCategoryMapping(150, NewznabStandardCategory.PC, "Apps");
|
||||
caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.TV, "AV1");
|
||||
caps.Categories.AddCategoryMapping(156, NewznabStandardCategory.Movies, "AV1");
|
||||
caps.Categories.AddCategoryMapping(159, NewznabStandardCategory.Movies, "Movie Boxsets AV1");
|
||||
caps.Categories.AddCategoryMapping(158, NewznabStandardCategory.Movies, "Movies AV1");
|
||||
caps.Categories.AddCategoryMapping(157, NewznabStandardCategory.TV, "TV AV1");
|
||||
caps.Categories.AddCategoryMapping(160, NewznabStandardCategory.TV, "TV Boxsets AV1");
|
||||
caps.Categories.AddCategoryMapping(153, NewznabStandardCategory.Books, "Books");
|
||||
caps.Categories.AddCategoryMapping(154, NewznabStandardCategory.AudioAudiobook, "Audiobooks");
|
||||
caps.Categories.AddCategoryMapping(155, NewznabStandardCategory.Books, "Books & Magazines");
|
||||
caps.Categories.AddCategoryMapping(154, NewznabStandardCategory.AudioAudiobook, "Books Audiobooks");
|
||||
caps.Categories.AddCategoryMapping(155, NewznabStandardCategory.Books, "Books eBooks & Magazines");
|
||||
caps.Categories.AddCategoryMapping(68, NewznabStandardCategory.MoviesOther, "Cams/TS");
|
||||
caps.Categories.AddCategoryMapping(140, NewznabStandardCategory.TVDocumentary, "Documentary");
|
||||
caps.Categories.AddCategoryMapping(10, NewznabStandardCategory.MoviesDVD, "DVDR");
|
||||
caps.Categories.AddCategoryMapping(109, NewznabStandardCategory.MoviesBluRay, "Bluray Disc");
|
||||
caps.Categories.AddCategoryMapping(109, NewznabStandardCategory.MoviesBluRay, "DVDR Bluray Disc");
|
||||
caps.Categories.AddCategoryMapping(131, NewznabStandardCategory.TVSport, "Fighting");
|
||||
caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.TVSport, "Fighting/Boxing");
|
||||
caps.Categories.AddCategoryMapping(133, NewznabStandardCategory.TVSport, "Fighting/MMA");
|
||||
caps.Categories.AddCategoryMapping(132, NewznabStandardCategory.TVSport, "Fighting/Wrestling");
|
||||
caps.Categories.AddCategoryMapping(134, NewznabStandardCategory.TVSport, "Fighting Boxing");
|
||||
caps.Categories.AddCategoryMapping(133, NewznabStandardCategory.TVSport, "Fighting MMA");
|
||||
caps.Categories.AddCategoryMapping(132, NewznabStandardCategory.TVSport, "Fighting Wrestling");
|
||||
caps.Categories.AddCategoryMapping(72, NewznabStandardCategory.MoviesForeign, "Foreign");
|
||||
caps.Categories.AddCategoryMapping(116, NewznabStandardCategory.TVForeign, "Foreign Boxsets");
|
||||
caps.Categories.AddCategoryMapping(114, NewznabStandardCategory.MoviesForeign, "Foreign Movies");
|
||||
caps.Categories.AddCategoryMapping(115, NewznabStandardCategory.TVForeign, "Foreign TV");
|
||||
caps.Categories.AddCategoryMapping(103, NewznabStandardCategory.ConsoleOther, "Games Console");
|
||||
caps.Categories.AddCategoryMapping(105, NewznabStandardCategory.ConsoleOther, "Games Console/Nintendo");
|
||||
caps.Categories.AddCategoryMapping(104, NewznabStandardCategory.ConsolePS4, "Games Console/Playstation");
|
||||
caps.Categories.AddCategoryMapping(106, NewznabStandardCategory.ConsoleXBox, "Games Console/XBOX");
|
||||
caps.Categories.AddCategoryMapping(105, NewznabStandardCategory.ConsoleOther, "Games Console Nintendo");
|
||||
caps.Categories.AddCategoryMapping(104, NewznabStandardCategory.ConsolePS4, "Games Console Playstation");
|
||||
caps.Categories.AddCategoryMapping(106, NewznabStandardCategory.ConsoleXBox, "Games Console XBOX");
|
||||
caps.Categories.AddCategoryMapping(6, NewznabStandardCategory.PCGames, "Games PC");
|
||||
caps.Categories.AddCategoryMapping(108, NewznabStandardCategory.PC, "Games PC/Linux");
|
||||
caps.Categories.AddCategoryMapping(107, NewznabStandardCategory.PCMac, "Games PC/Mac");
|
||||
caps.Categories.AddCategoryMapping(108, NewznabStandardCategory.PC, "Games PC Linux");
|
||||
caps.Categories.AddCategoryMapping(107, NewznabStandardCategory.PCMac, "Games PC Mac");
|
||||
caps.Categories.AddCategoryMapping(11, NewznabStandardCategory.Movies, "Movie Boxsets");
|
||||
caps.Categories.AddCategoryMapping(118, NewznabStandardCategory.MoviesUHD, "Movie Boxsets/Boxset 4K");
|
||||
caps.Categories.AddCategoryMapping(143, NewznabStandardCategory.MoviesHD, "Movie Boxsets/Boxset HD");
|
||||
caps.Categories.AddCategoryMapping(119, NewznabStandardCategory.MoviesHD, "Movie Boxsets/Boxset HEVC");
|
||||
caps.Categories.AddCategoryMapping(144, NewznabStandardCategory.MoviesSD, "Movie Boxsets/Boxset SD");
|
||||
caps.Categories.AddCategoryMapping(118, NewznabStandardCategory.MoviesUHD, "Movie Boxsets 4K");
|
||||
caps.Categories.AddCategoryMapping(162, NewznabStandardCategory.MoviesHD, "Movie Boxsets AV1");
|
||||
caps.Categories.AddCategoryMapping(143, NewznabStandardCategory.MoviesHD, "Movie Boxsets HD");
|
||||
caps.Categories.AddCategoryMapping(119, NewznabStandardCategory.MoviesHD, "Movie Boxsets HEVC");
|
||||
caps.Categories.AddCategoryMapping(144, NewznabStandardCategory.MoviesSD, "Movie Boxsets SD");
|
||||
caps.Categories.AddCategoryMapping(12, NewznabStandardCategory.Movies, "Movies");
|
||||
caps.Categories.AddCategoryMapping(117, NewznabStandardCategory.MoviesUHD, "Movies 4K");
|
||||
caps.Categories.AddCategoryMapping(163, NewznabStandardCategory.MoviesHD, "Movies AV1");
|
||||
caps.Categories.AddCategoryMapping(145, NewznabStandardCategory.MoviesHD, "Movies HD");
|
||||
caps.Categories.AddCategoryMapping(100, NewznabStandardCategory.MoviesHD, "Movies HEVC");
|
||||
caps.Categories.AddCategoryMapping(146, NewznabStandardCategory.MoviesSD, "Movies SD");
|
||||
caps.Categories.AddCategoryMapping(13, NewznabStandardCategory.Audio, "Music");
|
||||
caps.Categories.AddCategoryMapping(135, NewznabStandardCategory.AudioLossless, "Music/FLAC");
|
||||
caps.Categories.AddCategoryMapping(151, NewznabStandardCategory.Audio, "Karaoke");
|
||||
caps.Categories.AddCategoryMapping(135, NewznabStandardCategory.AudioLossless, "Music FLAC");
|
||||
caps.Categories.AddCategoryMapping(151, NewznabStandardCategory.Audio, "Music Karaoke");
|
||||
caps.Categories.AddCategoryMapping(136, NewznabStandardCategory.Audio, "Music Boxset");
|
||||
caps.Categories.AddCategoryMapping(148, NewznabStandardCategory.AudioVideo, "Music Videos");
|
||||
caps.Categories.AddCategoryMapping(9, NewznabStandardCategory.Other, "Other");
|
||||
caps.Categories.AddCategoryMapping(125, NewznabStandardCategory.Other, "Other/Pictures");
|
||||
caps.Categories.AddCategoryMapping(54, NewznabStandardCategory.TVOther, "Soaps");
|
||||
caps.Categories.AddCategoryMapping(83, NewznabStandardCategory.TVOther, "Specials");
|
||||
caps.Categories.AddCategoryMapping(125, NewznabStandardCategory.Other, "Other Pictures");
|
||||
caps.Categories.AddCategoryMapping(54, NewznabStandardCategory.TVOther, "Other Soaps");
|
||||
caps.Categories.AddCategoryMapping(83, NewznabStandardCategory.TVOther, "Other Specials");
|
||||
caps.Categories.AddCategoryMapping(139, NewznabStandardCategory.TV, "TOTM (Freeleech)");
|
||||
caps.Categories.AddCategoryMapping(138, NewznabStandardCategory.TV, "TOTW (x2 upload)");
|
||||
caps.Categories.AddCategoryMapping(139, NewznabStandardCategory.Movies, "TOTM (Freeleech)");
|
||||
@@ -177,16 +173,18 @@ public class XSpeeds : TorrentIndexerBase<XSpeedsSettings>
|
||||
caps.Categories.AddCategoryMapping(86, NewznabStandardCategory.TVSport, "Sports/MotorSports");
|
||||
caps.Categories.AddCategoryMapping(89, NewznabStandardCategory.TVSport, "Sports/Olympics");
|
||||
caps.Categories.AddCategoryMapping(126, NewznabStandardCategory.TV, "TV");
|
||||
caps.Categories.AddCategoryMapping(149, NewznabStandardCategory.TV, "TV Specials");
|
||||
caps.Categories.AddCategoryMapping(127, NewznabStandardCategory.TVUHD, "TV 4K");
|
||||
caps.Categories.AddCategoryMapping(164, NewznabStandardCategory.TVHD, "TV AV1");
|
||||
caps.Categories.AddCategoryMapping(129, NewznabStandardCategory.TVHD, "TV HD");
|
||||
caps.Categories.AddCategoryMapping(130, NewznabStandardCategory.TVHD, "TV HEVC");
|
||||
caps.Categories.AddCategoryMapping(128, NewznabStandardCategory.TVSD, "TV SD");
|
||||
caps.Categories.AddCategoryMapping(149, NewznabStandardCategory.TV, "TV Specials");
|
||||
caps.Categories.AddCategoryMapping(21, NewznabStandardCategory.TVSD, "TV Boxsets");
|
||||
caps.Categories.AddCategoryMapping(120, NewznabStandardCategory.TVUHD, "Boxset TV 4K");
|
||||
caps.Categories.AddCategoryMapping(76, NewznabStandardCategory.TVHD, "Boxset TV HD");
|
||||
caps.Categories.AddCategoryMapping(97, NewznabStandardCategory.TVHD, "Boxset TV HEVC");
|
||||
caps.Categories.AddCategoryMapping(147, NewznabStandardCategory.TVSD, "Boxset TV SD");
|
||||
caps.Categories.AddCategoryMapping(120, NewznabStandardCategory.TVUHD, "TV Boxset 4K");
|
||||
caps.Categories.AddCategoryMapping(165, NewznabStandardCategory.TVUHD, "TV Boxset AV1");
|
||||
caps.Categories.AddCategoryMapping(76, NewznabStandardCategory.TVHD, "TV Boxset HD");
|
||||
caps.Categories.AddCategoryMapping(97, NewznabStandardCategory.TVHD, "TV Boxset HEVC");
|
||||
caps.Categories.AddCategoryMapping(147, NewznabStandardCategory.TVSD, "TV Boxset SD");
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
[Obsolete("Site does not allow automation")]
|
||||
public class ZonaQ : TorrentIndexerBase<UserPassTorrentBaseSettings>
|
||||
{
|
||||
public override string Name => "ZonaQ";
|
||||
|
||||
@@ -503,14 +503,14 @@ namespace NzbDrone.Core.Indexers
|
||||
catch (IndexerAuthException ex)
|
||||
{
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
_logger.Warn(ex, "Invalid Credentials for {0} {1}", this, url);
|
||||
_logger.Warn(ex, "Invalid Credentials for {0} [{1}]", this, url);
|
||||
}
|
||||
catch (CloudFlareProtectionException ex)
|
||||
{
|
||||
result.Queries.Add(new IndexerQueryResult { Response = ex.Response });
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
ex.WithData("FeedUrl", url);
|
||||
_logger.Error(ex, "Cloudflare protection detected for {0}, Flaresolverr may be required.", this);
|
||||
_logger.Error(ex, "Cloudflare protection detected for [{0}], Flaresolverr may be required.", this);
|
||||
}
|
||||
catch (IndexerException ex)
|
||||
{
|
||||
@@ -521,18 +521,18 @@ namespace NzbDrone.Core.Indexers
|
||||
catch (HttpRequestException ex)
|
||||
{
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
_logger.Warn(ex, "Unable to connect to indexer, please check your DNS settings and ensure IPv6 is working or disabled. {0}", url);
|
||||
_logger.Warn(ex, "Unable to connect to indexer [{0}]. This is typically caused by DNS/SSL issues. Check DNS settings, ensure IPv6 is working or disabled, and consider using different DNS servers or a VPN. See: 'https://wiki.servarr.com/prowlarr/troubleshooting#dns-ssl-connection-issues'", url);
|
||||
}
|
||||
catch (TaskCanceledException ex)
|
||||
{
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
_logger.Warn(ex, "Unable to connect to indexer, possibly due to a timeout. {0}", url);
|
||||
_logger.Warn(ex, "Unable to connect to indexer, possibly due to a timeout. [{0}]", url);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_indexerStatusService.RecordFailure(Definition.Id);
|
||||
ex.WithData("FeedUrl", url);
|
||||
_logger.Error(ex, "An error occurred while processing indexer feed. {0}", url);
|
||||
_logger.Error(ex, "An error occurred while processing indexer feed. [{0}]", url);
|
||||
}
|
||||
|
||||
result.Releases = CleanupReleases(releases, searchCriteria);
|
||||
@@ -816,7 +816,7 @@ namespace NzbDrone.Core.Indexers
|
||||
{
|
||||
_logger.Warn(ex, "Unable to connect to indexer");
|
||||
|
||||
return new NzbDroneValidationFailure(string.Empty, "Unable to connect to indexer, please check your DNS settings and ensure IPv6 is working or disabled. " + ex.Message)
|
||||
return new NzbDroneValidationFailure(string.Empty, "Unable to connect to indexer. This is typically caused by DNS/SSL issues. Check DNS settings, ensure IPv6 is working or disabled, consider using different DNS servers, or try a VPN/proxy if needed. See: 'https://wiki.servarr.com/prowlarr/troubleshooting#dns-ssl-connection-issues' " + ex.Message)
|
||||
{
|
||||
DetailedDescription = ex.InnerException?.Message
|
||||
};
|
||||
|
||||
@@ -375,5 +375,47 @@
|
||||
"Stats": "الحالة",
|
||||
"CurrentlyInstalled": "مثبتة حاليا",
|
||||
"Season": "السبب",
|
||||
"Mixed": "ثابت"
|
||||
"Mixed": "ثابت",
|
||||
"Destination": "مسار الوجهة",
|
||||
"AddConnection": "الإتصال",
|
||||
"Notification": "شهادة",
|
||||
"DeleteClientCategory": "حذف Download Client",
|
||||
"DeleteIndexerProxy": "حذف المفهرس",
|
||||
"IndexerHDBitsSettingsOrigins": "أصلي",
|
||||
"IndexerStatus": "إعدادات المفهرس",
|
||||
"ManageDownloadClients": "تحميل العملاء",
|
||||
"Proxies": "مظهر",
|
||||
"TvSearch": "بحث",
|
||||
"UnableToLoadAppProfiles": "تعذر تحميل ملفات تعريف التأخير",
|
||||
"DeleteSelectedIndexersMessageText": "هل أنت متأكد أنك تريد حذف ملفات الأفلام المحددة؟",
|
||||
"SelectIndexers": "حذف المفهرس",
|
||||
"EditSelectedDownloadClients": "حذف Download Client",
|
||||
"EditSyncProfile": "تحرير ملف تعريف التأخير",
|
||||
"Donate": "تاريخ",
|
||||
"UnableToLoadIndexerProxies": "تعذر تحميل المفهرسات",
|
||||
"IndexerProxy": "أولوية المفهرس",
|
||||
"MovieSearch": "البحث الشامل عن الأفلام",
|
||||
"UnableToLoadDevelopmentSettings": "تعذر تحميل الإعدادات العامة",
|
||||
"AddNewIndexer": "أضف مفهرس",
|
||||
"IndexerId": "مفهرس",
|
||||
"AddCustomFilter": "مرشحات مخصصة",
|
||||
"AuthenticationMethod": "المصادقة",
|
||||
"Connect": "شهادة",
|
||||
"DeleteSelectedApplicationsMessageText": "هل أنت متأكد أنك تريد حذف ملفات الأفلام المحددة؟",
|
||||
"DeleteSelectedIndexer": "حذف المفهرس",
|
||||
"DeleteSelectedIndexers": "حذف المفهرس",
|
||||
"DownloadClientCategory": "حذف Download Client",
|
||||
"IndexerInfo": "مفهرس",
|
||||
"IndexerProxies": "أولوية المفهرس",
|
||||
"MovieSearchTypes": "البحث الشامل عن الأفلام",
|
||||
"SyncProfile": "تحرير ملف تعريف التأخير",
|
||||
"SearchIndexers": "حذف المفهرس",
|
||||
"AddIndexerProxy": "أولوية المفهرس",
|
||||
"EditSelectedIndexers": "حذف المفهرس",
|
||||
"Notifications": "شهادة",
|
||||
"DeleteSelectedApplications": "حذف ملفات الأفلام المحددة",
|
||||
"DeleteSelectedDownloadClientsMessageText": "هل أنت متأكد أنك تريد حذف ملفات الأفلام المحددة؟",
|
||||
"AddSyncProfile": "تحرير ملف تعريف التأخير",
|
||||
"SyncProfiles": "تحرير ملف تعريف التأخير",
|
||||
"FilterPlaceHolder": "حذف المفهرس"
|
||||
}
|
||||
|
||||
@@ -417,5 +417,59 @@
|
||||
"AddCustomFilter": "Добави персонализиран филтър",
|
||||
"AuthenticationMethod": "Метод за удостоверяване",
|
||||
"AuthenticationMethodHelpTextWarning": "Моля, изберете валиден метод за удостоверяване",
|
||||
"BlackholeFolderHelpText": "Папка, в която {appName} ще съхранява файла {extension}"
|
||||
"BlackholeFolderHelpText": "Папка, в която {appName} ще съхранява файла {extension}",
|
||||
"Author": "Авто",
|
||||
"AddApplicationImplementation": "Добави условие - {implementationName}",
|
||||
"AddCategory": "Категория",
|
||||
"AddIndexerProxyImplementation": "Добави индексатор - {implementationName}",
|
||||
"Notification": "Сертифициране",
|
||||
"DeleteClientCategory": "Изтриване на клиент за изтегляне",
|
||||
"DeleteIndexerProxy": "Изтрийте Indexer",
|
||||
"DeleteSelectedIndexersMessageText": "Наистина ли искате да изтриете избраните филмови файлове?",
|
||||
"DownloadClientRTorrentSettingsDirectoryHelpText": "Незадължително локация за изтеглянията, оставете празно, за да използвате локацията по подразбиране на Aria2",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Незадължително локация за изтеглянията, оставете празно, за да използвате локацията по подразбиране на Aria2",
|
||||
"EditSyncProfile": "Редактиране на профил за забавяне",
|
||||
"ManageDownloadClients": "Изтеглете клиенти",
|
||||
"UnableToLoadDevelopmentSettings": "Не може да се заредят общи настройки",
|
||||
"EditConnectionImplementation": "Добави връзка - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Добави клиент за изтегляне - {implementationName}",
|
||||
"EditIndexerImplementation": "Добави индексатор - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Добави индексатор - {implementationName}",
|
||||
"IndexerHDBitsSettingsCodecs": "Кодек",
|
||||
"IndexerHDBitsSettingsOrigins": "Оригинал",
|
||||
"IndexerId": "Индексатор",
|
||||
"MovieSearch": "Масово търсене на филми",
|
||||
"SelectIndexers": "Изтрийте Indexer",
|
||||
"UnableToLoadIndexerProxies": "Индексаторите не могат да се заредят",
|
||||
"EditSelectedDownloadClients": "Изтриване на клиент за изтегляне",
|
||||
"Application": "Приложения",
|
||||
"AddNewIndexer": "Добавете Indexer",
|
||||
"TvSearch": "Търсене",
|
||||
"Proxies": "Профили",
|
||||
"IndexerProxy": "Индексатор Приоритет",
|
||||
"Stats": "Статус",
|
||||
"UnableToLoadAppProfiles": "Профилите за забавяне не могат да се заредят",
|
||||
"EditApplicationImplementation": "Добави условие - {implementationName}",
|
||||
"Mixed": "Фиксирана",
|
||||
"IndexerStatus": "Настройки на индексатора",
|
||||
"DeleteSelectedApplicationsMessageText": "Наистина ли искате да изтриете избраните филмови файлове?",
|
||||
"DeleteSelectedApplications": "Изтриване на избрани филмови файлове",
|
||||
"DeleteSelectedIndexers": "Изтрийте Indexer",
|
||||
"DownloadClientCategory": "Изтриване на клиент за изтегляне",
|
||||
"EditCategory": "Категория",
|
||||
"Notifications": "Сертифициране",
|
||||
"SearchIndexers": "Изтрийте Indexer",
|
||||
"SyncProfile": "Редактиране на профил за забавяне",
|
||||
"MovieSearchTypes": "Масово търсене на филми",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Наистина ли искате да изтриете избраните филмови файлове?",
|
||||
"DeleteSelectedIndexer": "Изтрийте Indexer",
|
||||
"EditSelectedIndexers": "Изтрийте Indexer",
|
||||
"Connect": "Сертифициране",
|
||||
"AddIndexerProxy": "Индексатор Приоритет",
|
||||
"IndexerProxies": "Индексатор Приоритет",
|
||||
"IndexerInfo": "Индексатор",
|
||||
"SyncProfiles": "Редактиране на профил за забавяне",
|
||||
"AddSyncProfile": "Редактиране на профил за забавяне",
|
||||
"Auth": "Авто",
|
||||
"FilterPlaceHolder": "Изтрийте Indexer"
|
||||
}
|
||||
|
||||
@@ -487,7 +487,7 @@
|
||||
"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ó",
|
||||
"DockerUpdater": "Actualitzeu el contenidor Docker per actualitzar",
|
||||
"Download": "Baixa",
|
||||
"ErrorRestoringBackup": "S'ha produït un error en restaurar la còpia de seguretat",
|
||||
"ExternalUpdater": "{appName} està configurat per a utilitzar un mecanisme d'actualització extern",
|
||||
@@ -804,7 +804,7 @@
|
||||
"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.",
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent té historial d'incloure criptominers, malware i anuncis, suggerim fortament que escolleixis 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"
|
||||
|
||||
@@ -491,7 +491,7 @@
|
||||
"EnableRssHelpText": "Povolit kanál RSS pro indexer",
|
||||
"DeleteApplication": "Odstranit aplikaci",
|
||||
"DeleteSelectedApplications": "Odstranit vybrané aplikace",
|
||||
"DeleteSelectedIndexers": "Odstranit vybrané indexery",
|
||||
"DeleteSelectedIndexers": "Smazat vybrané indexery",
|
||||
"DevelopmentSettings": "Nastavení pro vývoj",
|
||||
"DisabledUntil": "Zakázáno do",
|
||||
"DownloadClientCategory": "Kategorie klienta pro stahování",
|
||||
@@ -639,5 +639,30 @@
|
||||
"DownloadClientUTorrentProviderMessage": "uTorrent má historii zahrnování kryptoměnových těžařů, malwaru a reklam, důrazně vám doporučujeme zvolit jiného klienta.",
|
||||
"IndexerSettingsBaseUrlHelpText": "Vyberte, jakou základní URL bude {appName} používat pro požadavky na web",
|
||||
"IndexerSettingsPackSeedTimeIndexerHelpText": "Doba, po kterou by měl být balíček (sezóna nebo diskografie) torrentu seedován před zastavením, prázdné pole znamená výchozí nastavení aplikace",
|
||||
"PackSeedTimeHelpText": "Doba, po kterou by měl být balíček (sezóna nebo diskografie) torrentu seedován před zastavením, prázdné pole znamená výchozí nastavení aplikace"
|
||||
"PackSeedTimeHelpText": "Doba, po kterou by měl být balíček (sezóna nebo diskografie) torrentu seedován před zastavením, prázdné pole znamená výchozí nastavení aplikace",
|
||||
"OnApplicationUpdateHelpText": "Při aktualizaci aplikace",
|
||||
"SeedTime": "Doba sdílení",
|
||||
"OnHealthRestoredHelpText": "Při obnovení zdraví",
|
||||
"SeedRatio": "Poměr sdílení",
|
||||
"ThemeHelpText": "Změnit motiv UI, možnost „Auto“ kopíruje nastavení OS pro výběr tmavého nebo světlého režimu. Inspirováno {inspiredBy}.",
|
||||
"SearchType": "Hledat typy",
|
||||
"UnableToLoadDevelopmentSettings": "Nelze načíst obecná nastavení",
|
||||
"SeedTimeHelpText": "Doba, po kterou bude torrent sdílen před zastavením, prázdná hodnota použije výchozí hodnotu klienta stahování",
|
||||
"IndexerHDBitsSettingsOrigins": "Originál",
|
||||
"SelectIndexers": "Vybrat příznaky indexeru",
|
||||
"IndexerTagsHelpTextWarning": "Štítky je potřeba používat opatrně, mohou mít nechtěné účinky. Aplikace se štítkem se bude synchronizovat pouze s indexery se stejným štítkem.",
|
||||
"MinimumSeeders": "Minimální počet seederů aplikací",
|
||||
"SearchAllIndexers": "Hledat indexery",
|
||||
"SyncProfile": "Přidat synchronizační profil",
|
||||
"TvSearch": "Vyhledávání",
|
||||
"UnableToLoadAppProfiles": "Nelze načíst profily zpoždění",
|
||||
"UnableToLoadIndexerProxies": "Nelze načíst indexery",
|
||||
"SyncProfiles": "Přidat synchronizační profil",
|
||||
"TVSearchTypes": "Hledat typy",
|
||||
"Proxies": "Profily",
|
||||
"MovieSearchTypes": "Hledat typy",
|
||||
"MusicSearchTypes": "Hledat typy",
|
||||
"IndexerStatus": "Nastavení indexeru",
|
||||
"MovieSearch": "Hromadné vyhledávání filmů",
|
||||
"SeedRatioHelpText": "Doba, po kterou bude torrent sdílen před zastavením, prázdná hodnota použije výchozí hodnotu klienta stahování"
|
||||
}
|
||||
|
||||
@@ -428,5 +428,39 @@
|
||||
"Episode": "afsnit",
|
||||
"Artist": "kunstner",
|
||||
"Id": "ID",
|
||||
"Encoding": "Indkodning"
|
||||
"Encoding": "Indkodning",
|
||||
"Destination": "Destinationssti",
|
||||
"IndexerId": "Indekser",
|
||||
"MovieSearch": "Massefilmsøgning",
|
||||
"CountIndexersSelected": "{count} film er valgt",
|
||||
"EditCategory": "Tilføj Kategori",
|
||||
"EditSelectedDownloadClients": "Slet Download Client",
|
||||
"ManageDownloadClients": "Download Klienter",
|
||||
"SyncProfile": "Tilføj synkroniseringsprofil",
|
||||
"SyncProfiles": "Tilføj synkroniseringsprofil",
|
||||
"UnableToLoadAppProfiles": "Kunne ikke indlæse forsinkelsesprofiler",
|
||||
"ApplicationURL": "Applikationer",
|
||||
"IndexerProxy": "Tilføj en indeksørproxy",
|
||||
"Proxies": "Profiler",
|
||||
"DeleteClientCategory": "Slet Download Client",
|
||||
"IndexerStatus": "Indekseringsindstillinger",
|
||||
"TvSearch": "Søg",
|
||||
"UnableToLoadIndexerProxies": "Kan ikke indlæse indeksørerne",
|
||||
"DeleteIndexerProxy": "Slet Indexer",
|
||||
"UnableToLoadDevelopmentSettings": "Kan ikke indlæse generelle indstillinger",
|
||||
"Donate": "Dato",
|
||||
"IndexerHDBitsSettingsOrigins": "Original",
|
||||
"SelectIndexers": "Slet Indexer",
|
||||
"AuthenticationMethod": "Godkendelse",
|
||||
"Category": "Tilføj Kategori",
|
||||
"SearchIndexers": "Slet Indexer",
|
||||
"IndexerProxies": "Tilføj en indeksørproxy",
|
||||
"IndexerInfo": "Indekser",
|
||||
"MovieSearchTypes": "Massefilmsøgning",
|
||||
"DownloadClientCategory": "Slet Download Client",
|
||||
"DeleteSelectedApplications": "Slet valgte filmfiler",
|
||||
"DeleteSelectedIndexer": "Slet Indexer",
|
||||
"DeleteSelectedIndexers": "Slet Indexer",
|
||||
"EditSelectedIndexers": "Slet Indexer",
|
||||
"FilterPlaceHolder": "Slet Indexer"
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
"Exception": "Ausnahme",
|
||||
"ExistingTag": "Vorhandener Tag",
|
||||
"Failed": "Fehlgeschlagen",
|
||||
"FeatureRequests": "Feature Anfragen",
|
||||
"FeatureRequests": "Funktion anfragen",
|
||||
"Filename": "Dateiname",
|
||||
"Files": "Dateien",
|
||||
"Filter": "Filter",
|
||||
|
||||
@@ -540,5 +540,28 @@
|
||||
"AptUpdater": "Χρησιμοποιήστε το apt για να εγκαταστήσετε την ενημέρωση",
|
||||
"InstallLatest": "Εγκατάσταση πιο πρόσφατου",
|
||||
"CurrentlyInstalled": "Εγκατεστημένο αυτήν τη στιγμή",
|
||||
"Mixed": "Σταθερός"
|
||||
"Mixed": "Σταθερός",
|
||||
"Destination": "Διαδρομή προορισμού",
|
||||
"AddCategory": "Κατηγορία",
|
||||
"AddDownloadClientImplementation": "Προσθήκη - {implementationName}",
|
||||
"LogSizeLimit": "Όριο μεγέθους",
|
||||
"IndexerStatus": "Ρυθμίσεις ευρετηρίου",
|
||||
"IndexerId": "Ευρετήριο",
|
||||
"EditSelectedIndexers": "Αναζήτηση ευρετηρίων",
|
||||
"AppsMinimumSeeders": "Ελάχιστοι σπαρτήρες",
|
||||
"AuthenticationMethod": "Αυθεντικοποίηση",
|
||||
"EditDownloadClientImplementation": "Προσθήκη",
|
||||
"EditSelectedDownloadClients": "Διαγραφή προγράμματος-πελάτη λήψης",
|
||||
"SearchAllIndexers": "Αναζήτηση ευρετηριαστών",
|
||||
"ManageDownloadClients": "Προγράμματα Λήψης",
|
||||
"DeleteSelectedApplications": "Διαγραφή επιλεγμένου καλλιτέχνη",
|
||||
"Donate": "Ημερομηνία",
|
||||
"IndexerDownloadClientHelpText": "Καθορίστε ποιο πρόγραμμα-πελάτη λήψης χρησιμοποιείται για αρπαγές από αυτό το ευρετήριο",
|
||||
"IndexerHDBitsSettingsOrigins": "Πρωτότυπο",
|
||||
"AddCustomFilter": "Custom Φιλτρα",
|
||||
"AddApplication": "Εφαρμογή",
|
||||
"IndexerSettingsAppsMinimumSeeders": "Ελάχιστοι σπαρτήρες",
|
||||
"DeleteSelectedIndexer": "Αναζήτηση ευρετηρίων",
|
||||
"DeleteSelectedIndexers": "Αναζήτηση ευρετηρίων",
|
||||
"EditCategory": "Κατηγορία"
|
||||
}
|
||||
|
||||
@@ -9,5 +9,23 @@
|
||||
"AddConnectionImplementation": "افزودن پیوند - {implementationName}",
|
||||
"AddDownloadClientImplementation": "افزودن کلاینت دانلود - {implementationName}",
|
||||
"Torrents": "تورنت ها",
|
||||
"Usenet": "Usenet"
|
||||
"Usenet": "Usenet",
|
||||
"AddIndexerImplementation": "افزودن شرط - {implementationName}",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "افزودن شرط جدید ناموفق بود، لطفا مجددا تلاش کنید.",
|
||||
"EditApplicationImplementation": "افزودن شرط - {implementationName}",
|
||||
"EditDownloadClientImplementation": "افزودن کلاینت دانلود - {implementationName}",
|
||||
"UnableToAddANewApplicationPleaseTryAgain": "افزودن شرط جدید ناموفق بود، لطفا مجددا تلاش کنید.",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "افزودن شرط جدید ناموفق بود، لطفا مجددا تلاش کنید.",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "افزودن نمایه تاخیر جدید ناموفق بود، لطفا مجددا تلاش کنید.",
|
||||
"Connections": "افزودن پیوند",
|
||||
"EditConnectionImplementation": "افزودن پیوند - {implementationName}",
|
||||
"AddApplicationImplementation": "افزودن شرط - {implementationName}",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "افزودن شرط جدید ناموفق بود، لطفا مجددا تلاش کنید.",
|
||||
"Torrent": "تورنت ها",
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "افزودن نمایه تاخیر جدید ناموفق بود، لطفا مجددا تلاش کنید.",
|
||||
"ConnectionLost": "افزودن پیوند",
|
||||
"EditSyncProfile": "افزودن نمایه تاخیر",
|
||||
"AddIndexerProxyImplementation": "افزودن شرط - {implementationName}",
|
||||
"EditIndexerImplementation": "افزودن شرط - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "افزودن شرط - {implementationName}"
|
||||
}
|
||||
|
||||
@@ -285,7 +285,7 @@
|
||||
"NoLogFiles": "Lokitiedostoja ei ole",
|
||||
"SSLCertPasswordHelpText": "PFX-tiedoston salasana",
|
||||
"SSLCertPath": "SSL-varmenteen sijainti",
|
||||
"SSLCertPathHelpText": "PFX-tiedoston sijainti",
|
||||
"SSLCertPathHelpText": "Pfx- tai pem-tiedoston sijainti.",
|
||||
"Status": "Tila",
|
||||
"NotificationTriggers": "Ilmoituksen laukaisijat",
|
||||
"NoUpdatesAreAvailable": "Päivityksiä ei ole saatavilla",
|
||||
@@ -622,7 +622,7 @@
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Etsittävät tyypit",
|
||||
"IndexerSettingsSeedRatio": "Jakosuhde",
|
||||
"IndexerSettingsSeedTime": "Jakoaika",
|
||||
"IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi.",
|
||||
"IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen kuin se pysäytetään. Käytä latauspalvelun oletusta jättämällä tyhjäksi.",
|
||||
"IndexerSettingsVipExpiration": "VIP-erääntyy",
|
||||
"Destination": "Kohde",
|
||||
"Directory": "Kansio",
|
||||
@@ -647,7 +647,7 @@
|
||||
"IndexerSettingsCookie": "Eväste",
|
||||
"IndexerSettingsPackSeedTime": "Paketin jakoaika",
|
||||
"IndexerSettingsPackSeedTimeIndexerHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.",
|
||||
"IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa hakupalvelun sääntöjä.",
|
||||
"IndexerSettingsSeedRatioHelpText": "Jakosuhde, joka torrentin tulee saavuttaa ennen kuin se pysäytetään. Käytä latauspalvelun oletusta jättämällä tyhjäksi. Suhteen tulisi olla vähintään 1.0 ja noudattaa hakupalvelun sääntöjä.",
|
||||
"SecretToken": "Salainen tunniste",
|
||||
"TorrentBlackholeSaveMagnetFiles": "Tallenna magnet-tiedostot",
|
||||
"UseSsl": "Käytä SSL-salausta",
|
||||
@@ -661,14 +661,14 @@
|
||||
"XmlRpcPath": "XML RPC -sijainti",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "Lisää lataustuökalun {clientName} URL-osoitteeseen etuliitteen, esim. \"{url}\".",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Lisää Flood-rajapintaan etuliitteen, esim. \"{url}\".",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Vaihtoehtoinen jaettu kansio latauksille. Käytä Download Stationin oletussijaintia jättämällä tyhjäksi.",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Vaihtoehtoinen jaettu kansio latauksille. Käytä Download Stationin oletusta jättämällä tyhjäksi.",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Määritä Freebox-rajapinnan perus-URL rajapinnan versiolla, esim. \"{url}\". Oletus on \"{defaultApiUrl}\".",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Ensimmäinen ja viimeinen ensin",
|
||||
"DownloadClientFreeboxSettingsAppId": "Sovelluksen ID",
|
||||
"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.",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"Indexers": "Indexeurs",
|
||||
"Host": "Hôte",
|
||||
"History": "Historique",
|
||||
"HideAdvanced": "Masquer les Options Avancées",
|
||||
"HideAdvanced": "Masquer les options avancées",
|
||||
"Health": "Santé",
|
||||
"General": "Général",
|
||||
"Folder": "Dossier",
|
||||
@@ -12,7 +12,7 @@
|
||||
"Events": "Événements",
|
||||
"Edit": "Modifier",
|
||||
"DownloadClientStatusAllClientHealthCheckMessage": "Aucun client de téléchargement n'est disponible en raison d'échecs",
|
||||
"DownloadClients": "Clients de télécharg.",
|
||||
"DownloadClients": "Téléchargement",
|
||||
"Dates": "Dates",
|
||||
"Date": "Date",
|
||||
"Delete": "Supprimer",
|
||||
@@ -22,20 +22,20 @@
|
||||
"Clear": "Effacer",
|
||||
"BackupNow": "Sauvegarder maintenant",
|
||||
"Backup": "Sauvegarde",
|
||||
"AppDataLocationHealthCheckMessage": "La mise à jour ne sera pas possible afin empêcher la suppression de AppData lors de la mise à jour",
|
||||
"AppDataLocationHealthCheckMessage": "La mise à jour ne sera pas possible afin d'éviter la suppression des données d'application (AppData)",
|
||||
"Analytics": "Statistiques",
|
||||
"All": "Tout",
|
||||
"About": "À propos",
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Indexeurs indisponibles en raison d'échecs : {indexerNames}",
|
||||
"DownloadClientStatusSingleClientHealthCheckMessage": "Clients de Téléchargement indisponibles en raison d'échecs : {downloadClientNames}",
|
||||
"SetTags": "Définir des étiquettes",
|
||||
"SetTags": "Définir les étiquettes",
|
||||
"ReleaseStatus": "Statut de la version",
|
||||
"UpdateUiNotWritableHealthCheckMessage": "Impossible d'installer la mise à jour car le dossier d'interface utilisateur '{uiFolder}' n'est pas accessible en écriture par l'utilisateur '{userName}'.",
|
||||
"UpdateStartupTranslocationHealthCheckMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{startupFolder}' se trouve dans un dossier App Translocation.",
|
||||
"UpdateStartupNotWritableHealthCheckMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{startupFolder}' n'est pas accessible en écriture par l'utilisateur '{userName}'.",
|
||||
"UnselectAll": "Tout désélectionner",
|
||||
"UISettingsSummary": "Date, langue, et perceptions des couleurs",
|
||||
"TagsSettingsSummary": "Voir toutes les étiquettes et comment elles sont utilisées. Les étiquettes inutilisées peuvent être supprimées",
|
||||
"TagsSettingsSummary": "Voir toutes les étiquettes et leur utilisation. Les étiquettes inutilisées peuvent être supprimées",
|
||||
"Style": "Style",
|
||||
"Status": "État",
|
||||
"Sort": "Trier",
|
||||
@@ -60,7 +60,7 @@
|
||||
"NoChanges": "Aucun changement",
|
||||
"NoChange": "Pas de changement",
|
||||
"MoreInfo": "Plus d'informations",
|
||||
"Grabbed": "Saisie",
|
||||
"Grabbed": "Récupération",
|
||||
"DownloadClientsSettingsSummary": "Configuration des clients de téléchargement pour intégration dans la recherche de l'interface utilisateur de {appName}",
|
||||
"DownloadClient": "Client de téléchargement",
|
||||
"Logging": "Enregistrement",
|
||||
@@ -69,7 +69,7 @@
|
||||
"Updates": "Mises à jour",
|
||||
"UI": "UI",
|
||||
"Tasks": "Tâches",
|
||||
"Tags": "Tags",
|
||||
"Tags": "Étiquettes",
|
||||
"System": "Système",
|
||||
"LastWriteTime": "Heure de la dernière écriture",
|
||||
"Language": "Langue",
|
||||
@@ -106,7 +106,7 @@
|
||||
"Restart": "Redémarrer",
|
||||
"Reload": "Recharger",
|
||||
"Peers": "Peers",
|
||||
"PageSize": "Pagination",
|
||||
"PageSize": "Taille de la page",
|
||||
"Ok": "OK",
|
||||
"OAuthPopupMessage": "Les pop-ups sont bloquées par votre navigateur",
|
||||
"Name": "Nom",
|
||||
@@ -128,7 +128,7 @@
|
||||
"PendingChangesStayReview": "Rester et vérifier les modifications",
|
||||
"PendingChangesMessage": "Vous avez des modifications non sauvegardées, voulez-vous vraiment quitter cette page ?",
|
||||
"PendingChangesDiscardChanges": "Abandonner les modifications et quitter",
|
||||
"CloneProfile": "Dupliqué le profil",
|
||||
"CloneProfile": "Dupliquer le profil",
|
||||
"ClientPriority": "Priorité du client",
|
||||
"ChangeHasNotBeenSavedYet": "Les changements n'ont pas encore été sauvegardés",
|
||||
"CertificateValidationHelpText": "Change la rigueur de la vérification du certificat HTTPS",
|
||||
@@ -221,8 +221,8 @@
|
||||
"TagIsNotUsedAndCanBeDeleted": "L'étiquette n'est pas utilisée et peut être supprimée",
|
||||
"TagsHelpText": "S'applique aux indexeurs avec au moins une étiquette correspondante",
|
||||
"StartTypingOrSelectAPathBelow": "Commencer à écrire ou sélectionner un chemin ci-dessous",
|
||||
"NoTagsHaveBeenAddedYet": "Aucune identification n'a été ajoutée pour l'instant",
|
||||
"IndexerFlags": "Drapeaux de l'indexeur",
|
||||
"NoTagsHaveBeenAddedYet": "Aucune étiquette n'a encore été ajoutée",
|
||||
"IndexerFlags": "Indicateurs de l'indexeur",
|
||||
"DeleteTagMessageText": "Voulez-vous vraiment supprimer l'étiquette '{label}' ?",
|
||||
"UISettings": "Paramètres UI",
|
||||
"UILanguageHelpTextWarning": "Rechargement du navigateur requis",
|
||||
@@ -250,8 +250,8 @@
|
||||
"RestartNow": "Redémarrer maintenant",
|
||||
"ResetAPIKey": "Réinitialiser la clé API",
|
||||
"Reset": "Réinitialiser",
|
||||
"RemovingTag": "Supprimer la balise",
|
||||
"ExistingTag": "Balise existante",
|
||||
"RemovingTag": "Suppression de l'étiquette",
|
||||
"ExistingTag": "Étiquette existante",
|
||||
"RemoveFilter": "Supprimer le filtre",
|
||||
"RemovedFromTaskQueue": "Supprimé de la file d'attente des tâches",
|
||||
"RefreshMovie": "Actualiser le film",
|
||||
@@ -259,8 +259,8 @@
|
||||
"ProwlarrSupportsAnyIndexer": "{appName} prend en charge de nombreux indexeurs en plus de tout indexeur qui utilise la norme Newznab/Torznab en utilisant « Generic Newznab » (pour usenet) ou « Generic Torznab » (pour les torrents). Recherchez et sélectionnez votre indexeur ci-dessous.",
|
||||
"ProwlarrSupportsAnyDownloadClient": "{appName} prend en charge tout client de téléchargement qui utilise le standard Newznab, ainsi que d'autres clients de téléchargement répertoriés ci-dessous.",
|
||||
"ProxyUsernameHelpText": "Il vous suffit de saisir un nom d'utilisateur et un mot de passe si nécessaire. Sinon, laissez-les vides.",
|
||||
"ProxyType": "Type de mandataire",
|
||||
"ProxyPasswordHelpText": "Il vous suffit de saisir un nom d'utilisateur et un mot de passe si nécessaire. Sinon, laissez-les vides.",
|
||||
"ProxyType": "Type de proxy",
|
||||
"ProxyPasswordHelpText": "Saisissez un nom d'utilisateur et un mot de passe uniquement s'ils sont requis. Sinon, laissez ces champs vides.",
|
||||
"Priority": "Priorité",
|
||||
"PortNumber": "Numéro de port",
|
||||
"Port": "Port",
|
||||
@@ -274,11 +274,11 @@
|
||||
"NoLeaveIt": "Non, laisse tomber",
|
||||
"NoBackupsAreAvailable": "Aucune sauvegarde n'est disponible",
|
||||
"New": "Nouveau",
|
||||
"NetCore": ".NET Core",
|
||||
"NetCore": ".NET",
|
||||
"MovieIndexScrollTop": "Index des films : faire défiler vers le haut",
|
||||
"MovieIndexScrollBottom": "Index des films : faire défiler vers le bas",
|
||||
"MIA": "MIA",
|
||||
"LaunchBrowserHelpText": " Ouvrer un navigateur Web et accéder à la page d'accueil de {appName} au démarrage de l'application.",
|
||||
"MIA": "Indisponible",
|
||||
"LaunchBrowserHelpText": " Ouvrir un navigateur Web et accéder à la page d'accueil de {appName} au démarrage de l'application.",
|
||||
"CloseCurrentModal": "Fermer cette fenêtre modale",
|
||||
"AddingTag": "Ajout d'une étiquette",
|
||||
"OnHealthIssueHelpText": "Sur un problème de santé",
|
||||
@@ -318,8 +318,8 @@
|
||||
"ApplicationStatusCheckSingleClientMessage": "Applications indisponibles en raison de dysfonctionnements : {0}",
|
||||
"ApplicationStatusCheckAllClientMessage": "Toutes les applications sont indisponibles en raison de dysfonctionnements",
|
||||
"AllIndexersHiddenDueToFilter": "Tous les indexeurs sont cachés en raison du filtre appliqué.",
|
||||
"AddToDownloadClient": "Ajouter un release au client",
|
||||
"AddedToDownloadClient": "Release ajoutée au client",
|
||||
"AddToDownloadClient": "Ajouter une version au client",
|
||||
"AddedToDownloadClient": "Version ajoutée au client",
|
||||
"AddNewIndexer": "Ajouter un nouvel indexeur",
|
||||
"Wiki": "Wiki",
|
||||
"Rss": "RSS",
|
||||
@@ -344,7 +344,7 @@
|
||||
"Description": "Description",
|
||||
"Donations": "Dons",
|
||||
"Enabled": "Activé",
|
||||
"Grabs": "Complétés",
|
||||
"Grabs": "Récupérations",
|
||||
"Id": "ID",
|
||||
"Presets": "Préconfigurations",
|
||||
"Privacy": "Visibilité",
|
||||
@@ -360,7 +360,7 @@
|
||||
"SyncLevel": "Niveau de synchronisation",
|
||||
"FullSync": "Synchronisation complète",
|
||||
"AddRemoveOnly": "Ajouter et supprimer uniquement",
|
||||
"AddDownloadClientToProwlarr": "L'ajout d'un client de téléchargement permet à {appName} d'envoyer des fichers directement depuis l'interface utilisateur tout en effectuant une recherche manuelle.",
|
||||
"AddDownloadClientToProwlarr": "L'ajout d'un client de téléchargement permet à {appName} d'envoyer des fichiers directement depuis l'interface utilisateur tout en effectuant une recherche manuelle.",
|
||||
"NoSearchResultsFound": "Aucun résultat de recherche trouvé, essayez d'effectuer une nouvelle recherche ci-dessous.",
|
||||
"DeleteIndexerProxy": "Supprimer le proxy indexeur",
|
||||
"DeleteIndexerProxyMessageText": "Voulez-vous supprimer le proxy d'indexeur « {name} » ?",
|
||||
@@ -382,7 +382,7 @@
|
||||
"Filters": "Filtres",
|
||||
"HistoryCleanupDaysHelpText": "Définir sur 0 pour désactiver le nettoyage automatique",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Les fichiers dans la corbeille plus anciens que le nombre de jours sélectionné seront nettoyés automatiquement",
|
||||
"OnGrab": "Récupéré à la sortie",
|
||||
"OnGrab": "Lors de la récupération",
|
||||
"OnHealthIssue": "Lors de problème de santé",
|
||||
"TestAllIndexers": "Tester tous les indexeurs",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent fourni par l'application qui a appelé l'API",
|
||||
@@ -410,7 +410,7 @@
|
||||
"MovieSearch": "Recherche de films",
|
||||
"TvSearch": "Recherche de séries TV",
|
||||
"Application": "Applications",
|
||||
"GrabReleases": "Télécharger la/les version(s)",
|
||||
"GrabReleases": "Récupérer la/les version(s)",
|
||||
"Link": "Lien",
|
||||
"No": "Non",
|
||||
"SearchTypes": "Types de recherche",
|
||||
@@ -444,7 +444,7 @@
|
||||
"SyncProfile": "Profil de synchronisation",
|
||||
"SyncProfiles": "Profils de synchronisation",
|
||||
"MinimumSeeders": "Nombre minimum de seeders",
|
||||
"MinimumSeedersHelpText": "Nombre minimum de seeders requis par l'application pour que l’indexer puisse saisir",
|
||||
"MinimumSeedersHelpText": "Nombre minimum de seeders requis par l'application pour que l'indexeur effectue une récupération",
|
||||
"AreYouSureYouWantToDeleteCategory": "Êtes-vous sûr de vouloir supprimer la catégorie mappée ?",
|
||||
"ElapsedTime": "Temps écoulé",
|
||||
"Parameters": "Paramètres",
|
||||
@@ -461,8 +461,8 @@
|
||||
"OnLatestVersion": "La dernière version de {appName} est déjà installée",
|
||||
"AddCustomFilter": "Ajouter filtre personnalisé",
|
||||
"AddApplication": "Ajouter une application",
|
||||
"IncludeManualGrabsHelpText": "Inclure les saisies manuelles effectuées dans {appName}",
|
||||
"OnGrabHelpText": "Récupéré à la sortie",
|
||||
"IncludeManualGrabsHelpText": "Inclure les récupérations manuelles effectuées dans {appName}",
|
||||
"OnGrabHelpText": "Lors de la récupération",
|
||||
"RssFeed": "Flux RSS",
|
||||
"VipExpiration": "Expiration VIP",
|
||||
"DisabledUntil": "Désactivé jusqu'à",
|
||||
@@ -475,8 +475,8 @@
|
||||
"HistoryDetails": "Détails de l'historique",
|
||||
"RepeatSearch": "Répéter la recherche",
|
||||
"Theme": "Thème",
|
||||
"TotalHostGrabs": "Total des captures d'hôte",
|
||||
"TotalUserAgentGrabs": "Total des captures d'agent utilisateur",
|
||||
"TotalHostGrabs": "Total des récupérations d'hôte",
|
||||
"TotalUserAgentGrabs": "Total des récupérations d'agent utilisateur",
|
||||
"Book": "Livre",
|
||||
"Artist": "Artiste",
|
||||
"Author": "Auteur",
|
||||
@@ -488,7 +488,7 @@
|
||||
"Season": "Saison",
|
||||
"TotalHostQueries": "Nombre total de requêtes d'hôte",
|
||||
"TotalIndexerQueries": "Requêtes totales d'indexeur",
|
||||
"TotalIndexerSuccessfulGrabs": "Total des saisies réussies de l'indexeur",
|
||||
"TotalIndexerSuccessfulGrabs": "Total des récupérations réussies de l'indexeur",
|
||||
"TotalUserAgentQueries": "Nombre total de requêtes d'agent utilisateur",
|
||||
"Track": "Piste",
|
||||
"Year": "Année",
|
||||
@@ -504,8 +504,8 @@
|
||||
"DownloadClientPriorityHelpText": "Donnez la priorité à plusieurs clients de téléchargement. Le Round-Robin est utilisé pour les clients ayant la même priorité.",
|
||||
"SelectIndexers": "Sélectionner les indexeurs",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Comment appliquer des étiquettes aux indexeurs sélectionnés",
|
||||
"ApplyTagsHelpTextRemove": "Supprimer : supprime les étiquettes renseignées",
|
||||
"ApplyTagsHelpTextReplace": "Remplacer : remplace les étiquettes par les étiquettes renseignées (ne pas renseigner d'étiquette pour toutes les effacer)",
|
||||
"ApplyTagsHelpTextRemove": "Supprimer : Supprimer les étiquettes saisies",
|
||||
"ApplyTagsHelpTextReplace": "Remplacer : Remplacer les étiquettes par celles saisies (ne saisissez aucune étiquette pour tout effacer)",
|
||||
"DeleteSelectedDownloadClients": "Supprimer le(s) client(s) de téléchargement",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Voulez-vous vraiment supprimer {count} client(s) de téléchargement sélectionné(s) ?",
|
||||
"StopSelecting": "Effacer la sélection",
|
||||
@@ -513,7 +513,7 @@
|
||||
"AdvancedSettingsHiddenClickToShow": "Paramètres avancés masqués, cliquez pour afficher",
|
||||
"AdvancedSettingsShownClickToHide": "Paramètres avancés affichés, cliquez pour masquer",
|
||||
"AppsMinimumSeeders": "Apps avec le nombre minimum de seeders disponibles",
|
||||
"AppsMinimumSeedersHelpText": "Minimum de seeders requis par les applications pour que l’indexeur les récupère, laisser vide utilise la valeur par défaut du profil Sync",
|
||||
"AppsMinimumSeedersHelpText": "Nombre minimum de seeders requis par l'application pour que l'indexeur effectue une récupération. Si vide, la valeur par défaut du profil de synchronisation est utilisée",
|
||||
"BasicSearch": "Recherche de base",
|
||||
"CountIndexersAvailable": "{count} indexeur(s) disponible(s)",
|
||||
"DeleteSelectedApplications": "Supprimer les applications sélectionnées",
|
||||
@@ -558,7 +558,7 @@
|
||||
"NoDownloadClientsFound": "Aucun client de téléchargement n'a été trouvé",
|
||||
"AppUpdated": "{appName} mis à jour",
|
||||
"AppUpdatedVersion": "{appName} a été mis à jour vers la version `{version}`, pour profiter des derniers changements, vous devrez relancer {appName}",
|
||||
"IndexerDownloadClientHelpText": "Préciser quel client de téléchargement est utilisé pour les saisies créées au sein de {appName} provenant de cet indexeur",
|
||||
"IndexerDownloadClientHelpText": "Spécifiez quel client de téléchargement utiliser pour les récupérations effectuées dans {appName} depuis cet indexeur",
|
||||
"Implementation": "Mise en œuvre",
|
||||
"SearchCountIndexers": "Rechercher {count} indexeur(s)",
|
||||
"SearchAllIndexers": "Rechercher tous les indexeurs",
|
||||
@@ -572,17 +572,17 @@
|
||||
"EditCategory": "Modifier la catégorie",
|
||||
"EditDownloadClientImplementation": "Modifier le client de téléchargement - {implementationName}",
|
||||
"External": "Externe",
|
||||
"FoundCountReleases": "{itemCount} release(s) trouvée(s)",
|
||||
"FoundCountReleases": "{itemCount} version(s) trouvée(s)",
|
||||
"IndexerHistoryLoadError": "Erreur lors du chargement de l'historique de l'indexeur",
|
||||
"IndexerTagsHelpTextWarning": "Les étiquettes doivent être utilisées avec prudence, elles peuvent avoir des effets indésirables. Un indexeur avec une étiquette va uniquement synchroniser les applications ayant la même étiquette.",
|
||||
"NoIndexerHistory": "Aucun historique n'a été trouvé pour cet indexeur",
|
||||
"PackSeedTimeHelpText": "Le temps qu'un pack (saison ou discographie) doit être seedé avant de s'arrêter, la valeur vide est la valeur par défaut de l'application",
|
||||
"SeedRatioHelpText": "Le ratio qu'un torrent doit atteindre avant de s'arrêter, une valeur vide est la valeur par défaut de l'application",
|
||||
"TorznabUrl": "URL Torznab",
|
||||
"TotalGrabs": "Récupéré au total",
|
||||
"TotalGrabs": "Total des récupérations",
|
||||
"TotalQueries": "Requêtes totales",
|
||||
"SeedRatio": "Ratio de seed",
|
||||
"SelectedCountOfCountReleases": "{selectedCount} sur {itemCount} releases sélectionnées",
|
||||
"SelectedCountOfCountReleases": "{selectedCount} sur {itemCount} versions sélectionnées",
|
||||
"AddCategory": "Ajouter une catégorie",
|
||||
"AddDownloadClientImplementation": "Ajouter un client de téléchargement - {implementationName}",
|
||||
"ManageDownloadClients": "Gérer les clients de téléchargement",
|
||||
@@ -596,7 +596,7 @@
|
||||
"Clone": "Dupliquer",
|
||||
"PackSeedTime": "Temps de Seed",
|
||||
"ApplicationTagsHelpText": "Synchroniser les indexeurs avec cette application qui n'ont aucune étiquette ou qui ont une ou plusieurs étiquettes correspondantes. Si aucune étiquette n'est listée ici, aucun indexeur ne sera empêché de se synchroniser en raison de ses étiquettes.",
|
||||
"OnHealthRestored": "Sur la santé restaurée",
|
||||
"OnHealthRestored": "Quand le système redevient opérationnel",
|
||||
"OnHealthRestoredHelpText": "Sur la santé restaurée",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmer le nouveau mot de passe",
|
||||
"PasswordConfirmation": "Confirmation du mot de passe",
|
||||
@@ -639,7 +639,7 @@
|
||||
"IndexerSettingsApiUser": "Utilisateur de l'API",
|
||||
"IndexerSettingsAppsMinimumSeeders": "Apps avec le nombre minimum de seeders disponibles",
|
||||
"IndexerSettingsFreeleechOnly": "Freeleech seulement",
|
||||
"IndexerSettingsGrabLimit": "Limite de saisie",
|
||||
"IndexerSettingsGrabLimit": "Limite de récupération",
|
||||
"IndexerSettingsQueryLimit": "Limite de requête",
|
||||
"IndexerSettingsQueryLimitHelpText": "Le nombre de requêtes maximales tel que spécifié par l'unité respective que {appName} autorisera au site",
|
||||
"IndexerSettingsRssKey": "Clé RSS",
|
||||
@@ -649,10 +649,10 @@
|
||||
"BlackholeFolderHelpText": "Dossier dans lequel {appName} stockera le fichier {extension}",
|
||||
"DefaultCategory": "Catégorie par défaut",
|
||||
"DownloadClientFloodSettingsAdditionalTags": "Étiquette supplémentaire",
|
||||
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Ajoute les propriétés des médias sous forme d'étiquette. Les conseils sont des exemples.",
|
||||
"DownloadClientFloodSettingsAdditionalTagsHelpText": "Ajoute les propriétés du média sous forme d'étiquettes. Les indices sont donnés à titre d'exemple.",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "URL DE L'API",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Définir l'URL de base de l'API Freebox avec la version de l'API, par exemple '{url}', par défaut '{defaultApiUrl}'",
|
||||
"DownloadClientFloodSettingsTagsHelpText": "Étiquettes initiales d'un téléchargement. Pour être reconnu, un téléchargement doit avoir toutes les étiquettes initiales. Cela permet d'éviter les conflits avec des téléchargements non apparentés.",
|
||||
"DownloadClientFloodSettingsTagsHelpText": "Étiquettes initiales d'un téléchargement. Pour être reconnu, un téléchargement doit posséder toutes les étiquettes initiales. Cela évite les conflits avec des téléchargements non liés.",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Ajoute d'un préfixe à l'API Flood, tel que {url}",
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "Port utilisé pour accéder à l'interface de la Freebox, la valeur par défaut est '{port}'",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Cette option nécessite au moins la version 16.0 de NzbGet",
|
||||
@@ -660,7 +660,7 @@
|
||||
"DownloadClientFreeboxSettingsAppTokenHelpText": "Le jeton de l'application récupéré lors de la création de l'accès à l'API Freebox (c'est-à-dire 'app_token')",
|
||||
"DownloadClientFreeboxSettingsHostHelpText": "Nom d'hôte ou adresse IP de la Freebox, par défaut '{url}' (ne fonctionnera que si elle est sur le même réseau)",
|
||||
"DownloadClientSettingsInitialState": "État initial",
|
||||
"DownloadClientSettingsPriorityItemHelpText": "Priorité à utiliser lors de la saisie des articles",
|
||||
"DownloadClientSettingsPriorityItemHelpText": "Priorité à utiliser lors de la récupération des éléments",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "Ajoute un préfixe à l'url {clientName}, tel que {url}",
|
||||
"DownloadClientSettingsUseSslHelpText": "Utiliser une connexion sécurisée lors de la connexion à {clientName}",
|
||||
"DownloadClientSettingsInitialStateHelpText": "État initial pour les torrents ajoutés à {clientName}",
|
||||
@@ -687,7 +687,7 @@
|
||||
"IndexerOrpheusSettingsApiKeyHelpText": "Clé API du site (dans Paramètres => Paramètres d'accès)",
|
||||
"IndexerPassThePopcornSettingsApiKeyHelpText": "Clé API du site",
|
||||
"IndexerPassThePopcornSettingsApiUserHelpText": "Ces paramètres se trouvent dans les paramètres de sécurité de PassThePopcorn (Modifier le profil > Sécurité).",
|
||||
"IndexerSettingsGrabLimitHelpText": "Le nombre de prises maximales tel que spécifié par l'unité respective que {appName} autorisera sur le site",
|
||||
"IndexerSettingsGrabLimitHelpText": "Le nombre maximum de récupérations autorisé par {appName} pour ce site, selon l'unité spécifiée",
|
||||
"IndexerSettingsLimitsUnit": "Limites d'unité",
|
||||
"IndexerSettingsCookie": "Cookie",
|
||||
"IndexerSettingsCookieHelpText": "Cookie du site",
|
||||
@@ -723,7 +723,7 @@
|
||||
"IndexerHDBitsSettingsUseFilenames": "Utiliser les noms de fichiers",
|
||||
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Rechercher les publications freeleech uniquement",
|
||||
"IndexerSettingsApiPath": "Chemin d'accès à l'API",
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "Nombre minimum de seeders requis par les applications pour que l'indexeur s'en saisisse, vide est la valeur par défaut du profil Sync",
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "Nombre minimum de seeders requis par l'application pour que l'indexeur effectue une récupération. Si vide, la valeur par défaut du profil de synchronisation sera utilisée",
|
||||
"IndexerSettingsBaseUrl": "Url de base",
|
||||
"IndexerSettingsBaseUrlHelpText": "Sélectionnez l'url de base que {appName} utilisera pour les requêtes vers le site",
|
||||
"IndexerSettingsLimitsUnitHelpText": "L'unité de temps pour le comptage des limites par indexeur",
|
||||
@@ -742,7 +742,7 @@
|
||||
"Donate": "Donation",
|
||||
"Menu": "Menu",
|
||||
"Mixed": "Mixte",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Synchroniser le rejet des hachages torrent sur liste bloquée lors de la saisie",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashes": "Synchroniser le rejet des hashs de torrents en liste de blocage lors de la récupération",
|
||||
"ClickToChangeQueryOptions": "Cliquez pour modifier les options de la requête",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Si un torrent est bloqué par le hachage, il peut ne pas être correctement rejeté pendant le RSS/recherche pour certains indexeurs. L'activation de cette fonction permet de le rejeter après que le torrent a été saisi, mais avant qu'il ne soit envoyé au client.",
|
||||
"ProwlarrDownloadClientsAlert": "Si vous avez l'intention d'effectuer des recherches directement dans {appName}, vous devez ajouter les clients de téléchargement. Sinon, vous n'avez pas besoin de les ajouter ici. Pour les recherches à partir de vos applications, les clients de téléchargement qui y sont configurés sont utilisés à la place.",
|
||||
@@ -758,8 +758,8 @@
|
||||
"ProxyValidationBadRequest": "Échec du test du proxy. Code d'état : {statusCode}",
|
||||
"ProxyValidationUnableToConnect": "Impossible de se connecter à l'indexeur : {exceptionMessage}. Vérifiez le journal pour plus de détails sur cette erreur",
|
||||
"Default": "Par défaut",
|
||||
"GrabRelease": "Saisir Release",
|
||||
"ManualGrab": "Saisie manuelle",
|
||||
"GrabRelease": "Récupérer la version",
|
||||
"ManualGrab": "Récupération manuelle",
|
||||
"Open": "Ouvrir",
|
||||
"Any": "Tous",
|
||||
"BuiltIn": "Intégré",
|
||||
@@ -768,7 +768,7 @@
|
||||
"Redirected": "Rediriger",
|
||||
"PublishedDate": "Date de publication",
|
||||
"AllSearchResultsHiddenByFilter": "Tous les résultats sont masqués par le filtre appliqué.",
|
||||
"AverageGrabs": "Prises moyennes",
|
||||
"AverageGrabs": "Récupérations moyennes",
|
||||
"AverageQueries": "Requêtes moyennes",
|
||||
"PackageVersionInfo": "{packageVersion} par {packageAuthor}",
|
||||
"HealthMessagesInfoBox": "Vous pouvez trouver plus d'informations sur la cause de ces messages de contrôle de santé en cliquant sur le lien wiki (icône de livre) à la fin de la ligne, ou en vérifiant vos [journaux]({link}). Si vous rencontrez des difficultés pour interpréter ces messages, vous pouvez contacter notre support, via les liens ci-dessous.",
|
||||
@@ -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} » ?",
|
||||
|
||||
@@ -432,5 +432,43 @@
|
||||
"CurrentlyInstalled": "מותקן כעת",
|
||||
"Stats": "סטָטוּס",
|
||||
"Season": "סיבה",
|
||||
"Mixed": "תוקן"
|
||||
"Mixed": "תוקן",
|
||||
"SearchTypes": "סוגי חיפוש ספר",
|
||||
"IndexerId": "אינדקסר",
|
||||
"SyncProfile": "הוספת פרופיל סינכרון",
|
||||
"TVSearchTypes": "סוגי חיפוש ספר",
|
||||
"UnableToLoadAppProfiles": "לא ניתן לטעון פרופילי עיכוב",
|
||||
"IndexerHDBitsSettingsOrigins": "מְקוֹרִי",
|
||||
"SelectIndexers": "מחק את אינדקס",
|
||||
"ApplicationURL": "אפליקציה",
|
||||
"IndexerProxy": "הוספת פרוקסי לאינדקסר",
|
||||
"Proxies": "פרופילים",
|
||||
"SyncProfiles": "הוספת פרופיל סינכרון",
|
||||
"ManageDownloadClients": "הורד לקוחות",
|
||||
"UnableToLoadDevelopmentSettings": "לא ניתן לטעון את ההגדרות הכלליות",
|
||||
"UnableToLoadIndexerProxies": "לא ניתן לטעון אינדקסים",
|
||||
"TvSearch": "לחפש",
|
||||
"AuthenticationMethod": "אימות",
|
||||
"EditSelectedDownloadClients": "מחק את לקוח ההורדות",
|
||||
"Donate": "תַאֲרִיך",
|
||||
"MovieSearch": "חיפוש סרטים המוני",
|
||||
"MovieSearchTypes": "סוגי חיפוש ספר",
|
||||
"Destination": "נתיב יעד",
|
||||
"IndexerBeyondHDSettingsSearchTypes": "סוגי חיפוש ספר",
|
||||
"IndexerDownloadClientHelpText": "ציין איזה קליינט הורדה משתמש באינדקסר הזה להורדה",
|
||||
"IndexerStatus": "הגדרות אינדקס",
|
||||
"Author": "אוטו'",
|
||||
"AddConnection": "הוסף חיבור",
|
||||
"EditCategory": "הוסף קטגוריה",
|
||||
"SearchIndexers": "מחק את אינדקס",
|
||||
"IndexerProxies": "הוספת פרוקסי לאינדקסר",
|
||||
"SearchType": "סוגי חיפוש ספר",
|
||||
"IndexerInfo": "אינדקסר",
|
||||
"MusicSearchTypes": "סוגי חיפוש ספר",
|
||||
"DeleteSelectedApplications": "מחק קבצי סרטים שנבחרו",
|
||||
"DeleteSelectedIndexer": "מחק את אינדקס",
|
||||
"DeleteSelectedIndexers": "מחק את אינדקס",
|
||||
"EditSelectedIndexers": "מחק את אינדקס",
|
||||
"FilterPlaceHolder": "מחק את אינדקס",
|
||||
"AddConnectionImplementation": "הוסף חיבור - {implementationName}"
|
||||
}
|
||||
|
||||
@@ -373,5 +373,47 @@
|
||||
"CurrentlyInstalled": "वर्तमान में स्थापित है",
|
||||
"Mixed": "फिक्स्ड",
|
||||
"Season": "कारण",
|
||||
"Stats": "स्थिति"
|
||||
"Stats": "स्थिति",
|
||||
"AuthenticationMethod": "प्रमाणीकरण",
|
||||
"UnableToLoadIndexerProxies": "अनुक्रमणिका लोड करने में असमर्थ",
|
||||
"IndexerHDBitsSettingsOrigins": "मूल",
|
||||
"IndexerId": "इंडेक्सर",
|
||||
"DeleteClientCategory": "डाउनलोड क्लाइंट हटाएं",
|
||||
"Destination": "गंतव्य पथ",
|
||||
"Donate": "दिनांक",
|
||||
"ManageDownloadClients": "ग्राहक डाउनलोड करें",
|
||||
"IndexerProxy": "सूचकांक प्राथमिकता",
|
||||
"DeleteIndexerProxy": "अनुक्रमणिका हटाएं",
|
||||
"EditSyncProfile": "देरी प्रोफ़ाइल संपादित करें",
|
||||
"EditSelectedDownloadClients": "डाउनलोड क्लाइंट हटाएं",
|
||||
"IndexerStatus": "अनुक्रमणिका सेटिंग्स",
|
||||
"SelectIndexers": "अनुक्रमणिका हटाएं",
|
||||
"TvSearch": "खोज",
|
||||
"AddCustomFilter": "कस्टम फ़िल्टर",
|
||||
"AddNewIndexer": "सूचकांक जोड़ें",
|
||||
"MovieSearch": "मास मूवी सर्च",
|
||||
"DeleteSelectedIndexersMessageText": "क्या आप वाकई चयनित मूवी फ़ाइलों को हटाना चाहते हैं?",
|
||||
"Proxies": "प्रोफाइल",
|
||||
"UnableToLoadAppProfiles": "विलंब प्रोफाइल लोड करने में असमर्थ",
|
||||
"Notification": "प्रमाणीकरण",
|
||||
"UnableToLoadDevelopmentSettings": "सामान्य सेटिंग्स लोड करने में असमर्थ",
|
||||
"AddConnection": "संबंध",
|
||||
"SyncProfiles": "देरी प्रोफ़ाइल संपादित करें",
|
||||
"DeleteSelectedApplications": "चयनित मूवी फ़ाइलें हटाएं",
|
||||
"DeleteSelectedIndexers": "अनुक्रमणिका हटाएं",
|
||||
"DownloadClientCategory": "डाउनलोड क्लाइंट हटाएं",
|
||||
"SearchIndexers": "अनुक्रमणिका हटाएं",
|
||||
"SyncProfile": "देरी प्रोफ़ाइल संपादित करें",
|
||||
"EditSelectedIndexers": "अनुक्रमणिका हटाएं",
|
||||
"IndexerProxies": "सूचकांक प्राथमिकता",
|
||||
"AddIndexerProxy": "सूचकांक प्राथमिकता",
|
||||
"Notifications": "प्रमाणीकरण",
|
||||
"IndexerInfo": "इंडेक्सर",
|
||||
"DeleteSelectedDownloadClientsMessageText": "क्या आप वाकई चयनित मूवी फ़ाइलों को हटाना चाहते हैं?",
|
||||
"DeleteSelectedApplicationsMessageText": "क्या आप वाकई चयनित मूवी फ़ाइलों को हटाना चाहते हैं?",
|
||||
"AddSyncProfile": "देरी प्रोफ़ाइल संपादित करें",
|
||||
"MovieSearchTypes": "मास मूवी सर्च",
|
||||
"DeleteSelectedIndexer": "अनुक्रमणिका हटाएं",
|
||||
"Connect": "प्रमाणीकरण",
|
||||
"FilterPlaceHolder": "अनुक्रमणिका हटाएं"
|
||||
}
|
||||
|
||||
@@ -212,5 +212,35 @@
|
||||
"EditApplicationImplementation": "Dodaj Vezu - {implementationName}",
|
||||
"AptUpdater": "Koristi apt kako bi instalirao ažuriranje",
|
||||
"EditIndexerProxyImplementation": "Dodaj Indexer - {implementationName}",
|
||||
"Clone": "Zatvori"
|
||||
"Clone": "Zatvori",
|
||||
"GrabRelease": "verzija",
|
||||
"ManageDownloadClients": "Klijent za preuzimanje",
|
||||
"TvSearch": "Traži",
|
||||
"IndexerId": "Indekser",
|
||||
"CustomFilter": "Dodaj proizvoljan filter",
|
||||
"CustomFilters": "Dodaj proizvoljan filter",
|
||||
"DeleteDownloadClient": "Klijent za preuzimanje",
|
||||
"UISettings": "Postavke",
|
||||
"AddApplication": "Aplikacije",
|
||||
"AddNewIndexer": "Dodaj Indexer",
|
||||
"EnableAutomaticSearch": "Automatska Pretraga",
|
||||
"EditSyncProfile": "Dodaj Profil Odgode",
|
||||
"Tags": "Oznaka",
|
||||
"UILanguage": "jezik",
|
||||
"NoChange": "Promijeni",
|
||||
"ConnectionLost": "Veze",
|
||||
"DownloadClientSettings": "Klijent za preuzimanje",
|
||||
"UnsavedChanges": "Spremi izmjene",
|
||||
"Author": "Automatski",
|
||||
"AddSyncProfile": "Dodaj Profil Odgode",
|
||||
"Auth": "Automatski",
|
||||
"DeleteClientCategory": "Klijent za preuzimanje",
|
||||
"GrabReleases": "verzija",
|
||||
"IndexerInfo": "Indekser",
|
||||
"NoChanges": "Promijeni",
|
||||
"SyncProfile": "Dodaj Profil Odgode",
|
||||
"SyncProfiles": "Dodaj Profil Odgode",
|
||||
"DeleteSelectedDownloadClients": "Klijent za preuzimanje",
|
||||
"EditSelectedDownloadClients": "Klijent za preuzimanje",
|
||||
"Download": "Ponovno preuzimanje neuspješno"
|
||||
}
|
||||
|
||||
@@ -6,23 +6,23 @@
|
||||
"Error": "Hiba",
|
||||
"DeleteTag": "Címke törlése",
|
||||
"EnableAutomaticSearchHelpText": "Akkor lesz használatos, ha automatikus keresést hajt végre a felhasználói felületen vagy a(z) {appName} alkalmazáson keresztül",
|
||||
"EnableAutomaticSearch": "Engedélyezd az Automatikus Keresést",
|
||||
"EnableAutomaticSearch": "Automatikus keresés engedélyezése",
|
||||
"Enable": "Aktiválás",
|
||||
"EditIndexer": "Indexer Szerkesztése",
|
||||
"Edit": "Szerkeszt",
|
||||
"DownloadClientStatusSingleClientHealthCheckMessage": "Letöltőkliens hiba miatt nem elérhető: {downloadClientNames}",
|
||||
"EditIndexer": "Indexelő Szerkesztése",
|
||||
"Edit": "Szerkesztés",
|
||||
"DownloadClientStatusSingleClientHealthCheckMessage": "Letöltő kliensek elérhetetlenek meghibásodások miatt: {downloadClientNames}",
|
||||
"DownloadClientStatusAllClientHealthCheckMessage": "Az összes letöltőkliens elérhetetlen, hiba miatt",
|
||||
"DownloadClientsSettingsSummary": "Letöltőkliens konfigurációja a {appName} felhasználói felület keresésbe történő integráláshoz",
|
||||
"DownloadClientSettings": "Letöltőkliens Beállítások",
|
||||
"DownloadClientSettings": "Letöltőkliens beállítások",
|
||||
"DownloadClients": "Letöltő kliensek",
|
||||
"DownloadClient": "Letöltési kliens",
|
||||
"DownloadClient": "Letöltő kliens",
|
||||
"Docker": "Docker",
|
||||
"Disabled": "Tiltva",
|
||||
"Details": "részletek",
|
||||
"Details": "Részletek",
|
||||
"DeleteTagMessageText": "Biztosan törli a „{label}” címkét?",
|
||||
"DeleteNotificationMessageText": "Biztosan törli a(z) „{name}” értesítést?",
|
||||
"DeleteNotification": "Értesítés törlése",
|
||||
"DeleteDownloadClientMessageText": "Biztosan törli a(z) \"{name}\" letöltési klienst?",
|
||||
"DeleteDownloadClientMessageText": "Biztosan törli a(z) \"{name}\" letöltő klienst?",
|
||||
"DeleteDownloadClient": "Letöltőkliens törlése",
|
||||
"DeleteBackupMessageText": "Biztosan törli a '{name}' biztonsági mentést?",
|
||||
"DeleteBackup": "Biztonsági Mentés törlése",
|
||||
@@ -32,7 +32,7 @@
|
||||
"Date": "Dátum",
|
||||
"CustomFilters": "Egyedi Szűrők",
|
||||
"ConnectSettingsSummary": "Értesítések és egyéni szkriptek",
|
||||
"ConnectSettings": "Csatlakozási beállítások",
|
||||
"ConnectSettings": "Kapcsolati beállítások",
|
||||
"Connections": "Kapcsolatok",
|
||||
"ConnectionLost": "A kapcsolat megszakadt",
|
||||
"Connect": "Értesítések",
|
||||
@@ -49,35 +49,35 @@
|
||||
"CancelPendingTask": "Biztosan törölni szeretné ezt a függőben lévő feladatot?",
|
||||
"Cancel": "Mégse",
|
||||
"BypassProxyForLocalAddresses": "Proxy megkerülése a helyi hálózatos címekhez",
|
||||
"BranchUpdateMechanism": "Külső frissítési mechanizmus által használt ág",
|
||||
"BranchUpdate": "A(z) {appName} frissítéséhez használt fiók",
|
||||
"Branch": "Ágazat",
|
||||
"BranchUpdateMechanism": "Külső frissítési mechanizmus által használt kiadási csatorna (ág)",
|
||||
"BranchUpdate": "A {appName} frissítéséhez használt kiadási csatorna (ág)",
|
||||
"Branch": "Kiadási csatorna",
|
||||
"BindAddressHelpText": "Érvényes IP-cím, localhost vagy '*' minden interfészhez",
|
||||
"BindAddress": "Kötési cím",
|
||||
"BeforeUpdate": "Frissítés előtt",
|
||||
"Backups": "Biztonsági mentések",
|
||||
"BackupRetentionHelpText": "A megőrzési időszaknál régebbi automatikus biztonsági másolatok automatikusan törlődnek",
|
||||
"BackupNow": "Biztonsági Mentés",
|
||||
"BackupNow": "Mentés most",
|
||||
"BackupIntervalHelpText": "Az automatikus biztonsági mentések közötti időköz",
|
||||
"BackupFolderHelpText": "A relatív elérési utak a(z) {appName} AppData könyvtárában találhatók",
|
||||
"BackupFolderHelpText": "A relatív elérési utak a {appName} AppData könyvtárában találhatók",
|
||||
"Backup": "Biztonsági mentés",
|
||||
"AutomaticSearch": "Automatikus keresés",
|
||||
"Automatic": "Automatikus",
|
||||
"AnalyticsEnabledHelpText": "Névtelen használati és hibainformáció küldése {appName} szervereinek. Ez magában foglalja a böngészővel kapcsolatos információkat, a használt {appName} WebUI oldalakat, a hibajelentéseket, valamint az operációs rendszert és a futásidejű verziót. Ezeket az információkat a funkciók és a hibajavítások fontossági sorrendjének meghatározására fogjuk használni.",
|
||||
"AuthenticationMethodHelpText": "Felhasználónév és jelszó szükséges a(z) {appName} eléréséhez",
|
||||
"AuthenticationMethodHelpText": "Felhasználónév és jelszó szükséges a {appName} eléréséhez",
|
||||
"Authentication": "Hitelesítés",
|
||||
"ApplyTags": "Címkék alkalmazása",
|
||||
"Age": "Kor",
|
||||
"ApiKey": "API Kulcs",
|
||||
"All": "Összes",
|
||||
"AcceptConfirmationModal": "Változás Megerősítése",
|
||||
"Apply": "Alkamaz",
|
||||
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges az alkalmazás adatok törlése nélkül",
|
||||
"AppDataDirectory": "AppData Könyvtár",
|
||||
"Apply": "Alkalmaz",
|
||||
"AppDataLocationHealthCheckMessage": "A frissítés nem hajtható végre, hogy elkerüljük az alkalmazás adatainak törlését",
|
||||
"AppDataDirectory": "AppData könyvtár",
|
||||
"Added": "Hozzáadva",
|
||||
"Actions": "Teendők",
|
||||
"History": "Előzmény",
|
||||
"HideAdvanced": "Haladó Elrejtése",
|
||||
"HideAdvanced": "Haladó beállítások elrejtése",
|
||||
"NoIssuesWithYourConfiguration": "Nincs hiba a konfigurációval",
|
||||
"Health": "Egészség",
|
||||
"GeneralSettingsSummary": "Port, SSL, felhasználónév / jelszó, proxy, elemzések, és frissítések",
|
||||
@@ -85,10 +85,10 @@
|
||||
"Folder": "Mappa",
|
||||
"FocusSearchBox": "Fókusz Keresőmező",
|
||||
"Fixed": "Rögzített",
|
||||
"FilterPlaceHolder": "Filmek Keresése",
|
||||
"FilterPlaceHolder": "Indexelők keresése",
|
||||
"Filter": "Szűrő",
|
||||
"Files": "Fájlok",
|
||||
"Filename": "Fájl név",
|
||||
"Filename": "Fájlnév",
|
||||
"Failed": "Nem sikerült",
|
||||
"ExistingTag": "Létező címke",
|
||||
"Exception": "Kivétel",
|
||||
@@ -113,9 +113,9 @@
|
||||
"Source": "Forrás",
|
||||
"Sort": "Fajta",
|
||||
"Size": "Méret",
|
||||
"Shutdown": "Leállitás",
|
||||
"Shutdown": "Leállítás",
|
||||
"ShowSearchHelpText": "Keresés gomb megjelenítése az egérrel",
|
||||
"ShowAdvanced": "Haladó nézet",
|
||||
"ShowAdvanced": "Haladó beállítások megjelenítése",
|
||||
"SettingsTimeFormat": "Időformátum",
|
||||
"SettingsShowRelativeDatesHelpText": "Relatív (Ma / Tegnap / stb.) vagy valós dátumok megjelenítése",
|
||||
"SettingsShowRelativeDates": "Relatív dátumok megjelenítése",
|
||||
@@ -129,13 +129,13 @@
|
||||
"Seeders": "Seederek",
|
||||
"Security": "Biztonság",
|
||||
"Search": "Keresés",
|
||||
"ScriptPath": "Script útvonal",
|
||||
"ScriptPath": "Szkriptútvonal",
|
||||
"Scheduled": "Ütemezve",
|
||||
"SaveSettings": "Beállítások mentése",
|
||||
"SaveChanges": "Változtatások mentése",
|
||||
"Save": "Mentés",
|
||||
"RssIsNotSupportedWithThisIndexer": "Ez az indexelő nem támogatja az RSS-t",
|
||||
"Retention": "Visszatartás",
|
||||
"Retention": "Megőrzési idő",
|
||||
"Result": "Eredmény",
|
||||
"RestoreBackup": "Biztonsági mentés visszaállítása",
|
||||
"Restore": "Visszaállít",
|
||||
@@ -146,11 +146,11 @@
|
||||
"ResetAPIKey": "API Kulcs Visszaállítása",
|
||||
"Reset": "Visszaállítás",
|
||||
"RemovingTag": "Címke eltávolítása",
|
||||
"RemoveFilter": "Szűrő Eltávolítás",
|
||||
"RemoveFilter": "Szűrő eltávolítása",
|
||||
"RemovedFromTaskQueue": "Eltávolítva a feladatsorból",
|
||||
"Reload": "Újratölt",
|
||||
"ReleaseStatus": "Kiadás státusza",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "A(z) {0} nem érvényes {appName} frissítési ágazat, ezért nem kap frissítéseket",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "A(z) {0} nem érvényes {appName} kiadási csatorna (ág), ezért nem kap további frissítéseket",
|
||||
"RefreshMovie": "Film frissítése",
|
||||
"Refresh": "Frissítés",
|
||||
"ReadTheWikiForMoreInformation": "További információkért olvassa el a Wikit",
|
||||
@@ -162,7 +162,7 @@
|
||||
"ProxyPasswordHelpText": "Csak akkor kell megadnia egy felhasználónevet és jelszót, ha szükséges. Ellenkező esetben hagyja üresen.",
|
||||
"ProxyResolveIpHealthCheckMessage": "Nem sikerült megoldani a konfigurált proxykiszolgáló IP-címét {proxyHostName}",
|
||||
"ProxyFailedToTestHealthCheckMessage": "Proxy tesztelése sikertelen: {url}",
|
||||
"ProxyBadRequestHealthCheckMessage": "Proxy tesztelése sikertelen. Állapotkód: {statusCode}",
|
||||
"ProxyBadRequestHealthCheckMessage": "Sikertelen proxy teszt. Állapotkód: {statusCode}",
|
||||
"ProxyBypassFilterHelpText": "Használja a ',' jelet elválasztóként és a '*' jelet. helyettesítő karakterként az aldomainekhez",
|
||||
"Proxy": "Proxy",
|
||||
"Protocol": "Protokoll",
|
||||
@@ -170,7 +170,7 @@
|
||||
"PortNumber": "Port száma",
|
||||
"Port": "Port",
|
||||
"PendingChangesStayReview": "Maradjon és tekintse át a változtatásokat",
|
||||
"PendingChangesMessage": "Vannak nem mentett módosításai. Biztosan elhagyja ezt az oldalt?",
|
||||
"PendingChangesMessage": "Nem mentett módosításai vannak. Biztosan elhagyja ezt az oldalt?",
|
||||
"PendingChangesDiscardChanges": "Vesse el a változtatásokat, és lépjen ki",
|
||||
"Peers": "Peerek",
|
||||
"Password": "Jelszó",
|
||||
@@ -184,7 +184,7 @@
|
||||
"Ok": "Ok",
|
||||
"OAuthPopupMessage": "A böngésződ blokkolja az előugró ablakokat",
|
||||
"NoUpdatesAreAvailable": "Nem érhetők el frissítések",
|
||||
"NoTagsHaveBeenAddedYet": "Még nem adtak hozzá címkéket",
|
||||
"NoTagsHaveBeenAddedYet": "Még nincsenek címkék hozzáadva",
|
||||
"NoLogFiles": "Nincsenek naplófájlok",
|
||||
"NoLeaveIt": "Nem, Hagyd",
|
||||
"NoChanges": "Nincs változás",
|
||||
@@ -199,13 +199,13 @@
|
||||
"Mode": "Mód",
|
||||
"MIA": "MIA",
|
||||
"Message": "Üzenet",
|
||||
"Mechanism": "Gépezet",
|
||||
"Mechanism": "Működési mód",
|
||||
"Manual": "Kézi",
|
||||
"MaintenanceRelease": "Karbantartási kiadás: hibajavítások és egyéb fejlesztések. További részletekért lásd: Github Commit History",
|
||||
"Logs": "Naplók",
|
||||
"LogLevelTraceHelpTextWarning": "A nyomkövetési naplózást csak ideiglenesen szabad engedélyezni",
|
||||
"LogLevel": "Napló szint",
|
||||
"Logging": "Loggolás",
|
||||
"Logging": "Naplózás",
|
||||
"LogFiles": "Naplófájlok",
|
||||
"Level": "Szint",
|
||||
"LaunchBrowserHelpText": " Nyisson meg egy böngészőt, és az alkalmazás indításakor lépjen a {appName} kezdőlapjára.",
|
||||
@@ -218,7 +218,7 @@
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Indexerek elérhetetlenek a következő hiba miatt: {indexerNames}",
|
||||
"Hostname": "Hosztnév",
|
||||
"Host": "Hoszt",
|
||||
"Grabbed": "Megragadta",
|
||||
"Grabbed": "Megragadva",
|
||||
"GeneralSettings": "Általános Beállítások",
|
||||
"General": "Általános",
|
||||
"UnableToLoadHistory": "Nem sikerült betölteni az előzményeket",
|
||||
@@ -232,8 +232,8 @@
|
||||
"UISettings": "A felhasználói felület beállításai",
|
||||
"UILanguageHelpTextWarning": "Böngésző újratöltése szükséges",
|
||||
"UILanguageHelpText": "A {appName} által a felhasználói felülethez használt nyelv",
|
||||
"UILanguage": "Felület nyelve",
|
||||
"UI": "Felület",
|
||||
"UILanguage": "Felhasználói felület nyelve",
|
||||
"UI": "Felhasználói felület",
|
||||
"Type": "Típus",
|
||||
"Torrents": "Torrentek",
|
||||
"Title": "Cím",
|
||||
@@ -249,11 +249,11 @@
|
||||
"TagCannotBeDeletedWhileInUse": "Használat közben nem törölhető",
|
||||
"TableOptionsColumnsMessage": "Válasszd ki, mely oszlopok legyenek láthatóak, és milyen sorrendben jelenjenek meg",
|
||||
"SystemTimeHealthCheckMessage": "A rendszeridő több mint 1 napja nem frissült. Előfordulhat, hogy az ütemezett feladatok az idő kijavításáig nem futnak megfelelően",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Az összes indexer elérhetetlen hiba miatt",
|
||||
"Indexers": "Indexerek",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Az összes indexelő elérhetetlen hiba miatt",
|
||||
"Indexers": "Indexelők",
|
||||
"IndexerPriorityHelpText": "Indexelő prioritás 1-től (legmagasabb) 50-ig (legalacsonyabb). Alapértelmezés: 25.",
|
||||
"IndexerPriority": "Indexer Prioritása",
|
||||
"IndexerFlags": "Indexer Zászló",
|
||||
"IndexerPriority": "Indexelő prioritása",
|
||||
"IndexerFlags": "Indexelő jelzők",
|
||||
"Indexer": "Indexelő",
|
||||
"IncludeHealthWarningsHelpText": "Tartalmazza a Állapot Figyelmeztetéseket",
|
||||
"IllRestartLater": "Később Újraindítom",
|
||||
@@ -266,9 +266,9 @@
|
||||
"UseProxy": "Proxy használata",
|
||||
"Usenet": "Usenet",
|
||||
"UrlBaseHelpText": "Fordított proxy támogatás esetén az alapértelmezett érték üres",
|
||||
"URLBase": "URL Bázis",
|
||||
"URLBase": "Alap URL",
|
||||
"Uptime": "Üzemidő",
|
||||
"UpdateScriptPathHelpText": "Keresse meg az egyéni parancsfájl elérési útját, amely kibontott frissítési csomagot vesz fel, és kezeli a frissítési folyamat fennmaradó részét",
|
||||
"UpdateScriptPathHelpText": "Egy szkript elérési útja, amely átveszi a kicsomagolt frissítési csomagot, és elvégzi a frissítési folyamat hátralévő részét",
|
||||
"Updates": "Frissítések",
|
||||
"UpdateMechanismHelpText": "Használja a {appName} beépített frissítőjét vagy szkriptjét",
|
||||
"UpdateUiNotWritableHealthCheckMessage": "Nem lehet telepíteni a frissítést, mert a(z) „{uiFolder}” felhasználói felület mappát nem írhatja a „{userName}” felhasználó.",
|
||||
@@ -281,13 +281,13 @@
|
||||
"UnableToLoadTags": "Nem sikerült betölteni a címkéket",
|
||||
"UnableToLoadNotifications": "Nem sikerült betölteni az Értesítéseket",
|
||||
"TableOptions": "Táblázat Beállítások",
|
||||
"ShowSearch": "Keresés mutatása",
|
||||
"ShowSearch": "Keresés megjelenítése",
|
||||
"SetTags": "Címkék beállítása",
|
||||
"NotificationTriggers": "Értesítési triggerek",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Az összes indexer elérhetetlen több mint 6 órája, meghibásodás miatt: {indexerNames}",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Az összes indexer elérhetetlen több mint 6 órája, meghibásodás miatt",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Az összes indexelő elérhetetlen több mint 6 órája, meghibásodás miatt",
|
||||
"SettingsLogSql": "SQL naplózás",
|
||||
"IndexerRss": "Indexer Rss",
|
||||
"IndexerRss": "Indexelő RSS",
|
||||
"IndexerAuth": "Indexelő auth",
|
||||
"Yesterday": "Tegnap",
|
||||
"UnableToLoadDevelopmentSettings": "Nem sikerült betölteni a fejlesztési beállításokat",
|
||||
@@ -309,18 +309,18 @@
|
||||
"EnableIndexer": "Indexelő engedélyezése",
|
||||
"IndexerObsoleteCheckMessage": "Az indexelők elavultak vagy frissültek: {0}. Kérjük, távolítsa el és (vagy) add újra a hozzá a {appName}-ba",
|
||||
"DevelopmentSettings": "Fejlesztési beállítások",
|
||||
"DeleteApplicationMessageText": "Biztosan törli a(z) „{0}” alkalmazást?",
|
||||
"DeleteApplicationMessageText": "Biztosan törli a(z) „{name}” alkalmazást?",
|
||||
"DeleteApplication": "Alkalmazás törlése",
|
||||
"ClearHistoryMessageText": "Biztosan törlöd a {appName} összes előzményét?",
|
||||
"ClearHistory": "Előzmények törlése",
|
||||
"ApplicationStatusCheckSingleClientMessage": "Az alkalmazás nem áll rendelkezésre az alábbi hibák miatt: {0}",
|
||||
"ApplicationStatusCheckAllClientMessage": "Összes alkalmazás elérhetetlen hiba miatt",
|
||||
"AllIndexersHiddenDueToFilter": "Az összes indexelő rejtve van az alkalmazott szűrő miatt.",
|
||||
"AddToDownloadClient": "Kiadás hozzáadása a kliens letöltéséhez",
|
||||
"AddToDownloadClient": "Kiadás hozzáadása a letöltőklienshez",
|
||||
"AddNewIndexer": "Új indexelő hozzáadása",
|
||||
"AddedToDownloadClient": "Kiadás hozzáadva a klienshez",
|
||||
"EnableRssHelpText": "RSS Engedélyezése az Indexerekhez",
|
||||
"EnableRss": "RSS Aktiválás",
|
||||
"EnableRssHelpText": "RSS engedélyezése indexelőkhöz",
|
||||
"EnableRss": "RSS engedélyezése",
|
||||
"Wiki": "Wiki",
|
||||
"Rss": "RSS",
|
||||
"RedirectHelpText": "Átirányítja a bejövő letöltési kérelmet az indexelő számára, és közvetlenül adja át a fájlt ahelyett, hogy a kérést a {appName}-en keresztül proxyba tenné",
|
||||
@@ -332,7 +332,7 @@
|
||||
"AppProfileSelectHelpText": "Az alkalmazásprofilok az RSS vezérlésére szolgálnak, Automatikus keresés és Interaktív keresés beállításai az alkalmazás szinkronizálásakor",
|
||||
"UnableToAddANewApplicationPleaseTryAgain": "Nem lehet új alkalmazást hozzáadni, próbálkozzon újra.",
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "Nem lehet új alkalmazásprofilt hozzáadni, próbálkozzon újra.",
|
||||
"AddDownloadClient": "Letöltési kliens hozzáadása",
|
||||
"AddDownloadClient": "Letöltőkliens hozzáadása",
|
||||
"Applications": "Alkalmazások",
|
||||
"AppProfileInUse": "Használatban lévő alkalmazásprofil",
|
||||
"Apps": "Appok",
|
||||
@@ -349,7 +349,7 @@
|
||||
"Id": "Azonosító",
|
||||
"NotificationTriggersHelpText": "Válassza ki, hogy mely események váltsák ki ezt az értesítést",
|
||||
"Presets": "Előbeállítások",
|
||||
"Privacy": "Titkosítás",
|
||||
"Privacy": "Adatvédelem",
|
||||
"Query": "Lekérdezés",
|
||||
"Stats": "Statisztikák",
|
||||
"Torrent": "Torrent",
|
||||
@@ -364,13 +364,13 @@
|
||||
"NoSearchResultsFound": "Nincs találat. Próbálkozzon új kereséssel.",
|
||||
"AppSettingsSummary": "Alkalmazások és beállítások a {appName} interakciójának beállításához a PVR programjaiddal",
|
||||
"DeleteIndexerProxy": "Indexer Proxy törlése",
|
||||
"DeleteIndexerProxyMessageText": "Biztosan törlöd a(z) „{0}” proxyt?",
|
||||
"DeleteIndexerProxyMessageText": "Biztosan törli a(z) „{name}” indexelő proxyt?",
|
||||
"IndexerProxies": "Indexer Proxy(k)",
|
||||
"IndexerProxyStatusAllUnavailableHealthCheckMessage": "Az összes Proxy elérhetetlen, hiba miatt",
|
||||
"IndexerProxyStatusAllUnavailableHealthCheckMessage": "Az összes indexelő-proxy elérhetetlen, hiba miatt",
|
||||
"IndexerProxyStatusUnavailableHealthCheckMessage": "Proxyk elérhetetlenek az alábbi hibák miatt: {indexerProxyNames}",
|
||||
"IndexerTagsHelpText": "Címkék segítségével megadhatod az indexer proxykat amelyekkel az indexer szinkronizálva van, vagy egyszerűen az indexelők rendszerezéséhez.",
|
||||
"IndexerTagsHelpText": "Címkékkel adhatja meg, mely indexelő proxykat használja az indexelő, illetve mely alkalmazásokkal legyen szinkronizálva.",
|
||||
"UnableToLoadIndexerProxies": "Nem lehet betölteni az Indexer Proxyt",
|
||||
"AddIndexerProxy": "Indexer Proxy hozzáadása",
|
||||
"AddIndexerProxy": "Indexelő-proxy hozzáadása",
|
||||
"IndexerSettingsSummary": "Konfigurálja a különböző globális indexer beállításokat, beleértve a proxykat is.",
|
||||
"Notifications": "Értesítések",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Nem lehet új Indexer Proxyt hozzáadni, próbálja újra.",
|
||||
@@ -393,18 +393,18 @@
|
||||
"HistoryCleanupDaysHelpTextWarning": "A kiválasztott napszámnál régebbi előzmények automatikusan törlődnek",
|
||||
"IndexerAlreadySetup": "Az indexelő legalább egy példánya már be van állítva",
|
||||
"IndexerInfo": "Indexer információ",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Az indexereknek nincs definíciójuk, és nem működnek: {indexerNames}. Kérjük, távolítsa el és (vagy) adja hozzá újra a {appName}hoz",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Az indexelőknek nincs definíciójuk, és nem működnek: {indexerNames}. Kérjük, távolítsa el és (vagy) adja hozzá újra a {appName}-hoz.",
|
||||
"MassEditor": "Tömeges szerkesztő",
|
||||
"OnApplicationUpdate": "Alkalmazásfrissítésről",
|
||||
"OnApplicationUpdate": "Alkalmazásfrissítéskor",
|
||||
"OnApplicationUpdateHelpText": "Alkalmazásfrissítésről",
|
||||
"OnGrab": "Kiválasztás alatt",
|
||||
"OnHealthIssue": "Állapotprobléma",
|
||||
"OnGrab": "A kiadás megragadásakor",
|
||||
"OnHealthIssue": "Állapotproblémakor",
|
||||
"Private": "Privát",
|
||||
"Proxies": "Proxyk",
|
||||
"Public": "Publikus",
|
||||
"QueryResults": "Lekérdezési eredmények",
|
||||
"SemiPrivate": "Fél-Privát",
|
||||
"TestAllIndexers": "Tesztelje az összes indexelőt",
|
||||
"SemiPrivate": "Félig privát",
|
||||
"TestAllIndexers": "Minden indexelő tesztelése",
|
||||
"ApplicationsLoadError": "Nem sikerült betölteni az alkalmazáslistát",
|
||||
"Url": "URL",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "Az API-t hívó alkalmazás biztosítja a User-Agent szolgáltatást",
|
||||
@@ -433,13 +433,13 @@
|
||||
"AddSyncProfile": "Szinkronizálási profil hozzáadása",
|
||||
"EditSyncProfile": "Szinkronizálási profil szerkesztése",
|
||||
"MinimumSeedersHelpText": "Az alkalmazás által megkövetelt minimális Seeder az indexer számára",
|
||||
"InstanceName": "Példány Neve",
|
||||
"InstanceNameHelpText": "Példánynév a böngésző lapon és a syslog alkalmazás neve",
|
||||
"ThemeHelpText": "Változtasd meg az alkalmazás felhasználói felület témáját. Az „Auto” téma az operációs rendszer témáját használja a Világos vagy Sötét mód beállításához. Ihlette: {0}",
|
||||
"InstanceName": "Példány neve",
|
||||
"InstanceNameHelpText": "Instancia név a fülön és a Syslog alkalmazásnévhez",
|
||||
"ThemeHelpText": "Alkalmazás UI‑témájának módosítása. Az „Automatikus” téma az operációs rendszer témáját használja a világos vagy sötét mód beállításához. Inspirálta: {inspiredBy}.",
|
||||
"Duration": "Időtartam",
|
||||
"ElapsedTime": "Eltelt idő",
|
||||
"EnabledRedirected": "Engedélyezve, átirányítva",
|
||||
"Ended": "Vége lett",
|
||||
"Ended": "Véget ért",
|
||||
"GrabTitle": "Cím megragadása",
|
||||
"LastDuration": "Utolsó időtartam",
|
||||
"LastExecution": "Utolsó végrehajtás",
|
||||
@@ -455,12 +455,12 @@
|
||||
"DownloadClientCategory": "Letöltési kliens kategória",
|
||||
"AuthenticationRequired": "Azonosítás szükséges",
|
||||
"AuthenticationRequiredHelpText": "Módosítsa, hogy mely kérésekhez van szükség hitelesítésre. Ne változtasson, hacsak nem érti a kockázatokat.",
|
||||
"AuthenticationRequiredWarning": "A hitelesítés nélküli távoli hozzáférés megakadályozása érdekében a(z) {appName} alkalmazásnak engedélyeznie kell a hitelesítést. Opcionálisan letilthatja a helyi címekről történő hitelesítést.",
|
||||
"OnLatestVersion": "A {appName} legújabb verziója már telepítva van",
|
||||
"AuthenticationRequiredWarning": "A hitelesítés nélküli távoli hozzáférés megakadályozása érdekében a {appName} alkalmazásnak engedélyeznie kell a hitelesítést. Opcionálisan letilthatja a helyi címekről történő hitelesítést.",
|
||||
"OnLatestVersion": "A {appName} legújabb verziója már telepítve van",
|
||||
"Remove": "Eltávolítás",
|
||||
"Replace": "Kicserél",
|
||||
"ApplicationURL": "Alkalmazás URL",
|
||||
"ApplicationUrlHelpText": "Ennek az alkalmazásnak a külső URL-címe, beleértve a http-eket",
|
||||
"ApplicationUrlHelpText": "Az alkalmazás külső URL‑je, beleértve a http(s):// előtagot, a portot és az URL‑alapot",
|
||||
"More": "Több",
|
||||
"Publisher": "Kiadó",
|
||||
"ApplyChanges": "Változások alkalmazása",
|
||||
@@ -469,19 +469,19 @@
|
||||
"ApplyTagsHelpTextAdd": "Hozzáadás: Adja hozzá a címkéket a meglévő címkék listájához",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Hogyan adjunk hozzá címkéket a kiválasztott filmhez",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Címkék alkalmazása a kiválasztott indexelőkre",
|
||||
"ApplyTagsHelpTextRemove": "Eltávolítás: Távolítsa el a beírt címkéket",
|
||||
"CountIndexersSelected": "{count} indexelő(k) kiválasztva",
|
||||
"DeleteSelectedDownloadClients": "Letöltési kliens(ek) törlése",
|
||||
"ApplyTagsHelpTextRemove": "Eltávolítás: a megadott címkék eltávolítása",
|
||||
"CountIndexersSelected": "{count} indexelő kiválasztva",
|
||||
"DeleteSelectedDownloadClients": "Letöltő kliens(ek) törlése",
|
||||
"DownloadClientPriorityHelpText": "Priorizálj több letöltési klienst. A Round-Robint azonos prioritású letöltőkliensek használják.",
|
||||
"EditSelectedDownloadClients": "Kijelölt letöltési kliensek szerkesztése",
|
||||
"EditSelectedDownloadClients": "Kijelölt letöltő kliensek szerkesztése",
|
||||
"Label": "Címke",
|
||||
"SelectIndexers": "Indexelők keresése",
|
||||
"ApiKeyValidationHealthCheckMessage": "Kérlek frissítsd az API kulcsot, ami legalább {length} karakter hosszú. Ezt megteheted a Beállításokban, vagy a config file-ban",
|
||||
"SelectIndexers": "Indexelők kiválasztása",
|
||||
"ApiKeyValidationHealthCheckMessage": "Kérjük, frissítse API-kulcsát úgy, hogy az legalább {length} karakter hosszú legyen. Ezt a beállítások vagy a konfigurációs fájl segítségével teheti meg",
|
||||
"Episode": "Epizód",
|
||||
"Genre": "Műfajok",
|
||||
"Genre": "Műfaj",
|
||||
"Theme": "Téma",
|
||||
"Track": "Dal",
|
||||
"UpdateAvailableHealthCheckMessage": "Új frissítés elérhető: {version}",
|
||||
"UpdateAvailableHealthCheckMessage": "Új frissítés érhető el: {version}",
|
||||
"Year": "Év",
|
||||
"Book": "Könyv",
|
||||
"Season": "Évad",
|
||||
@@ -489,12 +489,12 @@
|
||||
"Artist": "Előadó",
|
||||
"Author": "Szerző",
|
||||
"ConnectionLostReconnect": "A(z) {appName} automatikusan megpróbál csatlakozni, vagy kattintson az újratöltés gombra lent.",
|
||||
"DeleteAppProfileMessageText": "Biztosan törli a {0} minőségi profilt?",
|
||||
"DeleteAppProfileMessageText": "Biztosan törli a(z) {name} app profilt?",
|
||||
"RecentChanges": "Friss változások",
|
||||
"WhatsNew": "Mi az újdonság?",
|
||||
"WhatsNew": "Újdonságok",
|
||||
"ConnectionLostToBackend": "A(z) {appName} megszakadt a kapcsolat a háttérrendszerrel, ezért újra kell tölteni a működés visszaállításához.",
|
||||
"minutes": "percek",
|
||||
"AddConnection": "Csatlakozás hozzáadása",
|
||||
"AddConnection": "Kapcsolat hozzáadása",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Az összes értesítés nem érhető el hibák miatt",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Az alkalmazás nem áll rendelkezésre az alábbi hibák miatt: {notificationNames}",
|
||||
"AuthBasic": "Alap (böngésző előugró ablak)",
|
||||
@@ -509,56 +509,56 @@
|
||||
"AddCustomFilter": "Egyéni szűrő hozzáadása",
|
||||
"Clone": "Klón",
|
||||
"Implementation": "Végrehajtás",
|
||||
"AddConnectionImplementation": "Csatlakozás hozzáadása - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Letöltési kliens hozzáadása – {implementationName}",
|
||||
"AddConnectionImplementation": "Kapcsolat hozzáadása - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Letöltőkliens hozzáadása – {implementationName}",
|
||||
"AddIndexerImplementation": "Indexelő hozzáadása - {implementationName}",
|
||||
"ActiveApps": "Aktív alkalmazások",
|
||||
"ActiveIndexers": "Indexerek",
|
||||
"AuthenticationMethod": "Hitelesítési Módszer",
|
||||
"AuthenticationMethodHelpTextWarning": "Kérjük, válasszon érvényes hitelesítési módot",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Erősítsd meg az új jelszót",
|
||||
"ActiveIndexers": "Aktív indexelők",
|
||||
"AuthenticationMethod": "Hitelesítési módszer",
|
||||
"AuthenticationMethodHelpTextWarning": "Kérjük, válasszon érvényes hitelesítési módszert",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Erősítse meg az új jelszót",
|
||||
"DefaultNameCopiedProfile": "{name} - Másolat",
|
||||
"EditConnectionImplementation": "Kapcsolat szerkesztése - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Indexelő hozzáadása - {megvalósítás neve}",
|
||||
"AddApplicationImplementation": "Csatlakozás hozzáadása - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Indexelő hozzáadása - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Indexelő proxy-jának szerkesztése - {implementationName}",
|
||||
"AddApplicationImplementation": "Alkalmazás hozzáadása - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Indexelő-proxy hozzáadása - {implementationName}",
|
||||
"EditIndexerImplementation": "Indexelő szerkesztése – {implementationName}",
|
||||
"EditApplicationImplementation": "Csatlakozás hozzáadása - {megvalósítás neve}",
|
||||
"EditDownloadClientImplementation": "Letöltési kliens szerkesztése – {implementationName}",
|
||||
"EditApplicationImplementation": "Applikáció szerkesztése - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Letöltő kliens szerkesztése – {implementationName}",
|
||||
"NoIndexersFound": "Nem található indexelő",
|
||||
"NoDownloadClientsFound": "Nem találhatók letöltő kliensek",
|
||||
"AdvancedSettingsShownClickToHide": "Haladó beállítások megjelenítve, kattints az elrejtéshez",
|
||||
"AdvancedSettingsHiddenClickToShow": "Haladó beállítások rejtve, kattints a megjelenítéshez",
|
||||
"AppUpdatedVersion": "{appName} frissítve lett `{version}` verzióra, ahhoz hogy a legutóbbi változtatások életbelépjenek, töltsd újra a {appName}-t",
|
||||
"AppUpdatedVersion": "{appName} frissítve lett `{version}` verzióra, ahhoz hogy a legutóbbi változtatások életbelépjenek, töltse újra a {appName}-t",
|
||||
"AddCategory": "Kategória hozzáadása",
|
||||
"External": "Külső",
|
||||
"NoHistoryFound": "Nem található előzmény",
|
||||
"InvalidUILanguage": "A felhasználói felület érvénytelen nyelvre van állítva, javítsa ki, és mentse el a beállításait",
|
||||
"ManageDownloadClients": "Letöltési kliensek kezelése",
|
||||
"ManageDownloadClients": "Letöltő kliensek kezelése",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Választható hely a letöltések elhelyezéséhez, hagyja üresen az alapértelmezett Aria2 hely használatához",
|
||||
"DeleteSelectedIndexersMessageText": "Biztosan törölni szeretne {count} kiválasztott indexelőt?",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Tartalom elrendezése",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Függetlenül attól, hogy a qBittorrent konfigurált tartalomelrendezését használja, az eredeti elrendezést a torrentből, vagy mindig hozzon létre egy almappát (qBittorrent 4.3.2)",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Biztosan törölni szeretné a kiválasztott {count} letöltési klienst?",
|
||||
"CountDownloadClientsSelected": "{count} letöltési kliens kiválasztva",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Biztosan törölni szeretné a kiválasztott {count} letöltő klienst?",
|
||||
"CountDownloadClientsSelected": "{count} letöltő kliens kiválasztva",
|
||||
"StopSelecting": "Kiválasztás leállítása",
|
||||
"days": "napok",
|
||||
"DeleteSelectedApplicationsMessageText": "Biztosan törölni szeretne {count} kiválasztott importlistát?",
|
||||
"CountApplicationsSelected": "{count} Gyűjtemény(ek) kiválasztva",
|
||||
"ManageClients": "Ügyfelek kezelése",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexelők érvénytelen letöltési kliensekkel: {indexerNames}.",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexelők érvénytelen letöltő kliensekkel: {indexerNames}.",
|
||||
"PasswordConfirmation": "Jelszó megerősítése",
|
||||
"SecretToken": "Titkos token",
|
||||
"UseSsl": "SSL használata",
|
||||
"Donate": "Adományoz",
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Keresés típusa",
|
||||
"Mixed": "Mixed",
|
||||
"Mixed": "Vegyes",
|
||||
"TorrentBlackholeSaveMagnetFiles": "Magnet fájlok mentése",
|
||||
"DownloadClientSettingsInitialState": "Kezdeti állapot",
|
||||
"DownloadClientSettingsInitialStateHelpText": "A torrentek kezdeti állapota hozzáadva a következőhöz {clientName}",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Választható hely a letöltések elhelyezéséhez, hagyja üresen az alapértelmezett Aria2 hely használatához",
|
||||
"IndexerHDBitsSettingsCodecs": "Kodek",
|
||||
"IndexerHDBitsSettingsMediums": "Közepes",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Opcionális hely a letöltések elhelyezéséhez, hagyja üresen az alapértelmezett Transmission hely használatához",
|
||||
"IndexerHDBitsSettingsCodecs": "Kodekek",
|
||||
"IndexerHDBitsSettingsMediums": "Médiumok",
|
||||
"BlackholeFolderHelpText": "Mappa, amelyben az {appName} tárolja az {extension} fájlt",
|
||||
"Destination": "Rendeltetési hely",
|
||||
"Directory": "Könyvtár",
|
||||
@@ -567,11 +567,11 @@
|
||||
"TorrentBlackholeSaveMagnetFilesExtension": "Magnet Files kiterjesztés mentése",
|
||||
"TorrentBlackholeTorrentFolder": "Torrent mappa",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "Előtagot ad a deluge json URL-hez, lásd: {url}",
|
||||
"CustomFilter": "Egyedi Szűrők",
|
||||
"CustomFilter": "Egyedi szűrő",
|
||||
"DownloadClientDownloadStationSettingsDirectoryHelpText": "Opcionális megosztott mappa a letöltések elhelyezéséhez, hagyja üresen az alapértelmezett Download Station hely használatához",
|
||||
"DownloadClientRTorrentSettingsDirectoryHelpText": "Választható hely a letöltések elhelyezéséhez, hagyja üresen az alapértelmezett Aria2 hely használatához",
|
||||
"DownloadClientRTorrentSettingsDirectoryHelpText": "Választható hely a letöltések elhelyezéséhez, hagyja üresen az alapértelmezett rTorrent hely használatához",
|
||||
"DownloadClientSettingsUseSslHelpText": "Biztonságos kapcsolat használata, amikor a(z) {clientName} szolgáltatással csatlakozik",
|
||||
"GrabRelease": "Release megragadása",
|
||||
"GrabRelease": "Kiadás megragadása",
|
||||
"ManualGrab": "Megfog",
|
||||
"PrioritySettings": "Prioritás: {priority}",
|
||||
"ProxyValidationBadRequest": "Proxy tesztelése sikertelen. Állapotkód: {statusCode}",
|
||||
@@ -580,8 +580,8 @@
|
||||
"Script": "Szkript",
|
||||
"Any": "Bármi",
|
||||
"PublishedDate": "Közzététel dátuma",
|
||||
"Redirected": "Átirányítás",
|
||||
"AllSearchResultsHiddenByFilter": "Az alkalmazott szűrők miatt, az összes keresési eredmény rejtve marad",
|
||||
"Redirected": "Átirányítva",
|
||||
"AllSearchResultsHiddenByFilter": "Az alkalmazott szűrők miatt, az összes keresési eredmény rejtve marad.",
|
||||
"HealthMessagesInfoBox": "Az állapotfelmérés okáról további információkat találhat, ha a sor végén található wikilinkre (könyv ikonra) kattint, vagy megnézi [logs] ({link}). Ha nehézségei vannak ezen üzenetek értelmezése során, forduljon ügyfélszolgálatunkhoz az alábbi linkeken.",
|
||||
"AptUpdater": "A frissítés telepítéséhez használja az apt-t",
|
||||
"DockerUpdater": "Frissítse a docker-tárolót a frissítés fogadásához",
|
||||
@@ -592,10 +592,123 @@
|
||||
"LogFilesLocation": "A naplófájlok itt találhatók: {location}",
|
||||
"Logout": "Kijelentkezés",
|
||||
"NoEventsFound": "Nem található események",
|
||||
"RestartReloadNote": "Megjegyzés: A {appName} automatikusan újraindítja és újratölti a felületet a visszaállítási folyamatban.",
|
||||
"UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t",
|
||||
"RestartReloadNote": "Megjegyzés: A {appName} automatikusan újraindítja és újratölti a felhasználói felületet a visszaállítási folyamatban.",
|
||||
"UpdateAppDirectlyLoadError": "Nem lehetséges közvetlenül frissíteni a {appName}-t,",
|
||||
"WouldYouLikeToRestoreBackup": "Szeretné visszaállítani a(z) „{name}” biztonsági másolatot?",
|
||||
"InstallLatest": "Legfrissebb telepítése",
|
||||
"CurrentlyInstalled": "Jelenleg telepítve",
|
||||
"PreviouslyInstalled": "Korábban telepítve"
|
||||
"PreviouslyInstalled": "Korábban telepítve",
|
||||
"IndexerId": "Indexelő",
|
||||
"FailedToFetchSettings": "A beállítások lekérése sikertelen",
|
||||
"IndexerBeyondHDSettingsRewindOnly": "Csak olvasható",
|
||||
"IndexerSettingsAppsMinimumSeeders": "Minimális Seederek Száma",
|
||||
"EditCategory": "Kategória szerkesztése",
|
||||
"IndexerHDBitsSettingsOrigins": "Eredet",
|
||||
"LogSizeLimit": "Logfájl méretkorlátja",
|
||||
"DeleteSelectedApplications": "A kiválasztott előadó(k) törlése",
|
||||
"DeleteSelectedIndexer": "Kiválasztott indexelők szerkesztése",
|
||||
"SearchAllIndexers": "Filmek Keresése",
|
||||
"AppsMinimumSeeders": "Minimális Seederek Száma",
|
||||
"DeleteSelectedIndexers": "Kiválasztott indexelők szerkesztése",
|
||||
"IndexerStatus": "Indexer Beállítások",
|
||||
"IndexerDownloadClientHelpText": "Adja meg, melyik letöltési kliens legyen használva a {appName} által erről az indexelőről indított letöltésekhez",
|
||||
"IndexerBeyondHDSettingsRefundOnly": "Csak visszatérítésre",
|
||||
"DownloadClientFloodSettingsTagsHelpText": "A letöltés induló címkéi. A rendszer csak akkor ismeri fel a letöltést, ha az összes megadott induló címkét tartalmazza. Ez segít megelőzni az ütközéseket más, nem kapcsolódó letöltésekkel.",
|
||||
"DownloadClientFreeboxSettingsApiUrl": "API URL",
|
||||
"DownloadClientFreeboxSettingsAppId": "Alkalmazás ID",
|
||||
"DownloadClientFreeboxSettingsAppToken": "Alkalmazás token",
|
||||
"XmlRpcPath": "XML RPC útvonal",
|
||||
"NotificationsEmailSettingsUseEncryptionHelpText": "Meghatározza, hogy a rendszer a szerver beállításaitól függően előnyben részesítse‑e a titkosítást, mindig titkosítást használjon (SSL: csak 465‑ös port, StartTLS: más portok), vagy egyáltalán ne alkalmazzon titkosítást",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Ez az opció legalább 16.0-s NzbGet verziót igényel",
|
||||
"DownloadClientPneumaticSettingsNzbFolder": "Nzb mappa",
|
||||
"DownloadClientPneumaticSettingsStrmFolder": "Strm mappa",
|
||||
"DownloadClientQbittorrentSettingsUseSslHelpText": "Biztonságos kapcsolatot használjon. Ld. Opciók -> Web UI -> \"HTTPS használata HTTP helyett\" qBittorentben.",
|
||||
"DownloadClientRTorrentSettingsUrlPath": "Url útvonal",
|
||||
"DownloadClientFloodSettingsUrlBaseHelpText": "Előtag hozzáadása a Flood API‑hoz (pl. {url})",
|
||||
"DownloadClientFreeboxSettingsApiUrlHelpText": "Adja meg a Freebox API alap URL‑jét az API‑verzióval együtt, pl. '{url}', alapértelmezés: '{defaultApiUrl}'",
|
||||
"DownloadClientFreeboxSettingsAppIdHelpText": "A Freebox API‑hoz való hozzáférés létrehozásakor megadott App ID (például „app_id”)",
|
||||
"DownloadClientFreeboxSettingsAppTokenHelpText": "A Freebox API‑hozzáférés létrehozásakor kapott alkalmazás‑token (pl. „app_token”)",
|
||||
"DownloadClientFreeboxSettingsHostHelpText": "A Freebox hostneve vagy IP‑címe (alapértelmezés: '{url}'; csak ugyanazon a hálózaton működik)",
|
||||
"DownloadClientFreeboxSettingsPortHelpText": "A Freebox interfész által használt port, alapértelmezés: '{port}'",
|
||||
"DownloadClientPneumaticSettingsNzbFolderHelpText": "Ennek a mappának elérhetőnek kell lennie az XBMC számára",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirst": "Első és utolsó először",
|
||||
"DownloadClientQbittorrentSettingsFirstAndLastFirstHelpText": "Először a fájl elejének és a végének letöltése (qBittorrent 4.1.0+)",
|
||||
"DownloadClientQbittorrentSettingsInitialStateHelpText": "qBittorrenthez hozzáadott torrentek alapértelmezett állapota. Fontos: a kényszerített torrentek figyelmen kívül hagyják a seedelési szabályokat",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrder": "Szekvenciális sorrend",
|
||||
"DownloadClientQbittorrentSettingsSequentialOrderHelpText": "Letöltés szekvenciális sorrendben (qBittorrent 4.1.0+)",
|
||||
"DownloadClientSettingsAddPaused": "Hozzáadás szüneltetettként",
|
||||
"UsenetBlackholeNzbFolder": "Nzb mappa",
|
||||
"DownloadClientRTorrentSettingsAddStopped": "Hozzáadás megállítvaként",
|
||||
"DownloadClientRTorrentSettingsAddStoppedHelpText": "Engedélyezés esetén a torrentek és magnet linkek megállítva állapotban kerülnek be az rTorrentbe, ami a magnet fájlok hibás működéséhez vezethet.",
|
||||
"DownloadClientRTorrentSettingsUrlPathHelpText": "Az XMLRPC végpont elérési útja, lásd: {url}. ruTorrent használata esetén ez általában az RPC2 vagy a [ruTorrent elérési útvonala]{url2}.",
|
||||
"DownloadClientSettingsDestinationHelpText": "A letöltési útvonal kézi beállítása. Ha üresen marad, az alapértelmezett lesz használva",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "Prefixet ad a(z) {clientName} hivatkozáshoz, például: {url}",
|
||||
"DownloadClientUTorrentProviderMessage": "A uTorrent múltjában előfordult, hogy kriptobányászót, kártevőket és reklámokat tartalmazott, ezért erősen javasoljuk, hogy válasszon egy másik klienst.",
|
||||
"TheLogLevelDefault": "A naplózási szint alapértéke a 'Debug', ez megváltoztatható az Általános beállítások/beállítások/általános menüpontban",
|
||||
"IndexerHDBitsSettingsCodecsHelpText": "Ha nincs megadva, minden lehetőség felhasználásra kerül.",
|
||||
"IndexerHDBitsSettingsMediumsHelpText": "Ha nincs megadva, minden lehetőség felhasználásra kerül.",
|
||||
"IndexerNewznabSettingsAdditionalParametersHelpText": "Kiegészítő Newznab paraméterek",
|
||||
"IndexerPassThePopcornSettingsApiUserHelpText": "Ezek a beállítások megtalálhatók a PassThePopcorn-jának biztonsági beállításaiban (Profil szerkesztése > Biztonság).",
|
||||
"IndexerSettingsAdditionalParameters": "Kiegészítő paraméterek",
|
||||
"IndexerSettingsApiPath": "API útvonal",
|
||||
"IndexerSettingsApiPathHelpText": "Az API elérési útja, általában: {url}",
|
||||
"IndexerSettingsApiUser": "API felhasználó",
|
||||
"IndexerSettingsCookie": "Süti",
|
||||
"IndexerSettingsSeedRatio": "Megosztási arány",
|
||||
"IndexerSettingsSeedRatioHelpText": "Az az arány, amelyet a torrentnek el kell érnie a leállítás előtt. Üresen hagyva a letöltő kliens alapértelmezett értékét használja. Az aránynak legalább 1.0‑nak kell lennie, és meg kell felelnie az indexelő szabályainak",
|
||||
"IndexerSettingsSeedTime": "Megosztási idő",
|
||||
"IndexerSettingsSeedTimeHelpText": "Az az időtartam, ameddig a torrentet seedelni kell a leállítás előtt. Üresen hagyva a letöltő kliens alapértelmezett értékét használja",
|
||||
"InfoUrl": "Infó URL",
|
||||
"InstallMajorVersionUpdate": "Frissítés telepítése",
|
||||
"InstallMajorVersionUpdateMessage": "Ez a frissítés egy új főverziót telepít, és előfordulhat, hogy nem kompatibilis a rendszerével. Biztosan telepíteni szeretné ezt a frissítést?",
|
||||
"LogSizeLimitHelpText": "Archiválás előtti maximális log fájl méret MB-ben. Alapértelmezetten 1MB.",
|
||||
"Menu": "Menü",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} - Letöltő kliens kiválasztása",
|
||||
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Előtagot ad a(z) {clientName} RPC‑URL‑jéhez, például {url}; alapértelmezetten: '{defaultUrl}'",
|
||||
"Install": "Telepítés",
|
||||
"InstallMajorVersionUpdateMessageLink": "További információért látogasson el ide: [{domain}]({url}).",
|
||||
"LabelIsRequired": "Címke kötelező",
|
||||
"TorrentBlackholeSaveMagnetFilesHelpText": "Magnet link mentése, ha nem érhető el .torrent fájl (csak akkor hasznos, ha a letöltő kliens támogatja a fájlba mentett magneteket)",
|
||||
"TorrentBlackholeSaveMagnetFilesExtensionHelpText": "A magnet linkekhez használandó kiterjesztés, alapértelmezés szerint: \".magnet\"",
|
||||
"PackageVersionInfo": "{packageVersion} {packageAuthor}-tól/től",
|
||||
"NotificationsEmailSettingsUseEncryption": "Titkosítás használata",
|
||||
"NotificationsTelegramSettingsIncludeAppName": "Csatolja a {appName} nevet a címbe",
|
||||
"NotificationsTelegramSettingsIncludeAppNameHelpText": "Az üzenet címének opcionális kiegészítése a {appName}-ral, hogy megkülönböztesse az értesítéseket más alkalmazásoktól",
|
||||
"OverrideGrabModalTitle": "Felülírás és megragadás - {title}",
|
||||
"OnHealthRestored": "Az állapot stabilizálódásakor",
|
||||
"DownloadClientPneumaticSettingsStrmFolderHelpText": "A mappában lévő .strm fájlokat a Drone fogja importálni",
|
||||
"UpdaterLogFiles": "A frissítő naplófájljai",
|
||||
"CountIndexersAvailable": "{count} indexelő elérhető",
|
||||
"PreferMagnetUrlHelpText": "Ha engedélyett, ez az indexelő előnyben részesíti a magnet URL-ek használatát a letöltésekhez, és ha ez nem lehetséges, visszatér a torrent linkekhez",
|
||||
"IndexerSettingsPreferMagnetUrlHelpText": "Ha engedélyett, ez az indexelő előnyben részesíti a magnet URL-ek használatát a letöltésekhez, és ha ez nem lehetséges, visszatér a torrent linkekhez",
|
||||
"IndexerHDBitsSettingsUseFilenames": "Fájlneveket használjon",
|
||||
"TorznabUrl": "Torznab URL",
|
||||
"IndexerGazelleGamesSettingsApiKeyHelpText": "API‑kulcs az oldalról (a Beállítások => Hozzáférési beállítások menüben található)",
|
||||
"IndexerOrpheusSettingsApiKeyHelpText": "API‑kulcs az oldalról (a Beállítások => Hozzáférési beállítások menüben található)",
|
||||
"IndexerRedactedSettingsApiKeyHelpText": "API‑kulcs az oldalról (a Beállítások => Hozzáférési beállítások menüben található)",
|
||||
"IndexerMTeamTpSettingsApiKeyHelpText": "API‑kulcs az oldalról (a Vezérlőpult => Biztonság => Laboratórium menüben található)",
|
||||
"IndexerSettingsBaseUrl": "Alap URL",
|
||||
"DefaultCategory": "Alapértelmezett kategória",
|
||||
"FoundCountReleases": "{itemCount} kiadást talált",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Ha egy torrent hash alapján blokkolt, előfordulhat, hogy egyes indexelőknél nem kerül megfelelően elutasításra RSS‑ben vagy keresés közben. Ennek engedélyezésével a torrent a lekérés után, de még a kliensnek való továbbítás előtt elutasítható.",
|
||||
"IndexerHDBitsSettingsOriginsHelpText": "Ha nincs megadva, minden lehetőség felhasználásra kerül.",
|
||||
"SeedTimeHelpText": "z az időtartam, ameddig a torrentet seedelni kell a leállítás előtt, üresen hagyva az app alapértelmezett értéke",
|
||||
"NewznabUrl": "Newznab URL",
|
||||
"RepeatSearch": "Keresés megismétlése",
|
||||
"IndexerAlphaRatioSettingsFreeleechOnlyHelpText": "Csak freeleech kiadások keresése",
|
||||
"IndexerBeyondHDSettingsFreeleechOnlyHelpText": "Csak freeleech kiadások keresése",
|
||||
"IndexerFileListSettingsFreeleechOnlyHelpText": "Csak freeleech kiadások keresése",
|
||||
"IndexerIPTorrentsSettingsFreeleechOnlyHelpText": "Csak freeleech kiadások keresése",
|
||||
"IndexerPassThePopcornSettingsFreeleechOnlyHelpText": "Csak freeleech kiadások keresése",
|
||||
"IndexerMTeamTpSettingsFreeleechOnlyHelpText": "Csak freeleech kiadások keresése",
|
||||
"IndexerGazelleGamesSettingsFreeleechOnlyHelpText": "Csak freeleech kiadások keresése",
|
||||
"IndexerAvistazSettingsFreeleechOnlyHelpText": "Csak freeleech kiadások keresése",
|
||||
"SeedRatio": "Megosztási arány",
|
||||
"SeedTime": "Megosztási idő",
|
||||
"IndexerNewznabSettingsApiKeyHelpText": "Webhely API-kulcsa",
|
||||
"IndexerNzbIndexSettingsApiKeyHelpText": "Webhely API-kulcsa",
|
||||
"IndexerPassThePopcornSettingsApiKeyHelpText": "Webhely API-kulcsa",
|
||||
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "Webhely API-kulcsa",
|
||||
"OnGrabHelpText": "A kiadás megragadásakor",
|
||||
"OnHealthRestoredHelpText": "Az állapot stabilizálódásakor"
|
||||
}
|
||||
|
||||
@@ -89,5 +89,51 @@
|
||||
"AptUpdater": "Gunakan apt untuk memasang pembaruan",
|
||||
"Clone": "Tutup",
|
||||
"EnableSSL": "Aktifkan RSS",
|
||||
"CurrentlyInstalled": "Saat Ini Terpasang"
|
||||
"CurrentlyInstalled": "Saat Ini Terpasang",
|
||||
"Author": "Otomatis",
|
||||
"CustomFilters": "tambah filter khusus",
|
||||
"AddCategory": "Kategori",
|
||||
"AddDownloadClientImplementation": "tambah persyaratan {implementationName}",
|
||||
"AddIndexerImplementation": "tambah persyaratan {implementationName}",
|
||||
"Applications": "URL Aplikasi",
|
||||
"Proxies": "Profil",
|
||||
"IndexerId": "Pengindeks",
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "tidak dapat menambahkan persyaratan baru, coba lagi..",
|
||||
"CustomFilter": "tambah filter khusus",
|
||||
"DownloadClient": "Tambahkan Download Client",
|
||||
"EditApplicationImplementation": "tambah persyaratan {implementationName}",
|
||||
"EditConnectionImplementation": "tambah koneksi - {implementationName}",
|
||||
"Filter": "File",
|
||||
"UILanguage": "Bahasa",
|
||||
"UnableToAddANewApplicationPleaseTryAgain": "tidak dapat menambahkan persyaratan baru, coba lagi..",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "tidak dapat menambahkan persyaratan baru, coba lagi..",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "tidak dapat menambahkan persyaratan baru, coba lagi..",
|
||||
"CountIndexersSelected": "{count} serial dipilih",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "tidak dapat menambahkan persyaratan baru, coba lagi..",
|
||||
"InteractiveSearch": "Aktifkan Penelusuran Interaktif",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "tidak dapat menambahkan persyaratan baru, coba lagi..",
|
||||
"Application": "URL Aplikasi",
|
||||
"Donate": "Tanggal",
|
||||
"AddNewIndexer": "Tambahkan Pengindeks",
|
||||
"DownloadClients": "Tambahkan Download Client",
|
||||
"AddApplicationImplementation": "tambah persyaratan {implementationName}",
|
||||
"TvSearch": "Cari",
|
||||
"AddIndexerProxyImplementation": "tambah persyaratan {implementationName}",
|
||||
"ManageDownloadClients": "Tambahkan Download Client",
|
||||
"Download": "Pengunduhan Ulang Gagal",
|
||||
"DownloadClientSettings": "Tambahkan Download Client",
|
||||
"EditSelectedDownloadClients": "Tambahkan Download Client",
|
||||
"IndexerInfo": "Pengindeks",
|
||||
"DeleteSelectedDownloadClients": "Tambahkan Download Client",
|
||||
"Filters": "File",
|
||||
"AddApplication": "URL Aplikasi",
|
||||
"CountApplicationsSelected": "{count} serial dipilih",
|
||||
"EditCategory": "Kategori",
|
||||
"EditDownloadClientImplementation": "tambah persyaratan {implementationName}",
|
||||
"EditIndexerImplementation": "tambah persyaratan {implementationName}",
|
||||
"Auth": "Otomatis",
|
||||
"DeleteClientCategory": "Tambahkan Download Client",
|
||||
"DeleteDownloadClient": "Tambahkan Download Client",
|
||||
"EditSyncProfile": "Tambah Delay Profile",
|
||||
"EditIndexerProxyImplementation": "tambah persyaratan {implementationName}"
|
||||
}
|
||||
|
||||
@@ -375,5 +375,47 @@
|
||||
"CurrentlyInstalled": "Nú sett upp",
|
||||
"Stats": "Staða",
|
||||
"Mixed": "Fastur",
|
||||
"Season": "Ástæða"
|
||||
"Season": "Ástæða",
|
||||
"Destination": "Áfangastaður Slóð",
|
||||
"AuthenticationMethod": "Auðkenning",
|
||||
"UnableToLoadDevelopmentSettings": "Ekki er hægt að hlaða almennar stillingar",
|
||||
"UnableToLoadIndexerProxies": "Ekki er hægt að hlaða Indexers",
|
||||
"IndexerHDBitsSettingsOrigins": "Frumlegt",
|
||||
"IndexerId": "Indexer",
|
||||
"IndexerProxy": "Forgangur indexers",
|
||||
"AddNewIndexer": "Bættu við Indexer",
|
||||
"UnableToLoadAppProfiles": "Ekki er hægt að hlaða seinkunarsnið",
|
||||
"Notification": "Vottun",
|
||||
"Proxies": "Snið",
|
||||
"TvSearch": "Leitaðu",
|
||||
"SelectIndexers": "Eyða Indexer",
|
||||
"AddCustomFilter": "Sérsniðin síur",
|
||||
"Donate": "Dagsetning",
|
||||
"DeleteClientCategory": "Eyða niðurhals viðskiptavinur",
|
||||
"EditSyncProfile": "Breyta seinkunarprófíl",
|
||||
"DeleteSelectedIndexersMessageText": "Ertu viss um að þú viljir eyða völdum kvikmyndaskrám?",
|
||||
"EditSelectedDownloadClients": "Eyða niðurhals viðskiptavinur",
|
||||
"IndexerStatus": "Stillingar flokkara",
|
||||
"MovieSearch": "Fjöldamyndaleit",
|
||||
"AddConnection": "Tenging",
|
||||
"ManageDownloadClients": "Sækja viðskiptavini",
|
||||
"DeleteIndexerProxy": "Eyða Indexer",
|
||||
"DeleteSelectedApplications": "Eyða völdum kvikmyndaskrám",
|
||||
"DeleteSelectedApplicationsMessageText": "Ertu viss um að þú viljir eyða völdum kvikmyndaskrám?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Ertu viss um að þú viljir eyða völdum kvikmyndaskrám?",
|
||||
"IndexerInfo": "Indexer",
|
||||
"MovieSearchTypes": "Fjöldamyndaleit",
|
||||
"Notifications": "Vottun",
|
||||
"SearchIndexers": "Eyða Indexer",
|
||||
"SyncProfile": "Breyta seinkunarprófíl",
|
||||
"Connect": "Vottun",
|
||||
"AddIndexerProxy": "Forgangur indexers",
|
||||
"SyncProfiles": "Breyta seinkunarprófíl",
|
||||
"DeleteSelectedIndexer": "Eyða Indexer",
|
||||
"EditSelectedIndexers": "Eyða Indexer",
|
||||
"AddSyncProfile": "Breyta seinkunarprófíl",
|
||||
"DownloadClientCategory": "Eyða niðurhals viðskiptavinur",
|
||||
"IndexerProxies": "Forgangur indexers",
|
||||
"DeleteSelectedIndexers": "Eyða Indexer",
|
||||
"FilterPlaceHolder": "Eyða Indexer"
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"NoChanges": "Nessun Cambiamento",
|
||||
"NoChange": "Nessun Cambio",
|
||||
"LastWriteTime": "Orario di Ultima Scrittura",
|
||||
"Indexer": "Indicizzatore",
|
||||
"Indexer": "Indice",
|
||||
"HideAdvanced": "Nascondi Avanzate",
|
||||
"Health": "Salute",
|
||||
"Grabbed": "Preso",
|
||||
@@ -50,11 +50,11 @@
|
||||
"Logging": "Logging",
|
||||
"LogFiles": "File di Log",
|
||||
"Language": "Lingua",
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Indicizzatori non disponibili a causa di errori: {indexerNames}",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Nessun Indicizzatore disponibile a causa di errori",
|
||||
"Indexers": "Indicizzatori",
|
||||
"IndexerStatusUnavailableHealthCheckMessage": "Indici non disponibili a causa di errori: {indexerNames}",
|
||||
"IndexerStatusAllUnavailableHealthCheckMessage": "Nessun indice disponibile a causa di errori",
|
||||
"Indexers": "Indici",
|
||||
"Host": "Host",
|
||||
"History": "Storia",
|
||||
"History": "Storico",
|
||||
"GeneralSettingsSummary": "Porta, SSL, nome utente/password, proxy, analitiche, e aggiornamenti",
|
||||
"General": "Generale",
|
||||
"Folder": "Cartella",
|
||||
@@ -90,7 +90,7 @@
|
||||
"CertificateValidationHelpText": "Cambia quanto è rigorosa la convalida del certificato HTTPS",
|
||||
"CertificateValidation": "Convalida del Certificato",
|
||||
"Cancel": "Annulla",
|
||||
"BypassProxyForLocalAddresses": "Evita il Proxy per gli Indirizzi Locali",
|
||||
"BypassProxyForLocalAddresses": "Ignora il Proxy per Indirizzi Locali",
|
||||
"Branch": "Branca",
|
||||
"BindAddressHelpText": "Indirizzi IP validi, localhost o '*' per tutte le interfacce",
|
||||
"BindAddress": "Indirizzo di Ascolto",
|
||||
@@ -156,13 +156,13 @@
|
||||
"Logs": "Logs",
|
||||
"Hostname": "Nome Host",
|
||||
"MIA": "MIA",
|
||||
"IndexerFlags": "Flags dell'Indicizzatore",
|
||||
"IndexerFlags": "Etichette dell'Indice",
|
||||
"EnableSSL": "Abilita SSL",
|
||||
"SettingsLongDateFormat": "Formato Data Esteso",
|
||||
"SettingsEnableColorImpairedMode": "Abilità la Modalità Daltonica",
|
||||
"SendAnonymousUsageData": "Invia dati anonimi sull'uso",
|
||||
"ScriptPath": "Percorso dello script",
|
||||
"RssIsNotSupportedWithThisIndexer": "RSS non è supportato con questo indicizzatore",
|
||||
"RssIsNotSupportedWithThisIndexer": "RSS non supportato con questo indice",
|
||||
"Retention": "Ritenzione",
|
||||
"Result": "Risultato",
|
||||
"Restore": "Ripristina",
|
||||
@@ -173,10 +173,10 @@
|
||||
"Reset": "Reimposta",
|
||||
"RemovingTag": "Eliminando l'etichetta",
|
||||
"RemoveFilter": "Rimuovi filtro",
|
||||
"RemovedFromTaskQueue": "Rimosso dalla coda lavori",
|
||||
"RemovedFromTaskQueue": "Rimosso dalla coda",
|
||||
"RefreshMovie": "Aggiorna il Film",
|
||||
"ReadTheWikiForMoreInformation": "Leggi la Wiki per più informazioni",
|
||||
"ProwlarrSupportsAnyIndexer": "{appName} supporta molti indicizzatori oltre a qualsiasi indicizzatore che utilizza lo standard Newznab/Torznab utilizzando \"Generic Newznab\" (per usenet) o \"Generic Torznab\" (per torrent). Cerca e seleziona il tuo indicizzatore da qua sotto.",
|
||||
"ProwlarrSupportsAnyIndexer": "{appName} supporta molti indici oltre a qualsiasi indice che utilizza gli standard Newznab/Torznab utilizzando \"Newznab Generico\" (per usenet) o \"Torznab Generico\" (per torrent). Cerca e seleziona il tuo indice da qua sotto.",
|
||||
"ProwlarrSupportsAnyDownloadClient": "{appName} supporta qualunque client di download elencato sotto.",
|
||||
"ProxyUsernameHelpText": "Devi inserire nome utente e password solo se richiesto. Altrimenti lascia vuoto.",
|
||||
"ProxyType": "Tipo Proxy",
|
||||
@@ -209,7 +209,7 @@
|
||||
"IgnoredAddresses": "Indirizzi Ignorati",
|
||||
"GeneralSettings": "Impostazioni Generali",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Per più informazioni sui singoli client di download clicca sui pulsanti info.",
|
||||
"FilterPlaceHolder": "Cerca indicizzatori",
|
||||
"FilterPlaceHolder": "Cerca indici",
|
||||
"ExistingTag": "Etichetta esistente",
|
||||
"Exception": "Eccezione",
|
||||
"ErrorLoadingContents": "Errore nel caricare i contenuti",
|
||||
@@ -242,7 +242,7 @@
|
||||
"DownloadClientsLoadError": "Impossibile caricare i client di download",
|
||||
"BackupsLoadError": "Impossibile caricare i backup",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Impossibile aggiungere una nuova notifica, riprova.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Impossibile aggiungere un nuovo Indicizzatore, riprova.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Impossibile aggiungere un nuovo indice, riprova.",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Impossibile aggiungere un nuovo client di download, riprova.",
|
||||
"UISettings": "Impostazioni Interfaccia",
|
||||
"UILanguageHelpTextWarning": "Ricaricamento del browser richiesto",
|
||||
@@ -250,7 +250,7 @@
|
||||
"UILanguage": "Lingua dell'Interfaccia",
|
||||
"Torrents": "Torrents",
|
||||
"TestAllClients": "Testa tutti i client",
|
||||
"TagsHelpText": "Si applica agli Indicizzatori con almeno un etichetta corrispondente",
|
||||
"TagsHelpText": "Si applica agli indici con almeno un'etichetta corrispondente",
|
||||
"TagIsNotUsedAndCanBeDeleted": "L'etichetta non è in uso e può essere eliminata",
|
||||
"TagCannotBeDeletedWhileInUse": "Non può essere cancellato mentre è in uso",
|
||||
"SuggestTranslationChange": "Suggerisci un cambio nella traduzione",
|
||||
@@ -270,12 +270,12 @@
|
||||
"SettingsEnableColorImpairedModeHelpText": "Stile alterato per permettere agli utenti daltonici di distinguere meglio le informazioni codificate a colori",
|
||||
"Priority": "Priorità",
|
||||
"InteractiveSearch": "Ricerca interattiva",
|
||||
"IndexerPriorityHelpText": "Priorità dell'Indicizzatore da 1 (più alto) a 50 (più basso). Predefinita: 25.",
|
||||
"IndexerPriority": "Priorità dell'Indicizzatore",
|
||||
"EditIndexer": "Modifica Indicizzatore",
|
||||
"IndexerPriorityHelpText": "Priorità dell'Indice da 1 (più alta) a 50 (più bassa). Predefinita: 25.",
|
||||
"IndexerPriority": "Priorità dell'Indice",
|
||||
"EditIndexer": "Modifica Indice",
|
||||
"Disabled": "Disabilitato",
|
||||
"AutomaticSearch": "Ricerca Automatica",
|
||||
"AddIndexer": "Aggiungi Indexer",
|
||||
"AddIndexer": "Aggiungi Indice",
|
||||
"SaveSettings": "Salva Impostazioni",
|
||||
"OpenThisModal": "Apri questa Modale",
|
||||
"MovieIndexScrollTop": "Indice film: scorri in alto",
|
||||
@@ -283,24 +283,24 @@
|
||||
"FocusSearchBox": "Evidenzia casella di ricerca",
|
||||
"CloseCurrentModal": "Chiudi la Modale Attuale",
|
||||
"AcceptConfirmationModal": "Accetta Conferma Modale",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Alcuni Indicizzatori non sono disponibili da più di 6 ore a causa di errori: {indexerNames}",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Nessun Indicizzatore è disponibile da più di 6 ore a causa di errori",
|
||||
"IndexerLongTermStatusUnavailableHealthCheckMessage": "Alcuni indici non sono disponibili da più di 6 ore a causa di errori: {indexerNames}",
|
||||
"IndexerLongTermStatusAllUnavailableHealthCheckMessage": "Nessun indice è disponibile da più di 6 ore a causa di errori",
|
||||
"Description": "Descrizione",
|
||||
"Add": "Aggiungi",
|
||||
"Enabled": "Abilitato",
|
||||
"Encoding": "Codifica",
|
||||
"EnableIndexer": "Abilita Indicizzatore",
|
||||
"EnableIndexer": "Abilita Indice",
|
||||
"AddNewIndexer": "Aggiungi nuovo Indexer",
|
||||
"IndexerAuth": "Autenticazione dell'Indicizzatore",
|
||||
"IndexerAuth": "Autenticazione dell'Indice",
|
||||
"AddDownloadClient": "Aggiungi Client di Download",
|
||||
"Category": "Categoria",
|
||||
"ClearHistory": "Cancella cronologia",
|
||||
"ClearHistoryMessageText": "Sei sicuro di voler cancellare tutta la cronologia di {appName}?",
|
||||
"Donations": "Donazioni",
|
||||
"EnableRssHelpText": "Abilita feed RSS per l'Indicizzatore",
|
||||
"EnableRssHelpText": "Abilita feed RSS per l'Indice",
|
||||
"HomePage": "Pagina Iniziale",
|
||||
"Id": "ID",
|
||||
"IndexerHealthCheckNoIndexers": "Nessun Indicizzatore abilitato, {appName} non restituirà risultati di ricerca",
|
||||
"IndexerHealthCheckNoIndexers": "Nessun indice abilitato, {appName} non restituirà risultati di ricerca",
|
||||
"EnableRss": "Abilita RSS",
|
||||
"NoLinks": "Nessun Collegamento",
|
||||
"Rss": "RSS",
|
||||
@@ -309,8 +309,8 @@
|
||||
"DeleteApplicationMessageText": "Sei sicuro di voler eliminare l'applicazione '{name}'?",
|
||||
"DeleteIndexerProxyMessageText": "Sei sicuro di voler eliminare il proxy '{name}'?",
|
||||
"Presets": "Preset",
|
||||
"SearchIndexers": "Cerca Indicizzatori",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Impossibile aggiungere un nuovo proxy per l'Indicizzatore, riprova.",
|
||||
"SearchIndexers": "Cerca negli indici",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Impossibile aggiungere un nuovo proxy per l'indice, riprova.",
|
||||
"Yesterday": "Ieri",
|
||||
"ApplicationStatusCheckSingleClientMessage": "Applicazioni non disponibili a causa di errori: {0}",
|
||||
"Today": "Oggi",
|
||||
@@ -334,13 +334,13 @@
|
||||
"OnApplicationUpdateHelpText": "All'aggiornamento dell'applicazione",
|
||||
"OnGrab": "Al Prelievo",
|
||||
"OnHealthIssue": "Quando c'è un problema",
|
||||
"TestAllIndexers": "Prova tutti gli indicizzatori",
|
||||
"TestAllIndexers": "Prova tutti gli Indici",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent fornito dalla app che ha chiamato la API",
|
||||
"GrabReleases": "Prendi Release(s)",
|
||||
"Link": "Collegamenti",
|
||||
"MappedDrivesRunningAsService": "Le unità di rete mappate non sono disponibili eseguendo come servizio di Windows. Vedere le FAQ per maggiori informazioni",
|
||||
"No": "No",
|
||||
"UnableToLoadIndexers": "Impossibile caricare gli Indicizzatori",
|
||||
"UnableToLoadIndexers": "Impossibile caricare gli Indici",
|
||||
"Yes": "Sì",
|
||||
"AddIndexerProxy": "Aggiungi proxy dell'Indexer",
|
||||
"AudioSearch": "Ricerca Audio",
|
||||
@@ -353,7 +353,7 @@
|
||||
"AddToDownloadClient": "Aggiungi release al client di download",
|
||||
"Categories": "Categorie",
|
||||
"Database": "Database",
|
||||
"DeleteIndexerProxy": "Cancella il Proxy dell'Indicizzatore",
|
||||
"DeleteIndexerProxy": "Cancella il Proxy dell'Indice",
|
||||
"Auth": "Auth",
|
||||
"AddDownloadClientToProwlarr": "L'aggiunta di un client di download permette a {appName} di inviare le release direttamente dall'interfaccia mentre si fa una ricerca manuale.",
|
||||
"Applications": "Applicazioni",
|
||||
@@ -363,33 +363,33 @@
|
||||
"AppSettingsSummary": "Applicazioni e impostazioni per configurare come {appName} interagisce con i tuoi programmi PVR",
|
||||
"Apps": "Le App",
|
||||
"DevelopmentSettings": "Impostazioni di Sviluppo",
|
||||
"RedirectHelpText": "Reindirizza le richieste di download per l'Indicizzatore e passa il prelievo direttamente invece di inoltrare la richiesta tramite {appName}",
|
||||
"IndexerVipExpiredHealthCheckMessage": "I benefici VIP dell'Indicizzatore sono scaduti: {indexerNames}",
|
||||
"IndexerVipExpiringHealthCheckMessage": "I benefici VIP dell'Indicizzatore scadranno a breve: {indexerNames}",
|
||||
"IndexerProxies": "Proxy degli Indicizzatori",
|
||||
"RedirectHelpText": "Reindirizza le richieste di download per l'indice e inoltra il recupero direttamente invece di far passare la richiesta tramite {appName}",
|
||||
"IndexerVipExpiredHealthCheckMessage": "I benefici VIP dell'Indice sono scaduti: {indexerNames}",
|
||||
"IndexerVipExpiringHealthCheckMessage": "I benefici VIP dell'Indice scadranno a breve: {indexerNames}",
|
||||
"IndexerProxies": "Proxy degli Indici",
|
||||
"Stats": "Statistiche",
|
||||
"SyncAppIndexers": "Sincronizza tutti gli indicizzatori",
|
||||
"SyncAppIndexers": "Sincronizza tutti gli indici",
|
||||
"SyncLevel": "Livello Sincronizzazione",
|
||||
"IndexerProxy": "Proxy dell'Indicizzatore",
|
||||
"IndexerProxy": "Proxy dell'Indice",
|
||||
"Proxies": "Proxy",
|
||||
"ApplicationsLoadError": "Impossibile careicare la lista applicazioni",
|
||||
"Website": "Sito",
|
||||
"Privacy": "Privacy",
|
||||
"SettingsIndexerLogging": "Logging Migliorato dell'Indicizzatore",
|
||||
"SettingsIndexerLogging": "Logging dettagliato dell'indice",
|
||||
"TestAllApps": "Prova Tutte le App",
|
||||
"UnableToLoadAppProfiles": "Impossibile caricare i profili delle app",
|
||||
"UnableToLoadIndexerProxies": "Impossibile caricare i Proxy degli Indicizzatori",
|
||||
"UnableToLoadIndexerProxies": "Impossibile caricare i Proxy degli Indici",
|
||||
"FullSync": "Sincronizzazione completa",
|
||||
"IndexerAlreadySetup": "Almeno un'istanza dell'indicizzatore è già configurata",
|
||||
"IndexerDetails": "Dettagli dell'Indicizzatore",
|
||||
"IndexerInfo": "Info sull'Indicizzatore",
|
||||
"IndexerName": "Nome dell'Indicizzatore",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Gli indicizzatori non hanno una definizione e non funzioneranno: {indexerNames}. Si prega di rimuoverli e/o di riaggiungerli a {appName}",
|
||||
"IndexerAlreadySetup": "Almeno un'istanza dell'indice è già configurata",
|
||||
"IndexerDetails": "Dettagli Indice",
|
||||
"IndexerInfo": "Info sull'Indice",
|
||||
"IndexerName": "Nome dell'Indice",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "Indici senza definizione che non funzioneranno: {indexerNames}. Si prega di rimuoverli e/o di riaggiungerli a {appName}.",
|
||||
"HistoryCleanup": "Pulizia della Cronologia",
|
||||
"IndexerRss": "RSS dell'Indicizzatore",
|
||||
"IndexerSite": "Sito dell'Indicizzatore",
|
||||
"IndexerRss": "Indice RSS",
|
||||
"IndexerSite": "Sito dell'Indice",
|
||||
"MassEditor": "Editor di Massa",
|
||||
"IndexerTagsHelpText": "Usa le etichette per specificare i Proxy degli Indicizzatori, con che app un indicizzatore si sincronizza o semplicemente per organizzarli.",
|
||||
"IndexerTagsHelpText": "Usa le etichette per specificare i Proxy degli Indici, o con che app un indice si sincronizza.",
|
||||
"MovieSearch": "Ricerca Film",
|
||||
"MovieSearchTypes": "Tipi di Ricerca Film",
|
||||
"MusicSearchTypes": "Tipi di Ricerca Musica",
|
||||
@@ -416,16 +416,16 @@
|
||||
"Url": "Url",
|
||||
"NoSearchResultsFound": "Nessun risultato di ricerca trovato, prova a eseguire una nuova ricerca qui sotto.",
|
||||
"SettingsConsoleLogLevel": "Livello di Log della Console",
|
||||
"IndexerObsoleteCheckMessage": "Gli indicizzatori sono obsoleti e sono stati aggiornati: {0}. Si prega di rimuoverli e/o di riaggiungerli a {appName}",
|
||||
"IndexerQuery": "Query dell'Indicizzatore",
|
||||
"IndexerSettingsSummary": "Configura varie impostazioni globali degli Indicizzatori, anche i Proxy.",
|
||||
"IndexerObsoleteCheckMessage": "Indici obsoleti o aggiornati: {0}. Si prega di rimuoverli e/o di riaggiungerli a {appName}",
|
||||
"IndexerQuery": "Query dell'Indice",
|
||||
"IndexerSettingsSummary": "Configura varie impostazioni globali degli Indici, inclusi i Proxy.",
|
||||
"Query": "Query",
|
||||
"SearchCapabilities": "Capacità di Ricerca",
|
||||
"SettingsIndexerLoggingHelpText": "Logga i dati aggiuntivi dell'indicizzatore includendo la risposta",
|
||||
"SettingsIndexerLoggingHelpText": "Registra informazioni aggiuntive dell'indice includendo la risposta",
|
||||
"SettingsSqlLoggingHelpText": "Scrivi a log tutte le query SQL di {appName}",
|
||||
"SyncLevelAddRemove": "Solo aggiunte e rimozioni: Quando gli indicizzatori vengono aggiunti o rimossi da {appName}, verrà aggiornata questa applicazione remota.",
|
||||
"SyncLevelFull": "Sincronizzazione completa: Mantiene gli indicizzatori dell'app completamente sincronizzati. Le modifiche apportate agli indicizzatori in {appName} sono sincronizzate in questa app. Qualsiasi cambiamento fatto agli indicizzatori da remoto all'interno di questa applicazione verrà sovrascritto da {appName} alla prossima sincronizzazione.",
|
||||
"MinimumSeedersHelpText": "Seeder minimi richiesti dall'Applicazione per far sì che l'indicizzatore li prenda",
|
||||
"SyncLevelAddRemove": "Solo aggiunte e rimozioni: quando gli indici vengono aggiunti o rimossi da {appName}, questa applicazione remota verrà aggiornata.",
|
||||
"SyncLevelFull": "Sincronizzazione completa: mantiene gli indici di questa applicazione completamente sincronizzati. Le modifiche agli indici fatte in {appName} sono sincronizzate in questa applicazione. Qualsiasi cambiamento fatto agli indici da remoto all'interno di questa applicazione verrà sovrascritto da {appName} alla prossima sincronizzazione.",
|
||||
"MinimumSeedersHelpText": "Seeder minimi richiesti dall'applicazione per far sì che l'indice li recupera",
|
||||
"SyncProfile": "Profilo Sincronizzazione",
|
||||
"SyncProfiles": "Profili di sincronizzazione",
|
||||
"AddSyncProfile": "Aggiungi Profilo di Sincronizzazione",
|
||||
@@ -464,11 +464,11 @@
|
||||
"Publisher": "Editore",
|
||||
"ApplyTagsHelpTextAdd": "Aggiungi: Aggiunge le etichette alla lista esistente di etichette",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Come applicare etichette agli autori selezionati",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Come applicare etichette agli indicizzatori selezionati",
|
||||
"CountIndexersSelected": "{count} indicizzatore(i) selezionato(i)",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Come applicare etichette agli indici selezionati",
|
||||
"CountIndexersSelected": "{count} indice/i selezionato/i",
|
||||
"DeleteSelectedApplicationsMessageText": "Sei sicuro di voler eliminare {count} applicazione(i) selezionata(e)?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Sei sicuro di voler eliminare i '{count}' client di download selezionato/i?",
|
||||
"SelectIndexers": "Cerca Indicizzatori",
|
||||
"SelectIndexers": "Seleziona indici",
|
||||
"Track": "Traccia",
|
||||
"Book": "Libro",
|
||||
"Theme": "Tema",
|
||||
@@ -482,7 +482,7 @@
|
||||
"More": "Altro",
|
||||
"Season": "Stagione",
|
||||
"Year": "Anno",
|
||||
"UpdateAvailableHealthCheckMessage": "Nuovo aggiornamento disponibile: {version}",
|
||||
"UpdateAvailableHealthCheckMessage": "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",
|
||||
@@ -505,7 +505,7 @@
|
||||
"AddCustomFilter": "Aggiungi Filtro Personalizzato",
|
||||
"AddConnectionImplementation": "Aggiungi Connessione - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Aggiungi un Client di Download - {implementationName}",
|
||||
"AddIndexerImplementation": "Aggiungi indicizzatore - {implementationName}",
|
||||
"AddIndexerImplementation": "Aggiungi Indice - {implementationName}",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Inserisci username",
|
||||
"AuthenticationMethod": "Metodo di Autenticazione",
|
||||
"AuthenticationMethodHelpTextWarning": "Selezione un metodo di autenticazione valido",
|
||||
@@ -515,19 +515,19 @@
|
||||
"DefaultNameCopiedProfile": "{name} - Copia",
|
||||
"AppUpdatedVersion": "{appName} è stato aggiornato alla versione `{version}`, per vedere le modifiche devi ricaricare {appName}",
|
||||
"AddApplicationImplementation": "Aggiungi Connessione - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Aggiungi indicizzatore - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Aggiungi Proxy per Indice - {implementationName}",
|
||||
"EditApplicationImplementation": "Aggiungi Condizione - {implementationName}",
|
||||
"CountApplicationsSelected": "{count} Collezione(i) Selezionate",
|
||||
"EditConnectionImplementation": "Modifica Connessione - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Modifica Client di Download - {implementationName}",
|
||||
"EditIndexerImplementation": "Modifica Indicizzatore - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Aggiungi indicizzatore - {implementationName}",
|
||||
"EditIndexerImplementation": "Modifica Indice - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Modifica Proxy per Indice - {implementationName}",
|
||||
"AdvancedSettingsShownClickToHide": "Impostazioni avanzate mostrate, clicca per nasconderle",
|
||||
"AdvancedSettingsHiddenClickToShow": "Impostazioni avanzate nascoste, clicca per mostrarle",
|
||||
"AddApplication": "Aggiungi Applicazione",
|
||||
"AddCategory": "Aggiungi Categoria",
|
||||
"ActiveApps": "App Attive",
|
||||
"ActiveIndexers": "Indicizzatori Attivi",
|
||||
"ActiveIndexers": "Indici Attivi",
|
||||
"IndexerBeyondHDSettingsSearchTypes": "Tipi di Ricerca",
|
||||
"Directory": "Cartella",
|
||||
"CustomFilter": "Filtro Personalizzato",
|
||||
@@ -549,7 +549,7 @@
|
||||
"IndexerDisabled": "Indexer Disattivato",
|
||||
"GoToApplication": "Vai all'applicazione",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Sei sicuro di voler eliminare '{name}' da {appName}?",
|
||||
"IndexerStatus": "Stato Indicizzatore",
|
||||
"IndexerStatus": "Stato Indice",
|
||||
"XmlRpcPath": "Percorso XML RPC",
|
||||
"EditCategory": "Modifica Categoria",
|
||||
"IndexerSettingsAdditionalParameters": "Parametri Addizionali",
|
||||
@@ -568,36 +568,36 @@
|
||||
"CountDownloadClientsSelected": "{count} client di download selezionato/i",
|
||||
"NotificationsTelegramSettingsIncludeAppName": "Includi {appName} nel Titolo",
|
||||
"Menu": "Menu",
|
||||
"NoIndexersFound": "Nessun indicizzatore trovato",
|
||||
"NoIndexersFound": "Nessun indice trovato",
|
||||
"PasswordConfirmation": "Conferma Password",
|
||||
"NoHistoryFound": "Nessun storico trovato",
|
||||
"DeleteSelectedIndexersMessageText": "Sei sicuro di voler eliminare {count} applicazione(i) selezionata(e)?",
|
||||
"DeleteSelectedIndexersMessageText": "Confermi di voler eliminare i {count} indici selezionati?",
|
||||
"UsenetBlackholeNzbFolder": "Cartella Nzb",
|
||||
"VipExpiration": "Scadenza VIP",
|
||||
"OverrideAndAddToDownloadClient": "Sovrascrivi e aggiungi alla coda di download",
|
||||
"BasicSearch": "Ricerca basica",
|
||||
"CountIndexersAvailable": "{count} indicizzatore/i disponibili",
|
||||
"EditSelectedIndexers": "Modifica Indicizzatori Selezionati",
|
||||
"CountIndexersAvailable": "{count} indice/i disponibile/i",
|
||||
"EditSelectedIndexers": "Modifica Indici Selezionati",
|
||||
"FoundCountReleases": "Trovate {itemCount} release",
|
||||
"ManageApplications": "Gestisci Applicazioni",
|
||||
"ManageDownloadClients": "Gestisci Clients di Download",
|
||||
"HistoryDetails": "Dettagli Storico",
|
||||
"NotificationsEmailSettingsUseEncryption": "Usa Crittografia",
|
||||
"SearchAllIndexers": "Cerca tutti gli indicizzatori",
|
||||
"SearchCountIndexers": "Cerca {count} indicizzatore/i",
|
||||
"SearchAllIndexers": "Cerca in tutti gli indici",
|
||||
"SearchCountIndexers": "Cerca in {count} indice/i",
|
||||
"SearchQueries": "Cerca Richieste",
|
||||
"SeedRatio": "Rapporto Seed",
|
||||
"TorznabUrl": "Url Torznab",
|
||||
"TorrentBlackholeTorrentFolder": "Cartella Torrent",
|
||||
"UseSsl": "Usa SSL",
|
||||
"days": "giorni",
|
||||
"IndexerCategories": "Categorie degli Indicizzatori",
|
||||
"IndexerCategories": "Categorie degli Indici",
|
||||
"IndexerTorrentSyndikatSettingsApiKeyHelpText": "API Key Sito",
|
||||
"LabelIsRequired": "Etichetta richiesta",
|
||||
"NoIndexerHistory": "Nessun storico trovato per questo indicizzatore",
|
||||
"NoIndexerHistory": "Nessun storico trovato per questo indice",
|
||||
"RssFeed": "Feed RSS",
|
||||
"AverageResponseTimesMs": "Tempo di Risposta Medio dell'Indicizzatore (ms)",
|
||||
"DeleteSelectedIndexer": "Elimina Indicizzatore Selezionato",
|
||||
"AverageResponseTimesMs": "Tempo di risposta medio dell'Indice (ms)",
|
||||
"DeleteSelectedIndexer": "Elimina l'Indice Selezionato",
|
||||
"DisabledUntil": "Disattiva fino",
|
||||
"DownloadClientDelugeSettingsUrlBaseHelpText": "Aggiungi un prefisso all'url del json di deluge, vedi {url}",
|
||||
"Implementation": "Implementazione",
|
||||
@@ -605,7 +605,7 @@
|
||||
"NewznabUrl": "Url Newznab",
|
||||
"NoApplicationsFound": "Nessuna applicazione trovata",
|
||||
"IndexerSettingsBaseUrl": "Url Base",
|
||||
"IndexerId": "ID Indicizzatore",
|
||||
"IndexerId": "ID Indice",
|
||||
"NoDownloadClientsFound": "Nessun client di download trovato",
|
||||
"BlackholeFolderHelpText": "Cartella nella quale {appName} salverà i file di tipo {extension}",
|
||||
"DownloadClientNzbgetSettingsAddPausedHelpText": "Questa opzione richiede almeno la versione 16.0 di NzbGet",
|
||||
@@ -619,12 +619,12 @@
|
||||
"IndexerIPTorrentsSettingsCookieUserAgent": "Cookie User-Agent",
|
||||
"IndexerSettingsApiPathHelpText": "Percorso API, solitamente {url}",
|
||||
"IndexerSettingsBaseUrlHelpText": "Seleziona quale url base {appName} userà per le richieste al sito",
|
||||
"NoIndexerCategories": "Nessuna categoria trovata per questo indicizzatore",
|
||||
"NoIndexerCategories": "Nessuna categoria trovata per questo indice",
|
||||
"SecretToken": "Secret Token",
|
||||
"SeedRatioHelpText": "Il rapporto che un torrent dovrebbe raggiungere prima di essere fermato, vuoto è il predefinito dell'app",
|
||||
"TotalQueries": "Totale Richieste",
|
||||
"IndexerHistoryLoadError": "Errore caricando lo storico dell'indicizzatore",
|
||||
"DeleteSelectedIndexers": "Elimina Indicizzatori Selezionati",
|
||||
"IndexerHistoryLoadError": "Errore caricando lo storico dell'indice",
|
||||
"DeleteSelectedIndexers": "Elimina Indici Selezionati",
|
||||
"InvalidUILanguage": "L'interfaccia è impostata in una lingua non valida, correggi e salva le tue impostazioni",
|
||||
"IndexerSettingsSeedRatio": "Rapporto Seed",
|
||||
"IndexerSettingsRssKey": "Chiave RSS",
|
||||
@@ -634,7 +634,7 @@
|
||||
"IndexerNewznabSettingsAdditionalParametersHelpText": "Parametri Newznab addizionali",
|
||||
"SelectDownloadClientModalTitle": "{modalTitle} - Seleziona Client di Download",
|
||||
"DownloadClientSettingsDestinationHelpText": "Specifica manualmente la destinazione dei download, lascia vuoti per usare la predefinita",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indicizzatori con client di download non validi: {indexerNames}.",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indici con client di download non validi: {indexerNames}.",
|
||||
"SeedTimeHelpText": "Il rapporto che un torrent dovrebbe raggiungere prima di essere fermato, vuoto è il predefinito dell'app",
|
||||
"IndexerPassThePopcornSettingsApiKeyHelpText": "API Key Sito",
|
||||
"IndexerNzbIndexSettingsApiKeyHelpText": "API Key Sito",
|
||||
@@ -667,5 +667,17 @@
|
||||
"AuthQueries": "Query di autenticazione",
|
||||
"ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText": "Se un torrent è bloccato tramite hash, potrebbe non essere correttamente rifiutato durante l’uso di RSS/Ricerca con alcuni indexer. Abilitando questa opzione, il torrent verrà rifiutato dopo essere stato acquisito, ma prima di essere inviato al client.",
|
||||
"AppsMinimumSeedersHelpText": "Numero minimo di seeders richiesti dall’applicazione affinché l’indexer possa acquisire il torrent; se vuoto, viene utilizzato il valore predefinito del profilo di sincronizzazione",
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "Numero minimo di seeders richiesti dall’applicazione affinché l’indexer possa acquisire il torrent; se vuoto, viene utilizzato il valore predefinito del profilo di sincronizzazione"
|
||||
"IndexerSettingsAppsMinimumSeedersHelpText": "Numero minimo di seeders richiesti dall’applicazione affinché l’indexer possa acquisire il torrent; se vuoto, viene utilizzato il valore predefinito del profilo di sincronizzazione",
|
||||
"TotalHostQueries": "Totale Richieste",
|
||||
"AppsMinimumSeeders": "Seeder Minimi",
|
||||
"PackSeedTimeHelpText": "Il rapporto che un torrent dovrebbe raggiungere prima di essere fermato, vuoto è il predefinito dell'app",
|
||||
"IndexerTagsHelpTextWarning": "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.",
|
||||
"IndexerBeyondHDSettingsRefundOnly": "Solo Lettura",
|
||||
"IndexerBeyondHDSettingsRewindOnly": "Solo Lettura",
|
||||
"IndexerSettingsAppsMinimumSeeders": "Seeder Minimi",
|
||||
"IndexerSettingsPackSeedTimeIndexerHelpText": "Il rapporto che un torrent dovrebbe raggiungere prima di essere fermato, vuoto è il predefinito dell'app",
|
||||
"IndexerSettingsSeedTimeHelpText": "Il rapporto che un torrent dovrebbe raggiungere prima di essere fermato, vuoto è il predefinito dell'app",
|
||||
"LogSizeLimit": "Limite Dimensione",
|
||||
"TheLogLevelDefault": "Il livello di log predefinito è 'Debug' e può essere modificato nelle [Impostazioni Generali](settings/general)",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "Aggiunge un prefisso all'url della {connectionName}, come {url}"
|
||||
}
|
||||
|
||||
@@ -375,5 +375,48 @@
|
||||
"Mixed": "修繕",
|
||||
"CurrentlyInstalled": "現在インストール中",
|
||||
"Stats": "状態",
|
||||
"Season": "理由"
|
||||
"Season": "理由",
|
||||
"UnableToLoadIndexerProxies": "インデクサーを読み込めません",
|
||||
"AddConnection": "接続を追加",
|
||||
"AuthenticationMethod": "認証",
|
||||
"IndexerId": "インデクサー",
|
||||
"DeleteClientCategory": "ダウンロードクライアントを削除する",
|
||||
"DeleteSelectedIndexersMessageText": "選択したムービーファイルを削除してもよろしいですか?",
|
||||
"Destination": "宛先パス",
|
||||
"UnableToLoadDevelopmentSettings": "一般設定を読み込めません",
|
||||
"EditSyncProfile": "遅延プロファイルの編集",
|
||||
"MovieSearch": "マスムービー検索",
|
||||
"TvSearch": "探す",
|
||||
"UnableToLoadAppProfiles": "遅延プロファイルを読み込めません",
|
||||
"IndexerProxy": "インデクサの優先順位",
|
||||
"AddCustomFilter": "カスタムフィルターを追加",
|
||||
"AddNewIndexer": "インデクサーを追加",
|
||||
"DeleteIndexerProxy": "インデクサーを削除する",
|
||||
"Notification": "認証",
|
||||
"EditSelectedDownloadClients": "ダウンロードクライアントを削除する",
|
||||
"IndexerStatus": "インデクサ設定",
|
||||
"Proxies": "プロファイル",
|
||||
"IndexerHDBitsSettingsOrigins": "元の",
|
||||
"ManageDownloadClients": "クライアントのダウンロード",
|
||||
"Donate": "日付",
|
||||
"SelectIndexers": "インデクサーを削除する",
|
||||
"DeleteSelectedIndexer": "インデクサーを削除する",
|
||||
"SyncProfile": "遅延プロファイルの編集",
|
||||
"SyncProfiles": "遅延プロファイルの編集",
|
||||
"DeleteSelectedDownloadClientsMessageText": "選択したムービーファイルを削除してもよろしいですか?",
|
||||
"DeleteSelectedIndexers": "インデクサーを削除する",
|
||||
"MovieSearchTypes": "マスムービー検索",
|
||||
"SearchIndexers": "インデクサーを削除する",
|
||||
"AddSyncProfile": "遅延プロファイルの編集",
|
||||
"Connect": "認証",
|
||||
"Notifications": "認証",
|
||||
"DeleteSelectedApplicationsMessageText": "選択したムービーファイルを削除してもよろしいですか?",
|
||||
"EditSelectedIndexers": "インデクサーを削除する",
|
||||
"AddIndexerProxy": "インデクサの優先順位",
|
||||
"IndexerProxies": "インデクサの優先順位",
|
||||
"IndexerInfo": "インデクサー",
|
||||
"DeleteSelectedApplications": "選択したムービーファイルを削除する",
|
||||
"DownloadClientCategory": "ダウンロードクライアントを削除する",
|
||||
"FilterPlaceHolder": "インデクサーを削除する",
|
||||
"IndexerNoDefinitionCheckHealthCheckMessage": "インデクサーの定義が設定されておらず、機能していません: {indexerNames}。 {appName} から削除、もしくは再追加してください。"
|
||||
}
|
||||
|
||||
@@ -506,5 +506,50 @@
|
||||
"DownloadClientSettingsAddPaused": "일시 중지 추가",
|
||||
"SecretToken": "비밀 토큰",
|
||||
"NoDownloadClientsFound": "다운로드 클라이언트를 찾을 수 없음",
|
||||
"PrioritySettings": "우선 순위: {0}"
|
||||
"PrioritySettings": "우선 순위: {0}",
|
||||
"IndexerId": "인덱서",
|
||||
"IndexerBeyondHDSettingsRefundOnly": "읽기 전용",
|
||||
"SeedTimeHelpText": "토런트가 중지되기 전에 시드되어야 하는 시간, 비어 있으면 다운로드 클라이언트의 기본값을 사용합니다.",
|
||||
"DownloadClientSettingsDefaultCategoryHelpText": "{appName}에 대한 특정 카테고리를 추가하면 관련 없는 {appName}가 아니 다운로드와의 충돌을 피할 수 있습니다. 카테고리 사용은 선택 사항이지만 강력히 권장됩니다.",
|
||||
"DownloadClientSettingsDefaultCategorySubFolderHelpText": "{appName}에 대한 특정 카테고리를 추가하면 관련 없는 비{appName} 다운로드와의 충돌을 피할 수 있습니다. 카테고리 사용은 선택 사항이지만 강력히 권장됩니다. 출력 디렉토리에 [카테고리] 하위 디렉토리를 만듭니다.",
|
||||
"EditCategory": "카테고리 추가",
|
||||
"EditSelectedIndexers": "선택된 영화 수정하기",
|
||||
"IndexerBeyondHDSettingsRewindOnly": "읽기 전용",
|
||||
"IndexerDownloadClientHelpText": "이 인덱서에서 가져온 것을 가져오는 데 사용되는 다운로드 클라이언트를 지정합니다.",
|
||||
"IndexerHDBitsSettingsOrigins": "원본",
|
||||
"IndexerProxy": "인덱서 프록시 추가",
|
||||
"SelectIndexers": "인덱서 플래그 선택",
|
||||
"UnableToLoadDevelopmentSettings": "일반 설정을 불러올 수 없",
|
||||
"LogSizeLimit": "크기 제한",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "다운로드를 넣을 위치 (선택 사항), 기본 rTorrent 위치를 사용하려면 비워두세요",
|
||||
"CountApplicationsSelected": "{count}개의 컬렉션을 선택함",
|
||||
"ManageDownloadClients": "클라이언트 다운로드",
|
||||
"UnableToLoadIndexerProxies": "인덱서를 로드할 수 없음",
|
||||
"UnableToLoadAppProfiles": "지연 프로필을 불러올 수 없",
|
||||
"DeleteIndexerProxy": "인덱서 삭제",
|
||||
"Auth": "저작자",
|
||||
"Notification": "인증",
|
||||
"Proxies": "프로필",
|
||||
"SyncProfiles": "동기화 프로필 추가",
|
||||
"SyncProfile": "동기화 프로필 추가",
|
||||
"IndexerStatus": "인덱스 설정",
|
||||
"EditSelectedDownloadClients": "다운로드 클라이언트 삭제",
|
||||
"TvSearch": "검색",
|
||||
"DeleteClientCategory": "다운로드 클라이언트 삭제",
|
||||
"IndexerNewznabSettingsAdditionalParametersHelpText": "매개 변수 추가",
|
||||
"ThemeHelpText": "애플리케이션 UI 테마 변경, '자동' 테마는 OS 테마를 사용하여 라이트 또는 다크 모드를 설정합니다. Theme.Park에서 영감을 받음",
|
||||
"ProxyValidationUnableToConnect": "인덱서에 연결할 수 없음: {exceptionMessage}. 상세 내용은 이 오류를 둘러싼 로그를 확인하세요",
|
||||
"Connect": "인증",
|
||||
"SearchIndexers": "인덱서 플래그 선택",
|
||||
"IndexerProxies": "인덱서 프록시 추가",
|
||||
"Notifications": "인증",
|
||||
"IndexerInfo": "인덱서",
|
||||
"DownloadClientCategory": "다운로드 클라이언트 삭제",
|
||||
"DeleteSelectedApplications": "선택된 것을 삭제",
|
||||
"DeleteSelectedIndexer": "선택된 영화 수정하기",
|
||||
"DeleteSelectedIndexers": "선택된 영화 수정하기",
|
||||
"PackSeedTimeHelpText": "토런트가 중지되기 전에 시드되어야 하는 시간, 비어 있으면 다운로드 클라이언트의 기본값을 사용합니다.",
|
||||
"SeedRatioHelpText": "토런트가 중지되기 전에 시드되어야 하는 시간, 비어 있으면 다운로드 클라이언트의 기본값을 사용합니다.",
|
||||
"IndexerSettingsPackSeedTimeIndexerHelpText": "토런트가 중지되기 전에 시드되어야 하는 시간, 비어 있으면 다운로드 클라이언트의 기본값을 사용합니다.",
|
||||
"FilterPlaceHolder": "인덱서 플래그 선택"
|
||||
}
|
||||
|
||||
@@ -16,5 +16,21 @@
|
||||
"AddIndexerImplementation": "Pievienot Nosacījumu - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Pievienot Nosacījumu - {implementationName}",
|
||||
"AddApplicationImplementation": "Pievienot Savienojumu - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Pievienot Nosacījumu - {implementationName}"
|
||||
"EditIndexerProxyImplementation": "Pievienot Nosacījumu - {implementationName}",
|
||||
"Connections": "Pievienot Savienojumu",
|
||||
"DownloadClient": "Pievienot Lejupielādes Klientu",
|
||||
"DownloadClients": "Pievienot Lejupielādes Klientu",
|
||||
"EditSyncProfile": "Pievienot Aizkaves Profilu",
|
||||
"AddDownloadClientImplementation": "Pievienot Nosacījumu - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Pievienot Nosacījumu - {implementationName}",
|
||||
"AddSyncProfile": "Pievienot Aizkaves Profilu",
|
||||
"ConnectionLost": "Pievienot Savienojumu",
|
||||
"DeleteDownloadClient": "Pievienot Lejupielādes Klientu",
|
||||
"DownloadClientSettings": "Pievienot Lejupielādes Klientu",
|
||||
"SyncProfile": "Pievienot Aizkaves Profilu",
|
||||
"SyncProfiles": "Pievienot Aizkaves Profilu",
|
||||
"DeleteClientCategory": "Pievienot Lejupielādes Klientu",
|
||||
"DeleteSelectedDownloadClients": "Pievienot Lejupielādes Klientu",
|
||||
"EditSelectedDownloadClients": "Pievienot Lejupielādes Klientu",
|
||||
"ManageDownloadClients": "Pievienot Lejupielādes Klientu"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user