mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-01-08 07:28:30 -05:00
Compare commits
361 Commits
4.0.0Alpha
...
4.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e42e25617 | ||
|
|
c27c9564cf | ||
|
|
c4b0da335d | ||
|
|
b73699be8d | ||
|
|
bc87b6e955 | ||
|
|
f15155ddc9 | ||
|
|
37b556012e | ||
|
|
79ba3dd874 | ||
|
|
28795c3158 | ||
|
|
935d248b53 | ||
|
|
b2103afe30 | ||
|
|
fcbc4e420e | ||
|
|
19fcda877f | ||
|
|
48cd93ef93 | ||
|
|
80fd39826b | ||
|
|
50c7d1531b | ||
|
|
657c6f2b7d | ||
|
|
e7484fac09 | ||
|
|
613ec9c48c | ||
|
|
322050efd8 | ||
|
|
5242368343 | ||
|
|
564151e520 | ||
|
|
b40220cb73 | ||
|
|
2ebac74049 | ||
|
|
8ede63a960 | ||
|
|
38a0cc39e6 | ||
|
|
b482b61770 | ||
|
|
36a6f6e151 | ||
|
|
0c45883649 | ||
|
|
c243144009 | ||
|
|
4e2df006e7 | ||
|
|
02964d3bef | ||
|
|
c0e50aac48 | ||
|
|
6c0804ba4f | ||
|
|
708b13dd71 | ||
|
|
eb64e054b5 | ||
|
|
c42f7f930c | ||
|
|
44c1d7306d | ||
|
|
2413c22a51 | ||
|
|
31fefb4f86 | ||
|
|
745fd81aa1 | ||
|
|
f7bf1567c1 | ||
|
|
02021a09b1 | ||
|
|
6411d32228 | ||
|
|
56287e8094 | ||
|
|
62f70fd628 | ||
|
|
dcca2c5821 | ||
|
|
d22f2296c2 | ||
|
|
2e0ea5d085 | ||
|
|
cb4526e8e2 | ||
|
|
fc3132cd77 | ||
|
|
e474db33ec | ||
|
|
6274d2b250 | ||
|
|
d4bfdaa29e | ||
|
|
3b7f5f5ce0 | ||
|
|
496e2f1840 | ||
|
|
98f3c055d7 | ||
|
|
7df36ce8b4 | ||
|
|
5deaca45c2 | ||
|
|
e790757855 | ||
|
|
46b2c6494f | ||
|
|
c4216a4075 | ||
|
|
375412aa42 | ||
|
|
895ac56eb3 | ||
|
|
c593388ec6 | ||
|
|
1c6960fe44 | ||
|
|
e7ac2ffd6c | ||
|
|
df35e54fba | ||
|
|
15f757ae04 | ||
|
|
b7dc15099c | ||
|
|
dc33c67f48 | ||
|
|
89fb517fd1 | ||
|
|
51eb94dbe9 | ||
|
|
03747f618f | ||
|
|
8154322448 | ||
|
|
7531ae2749 | ||
|
|
32515172d3 | ||
|
|
3b500ecf69 | ||
|
|
b93dd4751d | ||
|
|
d651f8db34 | ||
|
|
3f8f7d21d0 | ||
|
|
824341e396 | ||
|
|
a972708d69 | ||
|
|
47b305c83b | ||
|
|
2ec3da18f2 | ||
|
|
70aea9ac0c | ||
|
|
38270bf4e2 | ||
|
|
05d58ca0da | ||
|
|
91aab54b43 | ||
|
|
25d552c09e | ||
|
|
a1d51502c4 | ||
|
|
883d1dfa19 | ||
|
|
fab36ec008 | ||
|
|
8a2b875779 | ||
|
|
efaffb8298 | ||
|
|
e004eb3f00 | ||
|
|
43e8f6dc81 | ||
|
|
f5bff8fe7c | ||
|
|
fad8484b93 | ||
|
|
7664b54f89 | ||
|
|
21cbc353dd | ||
|
|
8d66306ec4 | ||
|
|
479daf0e76 | ||
|
|
bf0fbb7b10 | ||
|
|
d3c91f1585 | ||
|
|
ca165b328a | ||
|
|
fa2ffeea92 | ||
|
|
0d00965ac3 | ||
|
|
7d7bec1f80 | ||
|
|
b6fd915365 | ||
|
|
fecae72267 | ||
|
|
7bffd91e3f | ||
|
|
f859521a7e | ||
|
|
a869386fac | ||
|
|
8bc7885b7a | ||
|
|
78be46738d | ||
|
|
6fce73855c | ||
|
|
fa844a6223 | ||
|
|
906379dd09 | ||
|
|
37cded612f | ||
|
|
73e8fade61 | ||
|
|
758cc7afab | ||
|
|
d74b7b06d2 | ||
|
|
39009f2f71 | ||
|
|
9fdc1c6813 | ||
|
|
c5568fe830 | ||
|
|
bad81f84b9 | ||
|
|
2ac08dd0e6 | ||
|
|
408ffc4539 | ||
|
|
eb958327c5 | ||
|
|
e157d77a1e | ||
|
|
e961c9ea8f | ||
|
|
258c4f769d | ||
|
|
b31fedd857 | ||
|
|
eafe69500b | ||
|
|
ae09990c43 | ||
|
|
cf54b65c32 | ||
|
|
7974421fa1 | ||
|
|
847a098d4e | ||
|
|
eb4de0ae0f | ||
|
|
bca9f3b753 | ||
|
|
cad8a9a5d3 | ||
|
|
f5f36d21e8 | ||
|
|
c51435c114 | ||
|
|
2a7f1780b4 | ||
|
|
98a44e40fb | ||
|
|
65cf6fa9a1 | ||
|
|
b2e32d1720 | ||
|
|
f0bfedbe8e | ||
|
|
fd4e059c13 | ||
|
|
a53575e154 | ||
|
|
4a73484603 | ||
|
|
03b380f90b | ||
|
|
a2bd3b2dfe | ||
|
|
56fe140ebf | ||
|
|
4fafcce740 | ||
|
|
02352c4ae6 | ||
|
|
4b74aab335 | ||
|
|
2d67ac189d | ||
|
|
8ece62e23d | ||
|
|
56c2bdd77d | ||
|
|
1f555f1930 | ||
|
|
8496432c14 | ||
|
|
1672ffa670 | ||
|
|
6aab199f12 | ||
|
|
46d0c379a4 | ||
|
|
99240f145a | ||
|
|
3c9079d73c | ||
|
|
0eb98b9a6c | ||
|
|
76bfd98b77 | ||
|
|
3348640c88 | ||
|
|
d81c64fd2b | ||
|
|
8b4c919617 | ||
|
|
76c58953df | ||
|
|
4ddc5caa49 | ||
|
|
694663bd95 | ||
|
|
62aba5844e | ||
|
|
d0d60cef05 | ||
|
|
3d293fdcb0 | ||
|
|
96e9528046 | ||
|
|
4ea24b3203 | ||
|
|
a756eea25a | ||
|
|
210020e489 | ||
|
|
e586ead024 | ||
|
|
14c80bf1dc | ||
|
|
bdd56e794a | ||
|
|
a544548934 | ||
|
|
e06c1d61fb | ||
|
|
600c5209c6 | ||
|
|
bee90366ee | ||
|
|
e9bc4e9417 | ||
|
|
f01ff15761 | ||
|
|
356ada159d | ||
|
|
cc831e16d8 | ||
|
|
b8dc46ad01 | ||
|
|
d8ab19087d | ||
|
|
ec8a79eedd | ||
|
|
f1e2a8e9d8 | ||
|
|
4042a5fe5d | ||
|
|
a4752751ed | ||
|
|
e23ecf46d1 | ||
|
|
70a8c597a6 | ||
|
|
fa639bdb53 | ||
|
|
233bdd5b1d | ||
|
|
a0ab6d35c7 | ||
|
|
bd29680ce7 | ||
|
|
7139e92554 | ||
|
|
897df53466 | ||
|
|
58281711f6 | ||
|
|
b524383aa3 | ||
|
|
75a16e3588 | ||
|
|
1453032ad6 | ||
|
|
824ab4afad | ||
|
|
73dd41c67f | ||
|
|
59ee77355d | ||
|
|
5c758773ad | ||
|
|
46de49df06 | ||
|
|
d1c54a9a74 | ||
|
|
e7527c45cd | ||
|
|
7d5207aa67 | ||
|
|
654302e691 | ||
|
|
ee673b57fd | ||
|
|
2be374b841 | ||
|
|
906e1eda89 | ||
|
|
ece02cc4fa | ||
|
|
876ad60ddf | ||
|
|
862da354ac | ||
|
|
8fd477b979 | ||
|
|
2d7005655c | ||
|
|
7322f8348a | ||
|
|
e3e3a12e73 | ||
|
|
77cdd057a4 | ||
|
|
e8206fbdd9 | ||
|
|
589f15a77b | ||
|
|
7bb443678a | ||
|
|
6390415101 | ||
|
|
4abf192e11 | ||
|
|
1fed37f9da | ||
|
|
a9d86a7447 | ||
|
|
2abe4c3cef | ||
|
|
0542c25003 | ||
|
|
1b8ee4e290 | ||
|
|
51128cba55 | ||
|
|
3612432581 | ||
|
|
deca000a1b | ||
|
|
39cccb5653 | ||
|
|
f6838dc985 | ||
|
|
8cd4d92395 | ||
|
|
3bf9906f45 | ||
|
|
9f7daf96ef | ||
|
|
67de4df155 | ||
|
|
bc51a4bd1c | ||
|
|
bb54616018 | ||
|
|
6bcff5e014 | ||
|
|
8970a03a9a | ||
|
|
3ad717ca35 | ||
|
|
b14f72c67a | ||
|
|
45d036804f | ||
|
|
8f606db233 | ||
|
|
3766ba5402 | ||
|
|
e851813cef | ||
|
|
4d49ad9141 | ||
|
|
16618b3af2 | ||
|
|
0e5c0f664f | ||
|
|
7be9281431 | ||
|
|
ee0327fac1 | ||
|
|
9930de3e7f | ||
|
|
e8503e89c6 | ||
|
|
1d9ed419eb | ||
|
|
0207652e3e | ||
|
|
0f1e99c5cb | ||
|
|
f134bc7efb | ||
|
|
dcd7c7180e | ||
|
|
fbbfcd075b | ||
|
|
f42d2e4140 | ||
|
|
88882cebbc | ||
|
|
17a979675c | ||
|
|
4642850c79 | ||
|
|
e8d6eebb04 | ||
|
|
864c5160c0 | ||
|
|
99b5a00c12 | ||
|
|
85ee1f07d7 | ||
|
|
e58b4394e0 | ||
|
|
1e91a57bf1 | ||
|
|
39cee52a7e | ||
|
|
72068f939d | ||
|
|
096d0d3cad | ||
|
|
2472ab0121 | ||
|
|
00421717b8 | ||
|
|
ae96d93f94 | ||
|
|
8522c40c8f | ||
|
|
23f86e95f1 | ||
|
|
eed2045189 | ||
|
|
217785bf0f | ||
|
|
6aef50dc5d | ||
|
|
16b6e3caa7 | ||
|
|
3de4c99a8a | ||
|
|
980aa19a75 | ||
|
|
fb4b57e056 | ||
|
|
03638365ea | ||
|
|
157cb1c83d | ||
|
|
e51f11c2b1 | ||
|
|
1ad0961dd8 | ||
|
|
46ff7dd4e2 | ||
|
|
8b067df914 | ||
|
|
ef43b13272 | ||
|
|
e8e9974224 | ||
|
|
feebbb9f04 | ||
|
|
bc4f06dd1d | ||
|
|
971e4fc909 | ||
|
|
51cc765949 | ||
|
|
19c6a4fffa | ||
|
|
105ac32d2f | ||
|
|
57550675d2 | ||
|
|
e674abc5c0 | ||
|
|
f965c96f51 | ||
|
|
c76b8ed9e0 | ||
|
|
4fbd0d8a7b | ||
|
|
2186c0fff6 | ||
|
|
1adca9a9c1 | ||
|
|
9408353f2b | ||
|
|
84f4d453d2 | ||
|
|
d10209f2a1 | ||
|
|
3ae149c72f | ||
|
|
47385acc3b | ||
|
|
814eeaa900 | ||
|
|
5f2ea13aad | ||
|
|
41ca217931 | ||
|
|
b57d36e8dd | ||
|
|
9a4be70734 | ||
|
|
a8443595a6 | ||
|
|
fd0a70ac58 | ||
|
|
8a8685c968 | ||
|
|
9e6cb8da8e | ||
|
|
054ec54d51 | ||
|
|
272ce773cb | ||
|
|
050b925f7b | ||
|
|
0087940898 | ||
|
|
e323c014f9 | ||
|
|
cc465c7554 | ||
|
|
14cb37564f | ||
|
|
094db56c3b | ||
|
|
aabb709b8b | ||
|
|
0833dd2db9 | ||
|
|
cd3f912be4 | ||
|
|
665c516db6 | ||
|
|
b670da9fa0 | ||
|
|
80bee9bffe | ||
|
|
d85a70e8ad | ||
|
|
8f21533e76 | ||
|
|
89996482a1 | ||
|
|
03c10dce91 | ||
|
|
bd5331be05 | ||
|
|
46e1645289 | ||
|
|
4ce3965747 | ||
|
|
9d4af19db3 | ||
|
|
48e034f4be | ||
|
|
f8959baa2f | ||
|
|
8ed5997eae | ||
|
|
daf9f50ac8 | ||
|
|
6b11013c1a |
5
.github/renovate.json
vendored
5
.github/renovate.json
vendored
@@ -5,7 +5,7 @@
|
||||
":disableDependencyDashboard"
|
||||
],
|
||||
"schedule": [
|
||||
"before 3am on Monday"
|
||||
"before 8am on Monday"
|
||||
],
|
||||
"ignorePaths": [
|
||||
"tests/**",
|
||||
@@ -19,7 +19,8 @@
|
||||
]
|
||||
},
|
||||
"ignoreDeps": [
|
||||
"jaraco.text"
|
||||
"jaraco.text",
|
||||
"sabctools"
|
||||
],
|
||||
"packageRules": [
|
||||
{
|
||||
|
||||
23
.github/stale.yml
vendored
23
.github/stale.yml
vendored
@@ -1,23 +0,0 @@
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 21
|
||||
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- "Feature request"
|
||||
- "Work in progress"
|
||||
- "Bug"
|
||||
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: "Stale"
|
||||
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
||||
4
.github/workflows/build_release.yml
vendored
4
.github/workflows/build_release.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
||||
if: steps.cache-virtualenv-64bit.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
python --version
|
||||
pip install --upgrade pip wheel
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install --upgrade -r requirements.txt
|
||||
pip install --upgrade -r builder/requirements.txt
|
||||
- name: Build Windows standalone binary and installer (64bit)
|
||||
@@ -87,7 +87,7 @@ jobs:
|
||||
# We need the official Python, because the GA ones only support newer macOS versions
|
||||
# The deployment target is picked up by the Python build tools automatically
|
||||
# If updated, make sure to also set LSMinimumSystemVersion in SABnzbd.spec
|
||||
PYTHON_VERSION: "3.11.2"
|
||||
PYTHON_VERSION: "3.11.3"
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.9"
|
||||
# We need to force compile for universal2 support
|
||||
CFLAGS: -arch x86_64 -arch arm64
|
||||
|
||||
4
.github/workflows/integration_testing.yml
vendored
4
.github/workflows/integration_testing.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
test:
|
||||
name: Test ${{ matrix.name }} - Python ${{ matrix.python-version }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 15
|
||||
timeout-minutes: 20
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
if: steps.cache-virtualenv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
python --version
|
||||
pip install --upgrade pip wheel
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install --upgrade -r requirements.txt
|
||||
pip install --upgrade -r tests/requirements.txt
|
||||
- name: Test SABnzbd
|
||||
|
||||
22
.github/workflows/stale.yml
vendored
Normal file
22
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: "Close stale issues"
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
name: "Close stale issues"
|
||||
if: github.repository_owner == 'sabnzbd'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v8
|
||||
with:
|
||||
days-before-stale: 21
|
||||
days-before-close: 7
|
||||
stale-issue-label: "Stale"
|
||||
stale-issue-message: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
exempt-issue-labels: "Feature request, Work in progress, Bug"
|
||||
2
.github/workflows/translations.yml
vendored
2
.github/workflows/translations.yml
vendored
@@ -20,9 +20,11 @@ jobs:
|
||||
python3 tools/extract_pot.py
|
||||
- name: Push/pull Transifex translations
|
||||
if: env.TX_TOKEN
|
||||
# We sleep so all files are updated when we pull them back in
|
||||
run: |
|
||||
curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash
|
||||
./tx push --translation --source
|
||||
sleep 10s
|
||||
./tx pull --all --force
|
||||
- name: Compile translations to validate them
|
||||
run: |
|
||||
|
||||
4
PKG-INFO
4
PKG-INFO
@@ -1,7 +1,7 @@
|
||||
Metadata-Version: 1.0
|
||||
Name: SABnzbd
|
||||
Version: 4.0.0Alpha2
|
||||
Summary: SABnzbd-4.0.0Alpha2
|
||||
Version: 4.0.0
|
||||
Summary: SABnzbd-4.0.0
|
||||
Home-page: https://sabnzbd.org
|
||||
Author: The SABnzbd Team
|
||||
Author-email: team@sabnzbd.org
|
||||
|
||||
25
README.mkd
25
README.mkd
@@ -1,30 +1,29 @@
|
||||
Release Notes - SABnzbd 4.0.0 Alpha 2
|
||||
Release Notes - SABnzbd 4.0.0
|
||||
=========================================================
|
||||
|
||||
## Changes since 4.0.0 Alpha 1
|
||||
- There are now multiple settings that can tweak performance, see:
|
||||
https://github.com/sabnzbd/sabnzbd/discussions/2474
|
||||
We are trying to find the most optimal default settings, so you
|
||||
can help us by letting us know the results on your system!
|
||||
|
||||
## Changes since 3.7.2
|
||||
- In this major update we replaced a core part of Python's SSL handling
|
||||
with our own improved version. This results in large performance increases
|
||||
when downloading from news servers with SSL enabled.
|
||||
In addition, the general connection handling was overhauled, resulting in
|
||||
performance improvements for all news servers.
|
||||
- In this major update we optimized a core part of the SSL handling.
|
||||
This results in large performance increases when downloading from news
|
||||
servers with SSL enabled. In addition, the general connection handling
|
||||
was improved, resulting in performance improvements for all news servers.
|
||||
Special thanks to: mnightingale, puzzledsab and animetosho!
|
||||
- There are multiple settings that can tweak performance, see:
|
||||
https://github.com/sabnzbd/sabnzbd/discussions/2474
|
||||
- When adding a new news server, SSL is enabled by default.
|
||||
- File assembly performance significantly improved by relying on the
|
||||
CRC32 instead of the MD5 to perform QuickCheck of files.
|
||||
- Slowdown more gracefully when the cache fills up.
|
||||
- Replaced separate Series/Movie/Date Sorting with general Sorter.
|
||||
- HTTPS files are included in the `Backup`.
|
||||
- Improved `Watched Folder` scanning and processing.
|
||||
- Ignore resource fork files created by macOS.
|
||||
- `Deobfuscate final filenames` is enabled for new installations.
|
||||
- Dropped support for Python 3.7.
|
||||
|
||||
# Bugfixes since 3.7.2
|
||||
## Bugfixes since 3.7.2
|
||||
- Restore applying `History Retention` setting at startup.
|
||||
- Windows: Not all invalid characters were removed from filenames.
|
||||
- Windows: Firewall rules were not removed by uninstaller.
|
||||
|
||||
## Upgrade notices
|
||||
- The download statistics file `totals10.sab` is updated in 3.2.x
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# Special requirements for macOS universal2 binary release
|
||||
# This way dependabot can auto-update them
|
||||
cryptography==39.0.1
|
||||
cryptography==40.0.2
|
||||
@@ -1,21 +1,21 @@
|
||||
# Basic build requirements
|
||||
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
|
||||
pyinstaller==5.8.0
|
||||
pyinstaller-hooks-contrib==2022.15
|
||||
pyinstaller==5.10.1
|
||||
pyinstaller-hooks-contrib==2023.2
|
||||
altgraph==0.17.3
|
||||
wrapt==1.14.1
|
||||
setuptools==67.2.0
|
||||
wrapt==1.15.0
|
||||
setuptools==67.7.1
|
||||
pkginfo==1.9.6
|
||||
PyGithub==1.57
|
||||
charset-normalizer==3.0.1
|
||||
PyGithub==1.58.1
|
||||
charset-normalizer==3.1.0
|
||||
certifi
|
||||
|
||||
# orjson does not support 32bit Windows, exclude it based on Python-version
|
||||
# This way we also test ujson on Python 3.8 in the CI-tests
|
||||
orjson==3.8.6; python_version > '3.8'
|
||||
orjson==3.8.10; python_version > '3.8'
|
||||
|
||||
# For the macOS build
|
||||
dmgbuild==1.6.0; sys_platform == 'darwin'
|
||||
dmgbuild==1.6.1; sys_platform == 'darwin'
|
||||
mac-alias==2.2.2; sys_platform == 'darwin'
|
||||
macholib==1.16.2; sys_platform == 'darwin'
|
||||
ds-store==1.3.1; sys_platform == 'darwin'
|
||||
|
||||
@@ -174,16 +174,19 @@ Section "SABnzbd" SecDummy
|
||||
; Make sure old versions are gone (reg-key already read in onInt)
|
||||
StrCmp $PREV_INST_DIR "" noPrevInstallRemove
|
||||
${RemovePrev} "$PREV_INST_DIR"
|
||||
Goto continueSetupAfterRemove
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Add firewall rules for new installs
|
||||
noPrevInstallRemove:
|
||||
liteFirewallW::AddRule "$INSTDIR\SABnzbd.exe" "SABnzbd"
|
||||
liteFirewallW::AddRule "$INSTDIR\SABnzbd-console.exe" "SABnzbd-console"
|
||||
|
||||
continueSetupAfterRemove:
|
||||
|
||||
; add files / whatever that need to be installed here.
|
||||
File /r "dist\SABnzbd\*"
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Add firewall rules
|
||||
liteFirewallW::AddRule "$INSTDIR\SABnzbd.exe" "SABnzbd"
|
||||
liteFirewallW::AddRule "$INSTDIR\SABnzbd-console.exe" "SABnzbd-console"
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Add to registry
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" "" "$INSTDIR"
|
||||
@@ -333,7 +336,6 @@ Section "un.$(MsgDelProgram)" Uninstall
|
||||
${nsProcess::Unload}
|
||||
DetailPrint "Process Killed"
|
||||
|
||||
|
||||
; add delete commands to delete whatever files/registry keys/etc you installed here.
|
||||
Delete "$INSTDIR\uninstall.exe"
|
||||
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd"
|
||||
@@ -341,6 +343,10 @@ Section "un.$(MsgDelProgram)" Uninstall
|
||||
|
||||
${RemovePrev} "$INSTDIR"
|
||||
|
||||
; Remove firewall entries
|
||||
liteFirewallW::RemoveRule "$INSTDIR\SABnzbd.exe" "SABnzbd"
|
||||
liteFirewallW::RemoveRule "$INSTDIR\SABnzbd-console.exe" "SABnzbd-console"
|
||||
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd.lnk"
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
<div class="colmask">
|
||||
<div class="section">
|
||||
<div class="padTable"> <a class="main-helplink" href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<div class="padTable">
|
||||
<a class="main-helplink" href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<p>$T('explain-catTags2')<br/>$T('explain-catTags')</p>
|
||||
<hr>
|
||||
<h5 class="darkred"><strong>$T('explain-relFolder'):</strong> <span class="path">$defdir</span></h5>
|
||||
<!--#for $cur, $slot in enumerate($slotinfo)#-->
|
||||
<!--#set $cansort = $slot.name != '*' and $slot.name != ''#-->
|
||||
<form action="save" method="get" <!--#if $cansort#-->class="sorting-row"<!--#end if#-->>
|
||||
<form action="save" method="post" <!--#if $cansort#-->class="sorting-row"<!--#end if#-->>
|
||||
<table class="catTable">
|
||||
<!--#if $cur == 0#-->
|
||||
<tr>
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="complete_dir">$T('opt-complete_dir')</label>
|
||||
<input type="text" name="complete_dir" id="complete_dir" value="$complete_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-complete_dir')</span>
|
||||
<a class="btn btn-default" href="${root}config/sorting/"><span class="glyphicon glyphicon-sort-by-alphabet"></span> $T('cmenu-sorting')</a>
|
||||
<span class="desc">$T('explain-complete_dir') <br/> $T('explain-complete_dir-sorting')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="complete_free">$T('opt-complete_free')</label>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<div class="col2-cats" <!--#if int($getVar($section_label + '_enable')) > 0 then '' else 'style="display:none"'#-->>
|
||||
<hr>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="${section_label}_cats" multiple="multiple" class="multiple_cats">
|
||||
<select name="${section_label}_cats" multiple="multiple" class="multiple_cats" size="$len($categories)">
|
||||
<!--#for $ct in $categories#-->
|
||||
<option value="$ct" <!--#if $ct in $getVar($section_label + '_cats') then 'selected="selected"' else ""#-->>$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
@@ -36,7 +36,7 @@
|
||||
<h3>$T('cmenu-email') <a href="$helpuri$help_uri#toc0" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<div class="col2-cats" <!--#if int($email_endjob) > 0 then '' else 'style="display:none"'#-->>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="email_cats" multiple="multiple" class="multiple_cats">
|
||||
<select name="email_cats" multiple="multiple" class="multiple_cats" size="$len($categories)">
|
||||
<!--#for $ct in $categories#-->
|
||||
<option value="$ct" <!--#if $ct in $email_cats then 'selected="selected"' else ""#-->>$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<!--#import json#-->
|
||||
<!--#import datetime#-->
|
||||
|
||||
<script type="text/javascript" xmlns="http://www.w3.org/1999/html">
|
||||
<script type="text/javascript">
|
||||
// Define variable needed for the server-statistics
|
||||
var serverBandwithData = {}
|
||||
var serverArticleTries = {}
|
||||
@@ -60,12 +60,12 @@
|
||||
</div>
|
||||
<!-- Tricks to avoid browser auto-fill, fixed on-submit with javascript -->
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_00">$T('srv-username')</label>
|
||||
<input type="text" name="${pid}_00" id="${pid}_00" data-hide="username" />
|
||||
<label class="config" for="${pid}_000">$T('srv-username')</label>
|
||||
<input type="text" name="${pid}_000" id="${pid}_000" data-hide="username" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_01">$T('srv-password')</label>
|
||||
<input type="text" name="${pid}_01" id="${pid}_01" data-hide="password" />
|
||||
<label class="config" for="${pid}_001">$T('srv-password')</label>
|
||||
<input type="text" name="${pid}_001" id="${pid}_001" data-hide="password" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="connections">$T('srv-connections')</label>
|
||||
@@ -147,7 +147,7 @@
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<input type="hidden" name="server" value="$server['name']" />
|
||||
<input type="hidden" id="ajax" name="ajax" value=1 />
|
||||
<input type="hidden" name="ajax" value=1 />
|
||||
|
||||
<div class="section <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
<div class="col2 <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
@@ -225,8 +225,8 @@
|
||||
<span class="desc">$T('explain-ssl_verify').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="ssl_ciphers">$T('opt-ssl_ciphers')</label>
|
||||
<input type="text" name="ssl_ciphers" id="ssl_ciphers" value="$server['ssl_ciphers']" />
|
||||
<label class="config" for="ssl_ciphers$cur">$T('opt-ssl_ciphers')</label>
|
||||
<input type="text" name="ssl_ciphers" id="ssl_ciphers$cur" value="$server['ssl_ciphers']" />
|
||||
<span class="desc">$T('explain-ssl_ciphers') <br>$T('readwiki')
|
||||
<a href="${helpuri}advanced/ssl-ciphers" target="_blank">${helpuri}advanced/ssl-ciphers</a></span>
|
||||
</div>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -96,8 +96,13 @@ body {
|
||||
.example {
|
||||
background-color: #fefeee;
|
||||
}
|
||||
.presets strong {
|
||||
display: inline-block;
|
||||
width: 75px;
|
||||
}
|
||||
.presets {
|
||||
margin-bottom: -6px;
|
||||
max-width: 60%;
|
||||
}
|
||||
.presets input {
|
||||
margin: 2px 0;
|
||||
@@ -326,6 +331,53 @@ tr.separator {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.Sorting .explain-sorting {
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
}
|
||||
.Sorting .explain-pattern {
|
||||
border: none;
|
||||
width: 100%;
|
||||
}
|
||||
.Sorting .pattern-table {
|
||||
border:1px solid #ccc;
|
||||
}
|
||||
.Sorting .sorter-switch {
|
||||
margin-right: 0.2em;
|
||||
}
|
||||
.Sorting .sorter-switch-container {
|
||||
margin: 10px 0px;
|
||||
height: 1.5em;
|
||||
display: block;
|
||||
}
|
||||
.Sorting .sorter-placeholder {
|
||||
position: relative;
|
||||
}
|
||||
.Sorting .sorter-placeholder:after {
|
||||
content: "\e034";
|
||||
font-family: "Glyphicons Halflings";
|
||||
background: unset;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 30px;
|
||||
border-radius: 15px;
|
||||
border: 1px dashed #444;
|
||||
}
|
||||
.Sorting .glyphicon-option-vertical {
|
||||
margin-top: 1.5em;
|
||||
margin-right: 0.2em;
|
||||
cursor: move;
|
||||
}
|
||||
.Sorting form:not(.sorting-row) .glyphicon-option-vertical {
|
||||
visibility: hidden;
|
||||
}
|
||||
.Sorting .sorting-quick-setup {
|
||||
padding: 1.5em 2em 3em
|
||||
}
|
||||
|
||||
.RSS .rss-section input[type="text"] {
|
||||
max-width: 180px;
|
||||
}
|
||||
@@ -421,6 +473,9 @@ tr.separator {
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
.valign-top {
|
||||
vertical-align: top;
|
||||
}
|
||||
.nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
@@ -784,6 +839,7 @@ select {
|
||||
vertical-align:middle;
|
||||
max-width: 100%;
|
||||
min-height: 34px;
|
||||
min-width: 55px;
|
||||
font-size: 13px;
|
||||
background-color: white;
|
||||
}
|
||||
@@ -1248,6 +1304,12 @@ html[dir="rtl"] .Scheduling form[action="addSchedule"] input[type="checkbox"] {
|
||||
padding: 0px 15px 10px;
|
||||
width: inherit;
|
||||
}
|
||||
.Sorting .glyphicon-option-vertical {
|
||||
display: none;
|
||||
}
|
||||
.Sorting .sorter h3 {
|
||||
cursor: move;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
|
||||
@@ -203,7 +203,12 @@ $.fn.extractFormDataTo = function(target) {
|
||||
var selects = $("select", this);
|
||||
|
||||
selects.each(function (i,elem) {
|
||||
target[elem.name] = elem.value;
|
||||
if (elem.selectedOptions.length > 1) {
|
||||
// Handle <select multiple="multiple">
|
||||
target[elem.name] = Array.from(elem.selectedOptions).map(({ value }) => value).toString();
|
||||
} else {
|
||||
target[elem.name] = elem.value;
|
||||
}
|
||||
});
|
||||
|
||||
return this;
|
||||
|
||||
@@ -123,11 +123,9 @@
|
||||
<span data-bind="text: statusInfo.loadavg"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-bind="visible: statusInfo.delayed_decoder() > 5 || statusInfo.delayed_assembler() > 5">
|
||||
<div class="row" data-bind="visible: statusInfo.delayed_assembler() > 5">
|
||||
<div class="col-sm-6">$T('dashboard-delayed') </div>
|
||||
<div class="col-sm-6">
|
||||
<span data-bind="visible: statusInfo.delayed_decoder() > 5">$T('dashboard-delayed-cpu')</span>
|
||||
<small data-bind="visible: statusInfo.delayed_decoder() > 5">(<span data-bind="text: statusInfo.delayed_decoder"></span>x)</small>
|
||||
<span data-bind="visible: statusInfo.delayed_assembler() > 5">$T('dashboard-delayed-disk')</span>
|
||||
<small data-bind="visible: statusInfo.delayed_assembler() > 5">(<span data-bind="text: statusInfo.delayed_assembler"></span>x)</small>
|
||||
</div>
|
||||
@@ -456,6 +454,8 @@
|
||||
<div class="form-group form-checkbox">
|
||||
<label class="col-sm-6 control-label">
|
||||
$T("Glitter-keyboardShortcuts")
|
||||
<span class="glyphicon glyphicon-question-sign" data-tooltip="true" data-placement="top" data-html="true"
|
||||
data-original-title="P: $T('link-pause')<br>A: $T('Glitter-addNZB')<br>S: $T('Glitter-statusInterfaceOptions')<br>C: $T('menu-config')<br>$T('Glitter-keyboardShortcuts-arrows')"></span>
|
||||
</label>
|
||||
<div class="col-sm-4">
|
||||
<input type="checkbox" name="keyboardShortcuts" value="true" data-bind="checked: keyboardShortcuts" />
|
||||
|
||||
@@ -62,7 +62,6 @@ function ViewModel() {
|
||||
self.statusInfo.publicipv4 = ko.observable();
|
||||
self.statusInfo.ipv6 = ko.observable();
|
||||
self.statusInfo.dnslookup = ko.observable();
|
||||
self.statusInfo.delayed_decoder = ko.observable();
|
||||
self.statusInfo.delayed_assembler = ko.observable();
|
||||
self.statusInfo.loadavg = ko.observable();
|
||||
self.statusInfo.pystone = ko.observable();
|
||||
@@ -759,7 +758,6 @@ function ViewModel() {
|
||||
// Update basic
|
||||
self.statusInfo.folders(data.status.folders)
|
||||
self.statusInfo.loadavg(data.status.loadavg)
|
||||
self.statusInfo.delayed_decoder(data.status.delayed_decoder)
|
||||
self.statusInfo.delayed_assembler(data.status.delayed_assembler)
|
||||
|
||||
// Update the full set if the data is available
|
||||
|
||||
Binary file not shown.
BIN
osx/unrar/unrar
BIN
osx/unrar/unrar
Binary file not shown.
@@ -5,7 +5,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha1\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Czech (https://www.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Danish (https://www.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: German (https://www.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Finnish (https://www.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: French (https://www.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: ION, 2020\n"
|
||||
"Language-Team: Hebrew (https://www.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Norwegian Bokmål (https://www.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Dutch (https://www.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Polish (https://www.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Romanian (https://www.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Russian (https://www.transifex.com/sabnzbd/teams/111101/ru/)\n"
|
||||
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Serbian (https://www.transifex.com/sabnzbd/teams/111101/sr/)\n"
|
||||
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Swedish (https://www.transifex.com/sabnzbd/teams/111101/sv/)\n"
|
||||
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Chinese (China) (https://www.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
|
||||
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha1\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
@@ -134,11 +134,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -721,6 +716,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr ""
|
||||
@@ -1739,32 +1746,32 @@ msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2044,10 +2051,6 @@ msgstr ""
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr ""
|
||||
@@ -2332,10 +2335,6 @@ msgstr ""
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2750,6 +2749,10 @@ msgstr ""
|
||||
msgid "Location to store finished, fully processed downloads.<br /><i>Can be overruled by user-defined categories.</i>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3450,6 +3453,10 @@ msgstr ""
|
||||
msgid "Force Download"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -3804,20 +3811,6 @@ msgstr ""
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr ""
|
||||
@@ -3826,23 +3819,10 @@ msgstr ""
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr ""
|
||||
@@ -3859,26 +3839,6 @@ msgstr ""
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
@@ -3927,10 +3887,6 @@ msgstr ""
|
||||
msgid "Episode_Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr ""
|
||||
@@ -3972,7 +3928,15 @@ msgid "Sort String"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3983,25 +3947,12 @@ msgstr ""
|
||||
msgid "No folders"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
@@ -4033,6 +3984,58 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "<p>Use Sorters to automatically organize your completed downloads. For example, put all episodes from a series in a season-specific folder. Or, put movies in a folder named after the movie.</p><p>Sorters are tried in order of appearance and can be reordered by dragging and dropping.<br/>The first active sorter that matches both the affected category and job type is applied.</p><p>More options are available when Advanced Settings is checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Move and rename all episodes in the \"tv\" category to a show-specific folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Move and rename all movies in the \"movies\" category to a movie-specific folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rarely used options. For their meaning and explanation, click on the Help button to go to the Wiki page.<br>Don't change these without checking the Wiki first, as some have serious side-effects.<br>The default values are between parentheses."
|
||||
msgstr ""
|
||||
@@ -4260,6 +4263,10 @@ msgstr ""
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr ""
|
||||
@@ -4424,7 +4431,7 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
|
||||
201
po/main/cs.po
201
po/main/cs.po
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Czech (https://www.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -151,11 +151,6 @@ msgstr "Restartuji protože postprocessor selhal"
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr "Restartuji protože selhal downloader"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr "Restartuji protože selhal decoder"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -775,6 +770,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Python skript \"%s\" nemá nastaveno právo spuštění (+x)"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Běžící skript"
|
||||
@@ -1813,32 +1820,32 @@ msgstr "Odstranit dokončené úkoly"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Pozastavit úkoly s nízkou prioritou"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Pozastavit úkoly s normální prioritou"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Pozastavit úkoly s vysokou prioritou"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Obnovit úkoly s vysokou prioritou"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2118,10 +2125,6 @@ msgstr "Speciální"
|
||||
msgid "Search"
|
||||
msgstr "Vyhledávání"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr ""
|
||||
@@ -2408,10 +2411,6 @@ msgstr "DNS server / DNS dotazy"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2873,6 +2872,11 @@ msgid ""
|
||||
"overruled by user-defined categories.</i>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3629,6 +3633,10 @@ msgstr ""
|
||||
msgid "Force Download"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -3991,20 +3999,6 @@ msgstr ""
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr ""
|
||||
@@ -4013,23 +4007,10 @@ msgstr ""
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr ""
|
||||
@@ -4046,26 +4027,6 @@ msgstr ""
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
@@ -4114,10 +4075,6 @@ msgstr ""
|
||||
msgid "Episode_Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr ""
|
||||
@@ -4159,7 +4116,15 @@ msgid "Sort String"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4170,25 +4135,12 @@ msgstr ""
|
||||
msgid "No folders"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
@@ -4220,6 +4172,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4453,6 +4468,10 @@ msgstr ""
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr ""
|
||||
@@ -4621,8 +4640,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Nezdařilo se přejmenovat: %s na %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
207
po/main/da.po
207
po/main/da.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Danish (https://www.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -151,11 +151,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -780,6 +775,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Python script \"%s\" har ikke udfør (+x) tilladelsessæt"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Serie sortering"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Dato sortering"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film sortering"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Køre script"
|
||||
@@ -1844,32 +1851,32 @@ msgstr "Fjern fuldførte job"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Pause lav prioritets jobs"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Pause normal prioritets jobs"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Pause høj prioritets jobs"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Genoptag lav prioritets jobs"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Genoptag normal prioritets jobs"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Genoptag høj prioritets jobs"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2149,10 +2156,6 @@ msgstr "Speciel"
|
||||
msgid "Search"
|
||||
msgstr "Søg"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Download mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Er du sikker på du vil lukke SABnzbd?"
|
||||
@@ -2439,10 +2442,6 @@ msgstr "Nameserver/DNS Lookup"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2930,6 +2929,11 @@ msgstr ""
|
||||
"Sted at opbevare færdige, fuldt forarbejdede downloads.<br /><i>Kan "
|
||||
"tilsidesættes af bruger-definerede kategorier.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3724,6 +3728,10 @@ msgstr "Læs Feed"
|
||||
msgid "Force Download"
|
||||
msgstr "Gennemtving download"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Anvend filtre"
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4092,20 +4100,6 @@ msgstr "Mappe/Søgesti"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr "Indekseringen kategorier/grupper"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Serie sortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Aktivere TV sortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Hjælp til Sorteringsstræng"
|
||||
@@ -4114,23 +4108,10 @@ msgstr "Hjælp til Sorteringsstræng"
|
||||
msgid "Clear"
|
||||
msgstr "Ryd"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Anvend filtre"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Forudindstillinger"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film sortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Aktivere filmsortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Påvirkede Kategorier"
|
||||
@@ -4147,26 +4128,6 @@ msgstr "Mønster"
|
||||
msgid "Result"
|
||||
msgstr "Resultat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Sæsonmappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Sæsonmappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Episodemappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episodemappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Job Navn som Filnavn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
@@ -4215,10 +4176,6 @@ msgstr "Episode.Navn"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Episode_Navn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Filtype"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Endelse"
|
||||
@@ -4260,8 +4217,16 @@ msgid "Sort String"
|
||||
msgstr "Sorteringsstreng"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Multi-del etikette"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4271,26 +4236,13 @@ msgstr "I mappe"
|
||||
msgid "No folders"
|
||||
msgstr "Ingen mappe"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Dato sortering"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Job Navn som Filnavn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Aktivere datosortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Vis Navn på mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "År-Måned mapper"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Daglige mapper"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4321,6 +4273,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4560,6 +4575,10 @@ msgstr "Bekræft Historik-fjernelse"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Hvor længe eller indtil hvornår du vil standse? (på engelsk!)"
|
||||
@@ -4734,8 +4753,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Det lykkedes ikke at omdøbe: %s til %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
226
po/main/de.po
226
po/main/de.po
@@ -12,13 +12,14 @@
|
||||
# Nils Briggen, 2022
|
||||
# reloxx13 <reloxx@interia.pl>, 2022
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
# kameb, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: German (https://www.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
"Last-Translator: kameb, 2023\n"
|
||||
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -166,11 +167,6 @@ msgstr "Neustart aufgrund eines abgestürzten Nachbearbeitungsprozesses"
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr "Neustart aufgrund eines abgestürzten Downloaders"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr "Neustart aufgrund eines abgestürzten Decoders"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -481,6 +477,8 @@ msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgstr ""
|
||||
"Von zu vielen unteschiedlichen IP Adressen beim Server eingeloggt %s[%s] "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
@@ -822,6 +820,18 @@ msgstr "[%s] Der Befehl in build_command ist nicht definiert."
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Dem Pythonskript \"%s\" fehlen die Ausführungsrechte (+x)"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortieren von TV-Serien"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortieren nach Datum"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film Sortierung"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Ausführen des Skripts"
|
||||
@@ -1908,32 +1918,32 @@ msgstr "Abgeschlossene Aufträge entfernen"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Aufträge mit niedriger Priorität pausieren"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Aufträge mit normaler Priorität pausieren"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Aufträge mit hoher Priorität pausieren"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Aufträge mit niedriger Priorität fortsetzen"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Aufträge mit normaler Priorität fortsetzen"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Aufträge mit hoher Priorität fortsetzen"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2213,10 +2223,6 @@ msgstr "Spezial"
|
||||
msgid "Search"
|
||||
msgstr "Suchen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Downloads"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Möchten Sie SABnzbd wirklich beenden?"
|
||||
@@ -2506,10 +2512,6 @@ msgstr "DNS-Server"
|
||||
msgid "Download speed limited by"
|
||||
msgstr "Downloadgeschwindigkeit begrenzt durch"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr "Festplattengeschwindigkeit"
|
||||
@@ -3030,6 +3032,11 @@ msgstr ""
|
||||
"Hier werden fertige, verarbeitete Downloads abgelegt.<br /><i>Kann von "
|
||||
"benutzerdefinierten Kategorien ausser Kraft gesetzt werden.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr "Benutze Sortieren um deine Dateien zu orgenisieren und umzubennenen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr "Minimaler freier Speicherplatz des abgeschlossene Downloads-Ordners"
|
||||
@@ -3120,7 +3127,7 @@ msgstr "System-Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Hidden Folders"
|
||||
msgstr ""
|
||||
msgstr "Versteckte Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Administrative Folder"
|
||||
@@ -3874,6 +3881,10 @@ msgstr "Feed lesen"
|
||||
msgid "Force Download"
|
||||
msgstr "Download erzwingen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Filter übernehmen"
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4249,20 +4260,6 @@ msgstr "Ordner/Pfad"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr "Indexer Kategorien/Gruppen"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr "Wähle mindestens 1 Kategorie"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortieren von TV-Serien"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "TV-Sortierung aktivieren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Muster-Schlüssel"
|
||||
@@ -4271,23 +4268,10 @@ msgstr "Muster-Schlüssel"
|
||||
msgid "Clear"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Filter übernehmen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Voreinstellungen"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film Sortierung"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Film-Sortierung aktivieren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Betroffene Kategorien"
|
||||
@@ -4304,26 +4288,6 @@ msgstr "Muster"
|
||||
msgid "Result"
|
||||
msgstr "Resultat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Staffel-Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Staffel-Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Episoden-Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episoden-Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Aufgabe Name als Ordnername"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
@@ -4372,10 +4336,6 @@ msgstr "Episoden.Name"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Episoden_Name"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Dateiendung"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Endung"
|
||||
@@ -4417,8 +4377,16 @@ msgid "Sort String"
|
||||
msgstr "Sortieranweisung"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Markierung für mehrere Teile"
|
||||
msgid "Multi-part Label"
|
||||
msgstr "Multi-part Kennzeichnung"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr "Zeige Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr "Staffelordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4428,26 +4396,13 @@ msgstr "In Ordnern"
|
||||
msgid "No folders"
|
||||
msgstr "Keine Ordner"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortieren nach Datum"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Aufgabe Name als Ordnername"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Sortieren nach Datum aktivieren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Ordner mit Name der Sendung"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Jahr-Monat-Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Tägliche Ordner"
|
||||
msgid "Series"
|
||||
msgstr "Serien"
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4478,6 +4433,81 @@ msgstr "GuessIt.Eigenschaft"
|
||||
msgid "GuessIt_Property"
|
||||
msgstr "GuessIt_Eigenschaft"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr "Minimale Dateigröße"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr "Betroffener Aufgabentyp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr "Serien mit Ausstrahlungsdatum"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr "Filme"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr "Andere / Unbekannte"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
"<p>Benutze die Sortierer, um deine fertigen Downloads zu orgenisieren. Zum "
|
||||
"Beispiel verschiebe alle Seriendateien in den Serien eigenen Ordner oder "
|
||||
"Verschiege alle Filme in den Filme eigenen Ordner.</p><p>Die Sortierer "
|
||||
"werden der Reihe nach bearbeitet und könne durch ziehen und ablegen "
|
||||
"umsortiert werden.<br/>Der erste Aktive Sortierer der sowohl zur Kategorie "
|
||||
"als auch zum Aufgabentyp passt wird angewendet.</p><p>Wenn erweiterte "
|
||||
"Einstellungen aktiviert sind, sind noch mehr Einstellungen möglich.<br/> "
|
||||
"Weitere informationen sind in der WIki zu finden.</p>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr "Sortierer hinzufügen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr "Sortierer entfernen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr "Testdaten"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr "Schnellstart"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
"Bennene alle Episodendateien in der Kategorie \"tv\" um und veschiebe sie in"
|
||||
" den Serien eigenen Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
"Bennene alle Filmdateien in der Kategorie \"filme\" um und veschiebe sie in "
|
||||
"den Filme eigenen Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4717,6 +4747,10 @@ msgstr "Löschen von Verlaufeinträgen bestätigen"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Tastaturkürzel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Wie lange oder bis wann möchtest du pausieren? (in Englisch!)"
|
||||
@@ -4893,8 +4927,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Umbenennen von %s nach %s fehlgeschlagen."
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr "Fehler beim umbennenen von %s nach %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
207
po/main/es.po
207
po/main/es.po
@@ -9,10 +9,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -160,11 +160,6 @@ msgstr "Reiniciando a causa de un posprocesador colgado"
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr "Reiniciando debido al cuelgue del descargador"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr "Reiniciando a causa de un decodificador colgado"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -809,6 +804,18 @@ msgstr ""
|
||||
"La secuencia de comandos Python \"%s\" no tiene configurado el permiso de "
|
||||
"ejecutar (+x)"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Ordenación de Series"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Ordenar por fecha"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Clasificación de películas"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Ejecutando script"
|
||||
@@ -1900,32 +1907,32 @@ msgstr "Eliminar trabajos completados"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Pausar trabajos de prioridad baja"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Pausar trabajos de prioridad normal"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Pausar trabajos de prioridad alta"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Reanudar trabajos de prioridad baja"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Reanudar trabajos de prioridad normal"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Reanudar trabajos de prioridad alta"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2205,10 +2212,6 @@ msgstr "Especial"
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Dir de Descarga"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "¿Seguro que deseas detener SABnzbd?"
|
||||
@@ -2498,10 +2501,6 @@ msgstr "Nombre del servidor / Búsqueda de DNS"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -3009,6 +3008,11 @@ msgstr ""
|
||||
"Ubicación donde guardar descargas finalizadas, totalmente procesaddas.<br "
|
||||
"/><i>Puede ser obviado debido a categorías definidas por el usuario.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3825,6 +3829,10 @@ msgstr "Leer Fuente"
|
||||
msgid "Force Download"
|
||||
msgstr "Forzar Descarga"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Aplicar filtros"
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4197,20 +4205,6 @@ msgstr "Directorio/Ruta"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr "Categorías Indexer / Grupos"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Ordenación de Series"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Habilitar la ordenación de Series de TV"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Patrón"
|
||||
@@ -4219,23 +4213,10 @@ msgstr "Patrón"
|
||||
msgid "Clear"
|
||||
msgstr "Limpiar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Aplicar filtros"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Preajustes"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Clasificación de películas"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Habilitar Ordenado de Películas"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Categorías Afectadas"
|
||||
@@ -4252,26 +4233,6 @@ msgstr "Patrón"
|
||||
msgid "Result"
|
||||
msgstr "Resultado"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Temporada Directorio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Temporada Directorio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Episodio Directorio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episodio Directorio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Nombre de la tarea para el nombre de archivo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
@@ -4320,10 +4281,6 @@ msgstr "Nombre.capítulo"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Nombre_capítulo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Extensión de archivo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Extensión"
|
||||
@@ -4365,8 +4322,16 @@ msgid "Sort String"
|
||||
msgstr "Ordenar cadena"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Etiqueta"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4376,26 +4341,13 @@ msgstr "En directorios"
|
||||
msgid "No folders"
|
||||
msgstr "Sin Directorios"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Ordenar por fecha"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Nombre de la tarea para el nombre de archivo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Habilitar ordenar por fecha"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Carpeta de la serie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Directorios Año-Mes"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Directorios diarios"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4426,6 +4378,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4667,6 +4682,10 @@ msgstr "Confirmar eliminación del historial"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "¿Durante cuánto tiempo quieres dejarlo pausado?"
|
||||
@@ -4844,8 +4863,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Error al renombrar: %s a %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
211
po/main/fi.po
211
po/main/fi.po
@@ -3,14 +3,14 @@
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2022
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2022\n"
|
||||
"Language-Team: Finnish (https://www.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -153,11 +153,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -777,6 +772,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sarjojen lajittelu"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Päivämäärän lajittelu"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Ajetaan skripti"
|
||||
@@ -1838,32 +1845,32 @@ msgstr "Poista valmistuneet lataukset"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Keskeytä alhaisen prioriteetin lataukset"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Keskeytä normaalin prioriteetin lataukset"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Keskeytä korkean prioriteetin lataukset"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Jatka alhaisen prioriteetin lataukset"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Jatka normaalin prioriteetin lataukset"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Jatka korkean prioriteetin lataukset"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2143,10 +2150,6 @@ msgstr "Erikoisasetukset"
|
||||
msgid "Search"
|
||||
msgstr "Etsi"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Lataukset-kansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Oletko varma, että haluat sammuttaa SABnzbdn?"
|
||||
@@ -2433,10 +2436,6 @@ msgstr "Nimipalvelin / DNS-selvitys"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2933,6 +2932,11 @@ msgstr ""
|
||||
"Sijainti jonne tallennetaan valmistuneet ja täysin käsitellyt ladatut "
|
||||
"kohteet.<br /><i>Käyttäjän asettamat kategoriat voivat kumota tämän.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3726,6 +3730,10 @@ msgstr "Lue syöte"
|
||||
msgid "Force Download"
|
||||
msgstr "Pakota lataus"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4094,20 +4102,6 @@ msgstr "Kansio/Polku"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr "Indeksoijan kategoriat / ryhmä"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sarjojen lajittelu"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "TV lajittelu käytössä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Mallin avain"
|
||||
@@ -4116,23 +4110,10 @@ msgstr "Mallin avain"
|
||||
msgid "Clear"
|
||||
msgstr "Tyhjennä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Esiasetukset"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Elokuvien lajittelu käytössä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Kategoriat joita koskee"
|
||||
@@ -4149,26 +4130,6 @@ msgstr "Malli"
|
||||
msgid "Result"
|
||||
msgstr "Tulos"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Tuotantokausi kansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Tuotantokausi kansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Jakso kansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Jakso kansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Nimi"
|
||||
@@ -4217,10 +4178,6 @@ msgstr "Jakson.nimi"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Jakson_nimi"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Tiedostotunniste"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Tunniste"
|
||||
@@ -4262,8 +4219,16 @@ msgid "Sort String"
|
||||
msgstr "Lajittelumerkkijono"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Moniosainen selite"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4273,26 +4238,13 @@ msgstr "Kansioissa"
|
||||
msgid "No folders"
|
||||
msgstr "Ei kansioita"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Päivämäärän lajittelu"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Päivämäärän lajittelu käytössä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Ohjelman nimi kansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Vuosittaiset-Kuukausittaiset kansiot"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Päivittäiset kansiot"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4323,6 +4275,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Kaikki"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4565,6 +4580,10 @@ msgstr "Varmista historian poistot"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Kuinka pitkään tai mihin asti haluat keskeyttää? (englanniksi!)"
|
||||
@@ -4740,8 +4759,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Virhe uudelleennimettäessä: %s %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
224
po/main/fr.po
224
po/main/fr.po
@@ -3,15 +3,15 @@
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Fred L <88com88@gmail.com>, 2023
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
# Fred L <88com88@gmail.com>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: French (https://www.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
"Last-Translator: Fred L <88com88@gmail.com>, 2023\n"
|
||||
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -162,11 +162,6 @@ msgstr "Redémarrage suite au plantage du postprocesseur"
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr "Redémarrage suite au plantage du téléchargeur"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr "Redémarrage suite au plantage du décodeur"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -821,6 +816,18 @@ msgstr ""
|
||||
"Le script Python \"%s\" n'est pas configuré avec les permissions d’exécution"
|
||||
" (+x)"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Tri des séries"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Tri par date"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Tri des films"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Exécution du script"
|
||||
@@ -1903,32 +1910,32 @@ msgstr "Effacer les tâches terminées"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Mettre en pause les tâches de priorité faible"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Mettre en pause les tâches de priorité normale"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Mettre en pause les tâches de priorité haute"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Reprendre les tâches de priorité faible"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Reprendre les tâches de priorité normale"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Reprendre les tâches de priorité haute"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2208,10 +2215,6 @@ msgstr "Spécial"
|
||||
msgid "Search"
|
||||
msgstr "Rechercher"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Dossier de téléchargement"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Etes-vous sûr de vouloir arrêter SABnzbd ?"
|
||||
@@ -2501,10 +2504,6 @@ msgstr "Nameserver / DNS Lookup"
|
||||
msgid "Download speed limited by"
|
||||
msgstr "Vitesse de téléchargement limitée par"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr "processeur"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr "Vitesse du disque"
|
||||
@@ -3025,6 +3024,13 @@ msgstr ""
|
||||
"Emplacement des téléchargements terminés et post-traités.<br /><i>Peut être "
|
||||
"outrepassé par les catégories définies par l'utilisateur.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
"Utilisez le tri pour organiser et renommer automatiquement vos "
|
||||
"téléchargements terminés."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr "Espace libre minimum pour le dossier des téléchargements terminés"
|
||||
@@ -3869,6 +3875,10 @@ msgstr "Lire le flux RSS"
|
||||
msgid "Force Download"
|
||||
msgstr "Forcer le téléchargement"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Appliquer les filtres"
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4244,20 +4254,6 @@ msgstr "Dossier/Chemin"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr "Catégories de l'indexeur / Groupes"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr "Sélectionnez au moins une catégorie."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Tri des séries"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Activer le tri TV"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Modèle de clé"
|
||||
@@ -4266,23 +4262,10 @@ msgstr "Modèle de clé"
|
||||
msgid "Clear"
|
||||
msgstr "Effacer"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Appliquer les filtres"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Modèles prédéfinis"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Tri des films"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Activer le tri des films"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Catégories affectées"
|
||||
@@ -4299,26 +4282,6 @@ msgstr "Modèle"
|
||||
msgid "Result"
|
||||
msgstr "Résultat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Dossier Saison"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Dossier Saison"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Dossier Épisode"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Dossier Épisode"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Nom de la tâche en tant que nom de fichier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titre"
|
||||
@@ -4367,10 +4330,6 @@ msgstr "Nom.Épisode"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Nom_Épisode"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Extension du fichier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Extension"
|
||||
@@ -4412,9 +4371,17 @@ msgid "Sort String"
|
||||
msgstr "Chaîne de caractères de tri"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgid "Multi-part Label"
|
||||
msgstr "Étiquette multi-bloc"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr "Afficher le dossier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr "Dossier de la saison"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
msgstr "Dans les dossiers"
|
||||
@@ -4423,26 +4390,13 @@ msgstr "Dans les dossiers"
|
||||
msgid "No folders"
|
||||
msgstr "Pas de dossiers"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Tri par date"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Nom de la tâche en tant que nom de fichier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Activer le tri par date"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Dossier du nom de série"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Dossiers Année-Mois"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Dossiers Quotidiens"
|
||||
msgid "Series"
|
||||
msgstr "Séries"
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4473,6 +4427,82 @@ msgstr "Attribut.Guessit"
|
||||
msgid "GuessIt_Property"
|
||||
msgstr "Attribut_Guessit"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr "Taille minimale du fichier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr "Types de tâche concernée"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Tous"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr "Séries avec dates de diffusion"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr "Films"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr "Autre / Inconnu"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
"<p>Utilisez les trieurs pour organiser automatiquement vos téléchargements "
|
||||
"terminés. Par exemple, placez tous les épisodes d'une série dans un dossier "
|
||||
"spécifique à la saison. Ou encore, placez les films dans un dossier portant "
|
||||
"le nom du film.</p><p>Les trieurs sont essayés par ordre d'apparition et "
|
||||
"peuvent être réorganisés par glisser-déposer.<br/>Le premier trieur actif "
|
||||
"qui correspond à la fois à la catégorie et au type de tâche concernée est "
|
||||
"appliqué.</p><p>D'autres options sont disponibles lorsque l'option "
|
||||
"Paramètres avancés est cochée.<br/>Des informations détaillées sont "
|
||||
"disponibles sur le Wiki.</p>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr "Ajouter un trieur"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr "Supprimer le trieur"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr "Données de test"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr "Démarrage rapide"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
"Déplacer et renommer tous les épisodes de la catégorie \"tv\" vers un "
|
||||
"dossier de série spécifique"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
"Déplacer et renommer tous les films de la catégorie \"films\" vers un "
|
||||
"dossier de film spécifique"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4715,6 +4745,10 @@ msgstr "Confirmer les suppressions de l'historique"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Raccourcis clavier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Combien de temps ou jusqu'à quand souhaitez-vous mettre en pause ?"
|
||||
@@ -4892,8 +4926,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Échec du renommage : %s en %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr "Échec du renommage de %s en %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
207
po/main/he.po
207
po/main/he.po
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Hebrew (https://www.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -150,11 +150,6 @@ msgstr "מפעיל מחדש בגלל בתר־מעבד שקרס"
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr "מפעיל מחדש בגלל מורידן שקרס"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr "מפעיל מחדש בגלל מפענח קוד שקרס"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -779,6 +774,18 @@ msgstr "[%s] הפקודה ב־build_command אינה מוגדרת."
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "לתסריט פייתון \"%s\" אין ערכת הרשאות ביצוע (+x)"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "מיון סדרות"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "מיון תאריכים"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "מיון סרטים"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "מריץ תסריט"
|
||||
@@ -1845,32 +1852,32 @@ msgstr "הסר עבודות נשלמות"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "השהה עבודות עם עדיפות נמוכה"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "השהה עבודות עם עדיפות רגילה"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "השהה עבודות עם עדיפות גבוהה"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "המשך עבודות עם עדיפות נמוכה"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "המשך עבודות עם עדיפות רגילה"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "המשך עבודות עם עדיפות גבוהה"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2150,10 +2157,6 @@ msgstr "מיוחד"
|
||||
msgid "Search"
|
||||
msgstr "חיפוש"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "תיקיית הורדות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "האם אתה בטוח שאתה רוצה לכבות את SABnzbd?"
|
||||
@@ -2442,10 +2445,6 @@ msgstr "שם שרת / חיפוש DNS"
|
||||
msgid "Download speed limited by"
|
||||
msgstr "מהירות הורדה מוגבלת ע״י"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr "יע״מ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr "מהירות דיסק"
|
||||
@@ -2938,6 +2937,11 @@ msgstr ""
|
||||
"מיקום לאחסון הורדות שהסתיימו, מעבודות במלואן.<br /><i>ניתן להשתלטות ע״י "
|
||||
"קטגוריות מוגדרות־משתמש.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr "שטח פנוי מזערי עבור תיקיית הורדות שלמות"
|
||||
@@ -3732,6 +3736,10 @@ msgstr "קרא הזנה"
|
||||
msgid "Force Download"
|
||||
msgstr "אלץ הורדה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "החל מסננים"
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4100,20 +4108,6 @@ msgstr "תיקייה/נתיב"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr "קטגוריות / קבוצות של מדדן"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr "בחר קטגוריה 1 לפחות."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "מיון סדרות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "אפשר מיון טלוויזיה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "מפתח דפוס"
|
||||
@@ -4122,23 +4116,10 @@ msgstr "מפתח דפוס"
|
||||
msgid "Clear"
|
||||
msgstr "נקה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "החל מסננים"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "קדם־קביעות"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "מיון סרטים"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "אפשר מיון סרטים"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "קטגוריות מושפעות"
|
||||
@@ -4155,26 +4136,6 @@ msgstr "דפוס"
|
||||
msgid "Result"
|
||||
msgstr "תוצאה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "תיקיית עונה 1x05"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "תיקיית עונה S01E05"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "תיקיית פרק 1x05"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "תיקיית פרק S01E05"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "שם עבודה בתור שם קובץ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "כותר"
|
||||
@@ -4223,10 +4184,6 @@ msgstr "שם.פרק"
|
||||
msgid "Episode_Name"
|
||||
msgstr "שם_פרק"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "סיומת קובץ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "סיומת"
|
||||
@@ -4268,8 +4225,16 @@ msgid "Sort String"
|
||||
msgstr "מחרוזת מיון"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "תווית מרובת־חלקים"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4279,26 +4244,13 @@ msgstr "בתיקיות"
|
||||
msgid "No folders"
|
||||
msgstr "אין תיקיות"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "מיון תאריכים"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "שם עבודה בתור שם קובץ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "אפשר מיון תאריכים"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "הראה שם תיקייה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "תיקיות שנה־חודש"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "תיקיות יומיות"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4329,6 +4281,69 @@ msgstr "GuessIt.Property"
|
||||
msgid "GuessIt_Property"
|
||||
msgstr "GuessIt_Property"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "הכל"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4567,6 +4582,10 @@ msgstr "אשר מחיקות היסטוריה"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "קיצורי דרך במקלדת"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "כמה זמן או עד מתי תרצה להשהות? (באנגלית!)"
|
||||
@@ -4743,8 +4762,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "נכשל בשינוי שם: %s אל %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
207
po/main/nb.po
207
po/main/nb.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Norwegian Bokmål (https://www.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -149,11 +149,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -772,6 +767,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Seriesortering"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Dato sortering"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Kjører skript"
|
||||
@@ -1834,32 +1841,32 @@ msgstr "Fjern ferdige jobber"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Pause jobber med lav prioritet"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Pause jobber med normal prioritet"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Pause jobber med høy prioritet"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Gjenoppta jobber med lav prioritet"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Gjenoppta jobber med normal prioritet"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Gjenoppta jobber med høy prioritet"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2139,10 +2146,6 @@ msgstr "Spesiell"
|
||||
msgid "Search"
|
||||
msgstr "Søk"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Midlertidig nedlastingsmappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Er sikker på at du vil slå av SABnzbd?"
|
||||
@@ -2429,10 +2432,6 @@ msgstr "Navnserver / DNS oppslag"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2918,6 +2917,11 @@ msgstr ""
|
||||
"Plass for å lagre bearbeidede og ferdige nedlastinger.<br /><i>Kan "
|
||||
"overstyres av brukerdefinerte kategorier.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3701,6 +3705,10 @@ msgstr "Les kilde"
|
||||
msgid "Force Download"
|
||||
msgstr "Tving nedlasting"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4065,20 +4073,6 @@ msgstr "Mappe/Søkesti"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Seriesortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Aktiverer TV sortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Hjelp til Sorteringsstreng"
|
||||
@@ -4087,23 +4081,10 @@ msgstr "Hjelp til Sorteringsstreng"
|
||||
msgid "Clear"
|
||||
msgstr "Rens"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "For innstillinger"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Aktiver filmsortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Påvirkede kategorier"
|
||||
@@ -4120,26 +4101,6 @@ msgstr "Mønster"
|
||||
msgid "Result"
|
||||
msgstr "Resultat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Sesongmappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Sesongmappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Episodemappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episodemappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Tittel"
|
||||
@@ -4188,10 +4149,6 @@ msgstr "Episode.Navn"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Episode_Navn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Filendelse"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "endelse"
|
||||
@@ -4233,8 +4190,16 @@ msgid "Sort String"
|
||||
msgstr "Sorteringsstreng"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Multi-del etikett"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4244,26 +4209,13 @@ msgstr "I mappe"
|
||||
msgid "No folders"
|
||||
msgstr "Ingen mappe"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Dato sortering"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Aktiver datosortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Vis Navn på mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "År-Måneds mapper"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Daglige mapper"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4294,6 +4246,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4532,6 +4547,10 @@ msgstr "Bekreft Sletting av Historie"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Hvor lenge ønsker du å pause? (skriv på engelsk!)"
|
||||
@@ -4708,8 +4727,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Kunne ikke endre navn fra: %s til %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
207
po/main/nl.po
207
po/main/nl.po
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Dutch (https://www.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -156,11 +156,6 @@ msgstr "SABnzbd wordt herstart omdat de postprocessor is gecrasht"
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr "SABnzbd wordt herstart omdat de downloader is gecrasht"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr "SABnzbd wordt herstart omdat de decoder is gecrasht"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -812,6 +807,18 @@ msgstr "[%s] Het commando in build_command is ongedefinieerd"
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Python-script '%s' heeft geen uitvoerpermissie (+x)"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Serie sorteren"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Datum sorteren"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film sorteren"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Script uitvoeren"
|
||||
@@ -1884,32 +1891,32 @@ msgstr "Verwijder voltooide downloads"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Pauzeer downloads met prioriteit \"Laag\""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Pauzeer downloads met prioriteit \"Normaal\""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Pauzeer downloads met prioriteit \"Hoog\""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Hervat downloads met prioriteit \"Laag\""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Hervat downloads met prioriteit \"Normaal\""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Hervat downloads met prioriteit \"Hoog\""
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2189,10 +2196,6 @@ msgstr "Speciaal"
|
||||
msgid "Search"
|
||||
msgstr "Zoeken"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Map voor verwerkte downloads"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Weet je zeker dat je SABnzbd wilt afsluiten?"
|
||||
@@ -2481,10 +2484,6 @@ msgstr "Nameserver / DNS opzoeken"
|
||||
msgid "Download speed limited by"
|
||||
msgstr "Downloadsnelheid beperkt door"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr "Processor"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr "Hardeschijf"
|
||||
@@ -2993,6 +2992,11 @@ msgid ""
|
||||
"overruled by user-defined categories.</i>"
|
||||
msgstr "(kan aangepast worden door de categorieën)."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr "Minimale vrije ruimte voor verwerkte downloads map"
|
||||
@@ -3827,6 +3831,10 @@ msgstr "Uitlezen"
|
||||
msgid "Force Download"
|
||||
msgstr "Forceer download"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Filters toepassen"
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4201,20 +4209,6 @@ msgstr "Map/Pad"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr "Indexer Categorieën / Groepen"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr "Selecteer minstens 1 categorie."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Serie sorteren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Serie sorteren aan"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Uitleg"
|
||||
@@ -4223,23 +4217,10 @@ msgstr "Uitleg"
|
||||
msgid "Clear"
|
||||
msgstr "Wissen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Filters toepassen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Standaardinstellingen"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film sorteren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Film sorteren aan"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Beïnvloede categorieën"
|
||||
@@ -4256,26 +4237,6 @@ msgstr "Patroon"
|
||||
msgid "Result"
|
||||
msgstr "Resultaat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Seizoensmappen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Seizoensmap"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Aflevering-map"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Aflevering-map"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Downloadnaam als Bestandsnaam"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
@@ -4324,10 +4285,6 @@ msgstr "Aflevering.Naam"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Aflevering_Naam"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Bestandsextensie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Extensie"
|
||||
@@ -4369,8 +4326,16 @@ msgid "Sort String"
|
||||
msgstr "Sorteertekst"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Meervoudig label"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4380,26 +4345,13 @@ msgstr "In mappen"
|
||||
msgid "No folders"
|
||||
msgstr "Geen mappen"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Datum sorteren"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Downloadnaam als Bestandsnaam"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Datum sorteren aan"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Toon Naam map"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Jaar-Maand Mappen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Dagelijkse Mappen"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4430,6 +4382,69 @@ msgstr "GuessIt.Eigenschap"
|
||||
msgid "GuessIt_Property"
|
||||
msgstr "GuessIt_Eigenschap"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "alles"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4669,6 +4684,10 @@ msgstr "Bevestig verwijderen uit geschiedenis"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Sneltoetsen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Voor hoe lang of tot wanneer wilt u pauzeren? (in het Engels!)"
|
||||
@@ -4845,8 +4864,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Hernoemen van %s tot %s mislukt"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
211
po/main/pl.po
211
po/main/pl.po
@@ -3,14 +3,14 @@
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2022
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2022\n"
|
||||
"Language-Team: Polish (https://www.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -145,11 +145,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -772,6 +767,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortowanie seriali"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortowanie według daty"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Uruchamianie skryptu"
|
||||
@@ -1840,32 +1847,32 @@ msgstr "Usuń ukończone zadania"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Wstrzymaj zadania o niskim priorytecie"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Wstrzymaj zadania o normalnym priorytecie"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Wstrzymaj zadania o wysokim priorytecie"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Wznów zadania o niskim priorytecie"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Wznów zadania o normalnym priorytecie"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Wznów zadania o wysokim priorytecie"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2145,10 +2152,6 @@ msgstr "Specjalne"
|
||||
msgid "Search"
|
||||
msgstr "Szukaj"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Katalog pobierania"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Czy na pewno wyłączyć SABnzbd?"
|
||||
@@ -2435,10 +2438,6 @@ msgstr "Serwer DNS"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2925,6 +2924,11 @@ msgstr ""
|
||||
"Miejsce przechowywania ukończonych, przetworzonych plików. <br /><i>Może "
|
||||
"zostać zmienione przez ustawienia kategorii.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3712,6 +3716,10 @@ msgstr "Pobierz kanał"
|
||||
msgid "Force Download"
|
||||
msgstr "Wymuś pobranie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4076,20 +4084,6 @@ msgstr "Katalog/Ścieżka"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortowanie seriali"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Włącz sortowanie TV"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Zastępowane ciągi"
|
||||
@@ -4098,23 +4092,10 @@ msgstr "Zastępowane ciągi"
|
||||
msgid "Clear"
|
||||
msgstr "Wyczyść"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Predefiniowane"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Włącz sortowanie filmów"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Dotyczy kategorii"
|
||||
@@ -4131,26 +4112,6 @@ msgstr "Ciąg"
|
||||
msgid "Result"
|
||||
msgstr "Wynik"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "Katalog sezonu 1x05"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "Katalog sezonu S01E05"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "Katalog odcinka 1x05"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "Katalog odcinka S01E05"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Tytuł"
|
||||
@@ -4199,10 +4160,6 @@ msgstr "Tytuł.odcinka"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Tytuł_odcinka"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Rozszerzenie pliku"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Rozszerzenie"
|
||||
@@ -4244,8 +4201,16 @@ msgid "Sort String"
|
||||
msgstr "Wzorzec sortowania"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Etykieta wieloczęściowa"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4255,26 +4220,13 @@ msgstr "W katalogach"
|
||||
msgid "No folders"
|
||||
msgstr "Brak katalogów"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortowanie według daty"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Włącz sortowanie według daty"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Katalog z tytułem serialu"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Katalogi rok-miesiąc"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Katalogi dzienne"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4305,6 +4257,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Wszystko"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4543,6 +4558,10 @@ msgstr "Potwierdzaj usuwanie z historii"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Jak długo lub do kiedy chcesz wstrzymać? (po angielsku!)"
|
||||
@@ -4717,8 +4736,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Nie udało się zmienić nazwy %s na %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
211
po/main/pt_BR.po
211
po/main/pt_BR.po
@@ -3,14 +3,14 @@
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2022
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2022\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -149,11 +149,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -776,6 +771,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Ordenação de Séries"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Ordenação por data"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Executando script"
|
||||
@@ -1843,32 +1850,32 @@ msgstr "Remover trabalhos encerrados"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Pausa tarefas de baixa prioridade"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Pausa tarefas de prioridade normal"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Pausa tarefas de alta prioridade"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Continua tarefas de baixa prioridade"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Continua tarefas de prioridade normal"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Continua tarefas de alta prioridade"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2148,10 +2155,6 @@ msgstr "Especial"
|
||||
msgid "Search"
|
||||
msgstr "Busca"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Pasta de Download"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Tem certeza de que quer encerrar o SABnzbd?"
|
||||
@@ -2438,10 +2441,6 @@ msgstr "Nome do servidor / DNS Lookup"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2927,6 +2926,11 @@ msgstr ""
|
||||
"Local para armazenar downloads concluídos, totalmente processados.<br "
|
||||
"/><i>Pode ser anulado por categorias definidas pelo usuário.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3714,6 +3718,10 @@ msgstr "Ler Feed"
|
||||
msgid "Force Download"
|
||||
msgstr "Forçar Download"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4078,20 +4086,6 @@ msgstr "Pasta/Caminho"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Ordenação de Séries"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Ativar a ordenação de TV"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Modelo do padrão"
|
||||
@@ -4100,23 +4094,10 @@ msgstr "Modelo do padrão"
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Predefinições"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Ativar a ordenação de filmes"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Categorias Afetadas"
|
||||
@@ -4133,26 +4114,6 @@ msgstr "Modelo"
|
||||
msgid "Result"
|
||||
msgstr "Resultado"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Pasta Da Temporada"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Pasta Da Temporada"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Pasta Do Episódio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Pasta Do Episódio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
@@ -4201,10 +4162,6 @@ msgstr "Nome.Episódio"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Nome_Episódio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Extensão do arquivo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Extensão"
|
||||
@@ -4246,8 +4203,16 @@ msgid "Sort String"
|
||||
msgstr "String de ordenação"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Rótulo multi-parte"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4257,26 +4222,13 @@ msgstr "Em pastas"
|
||||
msgid "No folders"
|
||||
msgstr "Sem pastas"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Ordenação por data"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Ativar a ordenação por data"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Pasta do Nome do Show"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Pastas Ano-Mês"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Pastas Diárias"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4307,6 +4259,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4545,6 +4560,10 @@ msgstr "Confirmar Exclusões do Histórico"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Por quanto tempo ou até quando você quer pausar? (em Inglês!)"
|
||||
@@ -4719,8 +4738,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Falha ao renomear: %s para %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
207
po/main/ro.po
207
po/main/ro.po
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Romanian (https://www.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -154,11 +154,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -795,6 +790,18 @@ msgstr "[%s] Comanda din build_command este nedefinită."
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Scriptul Python „%s” nu are permisiuni de executare (+x)"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortare Seriale"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortare Dată"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Rulare script"
|
||||
@@ -1870,32 +1877,32 @@ msgstr "Elimină sarcinile finalizate"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Întrerupte sarcinile cu prioritate redusă"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Întrerupe sarcinile cu prioritate normală"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Întrerupe sarcinile cu prioritate ridicată"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Reia sarcinile cu prioritate redusă"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Reia sarcinile cu prioritate normală"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Reia sarcinile cu prioritate ridicată"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2175,10 +2182,6 @@ msgstr "Special"
|
||||
msgid "Search"
|
||||
msgstr "Caută"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Dosar Descărcare"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Sunteţi sigur că doriţi să inchideţi SABnzbd?"
|
||||
@@ -2465,10 +2468,6 @@ msgstr "Server de nume/Căutare DNS"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2954,6 +2953,11 @@ msgstr ""
|
||||
"Locație pentru stocare , a descărcărilor procesate complet.<br /><i>Poate fi"
|
||||
" suprascris de categoriile definite de utilizator.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3743,6 +3747,10 @@ msgstr "Citeşte Flux"
|
||||
msgid "Force Download"
|
||||
msgstr "Descărcare Forţată"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4106,20 +4114,6 @@ msgstr "Dosar/Cale"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortare Seriale"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Activează Sortare TV"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Model Cheie"
|
||||
@@ -4128,23 +4122,10 @@ msgstr "Model Cheie"
|
||||
msgid "Clear"
|
||||
msgstr "Şterge"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Presetări"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Activează Sortare Filme"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Categorii Afectate"
|
||||
@@ -4161,26 +4142,6 @@ msgstr "Șablon"
|
||||
msgid "Result"
|
||||
msgstr "Rezultat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Dosar Sezon"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Dosar Sezon"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Dosar Episod"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Dosar Episod"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titlu"
|
||||
@@ -4229,10 +4190,6 @@ msgstr "Nume.Episod"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Nume_Episod"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Extensie fișier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Extensie"
|
||||
@@ -4274,8 +4231,16 @@ msgid "Sort String"
|
||||
msgstr "Şir Caractere Sortare"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Etichetă Multi-părţi"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4285,26 +4250,13 @@ msgstr "În dosare"
|
||||
msgid "No folders"
|
||||
msgstr "Fără dosare"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortare Dată"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Activează Sortare Dată"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Arată Nume dosar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Dosar An-Lună"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Dosare Zilnice"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4335,6 +4287,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Toate"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4574,6 +4589,10 @@ msgstr "Confirmă Ştergere Istoric"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Cât timp sau până când doriți să întrerupeți? (în Engleză!)"
|
||||
@@ -4749,8 +4768,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Redenumire:%s în %s nereuşită"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
211
po/main/ru.po
211
po/main/ru.po
@@ -3,14 +3,14 @@
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2022
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2022\n"
|
||||
"Language-Team: Russian (https://www.transifex.com/sabnzbd/teams/111101/ru/)\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -149,11 +149,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -774,6 +769,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Сортировка сериалов"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Сортировка даты"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Запуск сценария"
|
||||
@@ -1839,32 +1846,32 @@ msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2144,10 +2151,6 @@ msgstr "Особая"
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Каталог загрузки"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Остановить SABnzbd?"
|
||||
@@ -2434,10 +2437,6 @@ msgstr ""
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2923,6 +2922,11 @@ msgstr ""
|
||||
"Место для сохранения готовых, полностью обработанных загрузок.<br /><i>Можно"
|
||||
" переопределить в пользовательских категориях.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3705,6 +3709,10 @@ msgstr "Прочитать ленту"
|
||||
msgid "Force Download"
|
||||
msgstr "Загрузить принудительно"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4075,20 +4083,6 @@ msgstr "Папка или путь"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Сортировка сериалов"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Использовать сортировку по ТВ-шоу"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Ключи шаблона"
|
||||
@@ -4097,23 +4091,10 @@ msgstr "Ключи шаблона"
|
||||
msgid "Clear"
|
||||
msgstr "Очистить"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Готовые шаблоны"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Использовать сортировку по фильмам"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Задействованные категории"
|
||||
@@ -4130,26 +4111,6 @@ msgstr "Шаблон"
|
||||
msgid "Result"
|
||||
msgstr "Результат"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Сезон Папка"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Сезон Папка"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Эпизод Папка"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Эпизод Папка"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Название"
|
||||
@@ -4198,10 +4159,6 @@ msgstr "Название.эпизода"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Название_эпизода"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Расширение файла"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Расширение"
|
||||
@@ -4243,8 +4200,16 @@ msgid "Sort String"
|
||||
msgstr "Строка сортировки"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Обозначение нескольких частей"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4254,26 +4219,13 @@ msgstr "В папках"
|
||||
msgid "No folders"
|
||||
msgstr "Без папок"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Сортировка даты"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Использовать сортировку по дате"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Папка с названием сериала"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Папки с годом и месяцем"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Папки по дням"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4304,6 +4256,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Все"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4541,6 +4556,10 @@ msgstr "Подтвердите удаление журнала"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr ""
|
||||
@@ -4717,8 +4736,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Не удалось переименовать: %s в %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
211
po/main/sr.po
211
po/main/sr.po
@@ -3,14 +3,14 @@
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2022
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2022\n"
|
||||
"Language-Team: Serbian (https://www.transifex.com/sabnzbd/teams/111101/sr/)\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -147,11 +147,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -769,6 +764,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Сортирање серије"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Сређивање датумом"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Покретање скрипта"
|
||||
@@ -1831,32 +1838,32 @@ msgstr "Ukloni završene poslove"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Pauziraj poslove sa niskim prioritetom"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Pauziraj poslove sa normalnim prioritetom"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Pauziraj poslove sa visokim prioritetom"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Настави радови са ниским приоритетом"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Настави радови са нормалним приоритетом"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Настави радови са високим приоритетом"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2136,10 +2143,6 @@ msgstr "Посебно"
|
||||
msgid "Search"
|
||||
msgstr "Претрага"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Фасцикла преузимања"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Da li ste sigurni da želite ugasiti SABnzbd?"
|
||||
@@ -2426,10 +2429,6 @@ msgstr "Nameserver/DNS Pretraga"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2909,6 +2908,11 @@ msgstr ""
|
||||
"Смештај завршених, процесираних преузимања.<br /><i>Може се заобићи у "
|
||||
"дефинисаним категоријама.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3690,6 +3694,10 @@ msgstr "Читај фид"
|
||||
msgid "Force Download"
|
||||
msgstr "Натерај преузимање"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4053,20 +4061,6 @@ msgstr "Фасцикла/Путања"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Сортирање серије"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Упали сортирање ТВ-а"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Модел кључа"
|
||||
@@ -4075,23 +4069,10 @@ msgstr "Модел кључа"
|
||||
msgid "Clear"
|
||||
msgstr "Очисти"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Предподешавања"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Упали сортирање филма"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Погођене категорије"
|
||||
@@ -4108,26 +4089,6 @@ msgstr "Модел"
|
||||
msgid "Result"
|
||||
msgstr "Резултат"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Фасцикла сезоне"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Фасцикла сезоне"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Фасцикла епизоде"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Фасцикла епизоде"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Наслов"
|
||||
@@ -4176,10 +4137,6 @@ msgstr "Име.Епизоде"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Име_епизоде"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Екстензија датотеке"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Екстензија"
|
||||
@@ -4221,8 +4178,16 @@ msgid "Sort String"
|
||||
msgstr "Уреди низ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Етикете више-партија"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4232,26 +4197,13 @@ msgstr "У фасциклама"
|
||||
msgid "No folders"
|
||||
msgstr "Нема фасцикле"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Сређивање датумом"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Упали сређивање по датуму"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Фасцикла Име Серије"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "Фасцикле Година-Месец"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Дневне фасцикле"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4282,6 +4234,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Све"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4520,6 +4535,10 @@ msgstr "Потврда брисања хронологије"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Koliko dugo ili dokle želite da pauzirate? (na engleskom!)"
|
||||
@@ -4694,8 +4713,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Неуспешно преименовање : %s у %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
211
po/main/sv.po
211
po/main/sv.po
@@ -3,14 +3,14 @@
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2022
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2022\n"
|
||||
"Language-Team: Swedish (https://www.transifex.com/sabnzbd/teams/111101/sv/)\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -147,11 +147,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -771,6 +766,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Seriesortering"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Datum sortering"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Kör skript"
|
||||
@@ -1837,32 +1844,32 @@ msgstr "Ta bort färdiga jobb"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "Pausa lågprioriterade jobb"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "Pausa normalprioriterade jobb"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "Pausa högprioriterade jobb"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "Återuppta lågprioriterade jobb"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "Återuppta normalprioriterade jobb"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "Återuppta högprioriterade jobb"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2142,10 +2149,6 @@ msgstr "Speciell"
|
||||
msgid "Search"
|
||||
msgstr "Sök"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "Temporär nedladdningmapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "Är du säker på att du vill stänga av SABnzbd?"
|
||||
@@ -2432,10 +2435,6 @@ msgstr "Namnserver /DNS Lookup"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2920,6 +2919,11 @@ msgstr ""
|
||||
"Plats för att lagra bearbetade och färdiga nedladdningar.<br /><i>Kan "
|
||||
"åsidosättas av användar-definierade kategorier.</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3703,6 +3707,10 @@ msgstr "Läs flöde"
|
||||
msgid "Force Download"
|
||||
msgstr "Tvinga nedladdning"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4066,20 +4074,6 @@ msgstr "Mapp/Sökväg"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Seriesortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "Aktivera TV sortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "Hjälp till Sorteringssträng"
|
||||
@@ -4088,23 +4082,10 @@ msgstr "Hjälp till Sorteringssträng"
|
||||
msgid "Clear"
|
||||
msgstr "Rensa"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Förinställningar"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "Aktivera filmsortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "Påverkade kategorier"
|
||||
@@ -4121,26 +4102,6 @@ msgstr "Mönster"
|
||||
msgid "Result"
|
||||
msgstr "Resultat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 Säsongsmapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 Säsongsmapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 Episodmapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episodmapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
@@ -4189,10 +4150,6 @@ msgstr "Episod.Namn"
|
||||
msgid "Episode_Name"
|
||||
msgstr "Episod_Namn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "Filändelse"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "Filändelse"
|
||||
@@ -4234,8 +4191,16 @@ msgid "Sort String"
|
||||
msgstr "Sorteringssträng"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "Multi-del etikett"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4245,26 +4210,13 @@ msgstr "In mapp"
|
||||
msgid "No folders"
|
||||
msgstr "Ingen mapp"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "Datum sortering"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "Aktivera datumssortering"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "Visa Namn på mapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "År-Månads mappar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "Dagliga mappar"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4295,6 +4247,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "Alla"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4532,6 +4547,10 @@ msgstr "Bekräfta Historik-borttagningar"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "Hur lång tid eller tills då vill du pausa? (på engelska!)"
|
||||
@@ -4708,8 +4727,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Det gick inte att döpa om: %s till %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
207
po/main/zh_CN.po
207
po/main/zh_CN.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Chinese (China) (https://www.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
|
||||
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -145,11 +145,6 @@ msgstr ""
|
||||
msgid "Restarting because of crashed downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed decoder"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed assembler"
|
||||
@@ -764,6 +759,18 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Python 脚本 \"%s\" 不具有执行 (+x) 权限"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "TV 排序"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "日期排序"
|
||||
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "电影排序"
|
||||
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "正在执行脚本"
|
||||
@@ -1824,32 +1831,32 @@ msgstr "移除已完成任务"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause low prioirty jobs"
|
||||
msgid "Pause low priority jobs"
|
||||
msgstr "暂停低优先级任务"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause normal prioirty jobs"
|
||||
msgid "Pause normal priority jobs"
|
||||
msgstr "暂停常规优先级任务"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause high prioirty jobs"
|
||||
msgid "Pause high priority jobs"
|
||||
msgstr "暂停高优先级任务"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume low prioirty jobs"
|
||||
msgid "Resume low priority jobs"
|
||||
msgstr "继续低优先级任务"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume normal prioirty jobs"
|
||||
msgid "Resume normal priority jobs"
|
||||
msgstr "继续常规优先级任务"
|
||||
|
||||
#. Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Resume high prioirty jobs"
|
||||
msgid "Resume high priority jobs"
|
||||
msgstr "继续高优先级任务"
|
||||
|
||||
#. Config->Scheduler
|
||||
@@ -2129,10 +2136,6 @@ msgstr "特殊"
|
||||
msgid "Search"
|
||||
msgstr "搜索"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download Dir"
|
||||
msgstr "下载目录"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to shutdown SABnzbd?"
|
||||
msgstr "是否确定要关闭 SABnzbd?"
|
||||
@@ -2419,10 +2422,6 @@ msgstr "域名服务器 / DNS 查询"
|
||||
msgid "Download speed limited by"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Disk speed"
|
||||
msgstr ""
|
||||
@@ -2882,6 +2881,11 @@ msgid ""
|
||||
"overruled by user-defined categories.</i>"
|
||||
msgstr "存储完成且已完全处理的下载数据的位置。<br /><i>可以通过用户定义分类额外调整。</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Use Sorting to automatically organize and rename your completed downloads."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Free Space for Completed Download Folder"
|
||||
msgstr ""
|
||||
@@ -3641,6 +3645,10 @@ msgstr "读取 Feed"
|
||||
msgid "Force Download"
|
||||
msgstr "强制下载"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "应用过滤器"
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4005,20 +4013,6 @@ msgstr "文件夹/路径"
|
||||
msgid "Indexer Categories / Groups"
|
||||
msgstr "索引 Categories / Groups"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Select at least 1 category."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "TV 排序"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable TV Sorting"
|
||||
msgstr "启用 TV 排序"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pattern Key"
|
||||
msgstr "匹配符释义"
|
||||
@@ -4027,23 +4021,10 @@ msgstr "匹配符释义"
|
||||
msgid "Clear"
|
||||
msgstr "清除"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "应用过滤器"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "预设"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "电影排序"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Movie Sorting"
|
||||
msgstr "启用电影排序"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Categories"
|
||||
msgstr "影响分类"
|
||||
@@ -4060,26 +4041,6 @@ msgstr "匹配"
|
||||
msgid "Result"
|
||||
msgstr "结果"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Season Folder"
|
||||
msgstr "1x05 季度文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Season Folder"
|
||||
msgstr "S01E05 季度文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "1x05 Episode Folder"
|
||||
msgstr "1x05 剧集文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 剧集文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "标题"
|
||||
@@ -4128,10 +4089,6 @@ msgstr "集.名"
|
||||
msgid "Episode_Name"
|
||||
msgstr "集_名"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "File Extension"
|
||||
msgstr "文件扩展名"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extension"
|
||||
msgstr "扩展名"
|
||||
@@ -4173,8 +4130,16 @@ msgid "Sort String"
|
||||
msgstr "排序字串"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part label"
|
||||
msgstr "多段标记"
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Season folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In folders"
|
||||
@@ -4184,26 +4149,13 @@ msgstr "分文件夹"
|
||||
msgid "No folders"
|
||||
msgstr "不分文件夹"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/skintext.py, sabnzbd/sorting.py
|
||||
msgid "Date Sorting"
|
||||
msgstr "日期排序"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Date Sorting"
|
||||
msgstr "启用日期排序"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Name folder"
|
||||
msgstr "节目名称文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Year-Month Folders"
|
||||
msgstr "年-月文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Daily Folders"
|
||||
msgstr "每天文件夹"
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4234,6 +4186,69 @@ msgstr ""
|
||||
msgid "GuessIt_Property"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
msgstr "全部"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For "
|
||||
"example, put all episodes from a series in a season-specific folder. Or, put"
|
||||
" movies in a folder named after the movie.</p><p>Sorters are tried in order "
|
||||
"of appearance and can be reordered by dragging and dropping.<br/>The first "
|
||||
"active sorter that matches both the affected category and job type is "
|
||||
"applied.</p><p>More options are available when Advanced Settings is "
|
||||
"checked.<br/>Detailed information can be found on the Wiki.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Test Data"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quick start"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all episodes in the \"tv\" category to a show-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Move and rename all movies in the \"movies\" category to a movie-specific "
|
||||
"folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Rarely used options. For their meaning and explanation, click on the Help "
|
||||
@@ -4469,6 +4484,10 @@ msgstr "确认历史删除"
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Shift+Arrow key: Browse Queue and History pages"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "您希望在多久之后/什么时候暂停? (用英语作答!)"
|
||||
@@ -4641,8 +4660,8 @@ msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "重命名失败: %s 为 %s"
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha1\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Pavel C <quoing_transifex@mess.cz>, 2022\n"
|
||||
"Language-Team: Czech (https://www.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Danish (https://www.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0RC1\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: reloxx13 <reloxx@interia.pl>, 2022\n"
|
||||
"Language-Team: German (https://www.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Ester Molla Aragones <moarages@gmail.com>, 2020\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Finnish (https://www.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Fred L <88com88@gmail.com>, 2021\n"
|
||||
"Language-Team: French (https://www.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: ION, 2021\n"
|
||||
"Language-Team: Hebrew (https://www.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Norwegian Bokmål (https://www.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2021\n"
|
||||
"Language-Team: Dutch (https://www.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Polish (https://www.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Romanian (https://www.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Russian (https://www.transifex.com/sabnzbd/teams/111101/ru/)\n"
|
||||
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Serbian (https://www.transifex.com/sabnzbd/teams/111101/sr/)\n"
|
||||
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Swedish (https://www.transifex.com/sabnzbd/teams/111101/sv/)\n"
|
||||
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-3.8.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-4.0.0Beta2\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Chinese (China) (https://www.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
|
||||
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Main requirements
|
||||
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
|
||||
sabctools==6.1.0
|
||||
sabctools==7.0.1
|
||||
cheetah3==3.2.6.post1
|
||||
cffi==1.15.1
|
||||
pycparser==2.21
|
||||
@@ -9,38 +9,38 @@ configobj==5.0.8
|
||||
cheroot==9.0.0
|
||||
six==1.16.0
|
||||
cherrypy==18.8.0
|
||||
jaraco.functools==3.5.2
|
||||
jaraco.collections==3.8.0
|
||||
jaraco.functools==3.6.0
|
||||
jaraco.collections==4.1.0
|
||||
jaraco.text==3.8.1 # Newer version introduces irrelevant extra dependencies
|
||||
jaraco.classes==3.2.3
|
||||
jaraco.context==4.3.0
|
||||
more-itertools==9.0.0
|
||||
zc.lockfile==2.0
|
||||
more-itertools==9.1.0
|
||||
zc.lockfile==3.0.post1
|
||||
python-dateutil==2.8.2
|
||||
tempora==5.2.1
|
||||
pytz==2022.7.1
|
||||
tempora==5.2.2
|
||||
pytz==2023.3
|
||||
sgmllib3k==1.0.0
|
||||
portend==3.1.0
|
||||
chardet==5.1.0
|
||||
PySocks==1.7.1
|
||||
puremagic==1.14
|
||||
guessit==3.5.0
|
||||
puremagic==1.15
|
||||
guessit==3.7.1
|
||||
babelfish==0.6.0
|
||||
rebulk==3.1.0
|
||||
rebulk==3.2.0
|
||||
|
||||
# Recent cryptography versions require Rust. If you run into issues compiling this
|
||||
# SABnzbd will also work with older pre-Rust versions such as cryptography==3.3.2
|
||||
cryptography==39.0.1
|
||||
cryptography==40.0.2
|
||||
|
||||
# We recommend using "orjson" as it is 2x as fast as "ujson". However, it requires
|
||||
# Rust so SABnzbd works just as well with "ujson" or the Python built in "json" module
|
||||
ujson==5.7.0
|
||||
|
||||
# Windows system integration
|
||||
pywin32==305; sys_platform == 'win32'
|
||||
pywin32==306; sys_platform == 'win32'
|
||||
|
||||
# macOS system calls
|
||||
pyobjc==9.0.1; sys_platform == 'darwin'
|
||||
pyobjc==9.1.1; sys_platform == 'darwin'
|
||||
|
||||
# Linux notifications
|
||||
notify2==0.3.1; sys_platform != 'win32' and sys_platform != 'darwin'
|
||||
|
||||
@@ -123,7 +123,6 @@ import sabnzbd.utils.ssdp
|
||||
# Storage for the threads, variables are filled during initialization
|
||||
ArticleCache: sabnzbd.articlecache.ArticleCache
|
||||
Assembler: sabnzbd.assembler.Assembler
|
||||
Decoder: sabnzbd.decoder.Decoder
|
||||
Downloader: sabnzbd.downloader.Downloader
|
||||
PostProcessor: sabnzbd.postproc.PostProcessor
|
||||
NzbQueue: sabnzbd.nzbqueue.NzbQueue
|
||||
@@ -292,6 +291,11 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
|
||||
elif cfg.auto_sort() == "1":
|
||||
cfg.auto_sort.set("avg_age asc")
|
||||
|
||||
# Convert old series/date/movie sorters
|
||||
if not cfg.sorters_converted():
|
||||
misc.convert_sorter_settings()
|
||||
cfg.sorters_converted.set(True)
|
||||
|
||||
# Add hostname to the whitelist
|
||||
if not cfg.host_whitelist():
|
||||
cfg.host_whitelist.set(socket.gethostname())
|
||||
@@ -306,7 +310,6 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
|
||||
sabnzbd.BPSMeter = sabnzbd.bpsmeter.BPSMeter()
|
||||
sabnzbd.NzbQueue = sabnzbd.nzbqueue.NzbQueue()
|
||||
sabnzbd.Downloader = sabnzbd.downloader.Downloader(sabnzbd.BPSMeter.read() or pause_downloader)
|
||||
sabnzbd.Decoder = sabnzbd.decoder.Decoder()
|
||||
sabnzbd.Assembler = sabnzbd.assembler.Assembler()
|
||||
sabnzbd.PostProcessor = sabnzbd.postproc.PostProcessor()
|
||||
sabnzbd.DirScanner = sabnzbd.dirscanner.DirScanner()
|
||||
@@ -340,9 +343,6 @@ def start():
|
||||
logging.debug("Starting downloader")
|
||||
sabnzbd.Downloader.start()
|
||||
|
||||
logging.debug("Starting decoders")
|
||||
sabnzbd.Decoder.start()
|
||||
|
||||
logging.debug("Starting scheduler")
|
||||
sabnzbd.Scheduler.start()
|
||||
|
||||
@@ -398,11 +398,6 @@ def halt():
|
||||
except:
|
||||
pass
|
||||
|
||||
# Decoder handles join gracefully
|
||||
logging.debug("Stopping decoders")
|
||||
sabnzbd.Decoder.stop()
|
||||
sabnzbd.Decoder.join()
|
||||
|
||||
logging.debug("Stopping assembler")
|
||||
sabnzbd.Assembler.stop()
|
||||
try:
|
||||
@@ -487,9 +482,6 @@ def check_all_tasks():
|
||||
if not sabnzbd.Downloader.is_alive():
|
||||
logging.warning(T("Restarting because of crashed downloader"))
|
||||
return False
|
||||
if not sabnzbd.Decoder.is_alive():
|
||||
logging.warning(T("Restarting because of crashed decoder"))
|
||||
return False
|
||||
if not sabnzbd.Assembler.is_alive():
|
||||
logging.warning(T("Restarting because of crashed assembler"))
|
||||
return False
|
||||
|
||||
@@ -121,6 +121,8 @@ def _api_set_config(name, kwargs):
|
||||
kwargs["keyword"] = handle_rss_api(kwargs)
|
||||
elif kwargs.get("section") == "categories":
|
||||
kwargs["keyword"] = handle_cat_api(kwargs)
|
||||
elif kwargs.get("section") == "sorters":
|
||||
kwargs["keyword"] = handle_sorter_api(kwargs)
|
||||
else:
|
||||
res = config.set_config(kwargs)
|
||||
if not res:
|
||||
@@ -627,10 +629,10 @@ LOG_API_JSON_RE = re.compile(rb"'(apikey|api)': '[\w]+'", re.I)
|
||||
LOG_USER_RE = re.compile(rb"(user|username)\s?=\s?[\S]+", re.I)
|
||||
LOG_PASS_RE = re.compile(rb"(password)\s?=\s?[\S]+", re.I)
|
||||
LOG_INI_HIDE_RE = re.compile(
|
||||
rb"(email_pwd|email_account|email_to|pushover_token|pushover_userkey|pushbullet_apikey|prowl_apikey|growl_password|growl_server|IPv[4|6] address)\s?=\s?[\S]+",
|
||||
rb"(email_pwd|email_account|email_to|email_from|pushover_token|pushover_userkey|pushbullet_apikey|prowl_apikey|growl_password|growl_server|IPv[4|6] address)\s?=\s?[\S]+",
|
||||
re.I,
|
||||
)
|
||||
LOG_HASH_RE = re.compile(rb"([a-fA-F\d]{25})", re.I)
|
||||
LOG_HASH_RE = re.compile(rb"([a-zA-Z\d]{25})", re.I)
|
||||
|
||||
|
||||
def _api_showlog(name, kwargs):
|
||||
@@ -714,11 +716,10 @@ def _api_disconnect(name, kwargs):
|
||||
|
||||
def _api_eval_sort(name, kwargs):
|
||||
"""API: evaluate sorting expression"""
|
||||
name = kwargs.get("name", "")
|
||||
value = kwargs.get("value", "")
|
||||
title = kwargs.get("title")
|
||||
multipart = kwargs.get("movieextra", "")
|
||||
path = sabnzbd.sorting.eval_sort(value, title, name, multipart)
|
||||
sort_string = kwargs.get("sort_string", "")
|
||||
job_name = kwargs.get("job_name", "")
|
||||
multipart_label = kwargs.get("multipart_label", "")
|
||||
path = sabnzbd.sorting.eval_sort(sort_string, job_name, multipart_label)
|
||||
if path is None:
|
||||
return report(_MSG_NOT_IMPLEMENTED)
|
||||
else:
|
||||
@@ -1164,6 +1165,22 @@ def handle_server_api(kwargs):
|
||||
return name
|
||||
|
||||
|
||||
def handle_sorter_api(kwargs):
|
||||
"""Special handler for API-call 'set_config' [sorters]"""
|
||||
name = kwargs.get("keyword")
|
||||
if not name:
|
||||
name = kwargs.get("name")
|
||||
if not name:
|
||||
return None
|
||||
|
||||
sorter = config.get_config("sorters", name)
|
||||
if sorter:
|
||||
sorter.set_dict(kwargs)
|
||||
else:
|
||||
config.ConfigSorter(name, kwargs)
|
||||
return name
|
||||
|
||||
|
||||
def handle_rss_api(kwargs):
|
||||
"""Special handler for API-call 'set_config' [rss]"""
|
||||
name = kwargs.get("keyword")
|
||||
@@ -1243,7 +1260,6 @@ def build_status(calculate_performance: bool = False, skip_dashboard: bool = Fal
|
||||
sabnzbd.INTERNET_BANDWIDTH = round(internetspeed_future.result(), 1)
|
||||
|
||||
# How often did we delay?
|
||||
info["delayed_decoder"] = sabnzbd.BPSMeter.delayed_decoder
|
||||
info["delayed_assembler"] = sabnzbd.BPSMeter.delayed_assembler
|
||||
|
||||
# Dashboard: Speed and load of System
|
||||
@@ -1785,7 +1801,7 @@ def plural_to_single(kw, def_kw=""):
|
||||
def del_from_section(kwargs):
|
||||
"""Remove keyword in section"""
|
||||
section = kwargs.get("section", "")
|
||||
if section in ("servers", "rss", "categories"):
|
||||
if section in ("sorters", "servers", "rss", "categories"):
|
||||
keyword = kwargs.get("keyword")
|
||||
if keyword:
|
||||
item = config.get_config(section, keyword)
|
||||
|
||||
@@ -26,7 +26,7 @@ from typing import Dict, List
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.decorators import synchronized
|
||||
from sabnzbd.constants import GIGI, ANFO, MEBI, LIMIT_DECODE_QUEUE, MIN_DECODE_QUEUE, ASSEMBLER_WRITE_THRESHOLD
|
||||
from sabnzbd.constants import GIGI, ANFO, ASSEMBLER_WRITE_THRESHOLD
|
||||
from sabnzbd.nzbstuff import Article
|
||||
|
||||
# Operations on the article table are handled via try/except.
|
||||
@@ -41,10 +41,6 @@ class ArticleCache:
|
||||
self.__cache_size = 0
|
||||
self.__article_table: Dict[Article, bytes] = {} # Dict of buffered articles
|
||||
|
||||
# Limit for the decoder is based on the total available cache
|
||||
# so it can be larger on memory-rich systems
|
||||
self.decoder_cache_article_limit = 0
|
||||
|
||||
self.assembler_write_trigger: int = 1
|
||||
|
||||
# On 32 bit we only allow the user to set 1GB
|
||||
@@ -64,19 +60,12 @@ class ArticleCache:
|
||||
else:
|
||||
self.__cache_limit = min(limit, self.__cache_upper_limit)
|
||||
|
||||
# The decoder-limit should not be larger than 1/3th of the whole cache
|
||||
# Calculated in number of articles, assuming 1 article = 1MB max
|
||||
decoder_cache_limit = int(min(self.__cache_limit / 3 / MEBI, LIMIT_DECODE_QUEUE))
|
||||
# The cache should also not be too small
|
||||
self.decoder_cache_article_limit = max(decoder_cache_limit, MIN_DECODE_QUEUE)
|
||||
|
||||
# Set assembler_write_trigger to be the equivalent of ASSEMBLER_WRITE_THRESHOLD %
|
||||
# of the total cache, assuming an article size of 750 000 bytes
|
||||
self.assembler_write_trigger = int(self.__cache_limit * ASSEMBLER_WRITE_THRESHOLD / 100 / 750_000) + 1
|
||||
|
||||
logging.debug(
|
||||
"Decoder cache limit = %d - Assembler trigger = %d",
|
||||
self.decoder_cache_article_limit,
|
||||
"Assembler trigger = %d",
|
||||
self.assembler_write_trigger,
|
||||
)
|
||||
|
||||
|
||||
@@ -364,8 +364,7 @@ def check_encrypted_and_unwanted_files(nzo: NzbObject, filepath: str) -> Tuple[b
|
||||
unwanted = somefile
|
||||
zf.close()
|
||||
del zf
|
||||
except:
|
||||
logging.info("Error during inspection of RAR-file %s", filepath)
|
||||
logging.debug("Traceback: ", exc_info=True)
|
||||
except rarfile.Error as e:
|
||||
logging.info("Error during inspection of RAR-file %s: %s", filepath, e)
|
||||
|
||||
return encrypted, unwanted
|
||||
|
||||
@@ -108,7 +108,6 @@ class BPSMeter:
|
||||
"timeline_total",
|
||||
"article_stats_tried",
|
||||
"article_stats_failed",
|
||||
"delayed_decoder",
|
||||
"delayed_assembler",
|
||||
"day_label",
|
||||
"end_of_day",
|
||||
@@ -147,7 +146,6 @@ class BPSMeter:
|
||||
self.article_stats_tried: Dict[str, Dict[str, int]] = {}
|
||||
self.article_stats_failed: Dict[str, Dict[str, int]] = {}
|
||||
|
||||
self.delayed_decoder: int = 0
|
||||
self.delayed_assembler: int = 0
|
||||
|
||||
self.day_label: str = time.strftime("%Y-%m-%d")
|
||||
@@ -288,7 +286,6 @@ class BPSMeter:
|
||||
self.day_total = {}
|
||||
|
||||
# Reset delayed counters so they don't go too high
|
||||
self.delayed_decoder = 0
|
||||
self.delayed_assembler = 0
|
||||
|
||||
# Check end of week and end of month
|
||||
|
||||
@@ -259,9 +259,10 @@ configlock = OptionBool("misc", "config_lock", False)
|
||||
##############################################################################
|
||||
# One time trackers
|
||||
##############################################################################
|
||||
fixed_ports = OptionBool("misc", "fixed_ports", False)
|
||||
fixed_ports = OptionBool("misc", "fixed_ports", False, public=False)
|
||||
notified_new_skin = OptionNumber("misc", "notified_new_skin", 0)
|
||||
direct_unpack_tested = OptionBool("misc", "direct_unpack_tested", False)
|
||||
direct_unpack_tested = OptionBool("misc", "direct_unpack_tested", False, public=False)
|
||||
sorters_converted = OptionBool("misc", "sorters_converted", False, public=False)
|
||||
|
||||
|
||||
##############################################################################
|
||||
@@ -336,7 +337,7 @@ no_series_dupes = OptionNumber("misc", "no_series_dupes", 0)
|
||||
series_propercheck = OptionBool("misc", "series_propercheck", True)
|
||||
pause_on_pwrar = OptionNumber("misc", "pause_on_pwrar", 1)
|
||||
ignore_samples = OptionBool("misc", "ignore_samples", False)
|
||||
deobfuscate_final_filenames = OptionBool("misc", "deobfuscate_final_filenames", False)
|
||||
deobfuscate_final_filenames = OptionBool("misc", "deobfuscate_final_filenames", True)
|
||||
auto_sort = OptionStr("misc", "auto_sort")
|
||||
direct_unpack = OptionBool("misc", "direct_unpack", False)
|
||||
propagation_delay = OptionNumber("misc", "propagation_delay", 0)
|
||||
@@ -361,20 +362,20 @@ quota_resume = OptionBool("misc", "quota_resume", False)
|
||||
quota_period = OptionStr("misc", "quota_period", "m")
|
||||
|
||||
##############################################################################
|
||||
# Config - Sorting
|
||||
# Config - Sorting (OLD SORTER)
|
||||
##############################################################################
|
||||
enable_tv_sorting = OptionBool("misc", "enable_tv_sorting", False)
|
||||
tv_sort_string = OptionStr("misc", "tv_sort_string")
|
||||
tv_categories = OptionList("misc", "tv_categories", ["tv"])
|
||||
enable_tv_sorting = OptionBool("misc", "enable_tv_sorting", False, public=False)
|
||||
tv_sort_string = OptionStr("misc", "tv_sort_string", public=False)
|
||||
tv_categories = OptionList("misc", "tv_categories", ["tv"], public=False)
|
||||
|
||||
enable_movie_sorting = OptionBool("misc", "enable_movie_sorting", False)
|
||||
movie_sort_string = OptionStr("misc", "movie_sort_string")
|
||||
movie_sort_extra = OptionStr("misc", "movie_sort_extra", "-cd%1", strip=False)
|
||||
movie_categories = OptionList("misc", "movie_categories", ["movies"])
|
||||
enable_movie_sorting = OptionBool("misc", "enable_movie_sorting", False, public=False)
|
||||
movie_sort_string = OptionStr("misc", "movie_sort_string", public=False)
|
||||
movie_sort_extra = OptionStr("misc", "movie_sort_extra", "-cd%1", strip=False, public=False)
|
||||
movie_categories = OptionList("misc", "movie_categories", ["movies"], public=False)
|
||||
|
||||
enable_date_sorting = OptionBool("misc", "enable_date_sorting", False)
|
||||
date_sort_string = OptionStr("misc", "date_sort_string")
|
||||
date_categories = OptionList("misc", "date_categories", ["tv"])
|
||||
enable_date_sorting = OptionBool("misc", "enable_date_sorting", False, public=False)
|
||||
date_sort_string = OptionStr("misc", "date_sort_string", public=False)
|
||||
date_categories = OptionList("misc", "date_categories", ["tv"], public=False)
|
||||
|
||||
##############################################################################
|
||||
# Config - Scheduling and RSS
|
||||
@@ -415,6 +416,7 @@ api_warnings = OptionBool("misc", "api_warnings", True, protect=True)
|
||||
no_penalties = OptionBool("misc", "no_penalties", False)
|
||||
x_frame_options = OptionBool("misc", "x_frame_options", True)
|
||||
allow_old_ssl_tls = OptionBool("misc", "allow_old_ssl_tls", False)
|
||||
enable_season_sorting = OptionBool("misc", "enable_season_sorting", True)
|
||||
|
||||
# Text values
|
||||
rss_odd_titles = OptionList("misc", "rss_odd_titles", ["nzbindex.nl/", "nzbindex.com/", "nzbclub.com/"])
|
||||
@@ -436,8 +438,7 @@ local_ranges = OptionList("misc", "local_ranges", protect=True)
|
||||
max_url_retries = OptionNumber("misc", "max_url_retries", 10, minval=1)
|
||||
downloader_sleep_time = OptionNumber("misc", "downloader_sleep_time", 10, minval=0)
|
||||
receive_threads = OptionNumber("misc", "receive_threads", 2, minval=1)
|
||||
num_simd_decoders = OptionNumber("misc", "num_simd_decoders", 2, minval=1)
|
||||
switchinterval = OptionNumber("misc", "switchinterval", 0.005)
|
||||
switchinterval = OptionNumber("misc", "switchinterval", 0.005, minval=0.001)
|
||||
ssdp_broadcast_interval = OptionNumber("misc", "ssdp_broadcast_interval", 15, minval=1, maxval=600)
|
||||
ext_rename_ignore = OptionList("misc", "ext_rename_ignore", validation=lower_case_ext)
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ from sabnzbd.constants import (
|
||||
CONFIG_BACKUP_FILES,
|
||||
CONFIG_BACKUP_HTTPS,
|
||||
DEF_INI_FILE,
|
||||
DEF_SORTER_RENAME_SIZE,
|
||||
)
|
||||
from sabnzbd.decorators import synchronized
|
||||
from sabnzbd.filesystem import clip_path, real_path, create_real_path, renamer, remove_file, is_writable
|
||||
@@ -62,19 +63,29 @@ RE_PARAMFINDER = re.compile(r"""(?:'.*?')|(?:".*?")|(?:[^'",\s][^,]*)""")
|
||||
class Option:
|
||||
"""Basic option class, basic fields"""
|
||||
|
||||
def __init__(self, section: str, keyword: str, default_val: Any = None, add: bool = True, protect: bool = False):
|
||||
def __init__(
|
||||
self,
|
||||
section: str,
|
||||
keyword: str,
|
||||
default_val: Any = None,
|
||||
add: bool = True,
|
||||
public: bool = True,
|
||||
protect: bool = False,
|
||||
):
|
||||
"""Basic option
|
||||
`section` : single section for this option
|
||||
`keyword` : keyword in the section
|
||||
`default_val` : value returned when no value has been set
|
||||
`callback` : procedure to call when value is successfully changed
|
||||
`protect` : Do not allow setting via the API (specifically set_dict)
|
||||
`public` : if this value should be shown in API calls
|
||||
`protect` : do not allow setting via the API (specifically set_dict)
|
||||
"""
|
||||
self.__section = section
|
||||
self.__keyword: str = keyword
|
||||
self.__default_val: Any = default_val
|
||||
self.__value: Any = None
|
||||
self.__callback: Optional[Callable] = None
|
||||
self.__public: bool = public
|
||||
self.__protect = protect
|
||||
|
||||
# Add myself to the config dictionary
|
||||
@@ -91,8 +102,11 @@ class Option:
|
||||
def get_string(self) -> str:
|
||||
return str(self.get())
|
||||
|
||||
def get_dict(self, safe: bool = False) -> Dict[str, Any]:
|
||||
"""Return value a dictionary"""
|
||||
def get_dict(self, for_public_api: bool = False) -> Dict[str, Any]:
|
||||
"""Return value as a dictionary.
|
||||
Will not show non-public options if needed for the API"""
|
||||
if not self.__public and for_public_api:
|
||||
return {}
|
||||
return {self.__keyword: self.get()}
|
||||
|
||||
def set_dict(self, values: Dict[str, Any]):
|
||||
@@ -137,18 +151,19 @@ class OptionNumber(Option):
|
||||
self,
|
||||
section: str,
|
||||
keyword: str,
|
||||
default_val: Union[int, float] = 0,
|
||||
minval: Optional[int] = None,
|
||||
maxval: Optional[int] = None,
|
||||
default_val: float = 0,
|
||||
minval: Optional[float] = None,
|
||||
maxval: Optional[float] = None,
|
||||
validation: Optional[Callable] = None,
|
||||
add: bool = True,
|
||||
public: bool = True,
|
||||
protect: bool = False,
|
||||
):
|
||||
self.__minval: Optional[int] = minval
|
||||
self.__maxval: Optional[int] = maxval
|
||||
self.__minval: Optional[float] = minval
|
||||
self.__maxval: Optional[float] = maxval
|
||||
self.__validation: Optional[Callable] = validation
|
||||
self.__int: bool = isinstance(default_val, int)
|
||||
super().__init__(section, keyword, default_val, add=add, protect=protect)
|
||||
super().__init__(section, keyword, default_val, add=add, public=public, protect=protect)
|
||||
|
||||
def set(self, value: Any):
|
||||
"""set new value, limited by range"""
|
||||
@@ -178,8 +193,16 @@ class OptionNumber(Option):
|
||||
class OptionBool(Option):
|
||||
"""Boolean option class, always returns 0 or 1."""
|
||||
|
||||
def __init__(self, section: str, keyword: str, default_val: bool = False, add: bool = True, protect: bool = False):
|
||||
super().__init__(section, keyword, int(default_val), add=add, protect=protect)
|
||||
def __init__(
|
||||
self,
|
||||
section: str,
|
||||
keyword: str,
|
||||
default_val: bool = False,
|
||||
add: bool = True,
|
||||
public: bool = True,
|
||||
protect: bool = False,
|
||||
):
|
||||
super().__init__(section, keyword, int(default_val), add=add, public=public, protect=protect)
|
||||
|
||||
def set(self, value: Any):
|
||||
# Store the value as integer, easier to parse when reading the config.
|
||||
@@ -203,13 +226,15 @@ class OptionDir(Option):
|
||||
validation: Optional[Callable] = None,
|
||||
writable: bool = True,
|
||||
add: bool = True,
|
||||
public: bool = True,
|
||||
protect: bool = False,
|
||||
):
|
||||
self.__validation: Optional[Callable] = validation
|
||||
self.__root: str = "" # Base directory for relative paths
|
||||
self.__apply_permissions: bool = apply_permissions
|
||||
self.__create: bool = create
|
||||
self.__writable: bool = writable
|
||||
super().__init__(section, keyword, default_val, add=add)
|
||||
super().__init__(section, keyword, default_val, add=add, public=public, protect=protect)
|
||||
|
||||
def get(self) -> str:
|
||||
"""Return value, corrected for platform"""
|
||||
@@ -286,12 +311,13 @@ class OptionList(Option):
|
||||
default_val: Union[str, List, None] = None,
|
||||
validation: Optional[Callable] = None,
|
||||
add: bool = True,
|
||||
public: bool = True,
|
||||
protect: bool = False,
|
||||
):
|
||||
self.__validation: Optional[Callable] = validation
|
||||
if default_val is None:
|
||||
default_val = []
|
||||
super().__init__(section, keyword, default_val, add=add, protect=protect)
|
||||
super().__init__(section, keyword, default_val, add=add, public=public, protect=protect)
|
||||
|
||||
def set(self, value: Union[str, List]) -> Optional[str]:
|
||||
"""Set the list given a comma-separated string or a list"""
|
||||
@@ -332,11 +358,12 @@ class OptionStr(Option):
|
||||
validation: Optional[Callable] = None,
|
||||
add: bool = True,
|
||||
strip: bool = True,
|
||||
public: bool = True,
|
||||
protect: bool = False,
|
||||
):
|
||||
self.__validation: Optional[Callable] = validation
|
||||
self.__strip: bool = strip
|
||||
super().__init__(section, keyword, default_val, add=add, protect=protect)
|
||||
super().__init__(section, keyword, default_val, add=add, public=public, protect=protect)
|
||||
|
||||
def get_float(self) -> float:
|
||||
"""Return value converted to a float, allowing KMGT notation"""
|
||||
@@ -380,9 +407,9 @@ class OptionPassword(Option):
|
||||
return "*" * 10
|
||||
return ""
|
||||
|
||||
def get_dict(self, safe: bool = False) -> Dict[str, str]:
|
||||
def get_dict(self, for_public_api: bool = False) -> Dict[str, str]:
|
||||
"""Return value a dictionary"""
|
||||
if safe:
|
||||
if for_public_api:
|
||||
return {self.keyword: self.get_stars()}
|
||||
else:
|
||||
return {self.keyword: self.get()}
|
||||
@@ -467,7 +494,7 @@ class ConfigServer:
|
||||
if not self.displayname():
|
||||
self.displayname.set(self.__name)
|
||||
|
||||
def get_dict(self, safe: bool = False) -> Dict[str, Any]:
|
||||
def get_dict(self, for_public_api: bool = False) -> Dict[str, Any]:
|
||||
"""Return a dictionary with all attributes"""
|
||||
output_dict = {}
|
||||
output_dict["name"] = self.__name
|
||||
@@ -476,7 +503,7 @@ class ConfigServer:
|
||||
output_dict["port"] = self.port()
|
||||
output_dict["timeout"] = self.timeout()
|
||||
output_dict["username"] = self.username()
|
||||
if safe:
|
||||
if for_public_api:
|
||||
output_dict["password"] = self.password.get_stars()
|
||||
else:
|
||||
output_dict["password"] = self.password()
|
||||
@@ -531,7 +558,7 @@ class ConfigCat:
|
||||
except KeyError:
|
||||
continue
|
||||
|
||||
def get_dict(self, safe: bool = False) -> Dict[str, Any]:
|
||||
def get_dict(self, for_public_api: bool = False) -> Dict[str, Any]:
|
||||
"""Return a dictionary with all attributes"""
|
||||
output_dict = {}
|
||||
output_dict["name"] = self.__name
|
||||
@@ -548,6 +575,57 @@ class ConfigCat:
|
||||
delete_from_database("categories", self.__name)
|
||||
|
||||
|
||||
class ConfigSorter:
|
||||
"""Class defining a single Sorter"""
|
||||
|
||||
def __init__(self, name, values):
|
||||
self.__name = clean_section_name(name)
|
||||
name = "sorters," + self.__name
|
||||
|
||||
self.order = OptionNumber(name, "order", len(get_sorters()), 0, 100, add=False)
|
||||
self.min_size = OptionStr(name, "min_size", DEF_SORTER_RENAME_SIZE, add=False)
|
||||
self.multipart_label = OptionStr(name, "multipart_label", add=False)
|
||||
self.sort_string = OptionStr(name, "sort_string", add=False)
|
||||
self.sort_cats = OptionList(name, "sort_cats", add=False)
|
||||
self.sort_type = OptionList(name, "sort_type", add=False)
|
||||
self.is_active = OptionBool(name, "is_active", add=False)
|
||||
|
||||
self.set_dict(values)
|
||||
add_to_database("sorters", self.__name, self)
|
||||
|
||||
def set_dict(self, values: Dict[str, Any]):
|
||||
"""Set one or more fields, passed as dictionary"""
|
||||
for kw in ("order", "min_size", "multipart_label", "sort_string", "sort_cats", "sort_type", "is_active"):
|
||||
try:
|
||||
value = values[kw]
|
||||
getattr(self, kw).set(value)
|
||||
except KeyError:
|
||||
continue
|
||||
|
||||
def get_dict(self, for_public_api: bool = False) -> Dict[str, Any]:
|
||||
"""Return a dictionary with all attributes"""
|
||||
output_dict = {}
|
||||
output_dict["name"] = self.__name
|
||||
output_dict["order"] = self.order()
|
||||
output_dict["min_size"] = self.min_size()
|
||||
output_dict["multipart_label"] = self.multipart_label()
|
||||
output_dict["sort_string"] = self.sort_string()
|
||||
output_dict["sort_cats"] = self.sort_cats()
|
||||
output_dict["sort_type"] = [int(num) for num in self.sort_type()]
|
||||
output_dict["is_active"] = self.is_active()
|
||||
return output_dict
|
||||
|
||||
def delete(self):
|
||||
"""Remove from database"""
|
||||
delete_from_database("sorters", self.__name)
|
||||
|
||||
def rename(self, new_name: str):
|
||||
"""Update the name and the saved entries"""
|
||||
delete_from_database("sorters", self.__name)
|
||||
self.__name = new_name
|
||||
add_to_database("sorters", self.__name, self)
|
||||
|
||||
|
||||
class OptionFilters(Option):
|
||||
"""Filter list class"""
|
||||
|
||||
@@ -585,7 +663,7 @@ class OptionFilters(Option):
|
||||
return
|
||||
self.set(lst)
|
||||
|
||||
def get_dict(self, safe: bool = False) -> Dict[str, str]:
|
||||
def get_dict(self, for_public_api: bool = False) -> Dict[str, str]:
|
||||
"""Return filter list as a dictionary with keys 'filter[0-9]+'"""
|
||||
output_dict = {}
|
||||
for n, rss_filter in enumerate(self.get()):
|
||||
@@ -637,7 +715,7 @@ class ConfigRSS:
|
||||
continue
|
||||
self.filters.set_dict(values)
|
||||
|
||||
def get_dict(self, safe: bool = False) -> Dict[str, Any]:
|
||||
def get_dict(self, for_public_api: bool = False) -> Dict[str, Any]:
|
||||
"""Return a dictionary with all attributes"""
|
||||
output_dict = {}
|
||||
output_dict["name"] = self.__name
|
||||
@@ -677,6 +755,7 @@ AllConfigTypes = Union[
|
||||
OptionList,
|
||||
OptionDir,
|
||||
ConfigCat,
|
||||
ConfigSorter,
|
||||
ConfigRSS,
|
||||
ConfigServer,
|
||||
]
|
||||
@@ -719,8 +798,11 @@ def get_dconfig(section, keyword, nested=False):
|
||||
sect = CFG_DATABASE[section]
|
||||
except KeyError:
|
||||
return False, {}
|
||||
|
||||
if section == "categories":
|
||||
data[section] = get_ordered_categories()
|
||||
elif section == "sorters":
|
||||
data[section] = get_ordered_sorters()
|
||||
elif section in ("servers", "rss"):
|
||||
data[section] = []
|
||||
for keyword in sect.keys():
|
||||
@@ -737,9 +819,9 @@ def get_dconfig(section, keyword, nested=False):
|
||||
item = CFG_DATABASE[section][keyword]
|
||||
except KeyError:
|
||||
return False, {}
|
||||
data = item.get_dict(safe=True)
|
||||
data = item.get_dict(for_public_api=True)
|
||||
if not nested:
|
||||
if section in ("servers", "categories", "rss"):
|
||||
if section in ("sorters", "servers", "categories", "rss"):
|
||||
data = {section: [data]}
|
||||
else:
|
||||
data = {section: data}
|
||||
@@ -839,7 +921,7 @@ def _read_config(path, try_backup=False):
|
||||
|
||||
# Use CFG data to set values for all static options
|
||||
for section in CFG_DATABASE:
|
||||
if section not in ("servers", "categories", "rss"):
|
||||
if section not in ("sorters", "servers", "categories", "rss"):
|
||||
for option in CFG_DATABASE[section]:
|
||||
config_option = CFG_DATABASE[section][option]
|
||||
try:
|
||||
@@ -857,6 +939,9 @@ def _read_config(path, try_backup=False):
|
||||
if "servers" in CFG_OBJ:
|
||||
for server in CFG_OBJ["servers"]:
|
||||
ConfigServer(server, CFG_OBJ["servers"][server])
|
||||
if "sorters" in CFG_OBJ:
|
||||
for sorter in CFG_OBJ["sorters"]:
|
||||
ConfigSorter(sorter, CFG_OBJ["sorters"][sorter])
|
||||
|
||||
CFG_MODIFIED = False
|
||||
return True, ""
|
||||
@@ -875,7 +960,7 @@ def save_config(force=False):
|
||||
return False
|
||||
|
||||
for section in CFG_DATABASE:
|
||||
if section in ("servers", "categories", "rss"):
|
||||
if section in ("sorters", "servers", "categories", "rss"):
|
||||
if section not in CFG_OBJ:
|
||||
CFG_OBJ[section] = {}
|
||||
|
||||
@@ -1025,6 +1110,24 @@ def get_servers() -> Dict[str, ConfigServer]:
|
||||
return {}
|
||||
|
||||
|
||||
def get_sorters() -> Dict[str, ConfigSorter]:
|
||||
global CFG_DATABASE
|
||||
try:
|
||||
return CFG_DATABASE["sorters"]
|
||||
except KeyError:
|
||||
return {}
|
||||
|
||||
|
||||
def get_ordered_sorters() -> List[Dict]:
|
||||
"""Return sorters as an ordered list"""
|
||||
database_sorters = get_sorters()
|
||||
|
||||
sorters = [database_sorters[sorter].get_dict() for sorter in database_sorters.keys()]
|
||||
sorters.sort(key=lambda sorter: sorter["order"])
|
||||
|
||||
return sorters
|
||||
|
||||
|
||||
def get_categories() -> Dict[str, ConfigCat]:
|
||||
"""Return link to categories section.
|
||||
This section will always contain special category '*'
|
||||
|
||||
@@ -49,7 +49,7 @@ RENAMES_FILE = "__renames__"
|
||||
ATTRIB_FILE = "SABnzbd_attrib"
|
||||
REPAIR_REQUEST = "repair-all.sab"
|
||||
|
||||
SABCTOOLS_VERSION_REQUIRED = "6.1.0"
|
||||
SABCTOOLS_VERSION_REQUIRED = "7.0.1"
|
||||
|
||||
DB_HISTORY_VERSION = 1
|
||||
DB_HISTORY_NAME = "history%s.db" % DB_HISTORY_VERSION
|
||||
@@ -78,6 +78,7 @@ DEF_TIMEOUT = 60
|
||||
DEF_SCANRATE = 5
|
||||
DEF_HTTPS_CERT_FILE = "server.cert"
|
||||
DEF_HTTPS_KEY_FILE = "server.key"
|
||||
DEF_SORTER_RENAME_SIZE = "50M"
|
||||
MAX_WARNINGS = 20
|
||||
MAX_BAD_ARTICLES = 5
|
||||
|
||||
@@ -93,10 +94,8 @@ CONFIG_BACKUP_HTTPS = { # "basename": "associated setting"
|
||||
}
|
||||
|
||||
# Constants affecting download performance
|
||||
MIN_DECODE_QUEUE = 10
|
||||
LIMIT_DECODE_QUEUE = 100
|
||||
MAX_ASSEMBLER_QUEUE = 10
|
||||
SOFT_QUEUE_LIMIT = 0.6
|
||||
MAX_ASSEMBLER_QUEUE = 12
|
||||
SOFT_QUEUE_LIMIT = 0.5
|
||||
# Percentage of cache to use before adding file to assembler
|
||||
ASSEMBLER_WRITE_THRESHOLD = 5
|
||||
NNTP_BUFFER_SIZE = int(800 * KIBI)
|
||||
@@ -141,6 +140,8 @@ IGNORED_MOVIE_FOLDERS = ("video_ts", "audio_ts", "bdmv")
|
||||
EXCLUDED_GUESSIT_PROPERTIES = [
|
||||
"part",
|
||||
]
|
||||
GUESSIT_PART_INDICATORS = ("cd", "part")
|
||||
GUESSIT_SORT_TYPES = {0: "all", 1: "tv", 2: "date", 3: "movie", 4: "unknown"}
|
||||
|
||||
|
||||
class Status:
|
||||
|
||||
@@ -474,8 +474,8 @@ def build_history_info(nzo, workdir_complete="", postproc_time=0, script_output=
|
||||
|
||||
# Analyze series info only when job is finished
|
||||
series = ""
|
||||
if series_info:
|
||||
seriesname, season, episode = sabnzbd.newsunpack.analyse_show(nzo.final_name)[:3]
|
||||
if series_info and (show_analysis := sabnzbd.newsunpack.analyse_show(nzo.final_name))["job_type"] == "tv":
|
||||
seriesname, season, episode = (show_analysis[key] for key in ("title", "season", "episode"))
|
||||
if seriesname and season and episode:
|
||||
series = "%s/%s/%s" % (seriesname.lower(), season, episode)
|
||||
|
||||
|
||||
@@ -21,15 +21,11 @@ sabnzbd.decoder - article decoder
|
||||
|
||||
import logging
|
||||
import hashlib
|
||||
import queue
|
||||
import binascii
|
||||
from io import BytesIO
|
||||
from threading import Thread
|
||||
from typing import Tuple, List, Optional
|
||||
from zlib import crc32
|
||||
|
||||
import sabnzbd
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.constants import SABCTOOLS_VERSION_REQUIRED
|
||||
from sabnzbd.encoding import ubtou
|
||||
from sabnzbd.nzbstuff import Article
|
||||
@@ -67,185 +63,116 @@ class BadUu(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class Decoder:
|
||||
"""Implement thread-like coordinator for the decoders"""
|
||||
def decode(article: Article, raw_data: bytearray):
|
||||
decoded_data = None
|
||||
nzo = article.nzf.nzo
|
||||
art_id = article.article
|
||||
|
||||
def __init__(self):
|
||||
# Initialize queue and servers
|
||||
self.decoder_queue = queue.Queue()
|
||||
# Keeping track
|
||||
article_success = False
|
||||
|
||||
# Initialize decoders
|
||||
decoders = cfg.num_simd_decoders()
|
||||
logging.debug("Initializing %d decoder(s)", decoders)
|
||||
self.decoder_workers = []
|
||||
for _ in range(decoders):
|
||||
self.decoder_workers.append(DecoderWorker(self.decoder_queue))
|
||||
try:
|
||||
if nzo.precheck:
|
||||
raise BadYenc
|
||||
|
||||
def start(self):
|
||||
for decoder_worker in self.decoder_workers:
|
||||
decoder_worker.start()
|
||||
if sabnzbd.LOG_ALL:
|
||||
logging.debug("Decoding %s", art_id)
|
||||
|
||||
def is_alive(self) -> bool:
|
||||
# Check all workers
|
||||
for decoder_worker in self.decoder_workers:
|
||||
if not decoder_worker.is_alive():
|
||||
return False
|
||||
return True
|
||||
if article.nzf.type == "uu":
|
||||
decoded_data = decode_uu(article, raw_data)
|
||||
else:
|
||||
decoded_data = decode_yenc(article, raw_data)
|
||||
|
||||
def stop(self):
|
||||
# Put multiple to stop all decoders
|
||||
for _ in self.decoder_workers:
|
||||
self.decoder_queue.put((None, None, None))
|
||||
article_success = True
|
||||
|
||||
def join(self):
|
||||
# Wait for all decoders to finish
|
||||
for decoder_worker in self.decoder_workers:
|
||||
try:
|
||||
decoder_worker.join()
|
||||
except:
|
||||
pass
|
||||
except MemoryError:
|
||||
logging.warning(T("Decoder failure: Out of memory"))
|
||||
logging.info("Cache: %d, %d, %d", *sabnzbd.ArticleCache.cache_info())
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
sabnzbd.Downloader.pause()
|
||||
|
||||
def process(self, article: Article, raw_data: bytearray, raw_data_size: int):
|
||||
sabnzbd.ArticleCache.reserve_space(raw_data_size)
|
||||
self.decoder_queue.put((article, raw_data, raw_data_size))
|
||||
# This article should be fetched again
|
||||
sabnzbd.NzbQueue.reset_try_lists(article)
|
||||
return
|
||||
|
||||
def queue_level(self) -> float:
|
||||
# Return level of decoder queue. 0 = empty, >=1 = full.
|
||||
return self.decoder_queue.qsize() / sabnzbd.ArticleCache.decoder_cache_article_limit
|
||||
except BadData as error:
|
||||
# Continue to the next one if we found new server
|
||||
if search_new_server(article):
|
||||
return
|
||||
|
||||
# Store data, maybe par2 can still fix it
|
||||
decoded_data = error.data
|
||||
|
||||
class DecoderWorker(Thread):
|
||||
"""The actual workhorse that handles decoding!"""
|
||||
except BadUu:
|
||||
logging.info("Badly formed uu article in %s", art_id)
|
||||
|
||||
def __init__(self, decoder_queue):
|
||||
super().__init__()
|
||||
logging.debug("Initializing decoder %s", self.name)
|
||||
self.decoder_queue: queue.Queue[Tuple[Optional[Article], Optional[bytearray], Optional[int]]] = decoder_queue
|
||||
# Try the next server
|
||||
if search_new_server(article):
|
||||
return
|
||||
|
||||
def run(self):
|
||||
while 1:
|
||||
# Set Article and NzbObject objects to None so references from this
|
||||
# thread do not keep the parent objects alive (see #1628)
|
||||
decoded_data = raw_data = article = nzo = None
|
||||
article, raw_data, raw_data_size = self.decoder_queue.get()
|
||||
if not article:
|
||||
logging.debug("Shutting down decoder %s", self.name)
|
||||
break
|
||||
|
||||
nzo = article.nzf.nzo
|
||||
art_id = article.article
|
||||
|
||||
# Free space in the decoder-queue
|
||||
sabnzbd.ArticleCache.free_reserved_space(raw_data_size)
|
||||
|
||||
# Keeping track
|
||||
article_success = False
|
||||
|
||||
try:
|
||||
if nzo.precheck:
|
||||
raise BadYenc
|
||||
|
||||
if sabnzbd.LOG_ALL:
|
||||
logging.debug("Decoding %s", art_id)
|
||||
|
||||
if article.nzf.type == "uu":
|
||||
except (BadYenc, ValueError):
|
||||
# Handles precheck and badly formed articles
|
||||
if nzo.precheck and raw_data and raw_data.startswith(b"223 "):
|
||||
# STAT was used, so we only get a status code
|
||||
article_success = True
|
||||
else:
|
||||
# Try uu-decoding
|
||||
if (not nzo.precheck) and article.nzf.type != "yenc":
|
||||
try:
|
||||
decoded_data = decode_uu(article, raw_data)
|
||||
else:
|
||||
decoded_data = decode_yenc(article, raw_data, raw_data_size)
|
||||
|
||||
article_success = True
|
||||
|
||||
except MemoryError:
|
||||
logging.warning(T("Decoder failure: Out of memory"))
|
||||
logging.info("Decoder-Queue: %d", self.decoder_queue.qsize())
|
||||
logging.info("Cache: %d, %d, %d", *sabnzbd.ArticleCache.cache_info())
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
sabnzbd.Downloader.pause()
|
||||
|
||||
# This article should be fetched again
|
||||
sabnzbd.NzbQueue.reset_try_lists(article)
|
||||
continue
|
||||
|
||||
except BadData as error:
|
||||
# Continue to the next one if we found new server
|
||||
if search_new_server(article):
|
||||
continue
|
||||
|
||||
# Store data, maybe par2 can still fix it
|
||||
decoded_data = error.data
|
||||
|
||||
except BadUu:
|
||||
logging.info("Badly formed uu article in %s", art_id)
|
||||
|
||||
# Try the next server
|
||||
if search_new_server(article):
|
||||
continue
|
||||
|
||||
except (BadYenc, ValueError):
|
||||
# Handles precheck and badly formed articles
|
||||
if nzo.precheck and raw_data and raw_data.startswith(b"223 "):
|
||||
# STAT was used, so we only get a status code
|
||||
logging.debug("Found uu-encoded article %s in job %s", art_id, nzo.final_name)
|
||||
article_success = True
|
||||
else:
|
||||
# Try uu-decoding
|
||||
if (not nzo.precheck) and article.nzf.type != "yenc":
|
||||
try:
|
||||
decoded_data = decode_uu(article, raw_data)
|
||||
logging.debug("Found uu-encoded article %s in job %s", art_id, nzo.final_name)
|
||||
article_success = True
|
||||
except Exception:
|
||||
pass
|
||||
# Only bother with further checks if uu-decoding didn't work out
|
||||
if not article_success:
|
||||
# Convert the first 2000 bytes of raw socket data to article lines,
|
||||
# and examine the headers (for precheck) or body (for download).
|
||||
for line in raw_data[:2000].split(b"\r\n"):
|
||||
lline = line.lower()
|
||||
if lline.startswith(b"message-id:"):
|
||||
article_success = True
|
||||
# Look for DMCA clues (while skipping "X-" headers)
|
||||
if not lline.startswith(b"x-") and match_str(
|
||||
lline, (b"dmca", b"removed", b"cancel", b"blocked")
|
||||
):
|
||||
article_success = False
|
||||
logging.info("Article removed from server (%s)", art_id)
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
# Only bother with further checks if uu-decoding didn't work out
|
||||
if not article_success:
|
||||
# Convert the first 2000 bytes of raw socket data to article lines,
|
||||
# and examine the headers (for precheck) or body (for download).
|
||||
for line in raw_data[:2000].split(b"\r\n"):
|
||||
lline = line.lower()
|
||||
if lline.startswith(b"message-id:"):
|
||||
article_success = True
|
||||
# Look for DMCA clues (while skipping "X-" headers)
|
||||
if not lline.startswith(b"x-") and match_str(lline, (b"dmca", b"removed", b"cancel", b"blocked")):
|
||||
article_success = False
|
||||
logging.info("Article removed from server (%s)", art_id)
|
||||
break
|
||||
|
||||
# Pre-check, proper article found so just register
|
||||
if nzo.precheck and article_success and sabnzbd.LOG_ALL:
|
||||
logging.debug("Server %s has article %s", article.fetcher, art_id)
|
||||
elif not article_success:
|
||||
# If not pre-check, this must be a bad article
|
||||
if not nzo.precheck:
|
||||
logging.info("Badly formed yEnc article %s", art_id)
|
||||
# Pre-check, proper article found so just register
|
||||
if nzo.precheck and article_success and sabnzbd.LOG_ALL:
|
||||
logging.debug("Server %s has article %s", article.fetcher, art_id)
|
||||
elif not article_success:
|
||||
# If not pre-check, this must be a bad article
|
||||
if not nzo.precheck:
|
||||
logging.info("Badly formed yEnc article %s", art_id)
|
||||
|
||||
# Continue to the next one if we found new server
|
||||
if search_new_server(article):
|
||||
continue
|
||||
# Continue to the next one if we found new server
|
||||
if search_new_server(article):
|
||||
return
|
||||
|
||||
except:
|
||||
logging.warning(T("Unknown Error while decoding %s"), art_id)
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
except:
|
||||
logging.warning(T("Unknown Error while decoding %s"), art_id)
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
|
||||
# Continue to the next one if we found new server
|
||||
if search_new_server(article):
|
||||
continue
|
||||
# Continue to the next one if we found new server
|
||||
if search_new_server(article):
|
||||
return
|
||||
|
||||
if decoded_data:
|
||||
# If the data needs to be written to disk due to full cache, this will be slow
|
||||
# Causing the decoder-queue to fill up and delay the downloader
|
||||
sabnzbd.ArticleCache.save_article(article, decoded_data)
|
||||
article.decoded = True
|
||||
elif not nzo.precheck:
|
||||
# Nothing to save
|
||||
article.on_disk = True
|
||||
if decoded_data:
|
||||
# If the data needs to be written to disk due to full cache, this will be slow
|
||||
# Causing the decoder-queue to fill up and delay the downloader
|
||||
sabnzbd.ArticleCache.save_article(article, decoded_data)
|
||||
article.decoded = True
|
||||
elif not nzo.precheck:
|
||||
# Nothing to save
|
||||
article.on_disk = True
|
||||
|
||||
sabnzbd.NzbQueue.register_article(article, article_success)
|
||||
sabnzbd.NzbQueue.register_article(article, article_success)
|
||||
|
||||
|
||||
def decode_yenc(article: Article, data: bytearray, raw_data_size: int) -> bytearray:
|
||||
def decode_yenc(article: Article, data: bytearray) -> bytearray:
|
||||
# Let SABCTools do all the heavy lifting
|
||||
yenc_filename, crc_correct = sabctools.yenc_decode(data)
|
||||
yenc_filename, article.data_begin, article.data_size, crc_correct = sabctools.yenc_decode(data)
|
||||
|
||||
nzf = article.nzf
|
||||
# Assume it is yenc
|
||||
|
||||
0
sabnzbd/deobfuscate_filenames.py
Normal file → Executable file
0
sabnzbd/deobfuscate_filenames.py
Normal file → Executable file
@@ -28,8 +28,9 @@ import socket
|
||||
import random
|
||||
import sys
|
||||
import ssl
|
||||
from typing import List, Dict, Optional, Union
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from typing import List, Dict, Optional, Union, Set
|
||||
import concurrent
|
||||
from concurrent.futures import ThreadPoolExecutor, Future
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.decorators import synchronized, NzbQueueLocker, DOWNLOADER_CV
|
||||
@@ -61,6 +62,7 @@ _ARTICLE_PREFETCH = 20
|
||||
_DEFAULT_CHUNK_SIZE = 32768
|
||||
|
||||
TIMER_LOCK = RLock()
|
||||
DOWNLOADER_LOCK = RLock()
|
||||
|
||||
|
||||
class Server:
|
||||
@@ -212,21 +214,14 @@ class Server:
|
||||
nw.hard_reset(send_quit=True)
|
||||
self.idle_threads = []
|
||||
|
||||
def request_info(self):
|
||||
"""Launch async request to resolve server address.
|
||||
getaddrinfo() can be very slow. In some situations this can lead
|
||||
to delayed starts and timeouts on connections.
|
||||
Because of this, the results will be cached in the server object."""
|
||||
if not self.request:
|
||||
self.request = True
|
||||
Thread(target=self._request_info_internal).start()
|
||||
|
||||
@synchronized(DOWNLOADER_LOCK)
|
||||
def get_article(self):
|
||||
"""Get article from pre-fetched and pre-fetch new ones if necessary.
|
||||
Articles that are too old for this server are immediately marked as tried"""
|
||||
if self.article_queue:
|
||||
return self.article_queue.pop(0)
|
||||
elif self.next_article_search < time.time():
|
||||
|
||||
if self.next_article_search < time.time():
|
||||
# Pre-fetch new articles
|
||||
self.article_queue = sabnzbd.NzbQueue.get_articles(self, sabnzbd.Downloader.servers, _ARTICLE_PREFETCH)
|
||||
if self.article_queue:
|
||||
@@ -249,6 +244,15 @@ class Server:
|
||||
sabnzbd.NzbQueue.reset_try_lists(article, remove_fetcher_from_trylist=False)
|
||||
self.article_queue = []
|
||||
|
||||
def request_info(self):
|
||||
"""Launch async request to resolve server address.
|
||||
getaddrinfo() can be very slow. In some situations this can lead
|
||||
to delayed starts and timeouts on connections.
|
||||
Because of this, the results will be cached in the server object."""
|
||||
if not self.request:
|
||||
self.request = True
|
||||
Thread(target=self._request_info_internal).start()
|
||||
|
||||
def _request_info_internal(self):
|
||||
"""Async attempt to run getaddrinfo() for specified server"""
|
||||
logging.debug("Retrieving server address information for %s", self.host)
|
||||
@@ -284,6 +288,9 @@ class Downloader(Thread):
|
||||
"read_fds",
|
||||
"servers",
|
||||
"timers",
|
||||
"last_max_chunk_size",
|
||||
"max_chunk_size",
|
||||
"process_tasks",
|
||||
)
|
||||
|
||||
def __init__(self, paused=False):
|
||||
@@ -306,10 +313,16 @@ class Downloader(Thread):
|
||||
self.sleep_time_set()
|
||||
cfg.downloader_sleep_time.callback(self.sleep_time_set)
|
||||
|
||||
# Sleep check variables
|
||||
self.last_max_chunk_size: int = 0
|
||||
self.max_chunk_size: int = _DEFAULT_CHUNK_SIZE
|
||||
|
||||
self.recv_threads: int = cfg.receive_threads()
|
||||
self.recv_pool: Optional[ThreadPoolExecutor] = ThreadPoolExecutor(self.recv_threads)
|
||||
logging.debug("Receive threads: %s", self.recv_threads)
|
||||
|
||||
self.process_tasks: Set[Future[NewsWrapper, int]] = set()
|
||||
|
||||
self.paused_for_postproc: bool = False
|
||||
self.shutdown: bool = False
|
||||
|
||||
@@ -534,10 +547,8 @@ class Downloader(Thread):
|
||||
# Make sure server address resolution is refreshed
|
||||
server.info = None
|
||||
|
||||
def decode(self, article, raw_data: Optional[bytearray] = None, raw_data_size: Optional[int] = None):
|
||||
"""Decode article and check the status of
|
||||
the decoder and the assembler
|
||||
"""
|
||||
def decode(self, article, raw_data: Optional[bytearray] = None):
|
||||
"""Decode article"""
|
||||
# Article was requested and fetched, update article stats for the server
|
||||
sabnzbd.BPSMeter.register_server_article_tried(article.fetcher.id)
|
||||
|
||||
@@ -548,38 +559,8 @@ class Downloader(Thread):
|
||||
article.nzf.nzo.increase_bad_articles_counter("missing_articles")
|
||||
return
|
||||
|
||||
# Send to decoder-queue
|
||||
sabnzbd.Decoder.process(article, raw_data, raw_data_size)
|
||||
|
||||
# See if we need to delay because the queues are full
|
||||
logged_counter = 0
|
||||
|
||||
decoder_level = sabnzbd.Decoder.queue_level()
|
||||
assembler_level = sabnzbd.Assembler.queue_level()
|
||||
|
||||
# Sleep for an increasing amount of time, depending on queue sizes.
|
||||
if decoder_level > SOFT_QUEUE_LIMIT or assembler_level > SOFT_QUEUE_LIMIT:
|
||||
time.sleep((decoder_level + assembler_level - SOFT_QUEUE_LIMIT) / 2)
|
||||
sabnzbd.BPSMeter.delayed_decoder += int(decoder_level > SOFT_QUEUE_LIMIT)
|
||||
sabnzbd.BPSMeter.delayed_assembler += int(assembler_level > SOFT_QUEUE_LIMIT)
|
||||
|
||||
while not self.shutdown and (sabnzbd.Decoder.queue_level() >= 1 or sabnzbd.Assembler.queue_level() >= 1):
|
||||
# Only log/update once every second, to not waste any CPU-cycles
|
||||
if not logged_counter % 10:
|
||||
# Make sure the BPS-meter is updated
|
||||
sabnzbd.BPSMeter.update()
|
||||
|
||||
# Update who is delaying us
|
||||
logging.debug(
|
||||
"Delayed - %d seconds - Decoder queue: %d - Assembler queue: %d",
|
||||
logged_counter / 10,
|
||||
sabnzbd.Decoder.decoder_queue.qsize(),
|
||||
sabnzbd.Assembler.queue.qsize(),
|
||||
)
|
||||
|
||||
# Wait and update the queue sizes
|
||||
time.sleep(0.1)
|
||||
logged_counter += 1
|
||||
# Decode and send to article cache
|
||||
sabnzbd.decoder.decode(article, raw_data)
|
||||
|
||||
def run(self):
|
||||
# First check IPv6 connectivity
|
||||
@@ -601,9 +582,6 @@ class Downloader(Thread):
|
||||
BPSMeter.update()
|
||||
next_bpsmeter_update = 0
|
||||
|
||||
# Sleep check variables
|
||||
last_max_chunk_size: int = 0
|
||||
max_chunk_size: int = _DEFAULT_CHUNK_SIZE
|
||||
# Debugging code for v4 test release
|
||||
sleep_count_start: float = time.time()
|
||||
sleep_count: int = 0
|
||||
@@ -718,10 +696,10 @@ class Downloader(Thread):
|
||||
|
||||
# If less data than possible was received then it should be ok to sleep a bit
|
||||
if self.sleep_time:
|
||||
if last_max_chunk_size > max_chunk_size:
|
||||
logging.debug("New max_chunk_size %d -> %d", max_chunk_size, last_max_chunk_size)
|
||||
max_chunk_size = last_max_chunk_size
|
||||
elif last_max_chunk_size < max_chunk_size / 3:
|
||||
if self.last_max_chunk_size > self.max_chunk_size:
|
||||
logging.debug("New max_chunk_size %d -> %d", self.max_chunk_size, self.last_max_chunk_size)
|
||||
self.max_chunk_size = self.last_max_chunk_size
|
||||
elif self.last_max_chunk_size < self.max_chunk_size / 3:
|
||||
time_before = time.time()
|
||||
time.sleep(self.sleep_time)
|
||||
now = time.time()
|
||||
@@ -743,7 +721,7 @@ class Downloader(Thread):
|
||||
sleep_count = 0
|
||||
time_slept = 0
|
||||
|
||||
last_max_chunk_size = 0
|
||||
self.last_max_chunk_size = 0
|
||||
|
||||
# Use select to find sockets ready for reading/writing
|
||||
readkeys = self.read_fds.keys()
|
||||
@@ -753,7 +731,7 @@ class Downloader(Thread):
|
||||
read = []
|
||||
BPSMeter.reset()
|
||||
time.sleep(1.0)
|
||||
max_chunk_size = _DEFAULT_CHUNK_SIZE
|
||||
self.max_chunk_size = _DEFAULT_CHUNK_SIZE
|
||||
with DOWNLOADER_CV:
|
||||
while (
|
||||
(sabnzbd.NzbQueue.is_empty() or self.no_active_jobs() or self.paused_for_postproc)
|
||||
@@ -771,49 +749,71 @@ class Downloader(Thread):
|
||||
continue
|
||||
|
||||
if self.recv_threads > 1:
|
||||
for nw, bytes_received, done in self.recv_pool.map(self.__recv, read):
|
||||
if bytes_received > last_max_chunk_size:
|
||||
last_max_chunk_size = bytes_received
|
||||
self.__handle_recv_result(nw, bytes_received, done)
|
||||
if self.bandwidth_limit:
|
||||
self.__check_speed()
|
||||
# Submit a process_nw task to the pool for every NewWrapper which is readable
|
||||
for selected in read:
|
||||
self.process_tasks.add(self.recv_pool.submit(self.process_nw, self.read_fds[selected]))
|
||||
|
||||
# Wait for all the tasks to complete
|
||||
concurrent.futures.wait(self.process_tasks)
|
||||
|
||||
# Clear task list
|
||||
self.process_tasks.clear()
|
||||
else:
|
||||
for selected in read:
|
||||
nw, bytes_received, done = self.__recv(selected)
|
||||
if bytes_received > last_max_chunk_size:
|
||||
last_max_chunk_size = bytes_received
|
||||
self.__handle_recv_result(nw, bytes_received, done)
|
||||
if self.bandwidth_limit and bytes_received:
|
||||
self.__check_speed()
|
||||
self.process_nw(self.read_fds[selected])
|
||||
|
||||
def __recv(self, selected):
|
||||
nw = None
|
||||
# Check the Assembler queue to see if we need to delay, depending on queue size
|
||||
if (assembler_level := sabnzbd.Assembler.queue_level()) > SOFT_QUEUE_LIMIT:
|
||||
time.sleep(min((assembler_level - SOFT_QUEUE_LIMIT) / 4, 0.15))
|
||||
sabnzbd.BPSMeter.delayed_assembler += 1
|
||||
logged_counter = 0
|
||||
|
||||
while not self.shutdown and sabnzbd.Assembler.queue_level() >= 1:
|
||||
# Only log/update once every second, to not waste any CPU-cycles
|
||||
if not logged_counter % 10:
|
||||
# Make sure the BPS-meter is updated
|
||||
sabnzbd.BPSMeter.update()
|
||||
|
||||
# Update who is delaying us
|
||||
logging.debug(
|
||||
"Delayed - %d seconds - Assembler queue: %d",
|
||||
logged_counter / 10,
|
||||
sabnzbd.Assembler.queue.qsize(),
|
||||
)
|
||||
|
||||
# Wait and update the queue sizes
|
||||
time.sleep(0.1)
|
||||
logged_counter += 1
|
||||
|
||||
def process_nw(self, nw: NewsWrapper):
|
||||
"""Receive data from NewsWrapper and handle response"""
|
||||
try:
|
||||
nw = self.read_fds[selected]
|
||||
bytes_received, done = nw.recv_chunk()
|
||||
return nw, bytes_received, done
|
||||
except ssl.SSLWantReadError:
|
||||
return nw, 0, False
|
||||
return
|
||||
except:
|
||||
return nw, 0, True
|
||||
|
||||
def __check_speed(self):
|
||||
BPSMeter = sabnzbd.BPSMeter
|
||||
if BPSMeter.bps + BPSMeter.sum_cached_amount > self.bandwidth_limit:
|
||||
BPSMeter.update()
|
||||
while BPSMeter.bps > self.bandwidth_limit:
|
||||
time.sleep(0.01)
|
||||
BPSMeter.update()
|
||||
|
||||
def __handle_recv_result(self, nw: NewsWrapper, bytes_received: int = 0, done: bool = False):
|
||||
if not bytes_received:
|
||||
if done:
|
||||
self.__reset_nw(nw, "server closed connection", wait=False)
|
||||
self.__reset_nw(nw, "server closed connection", wait=False)
|
||||
return
|
||||
|
||||
article = nw.article
|
||||
server = nw.server
|
||||
sabnzbd.BPSMeter.update(server.id, bytes_received)
|
||||
|
||||
with DOWNLOADER_LOCK:
|
||||
sabnzbd.BPSMeter.update(server.id, bytes_received)
|
||||
if bytes_received > self.last_max_chunk_size:
|
||||
self.last_max_chunk_size = bytes_received
|
||||
# Update statistics
|
||||
if done:
|
||||
article.nzf.nzo.update_download_stats(sabnzbd.BPSMeter.bps, server.id, nw.data_position)
|
||||
# Check speedlimit
|
||||
if (
|
||||
self.bandwidth_limit
|
||||
and sabnzbd.BPSMeter.bps + sabnzbd.BPSMeter.sum_cached_amount > self.bandwidth_limit
|
||||
):
|
||||
sabnzbd.BPSMeter.update()
|
||||
while sabnzbd.BPSMeter.bps > self.bandwidth_limit:
|
||||
time.sleep(0.01)
|
||||
sabnzbd.BPSMeter.update()
|
||||
|
||||
if nw.status_code != 222 and not done:
|
||||
if not nw.connected or nw.status_code == 480:
|
||||
@@ -861,25 +861,28 @@ class Downloader(Thread):
|
||||
server.bad_cons = 0
|
||||
server.errormsg = server.warning = ""
|
||||
|
||||
# Update statistics and decode
|
||||
article.nzf.nzo.update_download_stats(sabnzbd.BPSMeter.bps, server.id, nw.data_position)
|
||||
self.decode(article, nw.get_data_buffer(), nw.data_position)
|
||||
# Decode
|
||||
self.decode(article, nw.get_data_buffer())
|
||||
|
||||
if sabnzbd.LOG_ALL:
|
||||
logging.debug("Thread %s@%s: %s done", nw.thrdnum, server.host, article.article)
|
||||
|
||||
# Reset connection for new activity
|
||||
nw.soft_reset()
|
||||
|
||||
# Request a new article immediately if possible
|
||||
if nw.connected and server.active and not (self.paused or self.shutdown or self.paused_for_postproc):
|
||||
nw.article = server.get_article()
|
||||
if nw.article:
|
||||
self.__request_article(nw)
|
||||
return
|
||||
server.busy_threads.remove(nw)
|
||||
server.idle_threads.append(nw)
|
||||
|
||||
with DOWNLOADER_LOCK:
|
||||
server.busy_threads.remove(nw)
|
||||
server.idle_threads.append(nw)
|
||||
self.remove_socket(nw)
|
||||
|
||||
@synchronized(DOWNLOADER_LOCK)
|
||||
def __finish_connect_nw(self, nw: NewsWrapper) -> bool:
|
||||
server = nw.server
|
||||
try:
|
||||
@@ -961,6 +964,7 @@ class Downloader(Thread):
|
||||
self.__reset_nw(nw, retry_article=False)
|
||||
return True
|
||||
|
||||
@synchronized(DOWNLOADER_LOCK)
|
||||
def __reset_nw(
|
||||
self,
|
||||
nw: NewsWrapper,
|
||||
@@ -1026,7 +1030,7 @@ class Downloader(Thread):
|
||||
logging.debug("Thread %s@%s: BODY %s", nw.thrdnum, nw.server.host, nw.article.article)
|
||||
nw.body()
|
||||
# Mark as ready to be read
|
||||
self.read_fds[nw.nntp.fileno] = nw
|
||||
self.add_socket(nw.nntp.fileno, nw)
|
||||
except socket.error as err:
|
||||
logging.info("Looks like server closed connection: %s", err)
|
||||
self.__reset_nw(nw, "server broke off connection", warn=True, send_quit=False)
|
||||
|
||||
@@ -734,7 +734,7 @@ def create_all_dirs(path: str, apply_permissions: bool = False) -> Union[str, bo
|
||||
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def get_unique_dir(path: str, n: int = 0, create_dir: bool = True) -> str:
|
||||
def get_unique_dir(path: str, n: int = 0, create_dir: bool = True) -> Union[str, bool]:
|
||||
"""Determine a unique folder or filename"""
|
||||
if not check_mount(path):
|
||||
return path
|
||||
@@ -773,7 +773,8 @@ def listdir_full(input_dir: str, recursive: bool = True) -> List[str]:
|
||||
filelist = []
|
||||
for root, dirs, files in os.walk(input_dir):
|
||||
for file in files:
|
||||
if not sabnzbd.misc.match_str(root, IGNORED_FILES_AND_FOLDERS):
|
||||
# Ignore special folders and resources files created by macOS
|
||||
if not sabnzbd.misc.match_str(root, IGNORED_FILES_AND_FOLDERS) and not file.startswith("._"):
|
||||
filelist.append(os.path.join(root, file))
|
||||
if not recursive:
|
||||
break
|
||||
|
||||
@@ -76,6 +76,8 @@ from sabnzbd.constants import (
|
||||
CHEETAH_DIRECTIVES,
|
||||
EXCLUDED_GUESSIT_PROPERTIES,
|
||||
DEF_HTTPS_CERT_FILE,
|
||||
DEF_SORTER_RENAME_SIZE,
|
||||
GUESSIT_SORT_TYPES,
|
||||
)
|
||||
from sabnzbd.lang import list_languages
|
||||
from sabnzbd.api import (
|
||||
@@ -874,12 +876,11 @@ SPECIAL_BOOL_LIST = (
|
||||
"api_logging",
|
||||
"x_frame_options",
|
||||
"allow_old_ssl_tls",
|
||||
"enable_season_sorting",
|
||||
)
|
||||
SPECIAL_VALUE_LIST = (
|
||||
"downloader_sleep_time",
|
||||
"size_limit",
|
||||
"movie_rename_limit",
|
||||
"episode_rename_limit",
|
||||
"nomedia_marker",
|
||||
"max_url_retries",
|
||||
"req_completion_rate",
|
||||
@@ -887,7 +888,6 @@ SPECIAL_VALUE_LIST = (
|
||||
"max_foldername_length",
|
||||
"url_base",
|
||||
"receive_threads",
|
||||
"num_simd_decoders",
|
||||
"switchinterval",
|
||||
"direct_unpack_threads",
|
||||
"ipv6_servers",
|
||||
@@ -1081,7 +1081,7 @@ class ConfigServer:
|
||||
% (int(not servers[svr].enable()), servers[svr].priority(), servers[svr].displayname().lower()),
|
||||
)
|
||||
for svr in server_names:
|
||||
new.append(servers[svr].get_dict(safe=True))
|
||||
new.append(servers[svr].get_dict(for_public_api=True))
|
||||
t, m, w, d, daily, articles_tried, articles_success = sabnzbd.BPSMeter.amounts(svr)
|
||||
if t:
|
||||
new[-1]["amounts"] = (
|
||||
@@ -1825,20 +1825,6 @@ class ConfigCats:
|
||||
|
||||
|
||||
##############################################################################
|
||||
SORT_LIST = (
|
||||
"enable_tv_sorting",
|
||||
"tv_sort_string",
|
||||
"tv_categories",
|
||||
"enable_movie_sorting",
|
||||
"movie_sort_string",
|
||||
"movie_sort_extra",
|
||||
"enable_date_sorting",
|
||||
"date_sort_string",
|
||||
"movie_categories",
|
||||
"date_categories",
|
||||
)
|
||||
|
||||
|
||||
class ConfigSorting:
|
||||
def __init__(self, root):
|
||||
self.__root = root
|
||||
@@ -1846,14 +1832,26 @@ class ConfigSorting:
|
||||
@secured_expose(check_configlock=True)
|
||||
def index(self, **kwargs):
|
||||
conf = build_header(sabnzbd.WEB_DIR_CONFIG)
|
||||
conf["complete_dir"] = cfg.complete_dir.get_clipped_path()
|
||||
|
||||
for kw in SORT_LIST:
|
||||
conf[kw] = config.get_config("misc", kw)()
|
||||
sorters = config.get_ordered_sorters()
|
||||
# Add empty sorter entry, used as a template at the top of the page
|
||||
empty = {
|
||||
"is_active": "1",
|
||||
"name": "",
|
||||
"order": len(sorters), # Last in line
|
||||
"min_size": DEF_SORTER_RENAME_SIZE,
|
||||
"sort_string": "",
|
||||
"sort_cats": "",
|
||||
"sort_type": "0,",
|
||||
"multipart_label": "",
|
||||
}
|
||||
sorters.insert(0, empty)
|
||||
conf["slotinfo"] = sorters
|
||||
conf["categories"] = list_cats(False)
|
||||
conf["guessit_properties"] = tuple(
|
||||
prop for prop in guessit_properties().keys() if prop not in EXCLUDED_GUESSIT_PROPERTIES
|
||||
)
|
||||
conf["sort_types"] = GUESSIT_SORT_TYPES
|
||||
|
||||
return template_filtered_response(
|
||||
file=os.path.join(sabnzbd.WEB_DIR_CONFIG, "config_sorting.tmpl"),
|
||||
@@ -1861,17 +1859,41 @@ class ConfigSorting:
|
||||
)
|
||||
|
||||
@secured_expose(check_api_key=True, check_configlock=True)
|
||||
def saveSorting(self, **kwargs):
|
||||
for kw in SORT_LIST:
|
||||
item = config.get_config("misc", kw)
|
||||
value = kwargs.get(kw)
|
||||
msg = item.set(value)
|
||||
if msg:
|
||||
return badParameterResponse(msg)
|
||||
def delete(self, **kwargs):
|
||||
kwargs["section"] = "sorters"
|
||||
kwargs["keyword"] = kwargs.get("name")
|
||||
del_from_section(kwargs)
|
||||
raise Raiser(self.__root)
|
||||
|
||||
@secured_expose(check_api_key=True, check_configlock=True)
|
||||
def save_sorter(self, **kwargs):
|
||||
name = kwargs.get("name", "*")
|
||||
newname = kwargs.get("newname", "")
|
||||
newname = config.clean_section_name(newname)
|
||||
|
||||
if name == "*":
|
||||
newname = name
|
||||
if newname:
|
||||
# Delete current one and replace with new one
|
||||
if name:
|
||||
config.delete("sorters", name)
|
||||
config.ConfigSorter(newname, kwargs)
|
||||
|
||||
config.save_config()
|
||||
raise Raiser(self.__root)
|
||||
|
||||
@secured_expose(check_api_key=True, check_configlock=True)
|
||||
def toggle_sorter(self, **kwargs):
|
||||
"""Toggle is_active flag of a sorter"""
|
||||
try:
|
||||
sorter = config.get_sorters()[kwargs.get("sorter")]
|
||||
sorter.is_active.set(not sorter.is_active())
|
||||
config.save_config()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
raise Raiser(self.__root)
|
||||
|
||||
|
||||
def badParameterResponse(msg, ajax=None):
|
||||
"""Return a html page with error message and a 'back' button"""
|
||||
|
||||
104
sabnzbd/misc.py
104
sabnzbd/misc.py
@@ -40,7 +40,14 @@ from typing import Union, Tuple, Any, AnyStr, Optional, List, Dict
|
||||
|
||||
import sabnzbd
|
||||
import sabnzbd.getipaddress
|
||||
from sabnzbd.constants import DEFAULT_PRIORITY, MEBI, DEF_ARTICLE_CACHE_DEFAULT, DEF_ARTICLE_CACHE_MAX, REPAIR_REQUEST
|
||||
from sabnzbd.constants import (
|
||||
DEFAULT_PRIORITY,
|
||||
MEBI,
|
||||
DEF_ARTICLE_CACHE_DEFAULT,
|
||||
DEF_ARTICLE_CACHE_MAX,
|
||||
REPAIR_REQUEST,
|
||||
GUESSIT_SORT_TYPES,
|
||||
)
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.encoding import ubtou, platform_btou
|
||||
@@ -240,6 +247,16 @@ def opts_to_pp(repair: bool, unpack: bool, delete: bool) -> int:
|
||||
return 0
|
||||
|
||||
|
||||
def sort_to_opts(sort_type: str) -> int:
|
||||
"""Convert a guessed sort_type to its integer equivalent"""
|
||||
for k, v in GUESSIT_SORT_TYPES.items():
|
||||
if v == sort_type:
|
||||
return k
|
||||
else:
|
||||
logging.debug("Invalid sort_type %s, pretending a match to 0 ('all')", sort_type)
|
||||
return 0
|
||||
|
||||
|
||||
_wildcard_to_regex = {
|
||||
"\\": r"\\",
|
||||
"^": r"\^",
|
||||
@@ -1377,3 +1394,88 @@ def history_updated():
|
||||
# Never go over the limit
|
||||
if sabnzbd.LAST_HISTORY_UPDATE + 1 >= sys.maxsize:
|
||||
sabnzbd.LAST_HISTORY_UPDATE = 1
|
||||
|
||||
|
||||
def convert_sorter_settings():
|
||||
"""Convert older tv/movie/date sorter settings to the new universal sorter
|
||||
|
||||
The old settings used:
|
||||
-enable_tv_sorting = OptionBool("misc", "enable_tv_sorting", False)
|
||||
-tv_sort_string = OptionStr("misc", "tv_sort_string")
|
||||
-tv_categories = OptionList("misc", "tv_categories", ["tv"])
|
||||
|
||||
-enable_movie_sorting = OptionBool("misc", "enable_movie_sorting", False)
|
||||
-movie_sort_string = OptionStr("misc", "movie_sort_string")
|
||||
-movie_sort_extra = OptionStr("misc", "movie_sort_extra", "-cd%1", strip=False)
|
||||
-movie_categories = OptionList("misc", "movie_categories", ["movies"])
|
||||
|
||||
-enable_date_sorting = OptionBool("misc", "enable_date_sorting", False)
|
||||
-date_sort_string = OptionStr("misc", "date_sort_string")
|
||||
-date_categories = OptionList("misc", "date_categories", ["tv"])
|
||||
|
||||
-movie_rename_limit = OptionStr("misc", "movie_rename_limit", "100M")
|
||||
-episode_rename_limit = OptionStr("misc", "episode_rename_limit", "20M")
|
||||
|
||||
The new settings define a sorter as follows (cf. class config.ConfigSorter):
|
||||
name: str {
|
||||
name: str
|
||||
order: int
|
||||
min_size: Union[str|int] = "50M"
|
||||
multipart_label: Optional[str] = ""
|
||||
sort_string: str
|
||||
sort_cats: List[str]
|
||||
sort_type: List[int]
|
||||
is_active: bool = 1
|
||||
}
|
||||
|
||||
With the old settings, sorting was tried in a fixed order (series first, movies last);
|
||||
that order is retained by the conversion code.
|
||||
We only convert enabled sorters."""
|
||||
|
||||
# Keep track of order
|
||||
order = 0
|
||||
|
||||
if cfg.enable_tv_sorting() and cfg.tv_sort_string() and cfg.tv_categories():
|
||||
# Define a new sorter based on the old configuration
|
||||
tv_sorter = {}
|
||||
tv_sorter["order"] = order
|
||||
tv_sorter["min_size"] = cfg.episode_rename_limit()
|
||||
tv_sorter["multipart_label"] = "" # Previously only available for movie sorting
|
||||
tv_sorter["sort_string"] = cfg.tv_sort_string()
|
||||
tv_sorter["sort_cats"] = cfg.tv_categories()
|
||||
tv_sorter["sort_type"] = [sort_to_opts("tv")]
|
||||
tv_sorter["is_active"] = int(cfg.enable_tv_sorting())
|
||||
|
||||
# Configure the new sorter
|
||||
logging.debug("Converted old series sorter config to '%s': %s", T("Series Sorting"), tv_sorter)
|
||||
config.ConfigSorter(T("Series Sorting"), tv_sorter)
|
||||
order += 1
|
||||
|
||||
if cfg.enable_date_sorting() and cfg.date_sort_string() and cfg.date_categories():
|
||||
date_sorter = {}
|
||||
date_sorter["order"] = order
|
||||
date_sorter["min_size"] = cfg.episode_rename_limit()
|
||||
date_sorter["multipart_label"] = "" # Previously only available for movie sorting
|
||||
date_sorter["sort_string"] = cfg.date_sort_string()
|
||||
date_sorter["sort_cats"] = cfg.date_categories()
|
||||
date_sorter["sort_type"] = [sort_to_opts("date")]
|
||||
date_sorter["is_active"] = int(cfg.enable_date_sorting())
|
||||
|
||||
# Configure the new sorter
|
||||
logging.debug("Converted old date sorter config to '%s': %s", T("Date Sorting"), date_sorter)
|
||||
config.ConfigSorter(T("Date Sorting"), date_sorter)
|
||||
order += 1
|
||||
|
||||
if cfg.enable_movie_sorting() and cfg.movie_sort_string() and cfg.movie_categories():
|
||||
movie_sorter = {}
|
||||
movie_sorter["order"] = order
|
||||
movie_sorter["min_size"] = cfg.movie_rename_limit()
|
||||
movie_sorter["multipart_label"] = cfg.movie_sort_extra()
|
||||
movie_sorter["sort_string"] = cfg.movie_sort_string()
|
||||
movie_sorter["sort_cats"] = cfg.movie_categories()
|
||||
movie_sorter["sort_type"] = [sort_to_opts("movie")]
|
||||
movie_sorter["is_active"] = int(cfg.enable_movie_sorting())
|
||||
|
||||
# Configure the new sorter
|
||||
logging.debug("Converted old movie sorter config to '%s': %s", T("Movie Sorting"), movie_sorter)
|
||||
config.ConfigSorter(T("Movie Sorting"), movie_sorter)
|
||||
|
||||
@@ -64,9 +64,9 @@ from sabnzbd.filesystem import (
|
||||
is_size,
|
||||
)
|
||||
from sabnzbd.nzbstuff import NzbObject
|
||||
from sabnzbd.sorting import SeriesSorter
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.constants import Status, JOB_ADMIN
|
||||
from sabnzbd.sorting import Sorter
|
||||
|
||||
# Regex globals
|
||||
RAR_V3_RE = re.compile(r"\.(?P<ext>part\d*)$", re.I)
|
||||
@@ -2249,18 +2249,39 @@ def add_time_left(perc: float, start_time: Optional[float] = None, time_used: Op
|
||||
return ""
|
||||
|
||||
|
||||
def analyse_show(name: str) -> Tuple[str, str, str, str, bool]:
|
||||
"""Do a quick SeasonSort check and return basic facts"""
|
||||
job = SeriesSorter(None, name, None, None, force=True)
|
||||
if job.matched:
|
||||
job.get_values()
|
||||
return (
|
||||
job.info.get("title", ""),
|
||||
job.info.get("season_num", ""),
|
||||
job.info.get("episode_num", ""),
|
||||
job.info.get("ep_name", ""),
|
||||
job.is_proper(),
|
||||
def analyse_show(name: str) -> Dict[str, str]:
|
||||
"""Use the Sorter to collect some basic info on series"""
|
||||
job = Sorter(
|
||||
None,
|
||||
name,
|
||||
None,
|
||||
None,
|
||||
force=True,
|
||||
sorter_config={
|
||||
"name": "newsunpack__analyse_show",
|
||||
"order": 0,
|
||||
"min_size": -1,
|
||||
"multipart_label": "",
|
||||
"sort_string": "",
|
||||
"sort_cats": [], # Categories and types are ignored when using the force
|
||||
"sort_type": [],
|
||||
"is_active": 1,
|
||||
},
|
||||
)
|
||||
job.get_values()
|
||||
return {
|
||||
"title": job.info.get("title", ""),
|
||||
"season": job.info.get("season_num", ""),
|
||||
"episode": job.info.get("episode_num", ""),
|
||||
"episode_name": job.info.get("ep_name", ""),
|
||||
"is_proper": str(job.is_proper()),
|
||||
"resolution": job.info.get("resolution", ""),
|
||||
"decade": job.info.get("decade", ""),
|
||||
"year": job.info.get("year", ""),
|
||||
"month": job.info.get("month", ""),
|
||||
"day": job.info.get("day", ""),
|
||||
"job_type": job.type,
|
||||
}
|
||||
|
||||
|
||||
def pre_queue(nzo: NzbObject, pp, cat):
|
||||
@@ -2288,7 +2309,7 @@ def pre_queue(nzo: NzbObject, pp, cat):
|
||||
str(nzo.bytes),
|
||||
" ".join(nzo.groups),
|
||||
]
|
||||
command.extend(analyse_show(nzo.final_name_with_password)[:4])
|
||||
command.extend(list(analyse_show(nzo.final_name_with_password).values()))
|
||||
command = [fix(arg) for arg in command]
|
||||
|
||||
# Fields not in the NZO directly
|
||||
@@ -2298,6 +2319,13 @@ def pre_queue(nzo: NzbObject, pp, cat):
|
||||
"show_season": command[9],
|
||||
"show_episode": command[10],
|
||||
"show_episode_name": command[11],
|
||||
"proper": command[12],
|
||||
"resolution": command[13],
|
||||
"decade": command[14],
|
||||
"year": command[15],
|
||||
"month": command[16],
|
||||
"day": command[17],
|
||||
"type": command[18],
|
||||
}
|
||||
|
||||
try:
|
||||
|
||||
@@ -468,14 +468,12 @@ def nzbfile_parser(full_nzb_path: str, nzo):
|
||||
# Check if we already have this exact NZF (see custom eq-checks)
|
||||
if nzf in nzo.files:
|
||||
logging.info("File %s occurred twice in NZB, skipping", nzf.filename)
|
||||
remove_data(nzf.nzf_id, nzo.admin_path)
|
||||
continue
|
||||
|
||||
# Add valid NZF's
|
||||
if file_name and nzf.valid and nzf.nzf_id:
|
||||
logging.info("File %s added to queue", nzf.filename)
|
||||
nzo.files.append(nzf)
|
||||
nzo.files_table[nzf.nzf_id] = nzf
|
||||
nzo.bytes += nzf.bytes
|
||||
nzo.add_nzf(nzf)
|
||||
valid_files += 1
|
||||
avg_age_sum += file_timestamp
|
||||
else:
|
||||
|
||||
@@ -157,7 +157,18 @@ class TryList:
|
||||
##############################################################################
|
||||
# Article
|
||||
##############################################################################
|
||||
ArticleSaver = ("article", "art_id", "bytes", "lowest_partnum", "decoded", "on_disk", "nzf", "crc32")
|
||||
ArticleSaver = (
|
||||
"article",
|
||||
"art_id",
|
||||
"bytes",
|
||||
"lowest_partnum",
|
||||
"decoded",
|
||||
"data_begin",
|
||||
"data_size",
|
||||
"on_disk",
|
||||
"nzf",
|
||||
"crc32",
|
||||
)
|
||||
|
||||
|
||||
class Article(TryList):
|
||||
@@ -176,6 +187,8 @@ class Article(TryList):
|
||||
self.fetcher_priority: int = 0
|
||||
self.tries: int = 0 # Try count
|
||||
self.decoded: bool = False
|
||||
self.data_begin: Optional[int] = None
|
||||
self.data_size: Optional[int] = None
|
||||
self.on_disk: bool = False
|
||||
self.crc32: Optional[int] = None
|
||||
self.nzf: NzbFile = nzf
|
||||
@@ -300,7 +313,7 @@ class NzbFile(TryList):
|
||||
"""Representation of one file consisting of multiple articles"""
|
||||
|
||||
# Pre-define attributes to save memory
|
||||
__slots__ = NzbFileSaver
|
||||
__slots__ = NzbFileSaver + ("first_article",)
|
||||
|
||||
def __init__(self, date, subject, raw_article_db, file_bytes, nzo):
|
||||
"""Setup object"""
|
||||
@@ -336,17 +349,16 @@ class NzbFile(TryList):
|
||||
|
||||
self.valid: bool = bool(raw_article_db)
|
||||
|
||||
if self.valid and self.nzf_id:
|
||||
# Save first article separate so we can do
|
||||
# duplicate file detection and deobfuscate-during-download
|
||||
first_article = self.add_article(raw_article_db.pop(0))
|
||||
first_article.lowest_partnum = True
|
||||
self.nzo.first_articles.append(first_article)
|
||||
self.nzo.first_articles_count += 1
|
||||
# Temporarily hold the first article during import
|
||||
self.first_article: Optional[Article] = None
|
||||
|
||||
# Count how many bytes are available for repair
|
||||
if sabnzbd.par2file.is_parfile(self.filename):
|
||||
self.nzo.bytes_par2 += self.bytes
|
||||
if self.valid and self.nzf_id:
|
||||
# Save first article separate, so we can deobfuscate-during-download
|
||||
# We process the first_file in nzo.add_nzf because if this NZF turns
|
||||
# out to be a duplicate file inside the NZB, the first article would
|
||||
# otherwise become a ghost article.
|
||||
self.first_article = self.add_article(raw_article_db.pop(0))
|
||||
self.first_article.lowest_partnum = True
|
||||
|
||||
# Any articles left?
|
||||
if raw_article_db:
|
||||
@@ -743,7 +755,10 @@ class NzbObject(TryList):
|
||||
else:
|
||||
# Determine "incomplete" folder
|
||||
self.download_path = os.path.join(cfg.download_dir.get_path(), self.work_name)
|
||||
self.download_path = long_path(get_unique_dir(self.download_path, create_dir=True))
|
||||
self.download_path = get_unique_dir(self.download_path, create_dir=True)
|
||||
if not self.download_path:
|
||||
raise NzbEmpty
|
||||
self.download_path = long_path(self.download_path)
|
||||
set_permissions(self.download_path)
|
||||
|
||||
# Always create the admin-directory, just to be sure
|
||||
@@ -963,6 +978,24 @@ class NzbObject(TryList):
|
||||
else:
|
||||
self.servercount[serverid] = bytes_received
|
||||
|
||||
def add_nzf(self, nzf: NzbFile):
|
||||
"""Bookkeeping when adding new files
|
||||
Only used during import, so not locked"""
|
||||
self.files.append(nzf)
|
||||
self.files_table[nzf.nzf_id] = nzf
|
||||
self.bytes += nzf.bytes
|
||||
|
||||
# Only now add first article to the list
|
||||
self.first_articles.append(nzf.first_article)
|
||||
self.first_articles_count += 1
|
||||
nzf.first_article = None
|
||||
|
||||
# Count how many bytes are available for repair
|
||||
if sabnzbd.par2file.is_parfile(nzf.filename):
|
||||
self.bytes_par2 += nzf.bytes
|
||||
|
||||
logging.info("File %s added to queue", nzf.filename)
|
||||
|
||||
@synchronized(NZO_LOCK)
|
||||
def remove_nzf(self, nzf: NzbFile) -> bool:
|
||||
if nzf in self.files:
|
||||
@@ -1940,7 +1973,10 @@ class NzbObject(TryList):
|
||||
|
||||
# Dupe check off nzb filename
|
||||
if not res and no_series_dupes:
|
||||
series, season, episode, _, is_proper = sabnzbd.newsunpack.analyse_show(self.final_name)
|
||||
show_analysis = sabnzbd.newsunpack.analyse_show(self.final_name)
|
||||
series, season, episode, is_proper = (
|
||||
show_analysis[key] for key in ("title", "season", "episode", "is_proper")
|
||||
)
|
||||
if is_proper and series_propercheck:
|
||||
logging.debug("Dupe checking series+season+ep in history aborted due to PROPER/REAL/REPACK found")
|
||||
else:
|
||||
|
||||
@@ -25,7 +25,7 @@ import re
|
||||
import struct
|
||||
import sabctools
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, Optional, Tuple, BinaryIO
|
||||
from typing import Dict, Optional, Tuple
|
||||
|
||||
from sabnzbd.constants import MEBI
|
||||
from sabnzbd.encoding import correct_unknown_encoding
|
||||
@@ -44,9 +44,10 @@ PAR_RECOVERY_ID = b"RecvSlic"
|
||||
class FilePar2Info:
|
||||
"""Class for keeping track of par2 information of a file"""
|
||||
|
||||
filename: str
|
||||
hash16k: bytes
|
||||
filehash: bytes
|
||||
filesize: int
|
||||
filehash: Optional[int] = None
|
||||
has_duplicate: bool = False
|
||||
|
||||
|
||||
@@ -104,71 +105,133 @@ def parse_par2_file(fname: str, md5of16k: Dict[bytes, str]) -> Tuple[str, Dict[s
|
||||
Return as dictionary, indexed on names or hashes for the first-16 table
|
||||
The input md5of16k is modified in place and thus not returned!
|
||||
|
||||
Note that par2 can and will appear in random order, so the code has to collect data first
|
||||
before we process them!
|
||||
|
||||
For a full description of the par2 specification, visit:
|
||||
http://parchive.sourceforge.net/docs/specifications/parity-volume-spec/article-spec.html
|
||||
"""
|
||||
total_size = os.path.getsize(fname)
|
||||
metadata = {}
|
||||
metadata["nr_files"] = -1
|
||||
filedata = {}
|
||||
set_id = slice_size = coeff = nr_files = None
|
||||
filepar2info = {}
|
||||
filecrc32 = {}
|
||||
table = {}
|
||||
duplicates16k = []
|
||||
|
||||
try:
|
||||
total_size = os.path.getsize(fname)
|
||||
with open(fname, "rb") as f:
|
||||
header = f.read(8)
|
||||
while header:
|
||||
while header := f.read(8):
|
||||
if header == PAR_PKT_ID:
|
||||
parse_par2_packet(f, metadata, filedata)
|
||||
# All packages start with a header before the body
|
||||
# 8 : PAR2\x00PKT
|
||||
# 8 : Length of the entire packet. Must be multiple of 4. (NB: Includes length of header.)
|
||||
# 16 : MD5 Hash of packet.
|
||||
# 16 : Recovery Set ID.
|
||||
# 16 : Type of packet.
|
||||
# ?*4 : Body of Packet. Must be a multiple of 4 bytes.
|
||||
|
||||
# Length must be multiple of 4 and at least 20
|
||||
pack_len = struct.unpack("<Q", f.read(8))[0]
|
||||
if int(pack_len / 4) * 4 != pack_len or pack_len < 20:
|
||||
continue
|
||||
|
||||
# Next 16 bytes is md5sum of this packet
|
||||
md5sum = f.read(16)
|
||||
|
||||
# Read and check the data
|
||||
# Subtract 32 because we already read these bytes of the header
|
||||
data = f.read(pack_len - 32)
|
||||
if md5sum != hashlib.md5(data).digest():
|
||||
continue
|
||||
|
||||
# See if it's any of the packages we care about
|
||||
par2_packet_type = data[16:32]
|
||||
|
||||
# Get the Recovery Set ID
|
||||
set_id = data[:16].hex()
|
||||
|
||||
if par2_packet_type == PAR_FILE_ID:
|
||||
# The FileDesc packet looks like:
|
||||
# 16 : "PAR 2.0\0FileDesc"
|
||||
# 16 : FileId
|
||||
# 16 : Hash for full file
|
||||
# 16 : Hash for first 16K
|
||||
# 8 : File length
|
||||
# xx : Name (multiple of 4, padded with \0 if needed)
|
||||
|
||||
fileid = data[32:48].hex()
|
||||
if filepar2info.get(fileid):
|
||||
# Already have data
|
||||
continue
|
||||
hash16k = data[64:80]
|
||||
filesize = struct.unpack("<Q", data[80:88])[0]
|
||||
filename = correct_unknown_encoding(data[88:].strip(b"\0"))
|
||||
filepar2info[fileid] = FilePar2Info(filename, hash16k, filesize)
|
||||
elif par2_packet_type == PAR_CREATOR_ID:
|
||||
# From here until the end is the creator-text
|
||||
# Useful in case of bugs in the par2-creating software
|
||||
# "PAR 2.0\x00Creator\x00"
|
||||
par2creator = data[32:].strip(b"\0") # Remove any trailing \0
|
||||
logging.debug(
|
||||
"Par2-creator of %s is: %s", os.path.basename(f.name), correct_unknown_encoding(par2creator)
|
||||
)
|
||||
elif par2_packet_type == PAR_MAIN_ID:
|
||||
# The Main packet looks like:
|
||||
# 16 : "PAR 2.0\0Main"
|
||||
# 8 : Slice size
|
||||
# 4 : Number of files in the recovery set
|
||||
slice_size = struct.unpack("<Q", data[32:40])[0]
|
||||
coeff = sabctools.crc32_xpow8n(slice_size)
|
||||
nr_files = struct.unpack("<I", data[40:44])[0]
|
||||
elif par2_packet_type == PAR_SLICE_ID:
|
||||
# "PAR 2.0\0IFSC\0\0\0\0"
|
||||
fileid = data[32:48].hex()
|
||||
if not filecrc32.get(fileid):
|
||||
filecrc32[fileid] = []
|
||||
for i in range(48, pack_len - 32, 20):
|
||||
filecrc32[fileid].append(struct.unpack("<I", data[i + 16 : i + 20])[0])
|
||||
|
||||
# On large files, we stop after seeing all the listings
|
||||
# On smaller files, we scan them fully to get the par2-creator
|
||||
if total_size > SCAN_LIMIT and len(filedata) == metadata["nr_files"]:
|
||||
if total_size > SCAN_LIMIT and len(filepar2info) == nr_files:
|
||||
break
|
||||
|
||||
header = f.read(8)
|
||||
# Process all the data
|
||||
for fileid in filepar2info.keys():
|
||||
# Sanity check
|
||||
par2info = filepar2info[fileid]
|
||||
if not filecrc32.get(fileid) or not nr_files or not slice_size:
|
||||
logging.debug("Missing essential information for %s", par2info)
|
||||
continue
|
||||
|
||||
set_id = metadata["set_id"]
|
||||
slice_size = metadata["slice_size"]
|
||||
coeff = sabctools.crc32_xpow8n(slice_size)
|
||||
# Handle also cases where slice_size is exact match for filesize
|
||||
# We currently don't have an unittest for that!
|
||||
slices = par2info.filesize // slice_size
|
||||
slice_nr = 0
|
||||
crc32 = 0
|
||||
while slice_nr < slices:
|
||||
crc32 = sabctools.crc32_multiply(crc32, coeff) ^ filecrc32[fileid][slice_nr]
|
||||
slice_nr += 1
|
||||
|
||||
for fileid in filedata:
|
||||
name = filedata[fileid][0]
|
||||
hash16k = filedata[fileid][1]
|
||||
filesize = filedata[fileid][3]
|
||||
if tail_size := par2info.filesize % slice_size:
|
||||
crc32 = sabctools.crc32_combine(
|
||||
crc32, sabctools.crc32_zero_unpad(filecrc32[fileid][-1], slice_size - tail_size), tail_size
|
||||
)
|
||||
par2info.filehash = crc32
|
||||
|
||||
crclist = filedata[fileid][4]
|
||||
if not crclist:
|
||||
logging.debug("Missing CRC32 data in %s. Unfinished download?", fname)
|
||||
table = {}
|
||||
break
|
||||
# We found hash data, add it to final tabel
|
||||
table[par2info.filename] = par2info
|
||||
|
||||
slices = filesize // slice_size
|
||||
tail_size = filesize % slice_size
|
||||
crc32 = 0
|
||||
slice_nr = 0
|
||||
# logging.debug("File %s size %d slices %d tail %d, list %d", name, filesize, slices, tail_size, len(crclist))
|
||||
while slice_nr < slices:
|
||||
crc32 = sabctools.crc32_multiply(crc32, coeff) ^ crclist[slice_nr]
|
||||
slice_nr += 1
|
||||
# Check for md5of16k duplicates
|
||||
if par2info.hash16k not in md5of16k:
|
||||
md5of16k[par2info.hash16k] = par2info.filename
|
||||
elif md5of16k[par2info.hash16k] != par2info.filename:
|
||||
# Not unique and not already linked to this file
|
||||
# Mark and remove to avoid false-renames
|
||||
duplicates16k.append(par2info.hash16k)
|
||||
table[par2info.filename].has_duplicate = True
|
||||
|
||||
if tail_size:
|
||||
crc32 = sabctools.crc32_combine(
|
||||
crc32, sabctools.crc32_zero_unpad(crclist[slice_nr], slice_size - tail_size), tail_size
|
||||
)
|
||||
# logging.debug("File %s crc32 %s, int %d", name, hex(crc32), crc32)
|
||||
|
||||
table[name] = FilePar2Info(hash16k, crc32, filesize)
|
||||
|
||||
if hash16k not in md5of16k:
|
||||
md5of16k[hash16k] = name
|
||||
elif md5of16k[hash16k] != name:
|
||||
# Not unique and not already linked to this file
|
||||
# Mark and remove to avoid false-renames
|
||||
duplicates16k.append(hash16k)
|
||||
table[name].has_duplicate = True
|
||||
|
||||
except:
|
||||
except Exception as e:
|
||||
logging.info("Par2 parser crashed in file %s", fname)
|
||||
logging.debug("Traceback: ", exc_info=True)
|
||||
table = {}
|
||||
@@ -182,84 +245,3 @@ def parse_par2_file(fname: str, md5of16k: Dict[bytes, str]) -> Tuple[str, Dict[s
|
||||
logging.debug("Par2-16k signature of %s not unique, discarding", old_name)
|
||||
|
||||
return set_id, table
|
||||
|
||||
|
||||
def parse_par2_packet(f: BinaryIO, metadata: Dict, filedata: Dict):
|
||||
"""Look up and analyze a PAR2 packet"""
|
||||
|
||||
# All packages start with a header before the body
|
||||
# 8 : PAR2\x00PKT
|
||||
# 8 : Length of the entire packet. Must be multiple of 4. (NB: Includes length of header.)
|
||||
# 16 : MD5 Hash of packet. Calculation starts at first byte of Recovery Set ID and ends at last byte of body.
|
||||
# 16 : Recovery Set ID.
|
||||
# 16 : Type of packet.
|
||||
# ?*4 : Body of Packet. Must be a multiple of 4 bytes.
|
||||
|
||||
# Length must be multiple of 4 and at least 20
|
||||
pack_len = struct.unpack("<Q", f.read(8))[0]
|
||||
if int(pack_len / 4) * 4 != pack_len or pack_len < 20:
|
||||
return
|
||||
|
||||
# Next 16 bytes is md5sum of this packet
|
||||
md5sum = f.read(16)
|
||||
|
||||
# Read and check the data
|
||||
# Subtract 32 because we already read these bytes of the header
|
||||
data = f.read(pack_len - 32)
|
||||
md5 = hashlib.md5()
|
||||
md5.update(data)
|
||||
if md5sum != md5.digest():
|
||||
return
|
||||
|
||||
# See if it's any of the packages we care about
|
||||
par2_packet_type = data[16:32]
|
||||
|
||||
# Get the Recovery Set ID
|
||||
metadata["set_id"] = data[:16].hex()
|
||||
|
||||
if par2_packet_type == PAR_FILE_ID:
|
||||
# The FileDesc packet looks like:
|
||||
# 16 : "PAR 2.0\0FileDesc"
|
||||
# 16 : FileId
|
||||
# 16 : Hash for full file
|
||||
# 16 : Hash for first 16K
|
||||
# 8 : File length
|
||||
# xx : Name (multiple of 4, padded with \0 if needed)
|
||||
|
||||
fileid = data[32:48].hex()
|
||||
if filedata.get(fileid):
|
||||
# Already have data
|
||||
return
|
||||
filehash = data[48:64]
|
||||
hash16k = data[64:80]
|
||||
filesize = struct.unpack("<Q", data[80:88])[0]
|
||||
filename = correct_unknown_encoding(data[88:].strip(b"\0"))
|
||||
filedata[fileid] = [filename, hash16k, filehash, filesize, []]
|
||||
elif par2_packet_type == PAR_CREATOR_ID:
|
||||
# From here until the end is the creator-text
|
||||
# Useful in case of bugs in the par2-creating software
|
||||
# "PAR 2.0\x00Creator\x00"
|
||||
par2creator = data[32:].strip(b"\0") # Remove any trailing \0
|
||||
metadata["creator"] = par2creator
|
||||
logging.debug("Par2-creator of %s is: %s", os.path.basename(f.name), correct_unknown_encoding(par2creator))
|
||||
elif par2_packet_type == PAR_MAIN_ID:
|
||||
# The Main packet looks like:
|
||||
# 16 : "PAR 2.0\0Main"
|
||||
# 8 : Slice size
|
||||
# 4 : Number of files in the recovery set
|
||||
metadata["slice_size"] = struct.unpack("<Q", data[32:40])[0]
|
||||
metadata["nr_files"] = struct.unpack("<I", data[40:44])[0]
|
||||
elif par2_packet_type == PAR_SLICE_ID:
|
||||
# "PAR 2.0\0IFSC\0\0\0\0"
|
||||
fileid = data[32:48].hex()
|
||||
try:
|
||||
if filedata[fileid][4]:
|
||||
# Already have data
|
||||
return
|
||||
except KeyError:
|
||||
logging.debug("Unknown fileid %s for par2 slice, skipping", fileid)
|
||||
return
|
||||
i = 48
|
||||
for i in range(48, pack_len - 32, 20):
|
||||
filedata[fileid][4].append(struct.unpack("<I", data[i + 16 : i + 20])[0])
|
||||
return
|
||||
|
||||
@@ -502,7 +502,7 @@ def process_job(nzo: NzbObject):
|
||||
)
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
# Better disable sorting because filenames are all off now
|
||||
file_sorter.sorter_active = None
|
||||
file_sorter.sorter_active = False
|
||||
|
||||
if empty:
|
||||
job_result = -1
|
||||
@@ -515,7 +515,7 @@ def process_job(nzo: NzbObject):
|
||||
# TV/Movie/Date Renaming code part 2 - rename and move files to parent folder
|
||||
if all_ok and file_sorter.sorter_active:
|
||||
if newfiles:
|
||||
workdir_complete, ok = file_sorter.sorter.rename(newfiles, workdir_complete)
|
||||
workdir_complete, ok = file_sorter.rename(newfiles, workdir_complete)
|
||||
if not ok:
|
||||
nzo.set_unpack_info("Unpack", T("Failed to move files"))
|
||||
nzo.fail_msg = T("Failed to move files")
|
||||
@@ -588,7 +588,7 @@ def process_job(nzo: NzbObject):
|
||||
nzo.set_unpack_info("Script", "%s%s " % (script_ret, script_line), unique=True)
|
||||
|
||||
# Cleanup again, including NZB files
|
||||
if all_ok:
|
||||
if all_ok and os.path.isdir(workdir_complete):
|
||||
cleanup_list(workdir_complete, False)
|
||||
|
||||
# Force error for empty result
|
||||
@@ -668,32 +668,37 @@ def prepare_extraction_path(nzo: NzbObject) -> Tuple[str, str, Sorter, bool, Opt
|
||||
the extraction path and create the directory.
|
||||
Separated so it can be called from DirectUnpacker
|
||||
"""
|
||||
one_folder = False
|
||||
create_job_dir = True
|
||||
marker_file = None
|
||||
|
||||
# Determine category directory
|
||||
catdir = config.get_category(nzo.cat).dir()
|
||||
if not catdir:
|
||||
# If none defined, check Default category directory
|
||||
# Fall back to Default if undefined at category-level
|
||||
catdir = config.get_category().dir()
|
||||
|
||||
# Check if it should have a directory
|
||||
# Check whether the creation of job directories has been disabled
|
||||
if catdir.endswith("*"):
|
||||
catdir = catdir.strip("*")
|
||||
one_folder = True
|
||||
catdir = catdir[:-1]
|
||||
create_job_dir = False
|
||||
|
||||
complete_dir = real_path(cfg.complete_dir.get_path(), catdir)
|
||||
complete_dir = long_path(complete_dir)
|
||||
complete_dir = long_path(real_path(cfg.complete_dir.get_path(), catdir))
|
||||
|
||||
# TV/Movie/Date Renaming code part 1 - detect and construct paths
|
||||
file_sorter = Sorter(nzo, nzo.cat)
|
||||
complete_dir = file_sorter.detect(nzo.final_name, complete_dir)
|
||||
# Initialize the sorter and let it construct a path for the Complete directory
|
||||
file_sorter = Sorter(
|
||||
nzo,
|
||||
nzo.final_name,
|
||||
complete_dir,
|
||||
nzo.cat,
|
||||
)
|
||||
if file_sorter.sorter_active:
|
||||
one_folder = False
|
||||
complete_dir = file_sorter.get_final_path()
|
||||
# Sorting overrides the per-category job directory creation setting
|
||||
create_job_dir = True
|
||||
|
||||
complete_dir = sanitize_and_trim_path(complete_dir)
|
||||
|
||||
if one_folder:
|
||||
if not create_job_dir:
|
||||
workdir_complete = create_all_dirs(complete_dir, apply_permissions=True)
|
||||
else:
|
||||
workdir_complete = get_unique_dir(os.path.join(complete_dir, nzo.final_name), create_dir=True)
|
||||
@@ -703,7 +708,7 @@ def prepare_extraction_path(nzo: NzbObject) -> Tuple[str, str, Sorter, bool, Opt
|
||||
logging.error(T("Cannot create final folder %s") % os.path.join(complete_dir, nzo.final_name))
|
||||
raise IOError
|
||||
|
||||
if cfg.folder_rename() and not one_folder:
|
||||
if create_job_dir and cfg.folder_rename():
|
||||
prefixed_path = prefix(workdir_complete, "_UNPACK_")
|
||||
tmp_workdir_complete = get_unique_dir(prefix(workdir_complete, "_UNPACK_"), create_dir=False)
|
||||
|
||||
@@ -718,7 +723,7 @@ def prepare_extraction_path(nzo: NzbObject) -> Tuple[str, str, Sorter, bool, Opt
|
||||
else:
|
||||
tmp_workdir_complete = workdir_complete
|
||||
|
||||
return tmp_workdir_complete, workdir_complete, file_sorter, one_folder, marker_file
|
||||
return tmp_workdir_complete, workdir_complete, file_sorter, not create_job_dir, marker_file
|
||||
|
||||
|
||||
def parring(nzo: NzbObject):
|
||||
@@ -1064,24 +1069,21 @@ def cleanup_list(wdir, skip_nzb):
|
||||
"""
|
||||
if cfg.cleanup_list():
|
||||
try:
|
||||
files = os.listdir(wdir)
|
||||
with os.scandir(wdir) as files:
|
||||
for entry in files:
|
||||
if entry.is_dir():
|
||||
cleanup_list(entry.path, skip_nzb)
|
||||
cleanup_empty_directories(entry.path)
|
||||
else:
|
||||
if on_cleanup_list(entry.name, skip_nzb):
|
||||
try:
|
||||
logging.info("Removing unwanted file %s", entry.path)
|
||||
remove_file(entry.path)
|
||||
except:
|
||||
logging.error(T("Removing %s failed"), clip_path(entry.path))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
except:
|
||||
files = ()
|
||||
for filename in files:
|
||||
path = os.path.join(wdir, filename)
|
||||
if os.path.isdir(path):
|
||||
cleanup_list(path, skip_nzb)
|
||||
else:
|
||||
if on_cleanup_list(filename, skip_nzb):
|
||||
try:
|
||||
logging.info("Removing unwanted file %s", path)
|
||||
remove_file(path)
|
||||
except:
|
||||
logging.error(T("Removing %s failed"), clip_path(path))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
if files:
|
||||
# If directories only contained unwanted files, remove them
|
||||
cleanup_empty_directories(wdir)
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
|
||||
|
||||
def prefix(path, pre):
|
||||
|
||||
@@ -308,7 +308,8 @@ class RSSReader:
|
||||
myPrio = defPrio
|
||||
n = 0
|
||||
if ("F" in reTypes or "S" in reTypes) and (not season or not episode):
|
||||
season, episode = sabnzbd.newsunpack.analyse_show(title)[1:3]
|
||||
show_analysis = sabnzbd.newsunpack.analyse_show(title)
|
||||
season, episode = show_analysis["season"], show_analysis["episode"]
|
||||
|
||||
# Match against all filters until an positive or negative match
|
||||
logging.debug("Size %s", size)
|
||||
|
||||
@@ -52,12 +52,12 @@ SKIN_TEXT = {
|
||||
"sch-rss_scan": TT("Read RSS feeds"), #: #: Config->Scheduler
|
||||
"sch-remove_failed": TT("Remove failed jobs"), #: Config->Scheduler
|
||||
"sch-remove_completed": TT("Remove completed jobs"), #: Config->Scheduler
|
||||
"sch-pause_all_low": TT("Pause low prioirty jobs"), #: Config->Scheduler
|
||||
"sch-pause_all_normal": TT("Pause normal prioirty jobs"), #: Config->Scheduler
|
||||
"sch-pause_all_high": TT("Pause high prioirty jobs"), #: Config->Scheduler
|
||||
"sch-resume_all_low": TT("Resume low prioirty jobs"), #: Config->Scheduler
|
||||
"sch-resume_all_normal": TT("Resume normal prioirty jobs"), #: Config->Scheduler
|
||||
"sch-resume_all_high": TT("Resume high prioirty jobs"), #: Config->Scheduler
|
||||
"sch-pause_all_low": TT("Pause low priority jobs"), #: Config->Scheduler
|
||||
"sch-pause_all_normal": TT("Pause normal priority jobs"), #: Config->Scheduler
|
||||
"sch-pause_all_high": TT("Pause high priority jobs"), #: Config->Scheduler
|
||||
"sch-resume_all_low": TT("Resume low priority jobs"), #: Config->Scheduler
|
||||
"sch-resume_all_normal": TT("Resume normal priority jobs"), #: Config->Scheduler
|
||||
"sch-resume_all_high": TT("Resume high priority jobs"), #: Config->Scheduler
|
||||
"sch-enable_quota": TT("Enable quota management"), #: Config->Scheduler
|
||||
"sch-disable_quota": TT("Disable quota management"), #: Config->Scheduler
|
||||
"sch-pause_cat": TT("Pause jobs with category"), #: Config->Scheduler
|
||||
@@ -140,8 +140,6 @@ SKIN_TEXT = {
|
||||
"cmenu-sorting": TT("Sorting"), #: Main menu item
|
||||
"cmenu-special": TT("Special"), #: Main menu item
|
||||
"cmenu-search": TT("Search"), #: Main menu item
|
||||
# Footer
|
||||
"ft-download": TT("Download Dir"), # Used in Footer
|
||||
# Main page
|
||||
"shutdownOK?": TT("Are you sure you want to shutdown SABnzbd?"),
|
||||
"link-pause": TT("Pause"), #: Pause downloading
|
||||
@@ -225,7 +223,6 @@ SKIN_TEXT = {
|
||||
"dashboard-IP6": TT("IPv6 address"),
|
||||
"dashboard-NameserverDNS": TT("Nameserver / DNS Lookup"),
|
||||
"dashboard-delayed": TT("Download speed limited by"),
|
||||
"dashboard-delayed-cpu": TT("CPU"),
|
||||
"dashboard-delayed-disk": TT("Disk speed"),
|
||||
"dashboard-loadavg": TT("System load"),
|
||||
"dashboard-systemPerformance": TT("System Performance (Pystone)"), #: Do not translate Pystone
|
||||
@@ -366,6 +363,7 @@ SKIN_TEXT = {
|
||||
"explain-complete_dir": TT(
|
||||
"Location to store finished, fully processed downloads.<br /><i>Can be overruled by user-defined categories.</i>"
|
||||
),
|
||||
"explain-complete_dir-sorting": TT("Use Sorting to automatically organize and rename your completed downloads."),
|
||||
"opt-complete_free": TT("Minimum Free Space for Completed Download Folder"),
|
||||
"explain-complete_free": TT("Will not work if a category folder is on a different disk."),
|
||||
"opt-fulldisk_autoresume": TT("Auto resume"),
|
||||
@@ -616,6 +614,7 @@ SKIN_TEXT = {
|
||||
"addMultipleFeeds": TT("Seperate multiple URLs by a comma"), #: Config->RSS, placeholder (cannot be too long)
|
||||
"button-preFeed": TT("Read Feed"), #: Config->RSS button
|
||||
"button-forceFeed": TT("Force Download"), #: Config->RSS button
|
||||
"button-evalFeed": TT("Apply filters"),
|
||||
"rss-edit": TT("Edit"), #: Config->RSS edit button
|
||||
"rss-nextscan": TT("Next scan at"), #: Config->RSS when will be the next RSS scan
|
||||
"rss-order": TT("Order"), #: Config->RSS table column header
|
||||
@@ -710,29 +709,19 @@ SKIN_TEXT = {
|
||||
"catFolderPath": TT("Folder/Path"),
|
||||
"catTags": TT("Indexer Categories / Groups"),
|
||||
# Config->Sorting
|
||||
"selectOneCat": TT("Select at least 1 category."),
|
||||
"seriesSorting": TT("Series Sorting"),
|
||||
"opt-tvsort": TT("Enable TV Sorting"),
|
||||
"sort-legenda": TT("Pattern Key"),
|
||||
"button-clear": TT("Clear"),
|
||||
"button-evalFeed": TT("Apply filters"),
|
||||
"presetSort": TT("Presets"),
|
||||
"movieSort": TT("Movie Sorting"),
|
||||
"opt-movieSort": TT("Enable Movie Sorting"),
|
||||
"seriesSort": TT("Series Sorting"),
|
||||
"presetSort": TT("Presets"),
|
||||
"affectedCat": TT("Affected Categories"),
|
||||
"sort-meaning": TT("Meaning"),
|
||||
"sort-pattern": TT("Pattern"),
|
||||
"sort-result": TT("Result"),
|
||||
"button-Season1x05": TT("1x05 Season Folder"),
|
||||
"button-SeasonS01E05": TT("S01E05 Season Folder"),
|
||||
"button-Ep1x05": TT("1x05 Episode Folder"),
|
||||
"button-EpS01E05": TT("S01E05 Episode Folder"),
|
||||
"button-FileLikeFolder": TT("Job Name as Filename"),
|
||||
"sort-title": TT("Title"),
|
||||
"movie-sp-name": TT("Movie Name"),
|
||||
"movie-dot-name": TT("Movie.Name"),
|
||||
"movie-us-name": TT("Movie_Name"),
|
||||
"show-name": TT("Show Name"),
|
||||
"show-sp-name": TT("Show Name"),
|
||||
"show-dot-name": TT("Show.Name"),
|
||||
"show-us-name": TT("Show_Name"),
|
||||
@@ -742,7 +731,6 @@ SKIN_TEXT = {
|
||||
"ep-sp-name": TT("Episode Name"),
|
||||
"ep-dot-name": TT("Episode.Name"),
|
||||
"ep-us-name": TT("Episode_Name"),
|
||||
"fileExt": TT("File Extension"),
|
||||
"extension": TT("Extension"),
|
||||
"partNumber": TT("Part Number"),
|
||||
"decade": TT("Decade"),
|
||||
@@ -753,14 +741,13 @@ SKIN_TEXT = {
|
||||
"text": TT("text"),
|
||||
"sort-File": TT("file"),
|
||||
"sortString": TT("Sort String"),
|
||||
"multiPartLabel": TT("Multi-part label"),
|
||||
"multiPartLabel": TT("Multi-part Label"),
|
||||
"button-showFolder": TT("Show folder"),
|
||||
"button-seasonFolder": TT("Season folder"),
|
||||
"button-inFolders": TT("In folders"),
|
||||
"button-noFolders": TT("No folders"),
|
||||
"dateSorting": TT("Date Sorting"),
|
||||
"opt-dateSort": TT("Enable Date Sorting"),
|
||||
"button-ShowNameF": TT("Show Name folder"),
|
||||
"button-YMF": TT("Year-Month Folders"),
|
||||
"button-DailyF": TT("Daily Folders"),
|
||||
"button-FileLikeFolder": TT("Job Name as Filename"),
|
||||
"button-Series": TT("Series"),
|
||||
"case-adjusted": TT("case-adjusted"), #: Note for title expression in Sorting that does case adjustment
|
||||
"sortResult": TT("Processed Result"),
|
||||
"sort-guessitMeaning": TT("Any property"),
|
||||
@@ -768,6 +755,31 @@ SKIN_TEXT = {
|
||||
"guessit-sp-property": TT("GuessIt Property"),
|
||||
"guessit-dot-property": TT("GuessIt.Property"),
|
||||
"guessit-us-property": TT("GuessIt_Property"),
|
||||
"sort-minimum-size": TT("Minimum Filesize"),
|
||||
"guessit-type": TT("Affected Job Types"),
|
||||
"guessit-type-all": TT("All"),
|
||||
"guessit-type-tv": TT("Series"),
|
||||
"guessit-type-date": TT("Series with air dates"),
|
||||
"guessit-type-movie": TT("Movies"),
|
||||
"guessit-type-other": TT("Other / Unknown"),
|
||||
"explain-sorting": TT(
|
||||
"<p>Use Sorters to automatically organize your completed downloads. For example, put all episodes from a series "
|
||||
"in a season-specific folder. Or, put movies in a folder named after the movie.</p>"
|
||||
"<p>Sorters are tried in order of appearance and can be reordered by dragging and dropping.<br/>"
|
||||
"The first active sorter that matches both the affected category and job type is applied.</p>"
|
||||
"<p>More options are available when Advanced Settings is checked.<br/>"
|
||||
"Detailed information can be found on the Wiki.</p>"
|
||||
),
|
||||
"add-sorter": TT("Add Sorter"),
|
||||
"remove-sorter": TT("Remove Sorter"),
|
||||
"sort-test-data": TT("Test Data"),
|
||||
"sort-quick-add": TT("Quick start"),
|
||||
"sort-quick-add-series": TT(
|
||||
'Move and rename all episodes in the "tv" category to a show-specific folder'
|
||||
), #: Do not translate "tv"!
|
||||
"sort-quick-add-movies": TT(
|
||||
'Move and rename all movies in the "movies" category to a movie-specific folder'
|
||||
), #: Do not translate "movies"!
|
||||
# Config->Special
|
||||
"explain-special": TT(
|
||||
"Rarely used options. For their meaning and explanation, click on the Help button to go to the Wiki page.<br>"
|
||||
@@ -857,6 +869,7 @@ SKIN_TEXT = {
|
||||
"Glitter-confirmDeleteQueue": TT("Confirm Queue Deletions"),
|
||||
"Glitter-confirmDeleteHistory": TT("Confirm History Deletions"),
|
||||
"Glitter-keyboardShortcuts": TT("Keyboard shortcuts"),
|
||||
"Glitter-keyboardShortcuts-arrows": TT("Shift+Arrow key: Browse Queue and History pages"),
|
||||
"Glitter-pausePrompt": TT("How long or untill when do you want to pause? (in English!)"),
|
||||
"Glitter-pausePromptFail": TT("Sorry, we could not interpret that. Try again."),
|
||||
"Glitter-pauseFor": TT("Pause for..."),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -14,6 +14,8 @@ SIZE_URL_LIST = [
|
||||
[5, "https://sabnzbd.org/tests/internetspeed/5MB.bin"],
|
||||
[10, "https://sabnzbd.org/tests/internetspeed/10MB.bin"],
|
||||
[20, "https://sabnzbd.org/tests/internetspeed/20MB.bin"],
|
||||
[50, "https://sabnzbd.org/tests/internetspeed/50MB.bin"],
|
||||
[100, "https://sabnzbd.org/tests/internetspeed/100MB.bin"],
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -5,5 +5,5 @@
|
||||
|
||||
# You MUST use double quotes (so " and not ')
|
||||
|
||||
__version__ = "4.0.0Alpha2"
|
||||
__baseline__ = "unknown"
|
||||
__version__ = "4.0.0"
|
||||
__baseline__ = "c27c9564cf424e898e85fb1e393d6aeadef63deb"
|
||||
|
||||
@@ -28,7 +28,7 @@ parts:
|
||||
source: .
|
||||
requirements: [snap/local/requirements_snap.txt, requirements.txt]
|
||||
stage-packages: [python3-dev, libdb5.3, unrar, p7zip-full, par2]
|
||||
build-packages: [libffi-dev, python3-dev, libssl-dev, cargo]
|
||||
build-packages: [pkg-config, libffi-dev, python3-dev, libssl-dev, cargo]
|
||||
override-build: |
|
||||
snapcraftctl set-version $(grep -oP '(?<=^Version: ).*' PKG-INFO)
|
||||
snapcraftctl build
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user