mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-01-30 18:32:40 -05:00
Compare commits
412 Commits
4.0.0Alpha
...
4.0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a6f04496d | ||
|
|
47f2df2112 | ||
|
|
363a26b8a1 | ||
|
|
7e50a00f55 | ||
|
|
a7d6a80e82 | ||
|
|
e7da95b2ac | ||
|
|
422b4fce7b | ||
|
|
e3a7226648 | ||
|
|
5b9fc86319 | ||
|
|
5afea2d3c7 | ||
|
|
5f942a6943 | ||
|
|
18075c5c51 | ||
|
|
a728225782 | ||
|
|
74fca23d59 | ||
|
|
0a12fa1253 | ||
|
|
3e6ae26710 | ||
|
|
a8a4e442a8 | ||
|
|
c16e91734d | ||
|
|
bb9ad4b546 | ||
|
|
43045e5d4e | ||
|
|
63c7dbdb4d | ||
|
|
ef217bba90 | ||
|
|
ca9924c38f | ||
|
|
c3c47507e7 | ||
|
|
dc237c752a | ||
|
|
08892c71b2 | ||
|
|
026717b7c2 | ||
|
|
be06290f6c | ||
|
|
9ec55478c9 | ||
|
|
4172b4a2a6 | ||
|
|
59620c2217 | ||
|
|
c410c646b2 | ||
|
|
0b515996d7 | ||
|
|
8b9b8319a1 | ||
|
|
161cf14519 | ||
|
|
c6ac09e938 | ||
|
|
fde8f9d133 | ||
|
|
2bd222ca1c | ||
|
|
12228fe1fb | ||
|
|
c63b2592f1 | ||
|
|
e65980258c | ||
|
|
bd0a90d2dd | ||
|
|
33a7e92f4c | ||
|
|
51d1a1994d | ||
|
|
835745e485 | ||
|
|
bcb553d9f9 | ||
|
|
b73b8aae6a | ||
|
|
51792e31a8 | ||
|
|
1263068140 | ||
|
|
916c191b18 | ||
|
|
d8c0220353 | ||
|
|
4ab425d15c | ||
|
|
74e5633d1c | ||
|
|
89d36bbc61 | ||
|
|
1877ac18a5 | ||
|
|
636a391db3 | ||
|
|
57d5ed2f21 | ||
|
|
bbb1d1d908 | ||
|
|
c5d8f52f03 | ||
|
|
1b49e4a355 | ||
|
|
878cb589c3 | ||
|
|
5e42e25617 | ||
|
|
c27c9564cf | ||
|
|
c4b0da335d | ||
|
|
53ce88d3d2 | ||
|
|
85e9bea9e7 | ||
|
|
7c7f88ebb5 | ||
|
|
cbd007b81a | ||
|
|
ac0438de42 | ||
|
|
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 | ||
|
|
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 |
3
.github/renovate.json
vendored
3
.github/renovate.json
vendored
@@ -5,7 +5,7 @@
|
||||
":disableDependencyDashboard"
|
||||
],
|
||||
"schedule": [
|
||||
"before 3am on Monday"
|
||||
"before 8am on Monday"
|
||||
],
|
||||
"ignorePaths": [
|
||||
"tests/**",
|
||||
@@ -15,6 +15,7 @@
|
||||
"fileMatch": [
|
||||
"requirements.txt",
|
||||
"builder/requirements.txt",
|
||||
"builder/release-requirements.txt",
|
||||
"builder/osx/requirements.txt"
|
||||
]
|
||||
},
|
||||
|
||||
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
|
||||
58
.github/workflows/build_release.yml
vendored
58
.github/workflows/build_release.yml
vendored
@@ -4,7 +4,6 @@ on: [push, pull_request]
|
||||
|
||||
# Setting PYTHONNODEBUGRANGES reduces binary size
|
||||
env:
|
||||
AUTOMATION_GITHUB_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
PYTHONNODEBUGRANGES: 1
|
||||
|
||||
jobs:
|
||||
@@ -25,16 +24,15 @@ jobs:
|
||||
with:
|
||||
custom_virtualenv_dir: "venv64"
|
||||
custom_cache_key_element: "release"
|
||||
requirement_files: |
|
||||
**/requirements.txt
|
||||
PKG-INFO
|
||||
requirement_files: "**/requirements.txt"
|
||||
- name: Install Python dependencies (64bit)
|
||||
if: steps.cache-virtualenv-64bit.outputs.cache-hit != 'true'
|
||||
# Without dependencies to make sure everything is covered in the requirements.txt
|
||||
run: |
|
||||
python --version
|
||||
pip install --upgrade pip wheel
|
||||
pip install --upgrade -r requirements.txt
|
||||
pip install --upgrade -r builder/requirements.txt
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install --upgrade -r requirements.txt --no-dependencies
|
||||
pip install --upgrade -r builder/requirements.txt --no-dependencies
|
||||
- name: Build Windows standalone binary and installer (64bit)
|
||||
run: python builder/package.py installer
|
||||
- name: Upload Windows standalone binary (64bit)
|
||||
@@ -58,14 +56,13 @@ jobs:
|
||||
with:
|
||||
custom_virtualenv_dir: "venv32"
|
||||
custom_cache_key_element: "release"
|
||||
requirement_files: |
|
||||
**/requirements.txt
|
||||
PKG-INFO
|
||||
requirement_files: "**/requirements.txt"
|
||||
- name: Install Python dependencies (32bit and legacy)
|
||||
if: steps.cache-virtualenv-32bit.outputs.cache-hit != 'true'
|
||||
# We do not care about the extra dependencies for the legacy build
|
||||
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 (32bit and legacy)
|
||||
@@ -75,9 +72,6 @@ jobs:
|
||||
with:
|
||||
path: "*-win32-bin.zip"
|
||||
name: Windows Windows standalone binary (32bit and legacy)
|
||||
- name: Prepare official release
|
||||
if: env.AUTOMATION_GITHUB_TOKEN && startsWith(github.ref, 'refs/tags/')
|
||||
run: python builder/package.py release
|
||||
|
||||
build_macos:
|
||||
name: Build macOS binary
|
||||
@@ -87,7 +81,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
|
||||
@@ -113,15 +107,14 @@ jobs:
|
||||
id: cache-virtualenv
|
||||
with:
|
||||
custom_cache_key_element: "release"
|
||||
requirement_files: |
|
||||
**/requirements.txt
|
||||
PKG-INFO
|
||||
requirement_files: "**/requirements.txt"
|
||||
- name: Install Python dependencies
|
||||
# We have to manually take a few steps:
|
||||
# 1. Because building cryptography is hard, and we cannot force pip to fetch universal2 version we
|
||||
# first install the x86 version (and it's dependencies) and then manually fetch the universal2 build
|
||||
# https://github.com/pyca/cryptography/issues/5918
|
||||
# 2. We need to build the PyInstaller bootloader:
|
||||
# 2. Due to PyObjC we cannot run pip on the main requirements without installing dependencies
|
||||
# 3. We need to build the PyInstaller bootloader:
|
||||
# https://github.com/pyinstaller/pyinstaller/issues/6235
|
||||
if: steps.cache-virtualenv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
@@ -134,7 +127,7 @@ jobs:
|
||||
pip3 download -r builder/osx/requirements.txt --platform macosx_10_12_universal2 --only-binary :all: --no-deps --dest .
|
||||
pip3 install -r builder/osx/requirements.txt --no-cache-dir --no-index --find-links .
|
||||
|
||||
PYINSTALLER_COMPILE_BOOTLOADER=1 pip3 install --upgrade -r builder/requirements.txt --no-binary pyinstaller
|
||||
PYINSTALLER_COMPILE_BOOTLOADER=1 pip3 install --upgrade -r builder/requirements.txt --no-binary pyinstaller --no-dependencies
|
||||
- name: Import macOS codesign certificates
|
||||
# Taken from https://github.com/Apple-Actions/import-codesign-certs/pull/27 (comments)
|
||||
env:
|
||||
@@ -171,23 +164,34 @@ jobs:
|
||||
with:
|
||||
path: "*-osx.dmg"
|
||||
name: macOS binary (not notarized)
|
||||
- name: Prepare official release
|
||||
if: env.AUTOMATION_GITHUB_TOKEN && startsWith(github.ref, 'refs/tags/')
|
||||
run: python3 builder/package.py release
|
||||
|
||||
release_snap:
|
||||
name: Release Snap
|
||||
release:
|
||||
name: Publish Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build_windows, build_macos]
|
||||
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_TOKEN }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: dist
|
||||
- name: Move all artifacts to main folder
|
||||
run: find dist -type f -exec mv {} . \;
|
||||
- name: Prepare official release
|
||||
env:
|
||||
AUTOMATION_GITHUB_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
REDDIT_TOKEN: ${{ secrets.REDDIT_TOKEN }}
|
||||
run: |
|
||||
pip3 install -r builder/release-requirements.txt
|
||||
python3 builder/release.py
|
||||
- name: Release latest available Snap
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_TOKEN }}
|
||||
run: |
|
||||
sudo snap install snapcraft --classic
|
||||
python3 snap/local/release_snap.py
|
||||
|
||||
22
.github/workflows/integration_testing.yml
vendored
22
.github/workflows/integration_testing.yml
vendored
@@ -27,27 +27,35 @@ 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:
|
||||
python-version: ["3.8", "3.9", "3.10", "3.11"]
|
||||
python-architecture: ["x64"]
|
||||
name: ["Linux"]
|
||||
os: [ubuntu-20.04]
|
||||
include:
|
||||
- name: macOS
|
||||
os: macos-latest
|
||||
python-version: "3.11"
|
||||
python-architecture: "x64"
|
||||
- name: Windows
|
||||
os: windows-latest
|
||||
python-version: "3.11"
|
||||
python-architecture: "x64"
|
||||
- name: Windows (32bit)
|
||||
os: windows-latest
|
||||
python-version: "3.8"
|
||||
python-architecture: "x86"
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
- name: Set up Python ${{ matrix.python-version }} ${{ matrix.python-architecture }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
architecture: "x64"
|
||||
architecture: ${{ matrix.python-architecture }}
|
||||
- name: Install system dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get install unrar p7zip-full par2
|
||||
@@ -55,15 +63,13 @@ jobs:
|
||||
uses: syphar/restore-virtualenv@v1.3
|
||||
id: cache-virtualenv
|
||||
with:
|
||||
custom_cache_key_element: "ci"
|
||||
requirement_files: |
|
||||
**/requirements.txt
|
||||
PKG-INFO
|
||||
custom_cache_key_element: ci-${{ matrix.python-architecture }}
|
||||
requirement_files: "**/requirements.txt"
|
||||
- name: Install Python dependencies
|
||||
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"
|
||||
6
.github/workflows/translations.yml
vendored
6
.github/workflows/translations.yml
vendored
@@ -20,9 +20,11 @@ jobs:
|
||||
python3 tools/extract_pot.py
|
||||
- name: Push/pull Transifex translations
|
||||
if: env.TX_TOKEN
|
||||
# Add --translation to the push command in order to update Transifex using local translation edits
|
||||
# However, this prevents modifying existing translations in Transifex as they will be overwritten by the push!
|
||||
run: |
|
||||
curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash
|
||||
./tx push --translation --source
|
||||
./tx push --source
|
||||
./tx pull --all --force
|
||||
- name: Compile translations to validate them
|
||||
run: |
|
||||
@@ -31,7 +33,7 @@ jobs:
|
||||
uses: stefanzweifel/git-auto-commit-action@v4.16.0
|
||||
if: env.TX_TOKEN
|
||||
with:
|
||||
commit_message: |
|
||||
commit_message: |
|
||||
Update translatable texts
|
||||
[skip ci]
|
||||
commit_user_name: SABnzbd Automation
|
||||
|
||||
10
PKG-INFO
10
PKG-INFO
@@ -1,10 +0,0 @@
|
||||
Metadata-Version: 1.0
|
||||
Name: SABnzbd
|
||||
Version: 4.0.0Alpha3
|
||||
Summary: SABnzbd-4.0.0Alpha3
|
||||
Home-page: https://sabnzbd.org
|
||||
Author: The SABnzbd Team
|
||||
Author-email: team@sabnzbd.org
|
||||
License: GNU General Public License 2 (GPL2 or later)
|
||||
Description: Fully automated Usenet Binary Downloader
|
||||
Platform: posix
|
||||
47
README.mkd
47
README.mkd
@@ -1,31 +1,48 @@
|
||||
Release Notes - SABnzbd 4.0.0 Alpha 3
|
||||
Release Notes - SABnzbd 4.0.2
|
||||
=========================================================
|
||||
## Changes since 4.0.0 Alpha 2
|
||||
- Combined article downloading and decoding steps.
|
||||
- There are 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!
|
||||
- Replaced separate Series/Movie/Date Sorting with general Sorter.
|
||||
|
||||
## Breaking change
|
||||
- The `Parameters` setting of a `Notification Script` is now passed as
|
||||
environment variable `SAB_NOTIFICATION_PARAMETERS` instead of as a
|
||||
command-line parameter. This prevents the possibility of remote code
|
||||
execution on systems exposed to the internet without a username/password.
|
||||
If you use `nzb-notify` you need to update it to the latest version.
|
||||
|
||||
## Bugfixes and changes since 4.0.1
|
||||
- Disabling a server during download did not stop it from downloading.
|
||||
- Show last line of post-processing script output even if it failed.
|
||||
- Prevent crash during Deobfuscate on non-unique paths.
|
||||
- Files that could not be parsed were removed from the `Watched Folder`.
|
||||
- Warn if the file system does not support unicode or long filenames.
|
||||
- Warn if `Scripts Folder` is inside the application directory.
|
||||
- Prevent output buffering of Python post-processing scripts.
|
||||
- The `PKG-INFO` file was removed from the `src` release.
|
||||
- Correctly decode partially malformed UUencoded posts.
|
||||
- macOS: Tray icon could not be disabled.
|
||||
|
||||
## 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 increase 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.
|
||||
- Slow down 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
|
||||
|
||||
46
README.txt
Normal file
46
README.txt
Normal file
@@ -0,0 +1,46 @@
|
||||
Release Notes - SABnzbd 4.0.0 Release Candidate 2
|
||||
=========================================================
|
||||
|
||||
## 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.
|
||||
Special thanks to: mnightingale, puzzledsab and animetosho!
|
||||
- There are 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!
|
||||
- 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
|
||||
- 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
|
||||
version. If you downgrade to 3.1.x or lower, detailed download
|
||||
statistics will be lost.
|
||||
|
||||
## Known problems and solutions
|
||||
- Read the file "ISSUES.txt"
|
||||
|
||||
## About
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
It simplifies the process of downloading from Usenet dramatically, thanks
|
||||
to its web-based user interface and advanced built-in post-processing options
|
||||
that automatically verify, repair, extract and clean up posts downloaded
|
||||
from Usenet.
|
||||
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
@@ -17,7 +17,9 @@
|
||||
|
||||
import sys
|
||||
|
||||
if sys.hexversion < 0x03080000:
|
||||
# Trick to show a better message on older Python
|
||||
# releases that don't support walrus operator
|
||||
if Python_38_is_required_to_run_SABnzbd := sys.hexversion < 0x03080000:
|
||||
print("Sorry, requires Python 3.8 or above")
|
||||
print("You can read more at: https://sabnzbd.org/wiki/installation/install-off-modules")
|
||||
sys.exit(1)
|
||||
@@ -425,7 +427,8 @@ def print_modules():
|
||||
logging.info("SABCTools module is linked to OpenSSL: %s", sabnzbd.decoder.SABCTOOLS_OPENSSL_LINKED)
|
||||
|
||||
# Check if we managed to link, warning for now
|
||||
if not sabnzbd.decoder.SABCTOOLS_OPENSSL_LINKED:
|
||||
# It won't work on OpenSSL < 1.1.1 anyway, so we skip the check there
|
||||
if not sabnzbd.decoder.SABCTOOLS_OPENSSL_LINKED and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1):
|
||||
logging.warning(
|
||||
"Could not link to OpenSSL library, please report here: "
|
||||
"https://github.com/sabnzbd/sabnzbd/issues/2421"
|
||||
|
||||
@@ -2,43 +2,17 @@
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import pkginfo
|
||||
|
||||
from PyInstaller.building.api import EXE, COLLECT, PYZ
|
||||
from PyInstaller.building.build_main import Analysis
|
||||
from PyInstaller.building.osx import BUNDLE
|
||||
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
|
||||
|
||||
from builder.constants import EXTRA_FILES, EXTRA_FOLDERS, RELEASE_VERSION
|
||||
|
||||
# Add extra files in the PyInstaller-spec
|
||||
extra_pyinstaller_files = []
|
||||
|
||||
# Also modify these in "package.py"!
|
||||
extra_files = [
|
||||
"README.txt",
|
||||
"INSTALL.txt",
|
||||
"LICENSE.txt",
|
||||
"GPL2.txt",
|
||||
"GPL3.txt",
|
||||
"COPYRIGHT.txt",
|
||||
"ISSUES.txt",
|
||||
"PKG-INFO",
|
||||
]
|
||||
|
||||
extra_folders = [
|
||||
"scripts/",
|
||||
"licenses/",
|
||||
"locale/",
|
||||
"email/",
|
||||
"interfaces/Glitter/",
|
||||
"interfaces/wizard/",
|
||||
"interfaces/Config/",
|
||||
"scripts/",
|
||||
"icons/",
|
||||
]
|
||||
|
||||
# Get the version
|
||||
RELEASE_VERSION = pkginfo.Develop(".").version
|
||||
|
||||
# Add hidden imports
|
||||
extra_hiddenimports = ["Cheetah.DummyTransaction", "cheroot.ssl.builtin", "certifi"]
|
||||
extra_hiddenimports.extend(collect_submodules("babelfish.converters"))
|
||||
@@ -48,7 +22,7 @@ extra_hiddenimports.extend(collect_submodules("guessit.data"))
|
||||
if sys.platform == "darwin":
|
||||
extra_hiddenimports.extend(["objc", "PyObjCTools"])
|
||||
# macOS folders
|
||||
extra_folders += ["osx/par2/", "osx/unrar/", "osx/7zip/"]
|
||||
EXTRA_FOLDERS += ["osx/par2/", "osx/unrar/", "osx/7zip/"]
|
||||
# Add NZB-icon file
|
||||
extra_pyinstaller_files.append(("builder/osx/image/nzbfile.icns", "."))
|
||||
# Version information is set differently on macOS
|
||||
@@ -67,8 +41,8 @@ else:
|
||||
|
||||
# Windows
|
||||
extra_hiddenimports.append("win32timezone")
|
||||
extra_folders += ["win/multipar/", "win/unrar/", "win/7zip/"]
|
||||
extra_files += ["portable.cmd"]
|
||||
EXTRA_FOLDERS += ["win/multipar/", "win/unrar/", "win/7zip/"]
|
||||
EXTRA_FILES += ["portable.cmd"]
|
||||
|
||||
# Parse the version info
|
||||
version_regexed = re.search(r"(\d+)\.(\d+)\.(\d+)([a-zA-Z]*)(\d*)", RELEASE_VERSION)
|
||||
@@ -109,9 +83,9 @@ else:
|
||||
)
|
||||
|
||||
# Process the extra-files and folders
|
||||
for file_item in extra_files:
|
||||
for file_item in EXTRA_FILES:
|
||||
extra_pyinstaller_files.append((file_item, "."))
|
||||
for folder_item in extra_folders:
|
||||
for folder_item in EXTRA_FOLDERS:
|
||||
extra_pyinstaller_files.append((folder_item, folder_item))
|
||||
|
||||
# Add babelfish data files
|
||||
|
||||
62
builder/constants.py
Normal file
62
builder/constants.py
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <team@sabnzbd.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
import os
|
||||
|
||||
# Constants
|
||||
VERSION_FILE = "sabnzbd/version.py"
|
||||
|
||||
# To draft a release or not to draft a release?
|
||||
ON_GITHUB_ACTIONS = os.environ.get("CI", False)
|
||||
RELEASE_THIS = "refs/tags/" in os.environ.get("GITHUB_REF", "")
|
||||
|
||||
# Import version.py without the sabnzbd overhead
|
||||
with open(VERSION_FILE) as version_file:
|
||||
exec(version_file.read())
|
||||
RELEASE_VERSION = __version__
|
||||
|
||||
# Define release name
|
||||
RELEASE_NAME = "SABnzbd-%s" % RELEASE_VERSION
|
||||
RELEASE_TITLE = "SABnzbd %s" % RELEASE_VERSION
|
||||
RELEASE_SRC = RELEASE_NAME + "-src.tar.gz"
|
||||
RELEASE_BINARY_32 = RELEASE_NAME + "-win32-bin.zip"
|
||||
RELEASE_BINARY_64 = RELEASE_NAME + "-win64-bin.zip"
|
||||
RELEASE_INSTALLER = RELEASE_NAME + "-win-setup.exe"
|
||||
RELEASE_MACOS = RELEASE_NAME + "-osx.dmg"
|
||||
RELEASE_README = "README.mkd"
|
||||
|
||||
# Used in package.py and SABnzbd.spec
|
||||
EXTRA_FILES = [
|
||||
"README.mkd",
|
||||
"INSTALL.txt",
|
||||
"LICENSE.txt",
|
||||
"GPL2.txt",
|
||||
"GPL3.txt",
|
||||
"COPYRIGHT.txt",
|
||||
"ISSUES.txt",
|
||||
]
|
||||
EXTRA_FOLDERS = [
|
||||
"scripts/",
|
||||
"licenses/",
|
||||
"locale/",
|
||||
"email/",
|
||||
"interfaces/Glitter/",
|
||||
"interfaces/wizard/",
|
||||
"interfaces/Config/",
|
||||
"scripts/",
|
||||
"icons/",
|
||||
]
|
||||
@@ -16,7 +16,7 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
import os
|
||||
import pkginfo
|
||||
from constants import RELEASE_VERSION
|
||||
|
||||
|
||||
# We need to call dmgbuild from command-line, so here we can setup how
|
||||
@@ -37,7 +37,7 @@ if __name__ == "__main__":
|
||||
|
||||
# Extract version info and set DMG path
|
||||
# Create sub-folder to upload later
|
||||
release = pkginfo.Develop(".").version
|
||||
release = RELEASE_VERSION
|
||||
prod = "SABnzbd-" + release
|
||||
fileDmg = prod + "-osx.dmg"
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# Special requirements for macOS universal2 binary release
|
||||
# This way dependabot can auto-update them
|
||||
cryptography==39.0.2
|
||||
cryptography==40.0.2
|
||||
@@ -16,7 +16,6 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
import glob
|
||||
import hashlib
|
||||
import platform
|
||||
import re
|
||||
import sys
|
||||
@@ -29,37 +28,22 @@ import tarfile
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
import configobj
|
||||
import pkginfo
|
||||
import github
|
||||
from typing import List
|
||||
|
||||
|
||||
VERSION_FILE = "sabnzbd/version.py"
|
||||
SPEC_FILE = "SABnzbd.spec"
|
||||
|
||||
# Also modify these in "SABnzbd.spec"!
|
||||
extra_files = [
|
||||
"README.mkd",
|
||||
"INSTALL.txt",
|
||||
"LICENSE.txt",
|
||||
"GPL2.txt",
|
||||
"GPL3.txt",
|
||||
"COPYRIGHT.txt",
|
||||
"ISSUES.txt",
|
||||
"PKG-INFO",
|
||||
]
|
||||
|
||||
extra_folders = [
|
||||
"scripts/",
|
||||
"licenses/",
|
||||
"locale/",
|
||||
"email/",
|
||||
"interfaces/Glitter/",
|
||||
"interfaces/wizard/",
|
||||
"interfaces/Config/",
|
||||
"scripts/",
|
||||
"icons/",
|
||||
]
|
||||
from constants import (
|
||||
RELEASE_VERSION,
|
||||
VERSION_FILE,
|
||||
RELEASE_README,
|
||||
RELEASE_NAME,
|
||||
RELEASE_BINARY_32,
|
||||
RELEASE_BINARY_64,
|
||||
RELEASE_INSTALLER,
|
||||
ON_GITHUB_ACTIONS,
|
||||
RELEASE_THIS,
|
||||
RELEASE_SRC,
|
||||
EXTRA_FILES,
|
||||
EXTRA_FOLDERS,
|
||||
)
|
||||
|
||||
|
||||
# Support functions
|
||||
@@ -132,13 +116,16 @@ def test_sab_binary(binary_path: str):
|
||||
|
||||
# Wait for SAB to respond
|
||||
base_url = "http://127.0.0.1:8080/"
|
||||
for _ in range(10):
|
||||
for _ in range(30):
|
||||
try:
|
||||
urllib.request.urlopen(base_url, timeout=1).read()
|
||||
break
|
||||
except:
|
||||
time.sleep(1)
|
||||
else:
|
||||
# Print console output and give some time to print
|
||||
print(sabnzbd_process.stdout.read())
|
||||
time.sleep(1)
|
||||
raise urllib.error.URLError("Could not connect to SABnzbd")
|
||||
|
||||
# Open a number of API calls and pages, to see if we are really up
|
||||
@@ -173,7 +160,7 @@ def test_sab_binary(binary_path: str):
|
||||
print(log_file.read())
|
||||
|
||||
# So we have time to print the file before the directory is removed
|
||||
time.sleep(1)
|
||||
time.sleep(5)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
@@ -185,32 +172,15 @@ if __name__ == "__main__":
|
||||
if not os.path.exists("builder"):
|
||||
raise FileNotFoundError("Run from the main SABnzbd source folder: python builder/package.py")
|
||||
|
||||
# Extract version info
|
||||
RELEASE_VERSION = pkginfo.Develop(".").version
|
||||
|
||||
# Check if we have the needed certificates
|
||||
try:
|
||||
import certifi
|
||||
except ImportError:
|
||||
raise FileNotFoundError("Need certifi module")
|
||||
|
||||
# Define release name
|
||||
RELEASE_NAME = "SABnzbd-%s" % RELEASE_VERSION
|
||||
RELEASE_TITLE = "SABnzbd %s" % RELEASE_VERSION
|
||||
RELEASE_SRC = RELEASE_NAME + "-src.tar.gz"
|
||||
RELEASE_BINARY_32 = RELEASE_NAME + "-win32-bin.zip"
|
||||
RELEASE_BINARY_64 = RELEASE_NAME + "-win64-bin.zip"
|
||||
RELEASE_INSTALLER = RELEASE_NAME + "-win-setup.exe"
|
||||
RELEASE_MACOS = RELEASE_NAME + "-osx.dmg"
|
||||
RELEASE_README = "README.mkd"
|
||||
|
||||
# Patch release file
|
||||
patch_version_file(RELEASE_VERSION)
|
||||
|
||||
# To draft a release or not to draft a release?
|
||||
ON_GITHUB_ACTIONS = os.environ.get("CI", False)
|
||||
RELEASE_THIS = "refs/tags/" in os.environ.get("GITHUB_REF", "")
|
||||
|
||||
# Rename release notes file
|
||||
safe_remove("README.txt")
|
||||
shutil.copyfile(RELEASE_README, "README.txt")
|
||||
@@ -229,7 +199,7 @@ if __name__ == "__main__":
|
||||
safe_remove(RELEASE_NAME)
|
||||
|
||||
# Copy the specification
|
||||
shutil.copyfile("builder/%s" % SPEC_FILE, SPEC_FILE)
|
||||
shutil.copyfile("builder/SABnzbd.spec", "SABnzbd.spec")
|
||||
|
||||
if "binary" in sys.argv or "installer" in sys.argv:
|
||||
# Must be run on Windows
|
||||
@@ -256,7 +226,6 @@ if __name__ == "__main__":
|
||||
delete_files_glob("dist/SABnzbd/ucrtbase.dll")
|
||||
|
||||
# Remove other files we don't need
|
||||
delete_files_glob("dist/SABnzbd/PKG-INFO")
|
||||
delete_files_glob("dist/SABnzbd/win32ui.pyd")
|
||||
delete_files_glob("dist/SABnzbd/winxpgui.pyd")
|
||||
|
||||
@@ -435,15 +404,15 @@ if __name__ == "__main__":
|
||||
safe_remove(RELEASE_SRC)
|
||||
|
||||
# Add extra files and folders need for source dist
|
||||
extra_folders.extend(["sabnzbd/", "po/", "linux/", "tools/", "tests/"])
|
||||
extra_files.extend(["SABnzbd.py", "requirements.txt"])
|
||||
EXTRA_FOLDERS.extend(["sabnzbd/", "po/", "linux/", "tools/", "tests/"])
|
||||
EXTRA_FILES.extend(["SABnzbd.py", "requirements.txt"])
|
||||
|
||||
# Copy all folders and files to the new folder
|
||||
for source_folder in extra_folders:
|
||||
for source_folder in EXTRA_FOLDERS:
|
||||
shutil.copytree(source_folder, os.path.join(src_folder, source_folder), dirs_exist_ok=True)
|
||||
|
||||
# Copy all files
|
||||
for source_file in extra_files:
|
||||
for source_file in EXTRA_FILES:
|
||||
shutil.copyfile(source_file, os.path.join(src_folder, source_file))
|
||||
|
||||
# Make sure all line-endings are correct
|
||||
@@ -483,173 +452,6 @@ if __name__ == "__main__":
|
||||
# Remove source folder
|
||||
safe_remove(src_folder)
|
||||
|
||||
# Calculate hashes for Synology release
|
||||
with open(RELEASE_SRC, "rb") as inp_file:
|
||||
source_data = inp_file.read()
|
||||
|
||||
print("----")
|
||||
print(RELEASE_SRC, "SHA1", hashlib.sha1(source_data).hexdigest())
|
||||
print(RELEASE_SRC, "SHA256", hashlib.sha256(source_data).hexdigest())
|
||||
print(RELEASE_SRC, "MD5", hashlib.md5(source_data).hexdigest())
|
||||
print("----")
|
||||
|
||||
# Release to github
|
||||
if "release" in sys.argv:
|
||||
# Check if tagged as release and check for token
|
||||
gh_token = os.environ.get("AUTOMATION_GITHUB_TOKEN", "")
|
||||
if RELEASE_THIS and gh_token:
|
||||
gh_obj = github.Github(gh_token)
|
||||
gh_repo = gh_obj.get_repo("sabnzbd/sabnzbd")
|
||||
|
||||
# Read the release notes
|
||||
with open(RELEASE_README, "r") as readme_file:
|
||||
readme_data = readme_file.read()
|
||||
|
||||
# Pre-releases are longer than 6 characters (e.g. 3.1.0Beta1 vs 3.1.0, but also 3.0.11)
|
||||
prerelease = len(RELEASE_VERSION) > 5
|
||||
|
||||
# We have to manually check if we already created this release
|
||||
for release in gh_repo.get_releases():
|
||||
if release.tag_name == RELEASE_VERSION:
|
||||
gh_release = release
|
||||
print("Found existing release %s" % gh_release.title)
|
||||
break
|
||||
else:
|
||||
# Did not find it, so create the release, use the GitHub tag we got as input
|
||||
print("Creating GitHub release SABnzbd %s" % RELEASE_VERSION)
|
||||
gh_release = gh_repo.create_git_release(
|
||||
tag=RELEASE_VERSION,
|
||||
name=RELEASE_TITLE,
|
||||
message=readme_data,
|
||||
draft=True,
|
||||
prerelease=prerelease,
|
||||
)
|
||||
|
||||
# Fetch existing assets, as overwriting is not allowed by GitHub
|
||||
gh_assets = gh_release.get_assets()
|
||||
|
||||
# Upload the assets
|
||||
files_to_check = (
|
||||
RELEASE_SRC,
|
||||
RELEASE_BINARY_32,
|
||||
RELEASE_BINARY_64,
|
||||
RELEASE_INSTALLER,
|
||||
RELEASE_MACOS,
|
||||
RELEASE_README,
|
||||
)
|
||||
for file_to_check in files_to_check:
|
||||
if os.path.exists(file_to_check):
|
||||
# Check if this file was previously uploaded
|
||||
if gh_assets.totalCount:
|
||||
for gh_asset in gh_assets:
|
||||
if gh_asset.name == file_to_check:
|
||||
print("Removing existing asset %s " % gh_asset.name)
|
||||
gh_asset.delete_asset()
|
||||
# Upload the new one
|
||||
print("Uploading %s to release %s" % (file_to_check, gh_release.title))
|
||||
gh_release.upload_asset(file_to_check)
|
||||
|
||||
# Check if we now have all files
|
||||
gh_new_assets = gh_release.get_assets()
|
||||
if gh_new_assets.totalCount:
|
||||
all_assets = [gh_asset.name for gh_asset in gh_new_assets]
|
||||
|
||||
# Check if we have all files, using set-comparison
|
||||
if set(files_to_check) == set(all_assets):
|
||||
print("All assets present, releasing %s" % RELEASE_VERSION)
|
||||
# Publish release
|
||||
gh_release.update_release(
|
||||
tag_name=RELEASE_VERSION,
|
||||
name=RELEASE_TITLE,
|
||||
message=readme_data,
|
||||
draft=False,
|
||||
prerelease=prerelease,
|
||||
)
|
||||
|
||||
# Update the website
|
||||
gh_repo_web = gh_obj.get_repo("sabnzbd/sabnzbd.github.io")
|
||||
# Check if the branch already exists, only create one if it doesn't
|
||||
skip_website_update = False
|
||||
try:
|
||||
gh_repo_web.get_branch(RELEASE_VERSION)
|
||||
print("Branch %s on sabnzbd/sabnzbd.github.io already exists, skipping update" % RELEASE_VERSION)
|
||||
skip_website_update = True
|
||||
except github.GithubException:
|
||||
# Create a new branch to have the changes
|
||||
sb = gh_repo_web.get_branch("master")
|
||||
print("Creating branch %s on sabnzbd/sabnzbd.github.io" % RELEASE_VERSION)
|
||||
new_branch = gh_repo_web.create_git_ref(ref="refs/heads/" + RELEASE_VERSION, sha=sb.commit.sha)
|
||||
|
||||
# Update the files
|
||||
if not skip_website_update:
|
||||
# We need bytes version to interact with GitHub
|
||||
RELEASE_VERSION_BYTES = RELEASE_VERSION.encode()
|
||||
|
||||
# Get all the version files
|
||||
latest_txt = gh_repo_web.get_contents("latest.txt")
|
||||
latest_txt_items = latest_txt.decoded_content.split()
|
||||
new_latest_txt_items = latest_txt_items[:2]
|
||||
config_yml = gh_repo_web.get_contents("_config.yml")
|
||||
if prerelease:
|
||||
# If it's a pre-release, we append to current version in latest.txt
|
||||
new_latest_txt_items.extend([RELEASE_VERSION_BYTES, latest_txt_items[1]])
|
||||
# And replace in _config.yml
|
||||
new_config_yml = re.sub(
|
||||
b"latest_testing: '[^']*'",
|
||||
b"latest_testing: '%s'" % RELEASE_VERSION_BYTES,
|
||||
config_yml.decoded_content,
|
||||
)
|
||||
else:
|
||||
# New stable release, replace the version
|
||||
new_latest_txt_items[0] = RELEASE_VERSION_BYTES
|
||||
# And replace in _config.yml
|
||||
new_config_yml = re.sub(
|
||||
b"latest_testing: '[^']*'",
|
||||
b"latest_testing: ''",
|
||||
config_yml.decoded_content,
|
||||
)
|
||||
new_config_yml = re.sub(
|
||||
b"latest_stable: '[^']*'",
|
||||
b"latest_stable: '%s'" % RELEASE_VERSION_BYTES,
|
||||
new_config_yml,
|
||||
)
|
||||
# Also update the wiki-settings, these only use x.x notation
|
||||
new_config_yml = re.sub(
|
||||
b"wiki_version: '[^']*'",
|
||||
b"wiki_version: '%s'" % RELEASE_VERSION_BYTES[:3],
|
||||
new_config_yml,
|
||||
)
|
||||
|
||||
# Update the files
|
||||
print("Updating latest.txt")
|
||||
gh_repo_web.update_file(
|
||||
"latest.txt",
|
||||
"Release %s: latest.txt" % RELEASE_VERSION,
|
||||
b"\n".join(new_latest_txt_items),
|
||||
latest_txt.sha,
|
||||
RELEASE_VERSION,
|
||||
)
|
||||
print("Updating _config.yml")
|
||||
gh_repo_web.update_file(
|
||||
"_config.yml",
|
||||
"Release %s: _config.yml" % RELEASE_VERSION,
|
||||
new_config_yml,
|
||||
config_yml.sha,
|
||||
RELEASE_VERSION,
|
||||
)
|
||||
|
||||
# Create pull-request
|
||||
print("Creating pull request in sabnzbd/sabnzbd.github.io for the update")
|
||||
gh_repo_web.create_pull(
|
||||
title=RELEASE_VERSION,
|
||||
base="master",
|
||||
body="Automated update of release files",
|
||||
head=RELEASE_VERSION,
|
||||
)
|
||||
else:
|
||||
print("To push release to GitHub, first tag the commit.")
|
||||
print("Or missing the AUTOMATION_GITHUB_TOKEN, cannot push to GitHub without it.")
|
||||
|
||||
# Reset!
|
||||
run_git_command(["reset", "--hard"])
|
||||
run_git_command(["clean", "-f"])
|
||||
|
||||
2
builder/release-requirements.txt
Normal file
2
builder/release-requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
PyGithub==1.58.2
|
||||
praw==7.7.0
|
||||
247
builder/release.py
Normal file
247
builder/release.py
Normal file
@@ -0,0 +1,247 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <team@sabnzbd.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
|
||||
import github
|
||||
import praw
|
||||
|
||||
from constants import (
|
||||
RELEASE_VERSION,
|
||||
RELEASE_SRC,
|
||||
RELEASE_BINARY_32,
|
||||
RELEASE_BINARY_64,
|
||||
RELEASE_INSTALLER,
|
||||
RELEASE_MACOS,
|
||||
RELEASE_README,
|
||||
RELEASE_THIS,
|
||||
RELEASE_TITLE,
|
||||
)
|
||||
|
||||
# Verify we have all assets
|
||||
files_to_check = (
|
||||
RELEASE_SRC,
|
||||
RELEASE_BINARY_32,
|
||||
RELEASE_BINARY_64,
|
||||
RELEASE_INSTALLER,
|
||||
RELEASE_MACOS,
|
||||
RELEASE_README,
|
||||
)
|
||||
for file_to_check in files_to_check:
|
||||
if not os.path.exists(file_to_check):
|
||||
raise RuntimeError("Not all release files are present!")
|
||||
print("All release files are present")
|
||||
|
||||
# Calculate hashes for Synology release
|
||||
with open(RELEASE_SRC, "rb") as inp_file:
|
||||
source_data = inp_file.read()
|
||||
|
||||
print("---- Synology spksrc digest hashes ---- ")
|
||||
print(RELEASE_SRC, "SHA1", hashlib.sha1(source_data).hexdigest())
|
||||
print(RELEASE_SRC, "SHA256", hashlib.sha256(source_data).hexdigest())
|
||||
print(RELEASE_SRC, "MD5", hashlib.md5(source_data).hexdigest())
|
||||
print("----")
|
||||
|
||||
# Check if tagged as release and check for token
|
||||
gh_token = os.environ.get("AUTOMATION_GITHUB_TOKEN", "")
|
||||
if RELEASE_THIS and gh_token:
|
||||
gh_obj = github.Github(gh_token)
|
||||
gh_repo = gh_obj.get_repo("sabnzbd/sabnzbd")
|
||||
|
||||
# Read the release notes
|
||||
with open(RELEASE_README, "r") as readme_file:
|
||||
readme_data = readme_file.read()
|
||||
|
||||
# Pre-releases are longer than 6 characters (e.g. 3.1.0Beta1 vs 3.1.0, but also 3.0.11)
|
||||
prerelease = len(RELEASE_VERSION) > 5
|
||||
|
||||
# We have to manually check if we already created this release
|
||||
for release in gh_repo.get_releases():
|
||||
if release.tag_name == RELEASE_VERSION:
|
||||
gh_release = release
|
||||
print("Found existing release %s" % gh_release.title)
|
||||
break
|
||||
else:
|
||||
# Did not find it, so create the release, use the GitHub tag we got as input
|
||||
print("Creating GitHub release SABnzbd %s" % RELEASE_VERSION)
|
||||
gh_release = gh_repo.create_git_release(
|
||||
tag=RELEASE_VERSION,
|
||||
name=RELEASE_TITLE,
|
||||
message=readme_data,
|
||||
draft=True,
|
||||
prerelease=prerelease,
|
||||
)
|
||||
|
||||
# Fetch existing assets, as overwriting is not allowed by GitHub
|
||||
gh_assets = gh_release.get_assets()
|
||||
|
||||
# Upload the assets
|
||||
for file_to_check in files_to_check:
|
||||
if os.path.exists(file_to_check):
|
||||
# Check if this file was previously uploaded
|
||||
if gh_assets.totalCount:
|
||||
for gh_asset in gh_assets:
|
||||
if gh_asset.name == file_to_check:
|
||||
print("Removing existing asset %s " % gh_asset.name)
|
||||
gh_asset.delete_asset()
|
||||
# Upload the new one
|
||||
print("Uploading %s to release %s" % (file_to_check, gh_release.title))
|
||||
gh_release.upload_asset(file_to_check)
|
||||
|
||||
# Check if we now have all files
|
||||
gh_new_assets = gh_release.get_assets()
|
||||
if gh_new_assets.totalCount:
|
||||
all_assets = [gh_asset.name for gh_asset in gh_new_assets]
|
||||
|
||||
# Check if we have all files, using set-comparison
|
||||
if set(files_to_check) == set(all_assets):
|
||||
print("All assets present, releasing %s" % RELEASE_VERSION)
|
||||
# Publish release
|
||||
gh_release.update_release(
|
||||
tag_name=RELEASE_VERSION,
|
||||
name=RELEASE_TITLE,
|
||||
message=readme_data,
|
||||
draft=False,
|
||||
prerelease=prerelease,
|
||||
)
|
||||
|
||||
# Update the website
|
||||
gh_repo_web = gh_obj.get_repo("sabnzbd/sabnzbd.github.io")
|
||||
# Check if the branch already exists, only create one if it doesn't
|
||||
skip_website_update = False
|
||||
try:
|
||||
gh_repo_web.get_branch(RELEASE_VERSION)
|
||||
print("Branch %s on sabnzbd/sabnzbd.github.io already exists, skipping update" % RELEASE_VERSION)
|
||||
skip_website_update = True
|
||||
except github.GithubException:
|
||||
# Create a new branch to have the changes
|
||||
sb = gh_repo_web.get_branch("master")
|
||||
print("Creating branch %s on sabnzbd/sabnzbd.github.io" % RELEASE_VERSION)
|
||||
new_branch = gh_repo_web.create_git_ref(ref="refs/heads/" + RELEASE_VERSION, sha=sb.commit.sha)
|
||||
|
||||
# Update the files
|
||||
if not skip_website_update:
|
||||
# We need bytes version to interact with GitHub
|
||||
RELEASE_VERSION_BYTES = RELEASE_VERSION.encode()
|
||||
|
||||
# Get all the version files
|
||||
latest_txt = gh_repo_web.get_contents("latest.txt")
|
||||
latest_txt_items = latest_txt.decoded_content.split()
|
||||
new_latest_txt_items = latest_txt_items[:2]
|
||||
config_yml = gh_repo_web.get_contents("_config.yml")
|
||||
if prerelease:
|
||||
# If it's a pre-release, we append to current version in latest.txt
|
||||
new_latest_txt_items.extend([RELEASE_VERSION_BYTES, latest_txt_items[1]])
|
||||
# And replace in _config.yml
|
||||
new_config_yml = re.sub(
|
||||
b"latest_testing: '[^']*'",
|
||||
b"latest_testing: '%s'" % RELEASE_VERSION_BYTES,
|
||||
config_yml.decoded_content,
|
||||
)
|
||||
else:
|
||||
# New stable release, replace the version
|
||||
new_latest_txt_items[0] = RELEASE_VERSION_BYTES
|
||||
# And replace in _config.yml
|
||||
new_config_yml = re.sub(
|
||||
b"latest_testing: '[^']*'",
|
||||
b"latest_testing: ''",
|
||||
config_yml.decoded_content,
|
||||
)
|
||||
new_config_yml = re.sub(
|
||||
b"latest_stable: '[^']*'",
|
||||
b"latest_stable: '%s'" % RELEASE_VERSION_BYTES,
|
||||
new_config_yml,
|
||||
)
|
||||
# Also update the wiki-settings, these only use x.x notation
|
||||
new_config_yml = re.sub(
|
||||
b"wiki_version: '[^']*'",
|
||||
b"wiki_version: '%s'" % RELEASE_VERSION_BYTES[:3],
|
||||
new_config_yml,
|
||||
)
|
||||
|
||||
# Update the files
|
||||
print("Updating latest.txt")
|
||||
gh_repo_web.update_file(
|
||||
"latest.txt",
|
||||
"Release %s: latest.txt" % RELEASE_VERSION,
|
||||
b"\n".join(new_latest_txt_items),
|
||||
latest_txt.sha,
|
||||
RELEASE_VERSION,
|
||||
)
|
||||
print("Updating _config.yml")
|
||||
gh_repo_web.update_file(
|
||||
"_config.yml",
|
||||
"Release %s: _config.yml" % RELEASE_VERSION,
|
||||
new_config_yml,
|
||||
config_yml.sha,
|
||||
RELEASE_VERSION,
|
||||
)
|
||||
|
||||
# Create pull-request
|
||||
print("Creating pull request in sabnzbd/sabnzbd.github.io for the update")
|
||||
update_pr = gh_repo_web.create_pull(
|
||||
title="Release %s" % RELEASE_VERSION,
|
||||
base="master",
|
||||
body="Automated update of release files",
|
||||
head=RELEASE_VERSION,
|
||||
)
|
||||
|
||||
# Merge pull-request
|
||||
print("Merging pull request in sabnzbd/sabnzbd.github.io for the update")
|
||||
update_pr.merge(merge_method="squash")
|
||||
|
||||
# Only with GitHub success we proceed to Reddit
|
||||
if reddit_token := os.environ.get("REDDIT_TOKEN", ""):
|
||||
# Token format (without whitespace):
|
||||
# {
|
||||
# "client_id":"XXX",
|
||||
# "client_secret":"XXX",
|
||||
# "user_agent":"SABnzbd release script",
|
||||
# "username":"Safihre",
|
||||
# "password":"XXX"
|
||||
# }
|
||||
credentials = json.loads(reddit_token)
|
||||
reddit = praw.Reddit(**credentials)
|
||||
|
||||
subreddit_sabnzbd = reddit.subreddit("sabnzbd")
|
||||
subreddit_usenet = reddit.subreddit("usenet")
|
||||
|
||||
# Read the release notes
|
||||
with open(RELEASE_README, "r") as readme_file:
|
||||
readme_lines = readme_file.readlines()
|
||||
|
||||
# Use the header in the readme as title
|
||||
title = readme_lines[0]
|
||||
release_notes_text = "".join(readme_lines[3:])
|
||||
|
||||
# Post always to r/SABnzbd
|
||||
print("Posting release notes to Reddit: r/sabnzbd")
|
||||
submission = subreddit_sabnzbd.submit(title, selftext=release_notes_text)
|
||||
|
||||
# Only stable releases to r/usenet
|
||||
if not prerelease:
|
||||
print("Cross-posting release notes to Reddit: r/usenet")
|
||||
submission.crosspost(subreddit_usenet)
|
||||
else:
|
||||
print("Missing REDDIT_TOKEN")
|
||||
|
||||
else:
|
||||
print("To push release to GitHub, first tag the commit.")
|
||||
print("Or missing the AUTOMATION_GITHUB_TOKEN, cannot push to GitHub without it.")
|
||||
@@ -1,21 +1,22 @@
|
||||
# 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==2023.0
|
||||
pyinstaller==5.11.0
|
||||
pyinstaller-hooks-contrib==2023.3
|
||||
altgraph==0.17.3
|
||||
wrapt==1.15.0
|
||||
setuptools==67.5.1
|
||||
pkginfo==1.9.6
|
||||
PyGithub==1.58.0
|
||||
charset-normalizer==3.1.0
|
||||
setuptools==67.8.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.7; python_version > '3.8'
|
||||
orjson==3.8.14; python_version > '3.8'
|
||||
|
||||
# For the Windows build
|
||||
pefile==2023.2.7; sys_platform == 'win32'
|
||||
pywin32-ctypes==0.2.0; sys_platform == 'win32'
|
||||
|
||||
# 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"
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="$helpuri$help_uri" target="_blank">
|
||||
<a href="$help_uri" target="_blank">
|
||||
<span class="glyphicon glyphicon-question-sign"></span>
|
||||
<strong>$T('menu-help')</strong>
|
||||
</a>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Config"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/configure"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "configure"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--#from sabnzbd.encoding import CODEPAGE#-->
|
||||
@@ -25,7 +25,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('pythonVersion'): </th>
|
||||
<td>$sys.version[:120] [$CODEPAGE]</td>
|
||||
<td>$sys.version [$CODEPAGE]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">OpenSSL:</th>
|
||||
@@ -49,7 +49,7 @@
|
||||
<span class="glyphicon glyphicon-ok"></span>
|
||||
<!--#else#-->
|
||||
<span class="label label-warning">$T('notAvailable')</span> $T('explain-getpar2mt')
|
||||
<a href="${helpuri}installation/multicore-par2" target="_blank">${helpuri}installation/multicore-par2</a>
|
||||
<a href="https://sabnzbd.org/wiki/installation/multicore-par2" target="_blank">https://sabnzbd.org/wiki/installation/multicore-par2</a>
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
</tr>
|
||||
@@ -59,7 +59,7 @@
|
||||
<th scope="row">SABCTools:</th>
|
||||
<td>
|
||||
<span class="label label-danger">$T('notAvailable')</span>
|
||||
<a href="$helpuri$help_uri#no_sabctools" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<a href="$help_uri#no_sabctools" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
@@ -68,7 +68,7 @@
|
||||
<th scope="row">$T('opt-enable_unzip'):</th>
|
||||
<td>
|
||||
<span class="label label-warning">$T('notAvailable')</span>
|
||||
<a href="${helpuri}installation/install-off-modules#toc8" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<a href="https://sabnzbd.org/wiki/installation/install-off-modules#toc8" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
@@ -77,7 +77,7 @@
|
||||
<th scope="row">$T('opt-enable_7zip'):</th>
|
||||
<td>
|
||||
<span class="label label-warning">$T('notAvailable')</span>
|
||||
<a href="${helpuri}installation/install-off-modules#toc8" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<a href="https://sabnzbd.org/wiki/installation/install-off-modules#toc8" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
<!--#set global $pane="Categories"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/categories"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "categories"#-->
|
||||
<!--#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="$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>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Folders"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/folders"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "folders"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -14,7 +14,7 @@
|
||||
<input type="hidden" id="ajax" name="ajax" value="1" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('userFolders') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('userFolders') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>$T('explain-folderConfig')</p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
@@ -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>
|
||||
@@ -57,7 +58,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="dirscan_dir">$T('opt-dirscan_dir')</label>
|
||||
<input type="text" name="dirscan_dir" id="dirscan_dir" value="$dirscan_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-dirscan_dir')</span>
|
||||
<span class="desc">$T('explain-dirscan_dir').replace(".nzb", $file_exts)</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="dirscan_speed">$T('opt-dirscan_speed')</label>
|
||||
@@ -90,7 +91,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section advanced-settings">
|
||||
<div class="col2">
|
||||
<h3>$T('systemFolders') <a href="$helpuri$help_uri#toc1" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('systemFolders') <a href="$help_uri#toc1" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>$T('explain-folderConfig')</p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="General"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/general"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "general"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -14,7 +14,7 @@
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('webServer') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('webServer') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p><b>$T('restartRequired')</b></p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
@@ -102,7 +102,7 @@
|
||||
</div>
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('security') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('security') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p><b>$T('restartRequired')</b></p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
@@ -156,7 +156,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('cmenu-switches') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('cmenu-switches') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
@@ -192,7 +192,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('tuning') <a href="$helpuri$help_uri#toc2" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('tuning') <a href="$help_uri#toc2" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
@@ -230,7 +230,7 @@
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('backup') <a href="$helpuri$help_uri#toc3" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('backup') <a href="$help_uri#toc3" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Email"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/notifications"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "notifications"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--#def show_notify_checkboxes($section_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#-->
|
||||
@@ -33,10 +33,10 @@
|
||||
<input type="hidden" id="ajax" name="ajax" value="1" />
|
||||
<div class="section" id="email">
|
||||
<div class="col2">
|
||||
<h3>$T('cmenu-email') <a href="$helpuri$help_uri#toc0" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('cmenu-email') <a href="$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#-->
|
||||
@@ -153,7 +153,7 @@
|
||||
<!--#if $have_ntfosd#-->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('section-OSD') <a href="$helpuri$help_uri#toc4" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('section-OSD') <a href="$help_uri#toc4" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="ntfosd_enable" id="ntfosd_enable" value="1" <!--#if int($ntfosd_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
@@ -178,14 +178,14 @@
|
||||
<!--#end if#-->
|
||||
<div class="section" id="nscript">
|
||||
<div class="col2">
|
||||
<h3>$T('section-NScript') <a href="$helpuri$help_uri#nscript" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('section-NScript') <a href="$help_uri#nscript" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="nscript_enable" id="nscript_enable" value="1" <!--#if int($nscript_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="nscript_enable"> $T('opt-nscript_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-nscript_enable')</em><br><a href="$helpuri$help_uri#nscript" target="_blank">$T('readwiki')</a>
|
||||
<em>$T('explain-nscript_enable')</em><br><a href="$help_uri#nscript" target="_blank">$T('readwiki')</a>
|
||||
$show_cat_box('nscript')
|
||||
</div>
|
||||
<div class="col1" <!--#if int($nscript_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<!--#set global $pane="RSS"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/rss"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "rss"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
<!--#import html#-->
|
||||
<div class="colmask">
|
||||
<!--#if not $active_feed#-->
|
||||
<div class="section">
|
||||
<div class="padTable">
|
||||
<a class="main-helplink" href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<a class="main-helplink" href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<p>$T('explain-RSS')</p>
|
||||
<form action="add_rss_feed" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
@@ -105,7 +105,7 @@
|
||||
<!--#set $feed = html.unescape($active_feed)#-->
|
||||
<div class="section rss-section">
|
||||
<div class="padTable">
|
||||
<a class="main-helplink" href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<a class="main-helplink" href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<h2 class="nomargin activeRSS">
|
||||
<a href="${root}config/rss/">$T('cmenu-rss')</a> »
|
||||
$active_feed
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Scheduling"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/scheduling"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "scheduling"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<%
|
||||
@@ -15,7 +15,7 @@ else:
|
||||
<div class="colmask">
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('addSchedule') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('addSchedule') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<form action="addSchedule" method="post" autocomplete="off">
|
||||
<input type="hidden" id="apikey" name="apikey" value="$apikey" />
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<!--#set global $pane="Servers"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/servers"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "servers"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--#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 = {}
|
||||
@@ -29,7 +29,7 @@
|
||||
</div>
|
||||
<div class="section" id="addServerContent" style="display: none;">
|
||||
<div class="col2">
|
||||
<h3>$T('addServer') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('addServer') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div>
|
||||
<div class="col1">
|
||||
<form action="addServer" method="post" autocomplete="off" onsubmit="removeObfuscation();">
|
||||
@@ -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>
|
||||
@@ -96,7 +96,7 @@
|
||||
<label class="config" for="ssl_ciphers">$T('opt-ssl_ciphers')</label>
|
||||
<input type="text" name="ssl_ciphers" id="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>
|
||||
<a href="https://sabnzbd.org/wiki/advanced/ssl-ciphers" target="_blank">https://sabnzbd.org/wiki/advanced/ssl-ciphers</a></span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="send_group">$T('srv-send_group')</label>
|
||||
@@ -147,11 +147,11 @@
|
||||
<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 ""#-->">
|
||||
<h3 title="$server['displayname']">$server['displayname'] <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3 title="$server['displayname']">$server['displayname'] <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<!--#if int($server['enable']) != 0 #-->
|
||||
<!--#if $last_prio != $server['priority'] and $cur_prio_color+1 < len($prio_colors) #-->
|
||||
<!--#set $cur_prio_color = $cur_prio_color+1 #-->
|
||||
@@ -225,10 +225,10 @@
|
||||
<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>
|
||||
<a href="https://sabnzbd.org/wiki/advanced/ssl-ciphers" target="_blank">https://sabnzbd.org/wiki/advanced/ssl-ciphers</a></span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="required$cur">$T('srv-required')</label>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<!--#set global $pane="Sorting"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/sorting"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "sorting"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="padTable section explain-sorting">
|
||||
<p>$T('explain-sorting')</p>
|
||||
<a class="main-helplink" href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
$T('explain-sorting')
|
||||
</div>
|
||||
<div class="colmask">
|
||||
<div class="padding alt section">
|
||||
@@ -13,63 +14,86 @@
|
||||
</label>
|
||||
<div class="advanced-buttonSeperator"></div>
|
||||
</div>
|
||||
<!--#for $cur, $slot in enumerate($slotinfo)#-->
|
||||
<!--#set $selected_types = [$str(entry) for entry in $slot.sort_type]#-->
|
||||
<!--#if $cur == 1#-->
|
||||
|
||||
<div class="sortables">
|
||||
<!--#end if#-->
|
||||
<!--#for $cur, $slot in enumerate($slotinfo)#-->
|
||||
<!--#set $selected_types = [$str(entry) for entry in $slot.sort_type]#-->
|
||||
<!--#set $selected_types = ["0"] if not len($selected_types) else $selected_types #-->
|
||||
<!-- SORTER $cur -->
|
||||
<div class="section <!--#if $cur != 0#-->sorter<!--#end if#-->" id="sorter_$cur" <!--#if $cur == 0#-->style="display: none;"<!--#end if#-->>
|
||||
<form action="save_sorter" method="get" autocomplete="off" <!--#if $slot.name != ''#-->class="sorting-row"<!--#end if#-->>
|
||||
<form action="save_sorter" method="post" autocomplete="off" <!--#if $cur != 0#-->class="sorting-row"<!--#end if#-->>
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="order" value="$slot.order" />
|
||||
<input type="hidden" value="$slot.name" name="name" />
|
||||
<!--#if $cur == 0#-->
|
||||
<input type="hidden" rel="$slot.name" name="is_active" value="$slot.is_active" <!--#if $slot.is_active != 0 then 'checked="checked"' else ""#--> />
|
||||
<input type="hidden" rel="$slot.name" name="is_active" value="$slot.is_active" />
|
||||
<!--#end if#-->
|
||||
<div class="float-right">
|
||||
<span class="glyphicon glyphicon-option-vertical"></span>
|
||||
</div>
|
||||
<div class="col2">
|
||||
<!--#if $cur == 0#-->
|
||||
<h3>$T('add-sorter') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('add-sorter') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<!--#else#-->
|
||||
<h3>$slot.name <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<div class="sorter-switch-container" class="wide">
|
||||
<input type="checkbox" class="toggleSorterCheckbox sorter-switch float-left" rel="$slot.name" name="is_active" value="$slot.is_active" <!--#if $slot.is_active != 0 then 'checked="checked"' else ""#--> />
|
||||
<label class="sorter-switch float-left" for="is_active">$T('enabled')</label>
|
||||
<h3>$slot.name <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<div class="sorter-switch-container wide">
|
||||
<input type="checkbox" class="toggleSorterCheckbox sorter-switch float-left" rel="$slot.name" name="is_active" id="is_active_$cur" value="$slot.is_active" <!--#if $slot.is_active != 0 then 'checked="checked"' else ""#--> />
|
||||
<label class="sorter-switch float-left" for="is_active_$cur">$T('enabled')</label>
|
||||
</div>
|
||||
<button class="btn btn-default showSorter" type="button">
|
||||
<span class="glyphicon glyphicon-pencil"></span> $T('showDetails')
|
||||
</button>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<div class="col1" id="sorter_$cur" <!--#if $cur != 0#-->style="display: none;"<!--#end if#-->>
|
||||
<!--#if $cur != 0#-->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair showSorter">
|
||||
<label class="config" for="field_sort_string_display_$cur">$T('sortString')</label>
|
||||
<input type="text" name="sort_string_display" id="field_sort_string_display_$cur" value="$slot.sort_string" disabled />
|
||||
</div>
|
||||
<div class="field-pair showSorter">
|
||||
<label class="config" for="sort_cats_display_$cur">$T('affectedCat')</label>
|
||||
<select name="sort_cats_display" multiple="multiple" class="multiple_cats" id="sort_cats_display_$cur" size="$len($categories)" disabled>
|
||||
<!--#for $cat in $categories#-->
|
||||
<option value="$cat" <!--#if $cat.lower() in $slot.sort_cats then 'selected="selected"' else ""#-->>$Tspec($cat)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<div class="col1" <!--#if $cur != 0#-->style="display: none;"<!--#end if#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="displayname$cur">$T('name')</label>
|
||||
<input type="text" name="newname" value="$slot.name" required="required" />
|
||||
<label class="config" for="displayname_$cur">$T('name')</label>
|
||||
<input type="text" name="newname" value="$slot.name" id="displayname_$cur" required="required" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="displayname$cur">$T('sortString')</label>
|
||||
<input type="text" name="sort_string" id="field_sort_string" value="$slot.sort_string" required="required" />
|
||||
<label class="config" for="field_sort_string_$cur">$T('sortString')</label>
|
||||
<input type="text" name="sort_string" id="field_sort_string_$cur" value="$slot.sort_string" required="required" />
|
||||
<button type="button" title="$T('sort-legenda')" class="btn btn-default patternKey" onclick="jQuery('#pattern_explainer_$cur').toggle(); window.scrollBy(0, 500);">
|
||||
<span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> $T('sort-legenda')
|
||||
</button>
|
||||
</div>
|
||||
<!--#if $cur == 0#-->
|
||||
<!-- PRESETS -->
|
||||
<div id="presets" class="field-pair">
|
||||
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('presetSort')</label>
|
||||
<div class="presets">
|
||||
<input type="button" class="btn btn-default" onclick="set_preset('%title (%y)/%title (%y).%ext',' CD%1');" value="$T('button-inFolders')" />
|
||||
<input type="button" class="btn btn-default" onclick="set_preset('%title (%y).%ext',' CD%1');" value="$T('button-noFolders')" />
|
||||
<input type="button" class="btn btn-default" onclick="set_preset('%sn season %s/episode %0e %r.%ext','');" value="$T('button-Series')" />
|
||||
<input type="button" class="btn btn-default" onclick="set_preset('%0decade/%title (%y).%ext',' CD%1');" value="$T('decade')" />
|
||||
<input type="button" class="btn btn-default" onclick="set_preset('%dn.%ext')" value="$T('button-FileLikeFolder')" />
|
||||
<div class="presets float-left">
|
||||
<strong>$T('button-Series'):</strong>
|
||||
<input type="button" class="btn btn-default" onclick="set_preset($cur, '%sn/%sn - S%0sE%0e - %en.%ext', '', '$T('show-dot-name')'+'.S01E01.$T('ep-dot-name').720p.DTS');" value="$T('button-showFolder')" />
|
||||
<input type="button" class="btn btn-default" onclick="set_preset($cur, '%sn/Season %s/%sn - S%0sE%0e - %en.%ext', '', '$T('show-dot-name')'+'.S01E01.$T('ep-dot-name').720p.DTS');" value="$T('button-seasonFolder')" /><br/>
|
||||
<strong>$T('guessit-type-movie'):</strong>
|
||||
<input type="button" class="btn btn-default" onclick="set_preset($cur, '%title (%y)/%title (%y).%ext',' CD%1', '$T('movie-dot-name').2023.$T('movie-dot-name').1080p.DD');" value="$T('button-inFolders')" />
|
||||
<input type="button" class="btn btn-default" onclick="set_preset($cur, '%title (%y).%ext',' CD%1', '$T('movie-dot-name').2023.$T('movie-dot-name').1080p.DD');" value="$T('button-noFolders')" />
|
||||
<input type="button" class="btn btn-default" onclick="set_preset($cur, '%0decade/%title (%y).%ext',' CD%1', '$T('movie-dot-name').2023.$T('movie-dot-name').1080p.DD');" value="$T('decade')" /><br/>
|
||||
<strong>$T('cmenu-general'):</strong>
|
||||
<input type="button" class="btn btn-default" onclick="set_preset($cur, '%dn.%ext', '', '')" value="$T('button-FileLikeFolder')" />
|
||||
</div>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<div class="field-pair">
|
||||
<label class="config" for="displayname$cur">$T('guessit-type')</label>
|
||||
<select name="sort_type" multiple="multiple" class="multiple_cats" <!--#if $cur == 0#-->id="field_sort_type"<!--#end if#-->>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="field_sort_type_$cur">$T('guessit-type')</label>
|
||||
<select name="sort_type" multiple="multiple" class="multiple_cats" size="5" id="field_sort_type_$cur">
|
||||
<option value="0" <!--#if "0" in $selected_types then 'selected="selected"' else ""#-->>$T('guessit-type-all')</option>
|
||||
<option value="1" <!--#if "1" in $selected_types then 'selected="selected"' else ""#-->>$T('guessit-type-tv')</option>
|
||||
<option value="2" <!--#if "2" in $selected_types then 'selected="selected"' else ""#-->>$T('guessit-type-date')</option>
|
||||
@@ -78,32 +102,31 @@
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="displayname$cur">$T('affectedCat')</label>
|
||||
<select name="sort_cats" multiple="multiple" class="multiple_cats" required="required">
|
||||
<label class="config" for="sort_cats_$cur">$T('affectedCat')</label>
|
||||
<select name="sort_cats" multiple="multiple" class="multiple_cats" id="sort_cats_$cur" size="$len($categories)" required="required">
|
||||
<!--#for $cat in $categories#-->
|
||||
<option value="$cat" <!--#if $cat.lower() in $slot.sort_cats then 'selected="selected"' else ""#-->>$Tspec($cat)</option>
|
||||
<option value="$cat" <!--#if $cat.lower() in $slot.sort_cats then 'selected="selected"' else ""#-->>$Tspec($cat)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="displayname$cur">$T('sort-minimum-size')</label>
|
||||
<input type="text" name="min_size" value="$slot.min_size" size="10" required="required" />
|
||||
<label class="config" for="min_size_$cur">$T('sort-minimum-size')</label>
|
||||
<input type="text" name="min_size" value="$slot.min_size" id="min_size_$cur" size="10" required="required" />
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="displayname$cur">$T('multiPartLabel')</label>
|
||||
<input type="text" name="multipart_label" id="multipart_label" value="$slot.multipart_label" size="8" />
|
||||
<label class="config" for="multipart_label_$cur">$T('multiPartLabel')</label>
|
||||
<input type="text" name="multipart_label" id="multipart_label_$cur" value="$slot.multipart_label" size="8" />
|
||||
</div>
|
||||
<!--#if $cur == 0#-->
|
||||
<!-- PREVIEW -->
|
||||
<div id="preview" class="field-pair">
|
||||
<label class="config" for="preview_name">$T('sort-test-data')</label>
|
||||
<input type="text" id="preview_name" autocomplete="off" name="preview_name" placeholder="$T('orgJobname')" /><button class="btn btn-default clearBtn" type="button"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
|
||||
<div id="preview$cur" class="field-pair">
|
||||
<label class="config" for="preview_name_$cur">$T('sort-test-data')</label>
|
||||
<input type="text" id="preview_name_$cur" autocomplete="off" name="preview_name" placeholder="$T('orgJobname')" /><button class="btn btn-default clearBtn" type="button"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="preview field-pair">
|
||||
<label class="config">$T('sortResult')</label>
|
||||
<span class="config desc path" id="preview_result"></span>
|
||||
<span class="config desc path" id="preview_result_$cur"></span>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
|
||||
<!-- BUTTONS -->
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton">
|
||||
@@ -117,14 +140,12 @@
|
||||
<button class="btn btn-default delSorter" type="button">
|
||||
<span class="glyphicon glyphicon-trash"></span> $T('remove-sorter')
|
||||
</button>
|
||||
<!--#else#-->
|
||||
<button type="button" title="$T('sort-legenda')" class="btn btn-default patternKey" onclick="jQuery('#pattern_explainer').toggle()">
|
||||
<span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> $T('sort-legenda')
|
||||
</button>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
|
||||
<!-- PATTERN EXPLAINER -->
|
||||
<div class="Key explain-pattern" id="pattern_explainer">
|
||||
<div class="Key explain-pattern" id="pattern_explainer_$cur">
|
||||
<hr>
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<table class="pattern-table">
|
||||
@@ -132,7 +153,7 @@
|
||||
<tr>
|
||||
<th class="align-right">$T('sort-meaning')</th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')<div class="glyphicon glyphicon-remove float-right" onclick="jQuery('#pattern_explainer').hide();"></div></th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -262,28 +283,28 @@
|
||||
<td>$T('text')</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tbody class="advanced-settings">
|
||||
<tr>
|
||||
<th class="align-right"><b>$T('multiPartLabel')</b></th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tbody class="advanced-settings">
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('partNumber'):</b></td>
|
||||
<td>%1</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tbody class="advanced-settings">
|
||||
<tr>
|
||||
<th class="align-right"><b>GuessIt</b></th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tbody class="advanced-settings">
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('sort-guessitMeaning'):</b></td>
|
||||
<td>%GI<$T('sort-guessitProperty')></td>
|
||||
@@ -316,12 +337,55 @@
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<fieldset>
|
||||
</fieldset>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
<!--#if $have_sorters#-->
|
||||
</div>
|
||||
|
||||
<!--#if len($slotinfo) == 1 and ("tv" in $categories or "movies" in $categories)#-->
|
||||
<div class="section align-center alt sorting-quick-setup">
|
||||
<h3>$T('sort-quick-add'):</h3>
|
||||
<!--#if "tv" in $categories#-->
|
||||
<form action="save_sorter" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="order" value="0" />
|
||||
<input type="hidden" name="is_active" value="1" />
|
||||
<input type="hidden" name="name" value="">
|
||||
<input type="hidden" name="newname" value="$T('seriesSort')">
|
||||
<input type="hidden" name="sort_string" value="%sn/%sn - S%0sE%0e - %en.%ext">
|
||||
<input type="hidden" name="sort_cats" value="tv">
|
||||
<input type="hidden" name="sort_type" value="1">
|
||||
|
||||
<p>
|
||||
<button class="btn btn-default saveButton">
|
||||
<span class="glyphicon glyphicon-chevron-right"></span>
|
||||
$T('sort-quick-add-series')
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
<!--#end if#-->
|
||||
<!--#if "movies" in $categories#-->
|
||||
<form action="save_sorter" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="order" value="0" />
|
||||
<input type="hidden" name="is_active" value="1" />
|
||||
<input type="hidden" name="name" value="">
|
||||
<input type="hidden" name="newname" value="$T('movieSort')">
|
||||
<input type="hidden" name="sort_string" value="%title (%y)/%title (%y).%ext">
|
||||
<input type="hidden" name="sort_cats" value="movies">
|
||||
<input type="hidden" name="sort_type" value="3">
|
||||
<input type="hidden" name="multipart_label" value="CD%1">
|
||||
|
||||
<p>
|
||||
<button class="btn btn-default saveButton">
|
||||
<span class="glyphicon glyphicon-chevron-right"></span>
|
||||
$T('sort-quick-add-movies')
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
@@ -337,33 +401,34 @@
|
||||
})();
|
||||
|
||||
// Put preset values into form fields
|
||||
function set_preset(val, val2) {
|
||||
\$('#field_sort_string').val(val);
|
||||
\$('#multipart_label').val(val2);
|
||||
new_preview();
|
||||
function set_preset(sort_nr, sort_string, multipart_label, sample_data) {
|
||||
\$('#field_sort_string_' + sort_nr).val(sort_string);
|
||||
\$('#multipart_label_' + sort_nr).val(multipart_label);
|
||||
\$('#preview_name_' + sort_nr).val(sample_data);
|
||||
new_preview(sort_nr);
|
||||
}
|
||||
|
||||
// Handle preview
|
||||
function new_preview() {
|
||||
var \$preview_sort_string = \$('#field_sort_string').val();
|
||||
if(\$preview_sort_string.length > 2) {
|
||||
function new_preview(sort_nr) {
|
||||
var preview_sort_string = \$('#field_sort_string_' + sort_nr).val();
|
||||
if(preview_sort_string.length > 2) {
|
||||
typewatch(function () {
|
||||
\$.ajax({
|
||||
type: "GET",
|
||||
url: "../../api",
|
||||
data: {
|
||||
mode:'eval_sort',
|
||||
job_name: \$('#preview_name').val(),
|
||||
sort_string: \$preview_sort_string,
|
||||
multipart_label: \$('#multipart_label').val(),
|
||||
mode: 'eval_sort',
|
||||
job_name: \$('#preview_name_' + sort_nr).val(),
|
||||
sort_string: preview_sort_string,
|
||||
multipart_label: \$('#multipart_label_' + sort_nr).val(),
|
||||
apikey: '$apikey',
|
||||
output: 'json'
|
||||
},
|
||||
success: function(data) {
|
||||
\$('#preview_result').removeClass("loading failure").html(data.result);
|
||||
\$('#preview_result_' + sort_nr).html(data.result);
|
||||
},
|
||||
error: function(data) {
|
||||
\$('#preview_result').removeClass("loading").addClass("failure").html('need more information to process');
|
||||
\$('#preview_result_' + sort_nr).html('$T('button-failed')');
|
||||
}
|
||||
});
|
||||
}, 500);
|
||||
@@ -383,12 +448,13 @@
|
||||
});
|
||||
|
||||
\$('.showSorter').click(function () {
|
||||
\$(this).parent().next().toggle();
|
||||
\$(this).parent().next().next().toggle();
|
||||
if (\$(this).text().indexOf("$T('showDetails')") > 0) {
|
||||
\$(this).html(\$(this).html().replace("$T('showDetails')", "$T('hideDetails')"));
|
||||
var theParent = \$(this).closest("form")
|
||||
var theSwitch = theParent.find("button.showSorter")
|
||||
theParent.find(".col1").toggle();
|
||||
if (theSwitch.text().indexOf("$T('showDetails')") > 0) {
|
||||
theSwitch.html(theSwitch.html().replace("$T('showDetails')", "$T('hideDetails')"));
|
||||
} else {
|
||||
\$(this).html(\$(this).html().replace("$T('hideDetails')", "$T('showDetails')"));
|
||||
theSwitch.html(theSwitch.html().replace("$T('hideDetails')", "$T('showDetails')"));
|
||||
}
|
||||
// Add coloring
|
||||
addRowColor()
|
||||
@@ -397,6 +463,7 @@
|
||||
// Make the configured sorters sortable
|
||||
var hExtra = 8;
|
||||
\$(".sortables").sortable({
|
||||
items: ".sorter",
|
||||
placeholder: "sorter-placeholder",
|
||||
axis: "y",
|
||||
revert: 125,
|
||||
@@ -405,6 +472,7 @@
|
||||
ui.placeholder.height(hPlaceholder + hExtra);
|
||||
\$('<div class="sorter-placeholder-anim" data-height="' + hPlaceholder + '"></div>').insertAfter(ui.placeholder);
|
||||
},
|
||||
cancel: ".pattern-table",
|
||||
change: function(event, ui) {
|
||||
ui.placeholder.stop().height(0).animate({
|
||||
height: ui.item.outerHeight() + hExtra
|
||||
@@ -455,9 +523,14 @@
|
||||
});
|
||||
});
|
||||
|
||||
<!--#for $cur, $slot in enumerate($slotinfo)#-->
|
||||
// Preview the result of the sort string against a sample jobname
|
||||
new_preview();
|
||||
\$('#field_sort_string, #field_sort_type, #multipart_label, #preview_name').bind("keyup focus", new_preview);
|
||||
\$('#field_sort_string_$cur, #field_sort_type_$cur, #multipart_label_$cur, #preview_name_$cur').bind("keyup focus", function() {
|
||||
new_preview($cur);
|
||||
});
|
||||
new_preview($cur);
|
||||
<!--#end for#-->
|
||||
|
||||
\$('.clearBtn').click(function(){
|
||||
\$(this).prev().val('').focus();
|
||||
});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Special"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/special"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "special"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -10,7 +10,7 @@
|
||||
</div>
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('sptag-boolean') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('sptag-boolean') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
@@ -33,7 +33,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('sptag-entries') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('sptag-entries') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Switches"#-->
|
||||
<!--#set global $help_uri="configuration/4.0/switches"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "switches"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -14,7 +14,7 @@
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<div class="section advanced-settings">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-server') <a href="$helpuri$help_uri#toc1" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('swtag-server') <a href="$help_uri#toc1" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
@@ -46,7 +46,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-queue') <a href="$helpuri$help_uri#toc2" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('swtag-queue') <a href="$help_uri#toc2" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
@@ -165,7 +165,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-pp') <a href="$helpuri$help_uri#toc3" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('swtag-pp') <a href="$help_uri#toc3" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
@@ -274,7 +274,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section advanced-settings">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-naming') <a href="$helpuri$help_uri#toc4" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('swtag-naming') <a href="$help_uri#toc4" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
@@ -314,7 +314,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-quota') <a href="$helpuri$help_uri#toc5" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<h3>$T('swtag-quota') <a href="$help_uri#toc5" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
|
||||
@@ -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;
|
||||
@@ -369,6 +374,9 @@ tr.separator {
|
||||
.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;
|
||||
@@ -831,6 +839,7 @@ select {
|
||||
vertical-align:middle;
|
||||
max-width: 100%;
|
||||
min-height: 34px;
|
||||
min-width: 55px;
|
||||
font-size: 13px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
@@ -454,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" />
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
<p>$T('wizard-tip-wiki') <a target="_blank" href="$helpuri">$T('menu-wiki')</a> <span class="glyphicon glyphicon-info-sign"></span></p>
|
||||
<p>$T('wizard-tip-wiki') <a target="_blank" href="https://sabnzbd.org/wiki/">$T('menu-wiki')</a> <span class="glyphicon glyphicon-info-sign"></span></p>
|
||||
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
@@ -29,6 +29,11 @@
|
||||
<url type="help">https://sabnzbd.org/wiki/</url>
|
||||
<url type="faq">https://sabnzbd.org/wiki/faq</url>
|
||||
<url type="contact">https://sabnzbd.org/live-chat.html</url>
|
||||
<releases>
|
||||
<release version="4.0.1" date="2023-05-01" type="stable"/>
|
||||
<release version="4.0.0" date="2023-04-28" type="stable"/>
|
||||
<release version="3.7.2" date="2023-02-05" type="stable"/>
|
||||
</releases>
|
||||
<launchable type="desktop-id">sabnzbd.desktop</launchable>
|
||||
<provides>
|
||||
<mediatype>application/x-nzb</mediatype>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
@@ -270,6 +270,11 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Do not use a folder in the application folder as your Scripts Folder, it might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -406,6 +411,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr ""
|
||||
@@ -555,12 +565,22 @@ msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable with special character filenames. This can cause problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable with special character filenames. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -716,7 +736,7 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -724,7 +744,7 @@ msgstr ""
|
||||
msgid "Date Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1410,11 +1430,11 @@ msgid "Running user script %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgid "Script exit code is %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgid "Ran %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
@@ -1746,32 +1766,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
|
||||
@@ -2749,6 +2769,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 ""
|
||||
@@ -2779,7 +2803,7 @@ msgid "Watched Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz archives for .nzb files.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3449,6 +3473,10 @@ msgstr ""
|
||||
msgid "Force Download"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -3811,10 +3839,6 @@ msgstr ""
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr ""
|
||||
@@ -3927,6 +3951,14 @@ 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"
|
||||
msgstr ""
|
||||
@@ -3997,7 +4029,7 @@ msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Configure a new sorter, or edit/remove/reorder existing sorters below.<br><br>Sorters are tried in order of appearance, and can be reordered by dragging and dropping. The first active sorter that meets both selection criteria (affected category and job type) is applied to a job, provided at least one file meets the minumum filesize requirement."
|
||||
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
|
||||
@@ -4012,6 +4044,18 @@ msgstr ""
|
||||
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 ""
|
||||
@@ -4239,6 +4283,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 ""
|
||||
|
||||
115
po/main/cs.po
115
po/main/cs.po
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
@@ -297,6 +297,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Chyba: Fronta nené prázdná, nelze změnit složku."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -440,6 +447,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Příliš mnoho spojení k serveru %s [%s]"
|
||||
@@ -591,14 +603,24 @@ msgstr "Načítání %s selhalo"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -770,7 +792,7 @@ 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/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -778,7 +800,7 @@ msgstr ""
|
||||
msgid "Date Sorting"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1482,14 +1504,14 @@ msgstr "Nezdařilo se přesunout soubory"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Spouštím uživatelský skript %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Spuštěno %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Navratový kód skriptu je %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Spuštěno %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Více"
|
||||
@@ -1820,32 +1842,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
|
||||
@@ -2872,6 +2894,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 ""
|
||||
@@ -2907,9 +2934,7 @@ msgid "Watched Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3628,6 +3653,10 @@ msgstr ""
|
||||
msgid "Force Download"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -3998,10 +4027,6 @@ msgstr ""
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr ""
|
||||
@@ -4114,6 +4139,14 @@ 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"
|
||||
msgstr ""
|
||||
@@ -4185,11 +4218,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4204,6 +4239,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4437,6 +4488,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 ""
|
||||
|
||||
119
po/main/da.po
119
po/main/da.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
@@ -297,6 +297,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fejl: Køen er ikke tom, kan ikke skifte mappe."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -438,6 +445,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Det lykkedes ikke at initialisere %s@%s med begrundelse %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Alt for mange forbindelser til serveren %s [%s]"
|
||||
@@ -599,14 +611,24 @@ msgstr "Downloadning af %s mislykkedes"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -775,7 +797,7 @@ 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/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Serie sortering"
|
||||
|
||||
@@ -783,7 +805,7 @@ msgstr "Serie sortering"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Dato sortering"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film sortering"
|
||||
|
||||
@@ -1513,14 +1535,14 @@ msgstr "Kunne ikke flytte filer"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Kør bruger script %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Kørte %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Script exit kode er %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Kørte %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Mere"
|
||||
@@ -1851,32 +1873,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
|
||||
@@ -2929,6 +2951,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 ""
|
||||
@@ -2966,12 +2993,8 @@ msgid "Watched Folder"
|
||||
msgstr "Overvåget Mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Mappe til at gennemsøge for. Nzb filer.<br /><i>Skanner også for .zip .rar "
|
||||
"og .tar.gz arkiver efter .nzb filer.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Mappe til at gennemsøge for .nzb filer."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3723,6 +3746,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"
|
||||
@@ -4099,10 +4126,6 @@ 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"
|
||||
@@ -4215,6 +4238,14 @@ msgstr "Sorteringsstreng"
|
||||
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"
|
||||
msgstr "I mappe"
|
||||
@@ -4286,11 +4317,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4305,6 +4338,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4544,6 +4593,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!)"
|
||||
|
||||
158
po/main/de.po
158
po/main/de.po
@@ -11,14 +11,15 @@
|
||||
# Simon W., 2021
|
||||
# Nils Briggen, 2022
|
||||
# reloxx13 <reloxx@interia.pl>, 2022
|
||||
# kameb, 2023
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
"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"
|
||||
@@ -319,6 +320,13 @@ msgstr ""
|
||||
"Fehler: Ordner kann nicht geändert werden, da die Warteschlange nicht leer "
|
||||
"ist."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -467,6 +475,11 @@ msgstr "Es gibt keine aktiven Server!"
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Fehler %s@%s zu initialisieren, aus folgendem Grund: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Zu viele Verbindungen zu Server %s [%s]"
|
||||
@@ -476,6 +489,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]"
|
||||
@@ -628,6 +643,21 @@ msgstr "Fehler beim Speichern von %s"
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Fehler beim Laden von %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr "%s ist nicht beschreibbar. Downloads sind dadurch blockiert."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
@@ -637,11 +667,6 @@ msgstr ""
|
||||
"Dateinamen mit Umlaute können nicht in %s gespeichert werden. Dies kann zu "
|
||||
"Problemen führen."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr "%s ist nicht beschreibbar. Downloads sind dadurch blockiert."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Abgelehnte Verbindung von:"
|
||||
@@ -817,7 +842,7 @@ 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/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortieren von TV-Serien"
|
||||
|
||||
@@ -825,7 +850,7 @@ msgstr "Sortieren von TV-Serien"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortieren nach Datum"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film Sortierung"
|
||||
|
||||
@@ -1577,14 +1602,14 @@ msgstr "Dateien verschieben fehlgeschlagen"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Ausführen des Benutzer-Skripts %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s ausgeführt"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Exit-Code des Skripts ist %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s ausgeführt"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Mehr"
|
||||
@@ -1915,32 +1940,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
|
||||
@@ -3029,6 +3054,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"
|
||||
@@ -3072,12 +3102,8 @@ msgid "Watched Folder"
|
||||
msgstr "Überwachter Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Ordner, der auf neue NZB-Dateien überwacht werden soll.<br /><i>Erkennt auch"
|
||||
" ZIP-, RAR- und TAR.GZ-Archive mit NZB-Dateien.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Ordner, der auf neue .nzb Dateien überwacht werden soll."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3119,7 +3145,7 @@ msgstr "System-Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Hidden Folders"
|
||||
msgstr ""
|
||||
msgstr "Versteckte Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Administrative Folder"
|
||||
@@ -3873,6 +3899,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"
|
||||
@@ -4256,10 +4286,6 @@ 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"
|
||||
@@ -4370,7 +4396,15 @@ msgstr "Sortieranweisung"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
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"
|
||||
@@ -4386,7 +4420,7 @@ msgstr "Aufgabe Name als Ordnername"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
msgstr "Serien"
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4419,11 +4453,11 @@ msgstr "GuessIt_Eigenschaft"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
msgstr "Minimale Dateigröße"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
msgstr "Betroffener Aufgabentyp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
@@ -4431,36 +4465,66 @@ msgstr "Alle"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
msgstr "Serien mit Ausstrahlungsdatum"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
msgstr "Filme"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
msgstr "Andere / Unbekannte"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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 ""
|
||||
msgstr "Sortierer hinzufügen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
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 ""
|
||||
@@ -4701,6 +4765,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!)"
|
||||
@@ -4878,7 +4946,7 @@ msgstr ""
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
msgstr "Fehler beim umbennenen von %s nach %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
119
po/main/es.po
119
po/main/es.po
@@ -9,10 +9,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
@@ -312,6 +312,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Error: Cola no esta vacía, no se puede cambiar el directorio"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -459,6 +466,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Error al inicializar %s@%s con la razón: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Demasiadas conexiones con el servidor %s [%s]"
|
||||
@@ -621,14 +633,24 @@ msgstr "Cargar de %s no se pudo completar."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -804,7 +826,7 @@ msgstr ""
|
||||
"La secuencia de comandos Python \"%s\" no tiene configurado el permiso de "
|
||||
"ejecutar (+x)"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Ordenación de Series"
|
||||
|
||||
@@ -812,7 +834,7 @@ msgstr "Ordenación de Series"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Ordenar por fecha"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Clasificación de películas"
|
||||
|
||||
@@ -1567,14 +1589,14 @@ msgstr "Error al mover ficheros"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Ejecutando script de usuario %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Se ejecutó %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "El código de retorno del Script es %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Se ejecutó %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Más"
|
||||
@@ -1907,32 +1929,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
|
||||
@@ -3008,6 +3030,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 ""
|
||||
@@ -3045,12 +3072,8 @@ msgid "Watched Folder"
|
||||
msgstr "Directorio a vigilar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Directorio a monitorizar en busca de ficheros .nzb.<br /><i>También escanea "
|
||||
"ficheros .zip .rar y .tar.gz en busca de ficheros .nzb.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Directorio a monitorizar en busca de ficheros .nzb."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3824,6 +3847,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"
|
||||
@@ -4204,10 +4231,6 @@ msgstr "Patrón"
|
||||
msgid "Clear"
|
||||
msgstr "Limpiar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Aplicar filtros"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Preajustes"
|
||||
@@ -4320,6 +4343,14 @@ msgstr "Ordenar cadena"
|
||||
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"
|
||||
msgstr "En directorios"
|
||||
@@ -4391,11 +4422,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4410,6 +4443,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4651,6 +4700,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?"
|
||||
|
||||
119
po/main/fi.po
119
po/main/fi.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\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"
|
||||
@@ -295,6 +295,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Virhe: Jono ei ole tyhjä, kansiota ei voida vaihtaa."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -435,6 +442,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Alustaminen epäonnistui kohteessa %s@%s syy: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Liikaa yhteyksiä palvelimelle %s [%s]"
|
||||
@@ -596,14 +608,24 @@ msgstr "Kohteen %s lataaminen epäonnistui"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -772,7 +794,7 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sarjojen lajittelu"
|
||||
|
||||
@@ -780,7 +802,7 @@ msgstr "Sarjojen lajittelu"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Päivämäärän lajittelu"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1507,14 +1529,14 @@ msgstr "Tiedostojen siirto epäonnistui"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Ajetaan käyttäjän skripti %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Ajettiin %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Skriptin lopetuskoodi on %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Ajettiin %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Lisää"
|
||||
@@ -1845,32 +1867,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
|
||||
@@ -2932,6 +2954,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 ""
|
||||
@@ -2969,12 +2996,8 @@ msgid "Watched Folder"
|
||||
msgstr "Vahdittu kansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Kansio jota vahditaan .nzb tiedostojen varalta.<br /><i>Etsii .nzb "
|
||||
"tiedostoja myös .zip .rar ja .tar.gz arkistojen sisältä.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Kansio jota vahditaan .nzb tiedostojen varalta."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3725,6 +3748,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"
|
||||
@@ -4101,10 +4128,6 @@ msgstr "Mallin avain"
|
||||
msgid "Clear"
|
||||
msgstr "Tyhjennä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Esiasetukset"
|
||||
@@ -4217,6 +4240,14 @@ msgstr "Lajittelumerkkijono"
|
||||
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"
|
||||
msgstr "Kansioissa"
|
||||
@@ -4288,11 +4319,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4307,6 +4340,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4549,6 +4598,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!)"
|
||||
|
||||
167
po/main/fr.po
167
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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
@@ -317,6 +317,15 @@ msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr ""
|
||||
"Erreur : La file d'attente n'est pas vide, impossible de changer le dossier."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
"N'utilisez pas un dossier à l'intérieur du dossier de l'application pour y "
|
||||
"stocker les scripts, il pourrait être vidé lors des mises à jour."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -463,6 +472,11 @@ msgstr "Il n'y a aucun serveur actif !"
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Échec d'initialisation de %s@%s pour la raison suivante : %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr "Erreur fatale dans le Téléchargeur"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Trop de connexions au serveur %s [%s]"
|
||||
@@ -626,6 +640,25 @@ msgstr "L'enregistrement de %s a échoué"
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Echec du chargement de %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr "%s n'est pas du tout inscriptible. Les téléchargements sont bloqués."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
"Impossible d'écrire un nom de fichier long dans %s. Cela peut causer des "
|
||||
"problèmes."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
"Impossible d'écrire un nom de fichier unicode dans %s. Cela peut causer des "
|
||||
"problèmes."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
@@ -635,11 +668,6 @@ msgstr ""
|
||||
"Le fichier %s n'est pas inscriptible à cause des caractères spéciaux dans le"
|
||||
" nom. Cela peut causer des problèmes."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr "%s n'est pas du tout inscriptible. Les téléchargements sont bloqués."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Connexion refusée de:"
|
||||
@@ -816,7 +844,7 @@ msgstr ""
|
||||
"Le script Python \"%s\" n'est pas configuré avec les permissions d’exécution"
|
||||
" (+x)"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Tri des séries"
|
||||
|
||||
@@ -824,7 +852,7 @@ msgstr "Tri des séries"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Tri par date"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Tri des films"
|
||||
|
||||
@@ -1571,14 +1599,14 @@ msgstr "Impossible de déplacer les fichiers"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Exécution du script utilisateur %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s exécuté"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Le code script de sortie est %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s exécuté"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Plus"
|
||||
@@ -1910,32 +1938,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
|
||||
@@ -3024,6 +3052,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"
|
||||
@@ -3066,12 +3101,8 @@ msgid "Watched Folder"
|
||||
msgstr "Dossier à surveiller"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Dossier d'import automatique des fichiers .nzb.<br /><i>Prends en compte "
|
||||
"également les nzb contenus dans les fichiers .zip, .rar et .tar.gz.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Dossier d'import automatique des fichiers .nzb."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3868,6 +3899,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"
|
||||
@@ -4251,10 +4286,6 @@ 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"
|
||||
@@ -4365,7 +4396,15 @@ msgstr "Chaîne de caractères de tri"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-part Label"
|
||||
msgstr ""
|
||||
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"
|
||||
@@ -4381,7 +4420,7 @@ msgstr "Nom de la tâche en tant que nom de fichier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series"
|
||||
msgstr ""
|
||||
msgstr "Séries"
|
||||
|
||||
#. Note for title expression in Sorting that does case adjustment
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4414,11 +4453,11 @@ msgstr "Attribut_Guessit"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
msgstr "Taille minimale du fichier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
msgstr ""
|
||||
msgstr "Types de tâche concernée"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All"
|
||||
@@ -4426,36 +4465,67 @@ msgstr "Tous"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Series with air dates"
|
||||
msgstr ""
|
||||
msgstr "Séries avec dates de diffusion"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
msgstr "Films"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Other / Unknown"
|
||||
msgstr ""
|
||||
msgstr "Autre / Inconnu"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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 ""
|
||||
msgstr "Ajouter un trieur"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Remove Sorter"
|
||||
msgstr ""
|
||||
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 ""
|
||||
@@ -4699,6 +4769,11 @@ 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 ""
|
||||
"Maj+flèche : parcourir les pages de la file d'attente et de l'historique"
|
||||
|
||||
#: 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 ?"
|
||||
@@ -4877,7 +4952,7 @@ msgstr ""
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
msgid "Failed to rename %s to %s"
|
||||
msgstr ""
|
||||
msgstr "Échec du renommage de %s en %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/sorting.py
|
||||
|
||||
121
po/main/he.po
121
po/main/he.po
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
@@ -294,6 +294,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "שגיאה: התור אינו ריק, לא ניתן לשנות תיקייה."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -435,6 +442,11 @@ msgstr "אין שרתים פעילים!"
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "נכשל באתחול %s@%s עם סיבה: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "יותר מדי חיבורים לשרת %s [%s]"
|
||||
@@ -594,6 +606,21 @@ msgstr "שמירת %s נכשלה"
|
||||
msgid "Loading %s failed"
|
||||
msgstr "טעינת %s נכשלה"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr "%s אינו בר־כתיבה בכלל. זה חוסם הורדות."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
@@ -601,11 +628,6 @@ msgid ""
|
||||
"problems."
|
||||
msgstr "%s אינו בר־כתיבה עם שמות קבצים עם תו מיוחד. זה יכול לגרום לבעיות."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr "%s אינו בר־כתיבה בכלל. זה חוסם הורדות."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "חיבור מסורב מאת:"
|
||||
@@ -774,7 +796,7 @@ msgstr "[%s] הפקודה ב־build_command אינה מוגדרת."
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "לתסריט פייתון \"%s\" אין ערכת הרשאות ביצוע (+x)"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "מיון סדרות"
|
||||
|
||||
@@ -782,7 +804,7 @@ msgstr "מיון סדרות"
|
||||
msgid "Date Sorting"
|
||||
msgstr "מיון תאריכים"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "מיון סרטים"
|
||||
|
||||
@@ -1514,14 +1536,14 @@ msgstr "נכשל בהעברת קבצים"
|
||||
msgid "Running user script %s"
|
||||
msgstr "מריץ תסריט משתמש %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "הריץ את %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "קוד יציאת תסריט הוא %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "הריץ את %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "עוד"
|
||||
@@ -1852,32 +1874,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
|
||||
@@ -2937,6 +2959,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 "שטח פנוי מזערי עבור תיקיית הורדות שלמות"
|
||||
@@ -2977,12 +3004,8 @@ msgid "Watched Folder"
|
||||
msgstr "תיקייה מושגחת"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"תיקייה לניטור אחר קבצי nzb.<br /><i>סורק גם ארכיונים מסוג .zip .rar "
|
||||
"ו־.tar.gz ואחר קבצי nzb.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "תיקייה לניטור אחר קבצי nzb."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3731,6 +3754,10 @@ msgstr "קרא הזנה"
|
||||
msgid "Force Download"
|
||||
msgstr "אלץ הורדה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "החל מסננים"
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4107,10 +4134,6 @@ msgstr "מפתח דפוס"
|
||||
msgid "Clear"
|
||||
msgstr "נקה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "החל מסננים"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "קדם־קביעות"
|
||||
@@ -4223,6 +4246,14 @@ 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"
|
||||
msgstr "בתיקיות"
|
||||
@@ -4294,11 +4325,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4313,6 +4346,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4551,6 +4600,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 "כמה זמן או עד מתי תרצה להשהות? (באנגלית!)"
|
||||
|
||||
119
po/main/nb.po
119
po/main/nb.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
@@ -291,6 +291,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Feil: Køen er ikke tom, kan ikke bytte mappe."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -430,6 +437,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Feilet å starte %s@%s grunnet: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "For mange tilkoblinger til server %s [%s]"
|
||||
@@ -591,14 +603,24 @@ msgstr "Lasting av %s mislyktes"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -767,7 +789,7 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Seriesortering"
|
||||
|
||||
@@ -775,7 +797,7 @@ msgstr "Seriesortering"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Dato sortering"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1503,14 +1525,14 @@ msgstr "Klarte ikke å flytte filer"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Kjør brukerskript %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Kjørte i %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Skript-avsluttingskode er %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Kjørte i %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Mer"
|
||||
@@ -1841,32 +1863,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
|
||||
@@ -2917,6 +2939,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 ""
|
||||
@@ -2954,12 +2981,8 @@ msgid "Watched Folder"
|
||||
msgstr "Overvåket Mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Mappe som automatiskt søkes igjennom etter .nzb filer.<br /><i>Skanner også "
|
||||
"igjennom .zip .rar og .tar.gz arkiver etter .nzb filer.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Mappe som automatiskt søkes igjennom etter .nzb filer."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3700,6 +3723,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"
|
||||
@@ -4072,10 +4099,6 @@ msgstr "Hjelp til Sorteringsstreng"
|
||||
msgid "Clear"
|
||||
msgstr "Rens"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "For innstillinger"
|
||||
@@ -4188,6 +4211,14 @@ msgstr "Sorteringsstreng"
|
||||
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"
|
||||
msgstr "I mappe"
|
||||
@@ -4259,11 +4290,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4278,6 +4311,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4516,6 +4565,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!)"
|
||||
|
||||
131
po/main/nl.po
131
po/main/nl.po
@@ -4,14 +4,15 @@
|
||||
#
|
||||
# Translators:
|
||||
# Rik Brouwer, 2022
|
||||
# Robert Lampe, 2023
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
@@ -308,6 +309,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fout: Wachtrij is niet leeg, andere map kiezen niet mogelijk."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -457,6 +465,11 @@ msgstr "Er zijn geen actieve servers!"
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Initialisatie van %s@%s mislukt, vanwege: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Te veel verbindingen met server %s [%s]"
|
||||
@@ -618,6 +631,23 @@ msgstr "Opslaan van %s lukt niet"
|
||||
msgid "Loading %s failed"
|
||||
msgstr "Inlezen van %s mislukt"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
"Het is niet mogelijk bestanden te schrijven in %s. Hierdoor kan er niet "
|
||||
"gedownload worden."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
@@ -627,13 +657,6 @@ msgstr ""
|
||||
"Het is niet mogelijk bestanden met speciale tekens op te slaan in %s. Dit "
|
||||
"geeft mogelijk problemen bij het verwerken van downloads."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
"Het is niet mogelijk bestanden te schrijven in %s. Hierdoor kan er niet "
|
||||
"gedownload worden."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Verbinding geweigerd van: "
|
||||
@@ -703,11 +726,11 @@ msgstr "Feed"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Daily"
|
||||
msgstr "dagelijks"
|
||||
msgstr "Dagelijks"
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "Monday"
|
||||
msgstr "maandag"
|
||||
msgstr "Maandag"
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "Tuesday"
|
||||
@@ -807,7 +830,7 @@ 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/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Serie sorteren"
|
||||
|
||||
@@ -815,7 +838,7 @@ msgstr "Serie sorteren"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Datum sorteren"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "Film sorteren"
|
||||
|
||||
@@ -1553,14 +1576,14 @@ msgstr "Verplaatsen van bestanden mislukt"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Gebruiker script %s loopt"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s is klaar"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Exit code van het script is %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s is klaar"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Meer"
|
||||
@@ -1891,32 +1914,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
|
||||
@@ -2992,6 +3015,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"
|
||||
@@ -3031,12 +3059,9 @@ msgid "Watched Folder"
|
||||
msgstr "Bewaakte map"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr ""
|
||||
".NZB en .ZIP-bestanden in deze map worden automatisch toegevoegd aan de "
|
||||
"wachtrij."
|
||||
".nzb bestanden in deze map worden automatisch toegevoegd aan de wachtrij."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3826,6 +3851,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"
|
||||
@@ -4208,10 +4237,6 @@ msgstr "Uitleg"
|
||||
msgid "Clear"
|
||||
msgstr "Wissen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "Filters toepassen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Standaardinstellingen"
|
||||
@@ -4324,6 +4349,14 @@ msgstr "Sorteertekst"
|
||||
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"
|
||||
msgstr "In mappen"
|
||||
@@ -4371,7 +4404,7 @@ msgstr "GuessIt_Eigenschap"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimum Filesize"
|
||||
msgstr ""
|
||||
msgstr "Minimale bestandsgrootte"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Affected Job Types"
|
||||
@@ -4395,11 +4428,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4414,6 +4449,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4653,6 +4704,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!)"
|
||||
|
||||
119
po/main/pl.po
119
po/main/pl.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\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"
|
||||
@@ -287,6 +287,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Błąd: Kolejka nie jest pusta, nie można zmienić katalogu."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -428,6 +435,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Błąd podczas inicjalizacji %s@%s: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Zbyt wiele połączeń do serwera %s [%s]"
|
||||
@@ -591,14 +603,24 @@ msgstr "Nie udało się wczytać %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -767,7 +789,7 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortowanie seriali"
|
||||
|
||||
@@ -775,7 +797,7 @@ msgstr "Sortowanie seriali"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortowanie według daty"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1509,14 +1531,14 @@ msgstr "Nie udało się przenieść plików"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Uruchamianie skryptu użytkownika %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Uruchomiono %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Kod zakończenia skryptu: %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Uruchomiono %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Więcej"
|
||||
@@ -1847,32 +1869,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
|
||||
@@ -2924,6 +2946,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 ""
|
||||
@@ -2961,12 +2988,8 @@ msgid "Watched Folder"
|
||||
msgstr "Obserwowany katalog"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Katalog monitorowany w poszukiwaniu plików .nzb.<br /><i>Skanowane są "
|
||||
"również pliki .zip, .rar oraz .tar.gz.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Katalog monitorowany w poszukiwaniu plików .nzb."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3711,6 +3734,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"
|
||||
@@ -4083,10 +4110,6 @@ msgstr "Zastępowane ciągi"
|
||||
msgid "Clear"
|
||||
msgstr "Wyczyść"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Predefiniowane"
|
||||
@@ -4199,6 +4222,14 @@ msgstr "Wzorzec sortowania"
|
||||
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"
|
||||
msgstr "W katalogach"
|
||||
@@ -4270,11 +4301,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4289,6 +4322,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4527,6 +4576,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!)"
|
||||
|
||||
119
po/main/pt_BR.po
119
po/main/pt_BR.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\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"
|
||||
@@ -291,6 +291,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Erro: A fila não está vazia. Não será possível mudar de pasta."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -434,6 +441,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Falha ao iniciar %s@%s devido as seguintes razões: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Excesso de conexões ao servidor %s [%s]"
|
||||
@@ -595,14 +607,24 @@ msgstr "Falha ao carregar %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -771,7 +793,7 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Ordenação de Séries"
|
||||
|
||||
@@ -779,7 +801,7 @@ msgstr "Ordenação de Séries"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Ordenação por data"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1511,14 +1533,14 @@ msgstr "Falha ao mover arquivos"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Executando script de usuário %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s executado"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Código de saída do script é %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s executado"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Mais"
|
||||
@@ -1850,32 +1872,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
|
||||
@@ -2926,6 +2948,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 ""
|
||||
@@ -2963,12 +2990,8 @@ msgid "Watched Folder"
|
||||
msgstr "Pasta de Assistidos"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Pasta para monitorar por arquivos .nzb.<br /><i>Também procura arquivos .nzb"
|
||||
" em arquivos .zip, .rar e .tar.gz.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Pasta para monitorar por arquivos .nzb."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3713,6 +3736,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"
|
||||
@@ -4085,10 +4112,6 @@ msgstr "Modelo do padrão"
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Predefinições"
|
||||
@@ -4201,6 +4224,14 @@ msgstr "String de ordenação"
|
||||
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"
|
||||
msgstr "Em pastas"
|
||||
@@ -4272,11 +4303,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4291,6 +4324,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4529,6 +4578,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!)"
|
||||
|
||||
119
po/main/ro.po
119
po/main/ro.po
@@ -8,10 +8,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
@@ -302,6 +302,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Eroare: Coada nu este goală, nu pot schimba dosar."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -447,6 +454,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Nu am putu inițializa %s@%s din cauza următorului motiv: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Prea multe conexiuni la serverul %s [%s]"
|
||||
@@ -608,14 +620,24 @@ msgstr "Încărcarea %s nereuşită"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -790,7 +812,7 @@ 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/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Sortare Seriale"
|
||||
|
||||
@@ -798,7 +820,7 @@ msgstr "Sortare Seriale"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Sortare Dată"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1539,14 +1561,14 @@ msgstr "Nu am putu muta fişier"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Rulare script utilizator %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Durată %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Codul de ieșire a scriptului este %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Durată %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Mai mult"
|
||||
@@ -1877,32 +1899,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
|
||||
@@ -2953,6 +2975,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 ""
|
||||
@@ -2990,12 +3017,8 @@ msgid "Watched Folder"
|
||||
msgstr "Dosar Monitorizat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Dosar pentru supraveghere fişiere .nzb.<br /><i>Scanează de asemenea şi "
|
||||
"arhivele .zip .rar .tar.gz de fişiere .nzb.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Dosar pentru supraveghere fişiere .nzb."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3742,6 +3765,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"
|
||||
@@ -4113,10 +4140,6 @@ msgstr "Model Cheie"
|
||||
msgid "Clear"
|
||||
msgstr "Şterge"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Presetări"
|
||||
@@ -4229,6 +4252,14 @@ msgstr "Şir Caractere Sortare"
|
||||
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"
|
||||
msgstr "În dosare"
|
||||
@@ -4300,11 +4331,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4319,6 +4352,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4558,6 +4607,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ă!)"
|
||||
|
||||
119
po/main/ru.po
119
po/main/ru.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\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"
|
||||
@@ -291,6 +291,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Ошибка: очередь не пустая, папку нельзя изменить."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -430,6 +437,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr ""
|
||||
@@ -591,14 +603,24 @@ msgstr "Ошибка загрузки %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -769,7 +791,7 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Сортировка сериалов"
|
||||
|
||||
@@ -777,7 +799,7 @@ msgstr "Сортировка сериалов"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Сортировка даты"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1508,14 +1530,14 @@ msgstr "Не удалось переместить файлы"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Запуск пользовательского сценария %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Запущено %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Запущено %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Подробнее"
|
||||
@@ -1846,32 +1868,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
|
||||
@@ -2922,6 +2944,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 ""
|
||||
@@ -2959,12 +2986,8 @@ msgid "Watched Folder"
|
||||
msgstr "Наблюдаемая папка"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Папка для поиска NZB-файлов.<br /><i>NZB-файлы также ищутся в архивах ZIP, "
|
||||
"RAR и TAR.GZ.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Папка для поиска NZB-файлов."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3704,6 +3727,10 @@ msgstr "Прочитать ленту"
|
||||
msgid "Force Download"
|
||||
msgstr "Загрузить принудительно"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4082,10 +4109,6 @@ msgstr "Ключи шаблона"
|
||||
msgid "Clear"
|
||||
msgstr "Очистить"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Готовые шаблоны"
|
||||
@@ -4198,6 +4221,14 @@ 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"
|
||||
msgstr "В папках"
|
||||
@@ -4269,11 +4300,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4288,6 +4321,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4525,6 +4574,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 ""
|
||||
|
||||
120
po/main/sr.po
120
po/main/sr.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\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"
|
||||
@@ -289,6 +289,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Грешка: ред није празан, фасцикла се не може променити."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -429,6 +436,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Neuspešna inicijalizacija %s@%s iz razloga: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Previše konekcija ka serveru %s [%s]"
|
||||
@@ -590,14 +602,24 @@ msgstr "Učitavanje %s neuspešno"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -764,7 +786,7 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Сортирање серије"
|
||||
|
||||
@@ -772,7 +794,7 @@ msgstr "Сортирање серије"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Сређивање датумом"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1500,14 +1522,14 @@ msgstr "Неуспешно премештање датотека"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Покретање скрипта %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s покренуто"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Kod prekida skripte je %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "%s покренуто"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Више"
|
||||
@@ -1838,32 +1860,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
|
||||
@@ -2908,6 +2930,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 ""
|
||||
@@ -2945,13 +2972,8 @@ msgid "Watched Folder"
|
||||
msgstr "Надгледана фасцикла"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Фасцикла за надгледање <b>.nzb</b> датотека.<br /><i>Такође скенира "
|
||||
"<b>.zip</b> <b>.rar</b> и <b>.tar.gz</b> архиве у потрази за <b>.nzb</b> "
|
||||
"датотекама.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Фасцикла за надгледање .nzb датотека."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3689,6 +3711,10 @@ msgstr "Читај фид"
|
||||
msgid "Force Download"
|
||||
msgstr "Натерај преузимање"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4060,10 +4086,6 @@ msgstr "Модел кључа"
|
||||
msgid "Clear"
|
||||
msgstr "Очисти"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "Предподешавања"
|
||||
@@ -4176,6 +4198,14 @@ 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"
|
||||
msgstr "У фасциклама"
|
||||
@@ -4247,11 +4277,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4266,6 +4298,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4504,6 +4552,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!)"
|
||||
|
||||
119
po/main/sv.po
119
po/main/sv.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\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"
|
||||
@@ -289,6 +289,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "Fel: Kön är inte tom, kan inte byta mapp."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -429,6 +436,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "Misslyckades att initiera %s@%s med orsak %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "För många anslutningar till servern %s [%s]"
|
||||
@@ -590,14 +602,24 @@ msgstr "Laddning av %s misslyckades"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -766,7 +788,7 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "Seriesortering"
|
||||
|
||||
@@ -774,7 +796,7 @@ msgstr "Seriesortering"
|
||||
msgid "Date Sorting"
|
||||
msgstr "Datum sortering"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr ""
|
||||
|
||||
@@ -1506,14 +1528,14 @@ msgstr "Misslyckades med att flytta filer"
|
||||
msgid "Running user script %s"
|
||||
msgstr "Kör användarskript %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Körde %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "Skriptets utgångskod är %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "Körde %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "Mer"
|
||||
@@ -1844,32 +1866,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
|
||||
@@ -2919,6 +2941,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 ""
|
||||
@@ -2956,12 +2983,8 @@ msgid "Watched Folder"
|
||||
msgstr "Övervakad Mapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"Mapp som igenomsöks automatiskt efter .nzb filer.<br /><i>Skannar även "
|
||||
"igenom .zip .rar och .tar.gz arkiv efter .nzb filer.</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "Mapp som igenomsöks automatiskt efter .nzb filer."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3702,6 +3725,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"
|
||||
@@ -4073,10 +4100,6 @@ 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"
|
||||
@@ -4189,6 +4212,14 @@ msgstr "Sorteringssträng"
|
||||
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"
|
||||
msgstr "In mapp"
|
||||
@@ -4260,11 +4291,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4279,6 +4312,22 @@ msgstr ""
|
||||
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 "
|
||||
@@ -4516,6 +4565,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!)"
|
||||
|
||||
118
po/main/zh_CN.po
118
po/main/zh_CN.po
@@ -7,10 +7,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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"
|
||||
@@ -287,6 +287,13 @@ msgstr ""
|
||||
msgid "Error: Queue not empty, cannot change folder."
|
||||
msgstr "错误: 队列非空,无法变更文件夹。"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it "
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -426,6 +433,11 @@ msgstr ""
|
||||
msgid "Failed to initialize %s@%s with reason: %s"
|
||||
msgstr "无法初始化 %s@%s,原因为: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "服务器 %s 连接数过多 [%s]"
|
||||
@@ -587,14 +599,24 @@ msgstr "加载 %s 失败"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "%s is not writable at all. This blocks downloads."
|
||||
msgid "Cannot write a long filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid "Cannot write a unicode filename to %s. This can cause problems."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/filesystem.py
|
||||
msgid ""
|
||||
"%s is not writable with special character filenames. This can cause "
|
||||
"problems."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -759,7 +781,7 @@ msgstr ""
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Python 脚本 \"%s\" 不具有执行 (+x) 权限"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Series Sorting"
|
||||
msgstr "TV 排序"
|
||||
|
||||
@@ -767,7 +789,7 @@ msgstr "TV 排序"
|
||||
msgid "Date Sorting"
|
||||
msgstr "日期排序"
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
#: sabnzbd/misc.py, sabnzbd/skintext.py
|
||||
msgid "Movie Sorting"
|
||||
msgstr "电影排序"
|
||||
|
||||
@@ -1493,14 +1515,14 @@ msgstr "移动文件失败"
|
||||
msgid "Running user script %s"
|
||||
msgstr "正在执行用户脚本 %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "执行 %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Script exit code is %s"
|
||||
msgstr "脚本退出代码为 %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Ran %s"
|
||||
msgstr "执行 %s"
|
||||
|
||||
#: sabnzbd/postproc.py, sabnzbd/skintext.py
|
||||
msgid "More"
|
||||
msgstr "更多"
|
||||
@@ -1831,32 +1853,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
|
||||
@@ -2881,6 +2903,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 ""
|
||||
@@ -2916,11 +2943,8 @@ msgid "Watched Folder"
|
||||
msgstr "监视文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Folder to monitor for .nzb files.<br /><i>Also scans .zip .rar and .tar.gz "
|
||||
"archives for .nzb files.</i>"
|
||||
msgstr ""
|
||||
"要监视 .nzb 文件的文件夹。<br /><i>会同时扫描 .zip .rar 及 .tar.gz 压缩文件中的 .nzb 文件。</i>"
|
||||
msgid "Folder to monitor for .nzb files."
|
||||
msgstr "要监视 .nzb 文件的文件夹。"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Watched Folder Scan Speed"
|
||||
@@ -3640,6 +3664,10 @@ msgstr "读取 Feed"
|
||||
msgid "Force Download"
|
||||
msgstr "强制下载"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "应用过滤器"
|
||||
|
||||
#. Config->RSS edit button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Edit"
|
||||
@@ -4012,10 +4040,6 @@ msgstr "匹配符释义"
|
||||
msgid "Clear"
|
||||
msgstr "清除"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Apply filters"
|
||||
msgstr "应用过滤器"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Presets"
|
||||
msgstr "预设"
|
||||
@@ -4128,6 +4152,14 @@ 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"
|
||||
msgstr "分文件夹"
|
||||
@@ -4199,11 +4231,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Configure a new sorter, or edit/remove/reorder existing sorters "
|
||||
"below.<br><br>Sorters are tried in order of appearance, and can be reordered"
|
||||
" by dragging and dropping. The first active sorter that meets both selection"
|
||||
" criteria (affected category and job type) is applied to a job, provided at "
|
||||
"least one file meets the minumum filesize requirement."
|
||||
"<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
|
||||
@@ -4218,6 +4252,22 @@ msgstr ""
|
||||
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 +4503,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 "您希望在多久之后/什么时候暂停? (用英语作答!)"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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-4.0.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.1.0-develop\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,24 +1,24 @@
|
||||
# Main requirements
|
||||
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
|
||||
sabctools==6.1.1
|
||||
sabctools==7.0.2
|
||||
cheetah3==3.2.6.post1
|
||||
cffi==1.15.1
|
||||
pycparser==2.21
|
||||
feedparser==6.0.10
|
||||
configobj==5.0.8
|
||||
cheroot==9.0.0
|
||||
cheroot==10.0.0
|
||||
six==1.16.0
|
||||
cherrypy==18.8.0
|
||||
jaraco.functools==3.6.0
|
||||
jaraco.collections==3.8.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.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
|
||||
@@ -30,17 +30,17 @@ 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.2
|
||||
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'
|
||||
|
||||
@@ -50,6 +50,7 @@ from sabnzbd.constants import (
|
||||
KIBI,
|
||||
MEBI,
|
||||
GIGI,
|
||||
AddNzbFileResult,
|
||||
)
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg as cfg
|
||||
@@ -305,7 +306,7 @@ def _api_addfile(name, kwargs):
|
||||
nzbname=kwargs.get("nzbname"),
|
||||
password=kwargs.get("password"),
|
||||
)
|
||||
return report(keyword="", data={"status": res == 0, "nzo_ids": nzo_ids})
|
||||
return report(keyword="", data={"status": res is AddNzbFileResult.OK, "nzo_ids": nzo_ids})
|
||||
else:
|
||||
return report(_MSG_NO_VALUE)
|
||||
|
||||
@@ -350,7 +351,7 @@ def _api_addlocalfile(name, kwargs):
|
||||
nzbname=kwargs.get("nzbname"),
|
||||
password=kwargs.get("password"),
|
||||
)
|
||||
return report(keyword="", data={"status": res == 0, "nzo_ids": nzo_ids})
|
||||
return report(keyword="", data={"status": res is AddNzbFileResult.OK, "nzo_ids": nzo_ids})
|
||||
else:
|
||||
logging.info('API-call addlocalfile: "%s" is not a supported file', name)
|
||||
return report(_MSG_NO_FILE)
|
||||
@@ -629,10 +630,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):
|
||||
@@ -1570,7 +1571,7 @@ def build_header(webdir: str = "", for_template: bool = True, trans_functions: b
|
||||
|
||||
header["uptime"] = calc_age(sabnzbd.START)
|
||||
header["color_scheme"] = sabnzbd.WEB_COLOR or ""
|
||||
header["helpuri"] = "https://sabnzbd.org/wiki/"
|
||||
header["confighelpuri"] = f"https://sabnzbd.org/wiki/configuration/{sabnzbd.__version__[:3]}/"
|
||||
|
||||
header["pid"] = os.getpid()
|
||||
header["active_lang"] = cfg.language()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -20,6 +20,7 @@ sabnzbd.cfg - Configuration Parameters
|
||||
"""
|
||||
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import argparse
|
||||
import socket
|
||||
@@ -50,6 +51,7 @@ from sabnzbd.constants import (
|
||||
DEF_HTTPS_CERT_FILE,
|
||||
DEF_HTTPS_KEY_FILE,
|
||||
)
|
||||
from sabnzbd.filesystem import long_path
|
||||
|
||||
|
||||
##############################################################################
|
||||
@@ -231,6 +233,18 @@ def validate_safedir(root, value, default):
|
||||
return T("Error: Queue not empty, cannot change folder."), None
|
||||
|
||||
|
||||
def validate_scriptdir_not_appdir(root, value, default):
|
||||
"""Warn users to not use the Program Files folder for their scripts"""
|
||||
if value and long_path(os.path.join(root, value)).startswith(long_path(sabnzbd.DIR_PROG)):
|
||||
# Warn, but do not block
|
||||
sabnzbd.misc.helpful_warning(
|
||||
T(
|
||||
"Do not use a folder in the application folder as your Scripts Folder, it might be emptied during updates."
|
||||
)
|
||||
)
|
||||
return None, value
|
||||
|
||||
|
||||
def validate_notempty(root, value, default):
|
||||
"""If value is empty, return default"""
|
||||
if value:
|
||||
@@ -259,10 +273,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)
|
||||
sorters_converted = OptionBool("misc", "sorters_converted", False)
|
||||
direct_unpack_tested = OptionBool("misc", "direct_unpack_tested", False, public=False)
|
||||
sorters_converted = OptionBool("misc", "sorters_converted", False, public=False)
|
||||
|
||||
|
||||
##############################################################################
|
||||
@@ -304,7 +318,7 @@ complete_dir = OptionDir(
|
||||
)
|
||||
complete_free = OptionStr("misc", "complete_free")
|
||||
fulldisk_autoresume = OptionBool("misc", "fulldisk_autoresume", False)
|
||||
script_dir = OptionDir("misc", "script_dir", writable=False)
|
||||
script_dir = OptionDir("misc", "script_dir", writable=False, validation=validate_scriptdir_not_appdir)
|
||||
nzb_backup_dir = OptionDir("misc", "nzb_backup_dir", DEF_NZBBACK_DIR)
|
||||
admin_dir = OptionDir("misc", "admin_dir", DEF_ADMIN_DIR, validation=validate_safedir)
|
||||
backup_dir = OptionDir("misc", "backup_dir")
|
||||
@@ -337,7 +351,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)
|
||||
@@ -362,20 +376,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
|
||||
@@ -438,7 +452,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)
|
||||
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)
|
||||
|
||||
|
||||
@@ -63,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
|
||||
@@ -92,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]):
|
||||
@@ -138,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"""
|
||||
@@ -179,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.
|
||||
@@ -204,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"""
|
||||
@@ -287,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"""
|
||||
@@ -333,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"""
|
||||
@@ -381,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()}
|
||||
@@ -468,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
|
||||
@@ -477,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()
|
||||
@@ -532,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
|
||||
@@ -576,7 +602,7 @@ class ConfigSorter:
|
||||
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
|
||||
@@ -637,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()):
|
||||
@@ -689,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
|
||||
@@ -729,6 +755,7 @@ AllConfigTypes = Union[
|
||||
OptionList,
|
||||
OptionDir,
|
||||
ConfigCat,
|
||||
ConfigSorter,
|
||||
ConfigRSS,
|
||||
ConfigServer,
|
||||
]
|
||||
@@ -792,7 +819,7 @@ 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 ("sorters", "servers", "categories", "rss"):
|
||||
data = {section: [data]}
|
||||
|
||||
@@ -49,7 +49,7 @@ RENAMES_FILE = "__renames__"
|
||||
ATTRIB_FILE = "SABnzbd_attrib"
|
||||
REPAIR_REQUEST = "repair-all.sab"
|
||||
|
||||
SABCTOOLS_VERSION_REQUIRED = "6.1.1"
|
||||
SABCTOOLS_VERSION_REQUIRED = "7.0.2"
|
||||
|
||||
DB_HISTORY_VERSION = 1
|
||||
DB_HISTORY_NAME = "history%s.db" % DB_HISTORY_VERSION
|
||||
@@ -94,8 +94,8 @@ CONFIG_BACKUP_HTTPS = { # "basename": "associated setting"
|
||||
}
|
||||
|
||||
# Constants affecting download performance
|
||||
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)
|
||||
@@ -162,3 +162,10 @@ class Status:
|
||||
VERIFYING = "Verifying" # PP: Job is being verified (by par2)
|
||||
DELETED = "Deleted" # Q: Job has been deleted (and is almost gone)
|
||||
PROP = "Propagating" # Q: Delayed download
|
||||
|
||||
|
||||
class AddNzbFileResult:
|
||||
RETRY = "Retry" # File could not be read
|
||||
ERROR = "Error" # Rejected as duplicate, by pre-queue script or other failure to process file
|
||||
OK = "OK" # Added to queue
|
||||
NO_FILES_FOUND = "No files found" # Malformed or might not be an NZB file
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -172,7 +172,7 @@ def decode(article: Article, raw_data: 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
|
||||
@@ -292,7 +292,7 @@ def decode_uu(article: Article, raw_data: bytearray) -> bytes:
|
||||
except binascii.Error as msg:
|
||||
try:
|
||||
# Workaround for broken uuencoders by Fredrik Lundh
|
||||
nbytes = (((ord(line[0]) - 32) & 63) * 4 + 5) / 3
|
||||
nbytes = (((line[0] - 32) & 63) * 4 + 5) // 3
|
||||
decoded_line = binascii.a2b_uu(line[:nbytes])
|
||||
except Exception as msg2:
|
||||
logging.info(
|
||||
|
||||
5
sabnzbd/deobfuscate_filenames.py
Normal file → Executable file
5
sabnzbd/deobfuscate_filenames.py
Normal file → Executable file
@@ -33,6 +33,7 @@ import logging
|
||||
import os
|
||||
import re
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.filesystem import get_unique_filename, renamer, get_ext
|
||||
from sabnzbd.par2file import is_parfile, parse_par2_file
|
||||
import sabnzbd.utils.file_extension as file_extension
|
||||
@@ -223,8 +224,8 @@ def deobfuscate(nzo, filelist: List[str], usefulname: str):
|
||||
# Can't be imported directly due to circular import
|
||||
nzo: sabnzbd.nzbstuff.NzbObject
|
||||
|
||||
# to be sure, only keep really existing files:
|
||||
filelist = [f for f in filelist if os.path.isfile(f)]
|
||||
# to be sure, only keep really existing files and remove any duplicates:
|
||||
filelist = set(f for f in filelist if os.path.isfile(f))
|
||||
|
||||
# Do not deobfuscate/rename anything if there is a typical DVD or Bluray directory:
|
||||
ignored_movie_folders_with_dir_sep = tuple(os.path.sep + f + os.path.sep for f in IGNORED_MOVIE_FOLDERS)
|
||||
|
||||
@@ -439,7 +439,9 @@ class DirectUnpacker(threading.Thread):
|
||||
self.cur_volume = 1
|
||||
|
||||
# Need to disable buffer to have direct feedback
|
||||
self.active_instance = build_and_run_command(command, windows_unrar_command=True, bufsize=0)
|
||||
self.active_instance = build_and_run_command(
|
||||
command, windows_unrar_command=True, text_mode=False, stdin=subprocess.PIPE
|
||||
)
|
||||
|
||||
# Add to runners
|
||||
ACTIVE_UNPACKERS.append(self)
|
||||
|
||||
@@ -26,7 +26,7 @@ import threading
|
||||
from typing import Generator, Set, Optional, Tuple
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.constants import SCAN_FILE_NAME, VALID_ARCHIVES, VALID_NZB_FILES
|
||||
from sabnzbd.constants import SCAN_FILE_NAME, VALID_ARCHIVES, VALID_NZB_FILES, AddNzbFileResult
|
||||
import sabnzbd.filesystem as filesystem
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg as cfg
|
||||
@@ -205,10 +205,10 @@ class DirScanner(threading.Thread):
|
||||
|
||||
# Add the NZB's
|
||||
res, _ = sabnzbd.nzbparser.add_nzbfile(path, catdir=catdir, keep=False)
|
||||
if res < 0:
|
||||
if res is AddNzbFileResult.RETRY or res is AddNzbFileResult.ERROR:
|
||||
# Retry later, for example when we can't read the file
|
||||
self.suspected[path] = stat_tuple
|
||||
elif res == 0:
|
||||
elif res is AddNzbFileResult.OK:
|
||||
self.error_reported = False
|
||||
else:
|
||||
self.ignored[path] = 1
|
||||
|
||||
@@ -214,22 +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:
|
||||
@@ -252,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)
|
||||
@@ -581,188 +582,185 @@ class Downloader(Thread):
|
||||
BPSMeter.update()
|
||||
next_bpsmeter_update = 0
|
||||
|
||||
# Debugging code for v4 test release
|
||||
sleep_count_start: float = time.time()
|
||||
sleep_count: int = 0
|
||||
time_slept: float = 0
|
||||
|
||||
# Check server expiration dates
|
||||
check_server_expiration()
|
||||
|
||||
while 1:
|
||||
now = time.time()
|
||||
# Catch all errors, just in case
|
||||
try:
|
||||
while 1:
|
||||
now = time.time()
|
||||
|
||||
# Set Article to None so references from this
|
||||
# thread do not keep the parent objects alive (see #1628)
|
||||
article = None
|
||||
# Set Article to None so references from this
|
||||
# thread do not keep the parent objects alive (see #1628)
|
||||
article = None
|
||||
|
||||
for server in self.servers:
|
||||
# Skip this server if there's no point searching for new stuff to do
|
||||
if not server.busy_threads and server.next_article_search > now:
|
||||
continue
|
||||
|
||||
if server.next_busy_threads_check < now:
|
||||
server.next_busy_threads_check = now + _SERVER_CHECK_DELAY
|
||||
for nw in server.busy_threads[:]:
|
||||
if (nw.nntp and nw.nntp.error_msg) or (nw.timeout and now > nw.timeout):
|
||||
if nw.nntp and nw.nntp.error_msg:
|
||||
# Already showed error
|
||||
self.__reset_nw(nw)
|
||||
else:
|
||||
self.__reset_nw(nw, "timed out", warn=True)
|
||||
server.bad_cons += 1
|
||||
self.maybe_block_server(server)
|
||||
|
||||
if server.restart:
|
||||
if not server.busy_threads:
|
||||
newid = server.newid
|
||||
server.stop()
|
||||
self.servers.remove(server)
|
||||
if newid:
|
||||
self.init_server(None, newid)
|
||||
self.server_restarts -= 1
|
||||
# Have to leave this loop, because we removed element
|
||||
break
|
||||
else:
|
||||
# Restart pending, don't add new articles
|
||||
for server in self.servers:
|
||||
# Skip this server if there's no point searching for new stuff to do
|
||||
if not server.busy_threads and server.next_article_search > now:
|
||||
continue
|
||||
|
||||
if (
|
||||
not server.idle_threads
|
||||
or self.no_active_jobs()
|
||||
or self.shutdown
|
||||
or self.paused_for_postproc
|
||||
or not server.active
|
||||
):
|
||||
if server.next_busy_threads_check < now:
|
||||
server.next_busy_threads_check = now + _SERVER_CHECK_DELAY
|
||||
for nw in server.busy_threads[:]:
|
||||
if (nw.nntp and nw.nntp.error_msg) or (nw.timeout and now > nw.timeout):
|
||||
if nw.nntp and nw.nntp.error_msg:
|
||||
# Already showed error
|
||||
self.__reset_nw(nw)
|
||||
else:
|
||||
self.__reset_nw(nw, "timed out", warn=True)
|
||||
server.bad_cons += 1
|
||||
self.maybe_block_server(server)
|
||||
|
||||
if server.restart:
|
||||
if not server.busy_threads:
|
||||
server.stop()
|
||||
self.servers.remove(server)
|
||||
if newid := server.newid:
|
||||
self.init_server(None, newid)
|
||||
self.server_restarts -= 1
|
||||
# Have to leave this loop, because we removed element
|
||||
break
|
||||
else:
|
||||
# Restart pending, don't add new articles
|
||||
continue
|
||||
|
||||
if (
|
||||
not server.idle_threads
|
||||
or self.no_active_jobs()
|
||||
or self.shutdown
|
||||
or self.paused_for_postproc
|
||||
or not server.active
|
||||
):
|
||||
continue
|
||||
|
||||
for nw in server.idle_threads[:]:
|
||||
if nw.timeout:
|
||||
if now < nw.timeout:
|
||||
continue
|
||||
else:
|
||||
nw.timeout = None
|
||||
|
||||
if not server.info:
|
||||
# Only request info if there's stuff in the queue
|
||||
if not sabnzbd.NzbQueue.is_empty():
|
||||
self.maybe_block_server(server)
|
||||
server.request_info()
|
||||
break
|
||||
|
||||
nw.article = server.get_article()
|
||||
if not nw.article:
|
||||
break
|
||||
|
||||
server.idle_threads.remove(nw)
|
||||
server.busy_threads.append(nw)
|
||||
|
||||
if nw.connected:
|
||||
self.__request_article(nw)
|
||||
else:
|
||||
try:
|
||||
logging.info("%s@%s: Initiating connection", nw.thrdnum, server.host)
|
||||
nw.init_connect()
|
||||
except:
|
||||
logging.error(
|
||||
T("Failed to initialize %s@%s with reason: %s"),
|
||||
nw.thrdnum,
|
||||
server.host,
|
||||
sys.exc_info()[1],
|
||||
)
|
||||
self.__reset_nw(nw, "failed to initialize", warn=True)
|
||||
|
||||
if self.force_disconnect or self.shutdown:
|
||||
for server in self.servers:
|
||||
for nw in server.idle_threads + server.busy_threads:
|
||||
# Send goodbye if we have open socket
|
||||
if nw.nntp:
|
||||
self.__reset_nw(
|
||||
nw, "forcing disconnect", wait=False, count_article_try=False, send_quit=True
|
||||
)
|
||||
# Make sure server address resolution is refreshed
|
||||
server.info = None
|
||||
server.reset_article_queue()
|
||||
self.force_disconnect = False
|
||||
|
||||
# Make sure we update the stats
|
||||
BPSMeter.update()
|
||||
|
||||
# Exit-point
|
||||
if self.shutdown:
|
||||
logging.info("Shutting down")
|
||||
break
|
||||
|
||||
# If less data than possible was received then it should be ok to sleep a bit
|
||||
if self.sleep_time:
|
||||
if self.last_max_chunk_size > self.max_chunk_size:
|
||||
self.max_chunk_size = self.last_max_chunk_size
|
||||
elif self.last_max_chunk_size < self.max_chunk_size / 3:
|
||||
time.sleep(self.sleep_time)
|
||||
now = time.time()
|
||||
self.last_max_chunk_size = 0
|
||||
|
||||
# Use select to find sockets ready for reading/writing
|
||||
if readkeys := self.read_fds.keys():
|
||||
read, _, _ = select.select(readkeys, (), (), 1.0)
|
||||
else:
|
||||
read = []
|
||||
BPSMeter.reset()
|
||||
time.sleep(1.0)
|
||||
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)
|
||||
and not self.shutdown
|
||||
and not self.force_disconnect
|
||||
and not self.server_restarts
|
||||
):
|
||||
DOWNLOADER_CV.wait()
|
||||
|
||||
if now > next_bpsmeter_update:
|
||||
BPSMeter.update()
|
||||
next_bpsmeter_update = now + _BPSMETER_UPDATE_DELAY
|
||||
|
||||
if not read:
|
||||
continue
|
||||
|
||||
for nw in server.idle_threads[:]:
|
||||
if nw.timeout:
|
||||
if now < nw.timeout:
|
||||
continue
|
||||
else:
|
||||
nw.timeout = None
|
||||
if self.recv_threads > 1:
|
||||
# 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]))
|
||||
|
||||
if not server.info:
|
||||
# Only request info if there's stuff in the queue
|
||||
if not sabnzbd.NzbQueue.is_empty():
|
||||
self.maybe_block_server(server)
|
||||
server.request_info()
|
||||
break
|
||||
# Wait for all the tasks to complete
|
||||
concurrent.futures.wait(self.process_tasks)
|
||||
|
||||
nw.article = server.get_article()
|
||||
if not nw.article:
|
||||
break
|
||||
# Clear task list
|
||||
self.process_tasks.clear()
|
||||
else:
|
||||
for selected in read:
|
||||
self.process_nw(self.read_fds[selected])
|
||||
|
||||
server.idle_threads.remove(nw)
|
||||
server.busy_threads.append(nw)
|
||||
# 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
|
||||
|
||||
if nw.connected:
|
||||
self.__request_article(nw)
|
||||
else:
|
||||
try:
|
||||
logging.info("%s@%s: Initiating connection", nw.thrdnum, server.host)
|
||||
nw.init_connect()
|
||||
except:
|
||||
logging.error(
|
||||
T("Failed to initialize %s@%s with reason: %s"),
|
||||
nw.thrdnum,
|
||||
server.host,
|
||||
sys.exc_info()[1],
|
||||
)
|
||||
self.__reset_nw(nw, "failed to initialize", warn=True)
|
||||
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()
|
||||
|
||||
if self.force_disconnect or self.shutdown:
|
||||
for server in self.servers:
|
||||
for nw in server.idle_threads + server.busy_threads:
|
||||
# Send goodbye if we have open socket
|
||||
if nw.nntp:
|
||||
self.__reset_nw(
|
||||
nw, "forcing disconnect", wait=False, count_article_try=False, send_quit=True
|
||||
)
|
||||
# Make sure server address resolution is refreshed
|
||||
server.info = None
|
||||
server.reset_article_queue()
|
||||
self.force_disconnect = False
|
||||
|
||||
# Make sure we update the stats
|
||||
BPSMeter.update()
|
||||
|
||||
# Exit-point
|
||||
if self.shutdown:
|
||||
logging.info("Shutting down")
|
||||
break
|
||||
|
||||
# If less data than possible was received then it should be ok to sleep a bit
|
||||
if self.sleep_time:
|
||||
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()
|
||||
# Debugging code for v4 test release
|
||||
if now - time_before > self.sleep_time + 0.02:
|
||||
logging.debug("Slept %.5f seconds, sleep_time = %s", now - time_before, self.sleep_time)
|
||||
time_slept += now - time_before
|
||||
sleep_count += 1
|
||||
if sleep_count_start + 20 < now:
|
||||
if sleep_count > 21:
|
||||
# Update who is delaying us
|
||||
logging.debug(
|
||||
"Slept %d times for an average of %.5f seconds the last %.2f seconds. sleep_time = %s",
|
||||
sleep_count,
|
||||
time_slept / sleep_count,
|
||||
now - sleep_count_start,
|
||||
self.sleep_time,
|
||||
"Delayed - %d seconds - Assembler queue: %d",
|
||||
logged_counter / 10,
|
||||
sabnzbd.Assembler.queue.qsize(),
|
||||
)
|
||||
sleep_count_start = now
|
||||
sleep_count = 0
|
||||
time_slept = 0
|
||||
|
||||
self.last_max_chunk_size = 0
|
||||
|
||||
# Use select to find sockets ready for reading/writing
|
||||
readkeys = self.read_fds.keys()
|
||||
if readkeys:
|
||||
read, _, _ = select.select(readkeys, (), (), 1.0)
|
||||
else:
|
||||
read = []
|
||||
BPSMeter.reset()
|
||||
time.sleep(1.0)
|
||||
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)
|
||||
and not self.shutdown
|
||||
and not self.force_disconnect
|
||||
and not self.server_restarts
|
||||
):
|
||||
DOWNLOADER_CV.wait()
|
||||
|
||||
if now > next_bpsmeter_update:
|
||||
BPSMeter.update()
|
||||
next_bpsmeter_update = now + _BPSMETER_UPDATE_DELAY
|
||||
|
||||
if not read:
|
||||
continue
|
||||
|
||||
if self.recv_threads > 1:
|
||||
# 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:
|
||||
self.process_nw(self.read_fds[selected])
|
||||
|
||||
self.__check_speed()
|
||||
self.__check_assembler()
|
||||
# Wait and update the queue sizes
|
||||
time.sleep(0.1)
|
||||
logged_counter += 1
|
||||
except:
|
||||
logging.error(T("Fatal error in Downloader"), exc_info=True)
|
||||
|
||||
def process_nw(self, nw: NewsWrapper):
|
||||
"""Receive data from NewsWrapper and handle response"""
|
||||
@@ -771,8 +769,7 @@ class Downloader(Thread):
|
||||
except ssl.SSLWantReadError:
|
||||
return
|
||||
except:
|
||||
with DOWNLOADER_LOCK:
|
||||
self.__reset_nw(nw, "server closed connection", wait=False)
|
||||
self.__reset_nw(nw, "server closed connection", wait=False)
|
||||
return
|
||||
|
||||
article = nw.article
|
||||
@@ -785,6 +782,15 @@ class Downloader(Thread):
|
||||
# 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:
|
||||
@@ -842,7 +848,12 @@ class Downloader(Thread):
|
||||
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):
|
||||
if (
|
||||
nw.connected
|
||||
and server.active
|
||||
and not server.restart
|
||||
and not (self.paused or self.shutdown or self.paused_for_postproc)
|
||||
):
|
||||
nw.article = server.get_article()
|
||||
if nw.article:
|
||||
self.__request_article(nw)
|
||||
@@ -853,43 +864,7 @@ class Downloader(Thread):
|
||||
server.idle_threads.append(nw)
|
||||
self.remove_socket(nw)
|
||||
|
||||
def __check_speed(self):
|
||||
if not self.bandwidth_limit:
|
||||
return
|
||||
|
||||
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 __check_assembler(self):
|
||||
"""See if we need to delay because the queues are full"""
|
||||
# Sleep for an increasing amount of time, depending on queue sizes.
|
||||
if (assembler_level := sabnzbd.Assembler.queue_level()) > SOFT_QUEUE_LIMIT:
|
||||
time.sleep(assembler_level - SOFT_QUEUE_LIMIT)
|
||||
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
|
||||
|
||||
@NzbQueueLocker
|
||||
@synchronized(DOWNLOADER_LOCK)
|
||||
def __finish_connect_nw(self, nw: NewsWrapper) -> bool:
|
||||
server = nw.server
|
||||
try:
|
||||
@@ -971,6 +946,7 @@ class Downloader(Thread):
|
||||
self.__reset_nw(nw, retry_article=False)
|
||||
return True
|
||||
|
||||
@synchronized(DOWNLOADER_LOCK)
|
||||
def __reset_nw(
|
||||
self,
|
||||
nw: NewsWrapper,
|
||||
|
||||
@@ -31,6 +31,7 @@ import time
|
||||
import fnmatch
|
||||
import stat
|
||||
import ctypes
|
||||
import random
|
||||
from typing import Union, List, Tuple, Any, Dict, Optional, BinaryIO
|
||||
|
||||
try:
|
||||
@@ -734,7 +735,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 +774,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
|
||||
@@ -1271,15 +1273,37 @@ def directory_is_writable_with_file(mydir, myfilename):
|
||||
|
||||
|
||||
def directory_is_writable(test_dir: str) -> bool:
|
||||
"""Checks if dir is writable at all, and (on non-Windows), writable with special chars.
|
||||
"""Checks if dir is writable at all, with long filenames, with unicode,
|
||||
and (on non-Windows), writable with special chars.
|
||||
Returns True if all OK, otherwise False"""
|
||||
if directory_is_writable_with_file(test_dir, "sab_test.txt"):
|
||||
if not sabnzbd.WIN32 and not directory_is_writable_with_file(test_dir, "sab_test \\ bla :: , bla.txt"):
|
||||
sabnzbd.misc.helpful_warning(
|
||||
T("%s is not writable with special character filenames. This can cause problems."), test_dir
|
||||
)
|
||||
return False
|
||||
else:
|
||||
if not directory_is_writable_with_file(test_dir, "sab_test.txt"):
|
||||
sabnzbd.misc.helpful_warning(T("%s is not writable at all. This blocks downloads."), test_dir)
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def check_filesystem_capabilities(test_dir: str) -> bool:
|
||||
"""Checks if we can write long and unicode filenames to the given directory.
|
||||
If not on Windows, also check for special chars like \ and :
|
||||
Returns True if all OK, otherwise False"""
|
||||
|
||||
allgood = True # default return value: all OK
|
||||
|
||||
# long filename; normal filesystems accept 255 byte filenames
|
||||
if not directory_is_writable_with_file(test_dir, "A" * 245 + str(random.randrange(10000, 99999))):
|
||||
sabnzbd.misc.helpful_warning(T("Cannot write a long filename to %s. This can cause problems."), test_dir)
|
||||
allgood = False
|
||||
|
||||
# unicode in filename
|
||||
if not directory_is_writable_with_file(test_dir, "🚀" * 20):
|
||||
sabnzbd.misc.helpful_warning(T("Cannot write a unicode filename to %s. This can cause problems."), test_dir)
|
||||
allgood = False
|
||||
|
||||
# if not on Windows, check special chars like \ and :
|
||||
if not sabnzbd.WIN32 and not directory_is_writable_with_file(test_dir, "sab_test \\ bla :: , bla.txt"):
|
||||
sabnzbd.misc.helpful_warning(
|
||||
T("%s is not writable with special character filenames. This can cause problems."), test_dir
|
||||
)
|
||||
allgood = False
|
||||
|
||||
return allgood
|
||||
|
||||
@@ -78,6 +78,8 @@ from sabnzbd.constants import (
|
||||
DEF_HTTPS_CERT_FILE,
|
||||
DEF_SORTER_RENAME_SIZE,
|
||||
GUESSIT_SORT_TYPES,
|
||||
VALID_NZB_FILES,
|
||||
VALID_ARCHIVES,
|
||||
)
|
||||
from sabnzbd.lang import list_languages
|
||||
from sabnzbd.api import (
|
||||
@@ -725,6 +727,8 @@ class ConfigFolders:
|
||||
def index(self, **kwargs):
|
||||
conf = build_header(sabnzbd.WEB_DIR_CONFIG)
|
||||
|
||||
conf["file_exts"] = ", ".join(VALID_NZB_FILES + VALID_ARCHIVES)
|
||||
|
||||
for kw in LIST_DIRPAGE + LIST_BOOL_DIRPAGE:
|
||||
conf[kw] = config.get_config("misc", kw)()
|
||||
|
||||
@@ -1081,7 +1085,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"] = (
|
||||
@@ -1846,7 +1850,6 @@ class ConfigSorting:
|
||||
"multipart_label": "",
|
||||
}
|
||||
sorters.insert(0, empty)
|
||||
conf["have_sorters"] = len(sorters) >= 1
|
||||
conf["slotinfo"] = sorters
|
||||
conf["categories"] = list_cats(False)
|
||||
conf["guessit_properties"] = tuple(
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user